react-autoql 3.2.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import React, { Fragment, Component } from 'react';
2
+ import LocalizedStrings from 'react-localization';
2
3
  import PropTypes, { shape, string, number, bool, oneOf, arrayOf, func, instanceOf, oneOfType, array } from 'prop-types';
3
4
  import uuid from 'uuid';
4
5
  import Drawer from 'rc-drawer';
@@ -28,6 +29,7 @@ import Autosuggest from 'react-autosuggest';
28
29
  import SpeechRecognition from 'react-speech-recognition';
29
30
  import _cloneDeep from 'lodash.clonedeep';
30
31
  import disableScroll from 'disable-scroll';
32
+ import HTMLRenderer from 'react-html-renderer';
31
33
  import { scaleOrdinal, scaleBand, scaleLinear } from 'd3-scale';
32
34
  import { ReactTabulator } from 'react-tabulator';
33
35
  import 'react-tabulator/lib/styles.css';
@@ -1047,7 +1049,7 @@ var getSupportedDisplayTypes = function getSupportedDisplayTypes(response, chart
1047
1049
  // There should be 3 types: data, suggestion, help
1048
1050
  var displayType = response.data.data.display_type;
1049
1051
 
1050
- if (displayType === 'suggestion' || displayType === 'help') {
1052
+ if (displayType === 'suggestion' || displayType === 'help' || displayType === 'html') {
1051
1053
  return [displayType];
1052
1054
  }
1053
1055
 
@@ -1121,6 +1123,7 @@ var isDisplayTypeValid = function isDisplayTypeValid(response, displayType) {
1121
1123
  if (!isValid) {
1122
1124
  console.warn('Warning: provided display type is not valid for this response data');
1123
1125
  }
1126
+
1124
1127
  return isValid;
1125
1128
  };
1126
1129
 
@@ -1140,7 +1143,7 @@ var getDefaultDisplayType = function getDefaultDisplayType(response, defaultToCh
1140
1143
  var responseDisplayType = _get(response, 'data.data.display_type');
1141
1144
 
1142
1145
  // If the display type is a recognized non-chart or non-table type
1143
- if (responseDisplayType === 'suggestion' || responseDisplayType === 'help') {
1146
+ if (responseDisplayType === 'suggestion' || responseDisplayType === 'help' || responseDisplayType === 'html') {
1144
1147
  return responseDisplayType;
1145
1148
  }
1146
1149
 
@@ -1485,7 +1488,89 @@ var errorMessages = {
1485
1488
  )
1486
1489
  };
1487
1490
 
1488
- var chataBubblesSVG = 'data:image/svg+xml;base64,Y29uc3QgaW1nID0gImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2MlM2Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnJTNmJTNlJTNjIS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjIuMS4wJTJjIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNlJTNjc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB3aWR0aD0nMjRweCcgaGVpZ2h0PScyNHB4JyB2aWV3Qm94PScwIDAgMjQgMjQnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDI0IDI0JyB4bWw6c3BhY2U9J3ByZXNlcnZlJyUzZSUzY2clM2UgJTNjZyUzZSAlM2NnJTNlICUzY3BhdGggZmlsbD0nJTIzMjZBN0RGJyBkPSdNMTYlMmM1QzE0LjglMmMyLjMlMmMxMiUyYzAuNCUyYzguOCUyYzAuNGMtNC40JTJjMC03LjYlMmMzLjUtNy42JTJjNy45djRjMCUyYzIuOC0xJTJjMy42LTElMmMzLjZjMS4zJTJjMC4xJTJjMi45LTAuNCUyYzQtMS41IGMwLjQlMmMwLjQlMmMxJTJjMC44JTJjMS42JTJjMWMwLjUlMmMwLjIlMmMxJTJjMC40JTJjMS42JTJjMC41YzAtMC4yLTAuMS0wLjUtMC4xLTAuN2MwLTAuMiUyYzAtMC41JTJjMC0wLjdjMC0xLjYlMmMwLjUtMy4yJTJjMS4zLTQuNCBjMC4zLTAuNCUyYzAuNi0wLjglMmMxLTEuMmMwLjItMC4yJTJjMC40LTAuMyUyYzAuNi0wLjVjMC40LTAuMyUyYzAuOC0wLjYlMmMxLjItMC44YzAuNC0wLjIlMmMwLjktMC40JTJjMS40LTAuNmMwLjctMC4yJTJjMS41LTAuMyUyYzIuMy0wLjNsMCUyYzAgYzAuMyUyYzAlMmMwLjUlMmMwJTJjMC43JTJjMGMwLjIlMmMwJTJjMC41JTJjMC4xJTJjMC43JTJjMC4xQzE2LjQlMmM2JTJjMTYuMiUyYzUuNSUyYzE2JTJjNXonLyUzZSAlM2MvZyUzZSAlM2MvZyUzZSAlM2NnJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMjIuNyUyYzE4LjN2LTRjMC0zLjMtMS44LTYtNC42LTcuMmMtMC41LTAuMi0xLTAuNC0xLjYtMC41YzAuMSUyYzAuNSUyYzAuMiUyYzEuMSUyYzAuMiUyYzEuN2MwJTJjMS45LTAuNyUyYzMuNi0xLjglMmM0LjkgYy0wLjUlMmMwLjYtMSUyYzEtMS43JTJjMS41Yy0wLjQlMmMwLjMtMC45JTJjMC41LTEuMyUyYzAuN2MtMC41JTJjMC4yLTElMmMwLjMtMS41JTJjMC40Yy0wLjUlMmMwLjEtMSUyYzAuMi0xLjYlMmMwLjJjLTAuMyUyYzAtMC41JTJjMC0wLjclMmMwIGMtMC4zJTJjMC0wLjUtMC4xLTAuNy0wLjFjMC4xJTJjMC42JTJjMC4zJTJjMS4xJTJjMC41JTJjMS42YzEuMiUyYzIuOCUyYzMuOSUyYzQuNiUyYzcuMiUyYzQuNmMxLjglMmMwJTJjMy41LTAuNSUyYzQuNi0xLjZjMSUyYzElMmMyLjklMmMxLjglMmM0LjElMmMxLjUgQzIzLjglMmMyMS45JTJjMjIuNyUyYzIxLjMlMmMyMi43JTJjMTguM3onLyUzZSAlM2MvZyUzZSAlM2NnJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTE1LjElMmM2LjVjLTQuNCUyYzAtNy44JTJjMy41LTcuOCUyYzcuOWMwJTJjMC41JTJjMC4xJTJjMSUyYzAuMSUyYzEuNWMwLjUlMmMwLjElMmMxJTJjMC4xJTJjMS41JTJjMC4xYzQuNCUyYzAlMmM3LjgtMy4zJTJjNy44LTcuNiBjMC0wLjYtMC4xLTEuMS0wLjItMS43QzE2LjElMmM2LjUlMmMxNS42JTJjNi41JTJjMTUuMSUyYzYuNXonLyUzZSAlM2MvZyUzZSAlM2NnJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTE2LjMlMmM4LjJDMTYuMyUyYzguMiUyYzE2LjIlMmM4LjIlMmMxNi4zJTJjOC4yYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjNjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjFjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBDMTYuMyUyYzguMyUyYzE2LjMlMmM4LjIlMmMxNi4zJTJjOC4yeicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTEzLjQlMmMxMUMxMy40JTJjMTElMmMxMy40JTJjMTElMmMxMy40JTJjMTFjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zIGMwJTJjMC4yJTJjMCUyYzAuMyUyYzAuMSUyYzAuNGMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMWMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIEMxMy41JTJjMTEuMSUyYzEzLjUlMmMxMS4xJTJjMTMuNCUyYzExeicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTEzLjMlMmM5LjFDMTMuNCUyYzkuMSUyYzEzLjQlMmM5LjElMmMxMy4zJTJjOS4xQzEzLjUlMmM5LjElMmMxMy41JTJjOSUyYzEzLjUlMmM5YzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEMxMy4yJTJjOS4xJTJjMTMuMyUyYzkuMSUyYzEzLjMlMmM5LjF6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTEuOSUyYzEwLjZDMTEuOSUyYzEwLjYlMmMxMiUyYzEwLjYlMmMxMS45JTJjMTAuNmMwLjEtMC4xJTJjMC4xLTAuMSUyYzAuMi0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMS0wLjEtMC4xYzAlMmMwJTJjMCUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjMgQzExLjglMmMxMC42JTJjMTEuOSUyYzEwLjYlMmMxMS45JTJjMTAuNnonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J005LjElMmMxMi41QzkuMSUyYzEyLjUlMmM5LjElMmMxMi41JTJjOS4xJTJjMTIuNWMtMC4xJTJjMC0wLjElMmMwLTAuMiUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjElMmMwLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgQzkuMiUyYzEyLjYlMmM5LjIlMmMxMi41JTJjOS4xJTJjMTIuNXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMC41JTJjMTAuNkMxMC41JTJjMTAuNiUyYzEwLjUlMmMxMC42JTJjMTAuNSUyYzEwLjZjMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEMxMC40JTJjMTAuNSUyYzEwLjQlMmMxMC42JTJjMTAuNSUyYzEwLjZ6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNNy42JTJjMTQuOUM3LjYlMmMxNC45JTJjNy43JTJjMTQuOSUyYzcuNiUyYzE0LjljMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEM3LjUlMmMxNC44JTJjNy42JTJjMTQuOSUyYzcuNiUyYzE0Ljl6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNNy42JTJjMTMuNEM3LjYlMmMxMy40JTJjNy43JTJjMTMuNCUyYzcuNiUyYzEzLjRjMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEM3LjUlMmMxMy40JTJjNy42JTJjMTMuNCUyYzcuNiUyYzEzLjR6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTEuOSUyYzkuMUMxMS45JTJjOS4xJTJjMTIlMmM5LjElMmMxMS45JTJjOS4xQzEyJTJjOS4xJTJjMTIuMSUyYzklMmMxMi4xJTJjOWMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAlMmMwJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDMTEuOCUyYzkuMSUyYzExLjklMmM5LjElMmMxMS45JTJjOS4xeicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTExLjklMmMxMy41QzExLjklMmMxMy41JTJjMTIlMmMxMy41JTJjMTEuOSUyYzEzLjVjMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwLjElMmMwLjQgQzExLjglMmMxMy41JTJjMTEuOCUyYzEzLjUlMmMxMS45JTJjMTMuNXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMS45JTJjMTIuMUMxMS45JTJjMTIuMSUyYzEyJTJjMTIlMmMxMS45JTJjMTIuMWMwLjEtMC4xJTJjMC4xLTAuMSUyYzAuMi0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMS0wLjEtMC4xYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHMtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMC4xJTJjMC40IEMxMS44JTJjMTIlMmMxMS45JTJjMTIuMSUyYzExLjklMmMxMi4xeicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTE2JTJjNy4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLTAuMSUyYzAuMS0wLjFjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMS0wLjEtMC4xYzAlMmMwJTJjMCUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMkMxNi4xJTJjNy4xJTJjMTYlMmM3LjIlMmMxNiUyYzcuMnonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMS45JTJjMTVDMTEuOSUyYzE1JTJjMTIlMmMxNC45JTJjMTEuOSUyYzE1YzAuMS0wLjElMmMwLjItMC4xJTJjMC4yLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMC4xJTJjMC40IEMxMS44JTJjMTQuOSUyYzExLjglMmMxNSUyYzExLjklMmMxNXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xNi4zJTJjOS42QzE2LjMlMmM5LjYlMmMxNi4yJTJjOS42JTJjMTYuMyUyYzkuNmMtMC4xJTJjMC0wLjElMmMwLTAuMiUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC40YzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjElMmMwLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMHMwLjEtMC4xJTJjMC4xLTAuMWMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIEMxNi4zJTJjOS43JTJjMTYuMyUyYzkuNiUyYzE2LjMlMmM5LjZ6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMS43JTJjNy42YzAuMSUyYzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjEtMC4xYzAlMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xJTJjMC0wLjJjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjFjMCUyYzAuMSUyYzAlMmMwLjMlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzAgQzExLjglMmM3LjclMmMxMS44JTJjNy42JTJjMTEuNyUyYzcuNmMwLjEtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjNjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMC4xQzExLjYlMmM3LjQlMmMxMS42JTJjNy41JTJjMTEuNyUyYzcuNnonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEzLjQlMmM2LjdsLTAuMiUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMXYwLjVjMCUyYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xIGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjFMMTMuNCUyYzYuN0wxMy40JTJjNi43eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTQuOCUyYzYuN2wtMC4yJTJjMC4xbDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xdjAuNWMwJTJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjEgYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLTAuMSUyYzB2MEgxNXYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMHMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwLTAuMUwxNC44JTJjNi43TDE0LjglMmM2Ljd6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xNiUyYzdjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4yJTJjMC4xJTJjMC4zYzAuMSUyYzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjEtMC4xIGMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwQzE2JTJjNi44JTJjMTYlMmM2LjklMmMxNiUyYzd6IE0xNi4yJTJjNi44QzE2LjIlMmM2LjglMmMxNi4zJTJjNi44JTJjMTYuMiUyYzYuOGMwLjElMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xIGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xJTJjMC0wLjIlMmMwLTAuM2MwLTAuMSUyYzAtMC4yJTJjMC0wLjNDMTYuMSUyYzYuOSUyYzE2LjElMmM2LjklMmMxNi4yJTJjNi44IEMxNi4xJTJjNi44JTJjMTYuMiUyYzYuOCUyYzE2LjIlMmM2Ljh6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMC40JTJjOS4xQzEwLjQlMmM5LjElMmMxMC40JTJjOS4xJTJjMTAuNCUyYzkuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzB2MGgwLjR2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwLTAuMSBWOC4yaDBsLTAuMiUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMVY5LjFDMTAuNCUyYzklMmMxMC40JTJjOS4xJTJjMTAuNCUyYzkuMXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTExLjklMmM5LjJjMCUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMWMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLjEtMC4yJTJjMC4xLTAuM2MwLTAuMiUyYzAtMC4zLTAuMS0wLjQgYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMnMtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDMTEuNyUyYzkuMSUyYzExLjglMmM5LjIlMmMxMS45JTJjOS4yeiBNMTEuOCUyYzguNGMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zIEMxMS43JTJjOC42JTJjMTEuNyUyYzguNSUyYzExLjglMmM4LjR6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMyUyYzguN2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuM2MwLjElMmMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMVMxMy42JTJjOSUyYzEzLjYlMmM5IGMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjIgQzEzJTJjOC41JTJjMTMlMmM4LjYlMmMxMyUyYzguN3ogTTEzLjIlMmM4LjRjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuM0MxMy4yJTJjOC42JTJjMTMuMiUyYzguNSUyYzEzLjIlMmM4LjR6ICcvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTQuNiUyYzguM0MxNC42JTJjOC4zJTJjMTQuNiUyYzguMyUyYzE0LjYlMmM4LjNjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xVjljMCUyYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xIGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBIMTV2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMC0wLjElMmMwLTAuMVY4LjFoMEwxNC42JTJjOC4zTDE0LjYlMmM4LjN6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xNi4yJTJjOC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBjMC4xJTJjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjNjMC0wLjIlMmMwLTAuMy0wLjEtMC40IEMxNi40JTJjOC4yJTJjMTYuMyUyYzguMSUyYzE2LjIlMmM4LjF6IE0xNi40JTJjOWMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMUMxNiUyYzguOSUyYzE2JTJjOC44JTJjMTYlMmM4LjcgYzAtMC4xJTJjMC0wLjIlMmMwLTAuM2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwczAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBDMTYuNCUyYzguOCUyYzE2LjQlMmM4LjklMmMxNi40JTJjOXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTkuMSUyYzkuNkw4LjklMmM5LjdsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjF2MC41YzAlMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMHMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwLTAuMUw5LjElMmM5LjZMOS4xJTJjOS42TDkuMSUyYzkuNnonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEwLjUlMmMxMC42YzAlMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjNjMC0wLjIlMmMwLTAuMy0wLjEtMC40IGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEMxMC4zJTJjMTAuNiUyYzEwLjQlMmMxMC42JTJjMTAuNSUyYzEwLjZ6IE0xMC4zJTJjOS45YzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSBjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjMgQzEwLjMlMmMxMCUyYzEwLjMlMmMxMCUyYzEwLjMlMmM5Ljl6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMS43JTJjMTAuNWMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjMlMmMwLjJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMnMwLjEtMC4yJTJjMC4xLTAuMyBjMC0wLjIlMmMwLTAuMy0wLjEtMC40Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzAuMWMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuMyBDMTEuNiUyYzEwLjIlMmMxMS42JTJjMTAuNCUyYzExLjclMmMxMC41eiBNMTEuNyUyYzkuOWMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwczAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xIGMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMyBDMTEuNyUyYzEwJTJjMTEuNyUyYzkuOSUyYzExLjclMmM5Ljl6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMy4zJTJjMTAuNkMxMy4zJTJjMTAuNiUyYzEzLjMlMmMxMC42JTJjMTMuMyUyYzEwLjZjMCUyYzAtMC4xJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMCBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xVjkuNmgwbC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42QzEzLjMlMmMxMC41JTJjMTMuMyUyYzEwLjUlMmMxMy4zJTJjMTAuNiB6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xNC42JTJjOS43QzE0LjYlMmM5LjclMmMxNC43JTJjOS43JTJjMTQuNiUyYzkuN2MwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42IGMwJTJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjFzMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLTAuMSUyYzB2MEgxNXYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xVjkuNmgwTDE0LjYlMmM5LjdMMTQuNiUyYzkuN3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTE2LjIlMmM5LjZjLTAuMSUyYzAtMC4xJTJjMC0wLjElMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMnMtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuNCBjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4zJTJjMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMS0wLjFjMC4xLTAuMiUyYzAuMS0wLjUlMmMwLjItMC43YzAtMC4xJTJjMC0wLjItMC4xLTAuMkMxNi40JTJjOS42JTJjMTYuMyUyYzkuNiUyYzE2LjIlMmM5LjZ6IE0xNi40JTJjMTAuNCBjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuM2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMiBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM0MxNi40JTJjMTAuMiUyYzE2LjQlMmMxMC4zJTJjMTYuNCUyYzEwLjR6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J003LjglMmMxMS41YzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwIGMwJTJjMCUyYzAuMSUyYzAlMmMwLjEtMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMi0wLjEtMC4zQzcuOCUyYzExLjMlMmM3LjglMmMxMS40JTJjNy44JTJjMTEuNSBDNy44JTJjMTEuNSUyYzcuOCUyYzExLjUlMmM3LjglMmMxMS41eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNOC45JTJjMTEuMkM4LjklMmMxMS4xJTJjOC45JTJjMTEuMSUyYzguOSUyYzExLjJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xdjAuNSBDOSUyYzExLjklMmM5JTJjMTIlMmM5JTJjMTJjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xVjExaDBMOC45JTJjMTEuMkw4LjklMmMxMS4yeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTAuNSUyYzExbC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42YzAlMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSBzMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLTAuMSUyYzB2MGgwLjR2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMC0wLjElMmMwLTAuMUwxMC41JTJjMTFMMTAuNSUyYzExeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTEuNyUyYzExLjljMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4zJTJjMC4yYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMWMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLjEtMC4yJTJjMC4xLTAuMyBjMC0wLjIlMmMwLTAuMy0wLjEtMC40QzEyLjElMmMxMSUyYzEyJTJjMTElMmMxMS45JTJjMTFjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMiUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjMgQzExLjYlMmMxMS43JTJjMTEuNiUyYzExLjglMmMxMS43JTJjMTEuOXogTTExLjclMmMxMS4zYzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSBjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjQgQzExLjclMmMxMS41JTJjMTEuNyUyYzExLjQlMmMxMS43JTJjMTEuM3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEzLjclMmMxMS41YzAtMC4yJTJjMC0wLjMtMC4xLTAuNEMxMy41JTJjMTElMmMxMy40JTJjMTElMmMxMy4zJTJjMTFjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMiUyYzAuMiBjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMC4xJTJjMC40YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yIEMxMy43JTJjMTEuOCUyYzEzLjclMmMxMS43JTJjMTMuNyUyYzExLjV6IE0xMy41JTJjMTEuOWMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjQgYzAtMC4xJTJjMC0wLjIlMmMwLTAuM2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjFjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zIEMxMy42JTJjMTEuNyUyYzEzLjUlMmMxMS44JTJjMTMuNSUyYzExLjl6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xNC43JTJjMTJDMTQuNyUyYzEyJTJjMTQuNyUyYzEyJTJjMTQuNyUyYzEyYzAlMmMwLTAuMSUyYzAtMC4xJTJjMHYwSDE1djBjLTAuMSUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAtMC4xJTJjMC0wLjEgVjExaDBsLTAuMyUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMnYwLjZDMTQuNyUyYzEyJTJjMTQuNyUyYzEyJTJjMTQuNyUyYzEyeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTYlMmMxMS4xTDE2JTJjMTEuMUMxNiUyYzExLjElMmMxNi4xJTJjMTEuMSUyYzE2JTJjMTEuMWMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwdjBjMC0wLjElMmMwLTAuMSUyYzAuMS0wLjJMMTYlMmMxMS4xIHonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTcuNCUyYzEzLjNjMC4xJTJjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yUzglMmMxMy4xJTJjOCUyYzEzIGMwLTAuMiUyYzAtMC4zLTAuMS0wLjRjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjLTAuMSUyYzAuMi0wLjElMmMwLjQtMC4xJTJjMC43QzcuMyUyYzEzLjMlMmM3LjQlMmMxMy4zJTJjNy40JTJjMTMuMyB6IE03LjUlMmMxMi43YzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40IGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjNDNy40JTJjMTIuOSUyYzcuNCUyYzEyLjglMmM3LjUlMmMxMi43eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNOS40JTJjMTNjMC0wLjIlMmMwLTAuMy0wLjEtMC40Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzAuMWMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yIGMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjRjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4zJTJjMC4yYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMXMwLjEtMC4xJTJjMC4xLTAuMiBDOS40JTJjMTMuMiUyYzkuNCUyYzEzLjElMmM5LjQlMmMxM3ogTTkuMiUyYzEzLjNjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zIGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBDOS4yJTJjMTMuMSUyYzkuMiUyYzEzLjIlMmM5LjIlMmMxMy4zeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTAuMyUyYzEyLjZDMTAuMyUyYzEyLjUlMmMxMC40JTJjMTIuNSUyYzEwLjMlMmMxMi42YzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMnYwLjYgYzAlMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMWMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAtMC4xJTJjMC0wLjF2LTAuOWgwTDEwLjMlMmMxMi42TDEwLjMlMmMxMi42eicgLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTExLjclMmMxMy40YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjMgYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMiUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjMgQzExLjYlMmMxMy4xJTJjMTEuNiUyYzEzLjMlMmMxMS43JTJjMTMuNHogTTExLjclMmMxMi43YzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSBjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjQgQzExLjclMmMxMi45JTJjMTEuNyUyYzEyLjglMmMxMS43JTJjMTIuN3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEzLjMlMmMxMy41QzEzLjMlMmMxMy41JTJjMTMuMyUyYzEzLjUlMmMxMy4zJTJjMTMuNWMwJTJjMC0wLjElMmMwLTAuMSUyYzB2MGgwLjR2MGMtMC4xJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwIGMwJTJjMCUyYzAtMC4xJTJjMC0wLjF2LTFoMGwtMC4zJTJjMC4xbDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwczAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMnYwLjZDMTMuMyUyYzEzLjQlMmMxMy4zJTJjMTMuNSUyYzEzLjMlMmMxMy41eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTQuOCUyYzEyLjRjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMiUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwLjElMmMwLjQgYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjElMmMwLjJjMCUyYzAlMmMwJTJjMCUyYzAuMS0wLjFjMCUyYzAlMmMwJTJjMCUyYzAtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjIgQzE0LjclMmMxMi40JTJjMTQuOCUyYzEyLjQlMmMxNC44JTJjMTIuNEMxNC44JTJjMTIuNCUyYzE0LjklMmMxMi40JTJjMTQuOCUyYzEyLjRjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4yJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjIgYzAuMS0wLjElMmMwLjEtMC4yJTJjMC4yLTAuMmMwLTAuMiUyYzAtMC4zLTAuMS0wLjRDMTQuOSUyYzEyLjQlMmMxNC45JTJjMTIuNCUyYzE0LjglMmMxMi40eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNNy42JTJjMTQuOWMwJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zYzAtMC4yJTJjMC0wLjMtMC4xLTAuNCBjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDNy40JTJjMTQuOSUyYzcuNSUyYzE0LjklMmM3LjYlMmMxNC45eiBNNy41JTJjMTQuMmMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zIEM3LjQlMmMxNC40JTJjNy40JTJjMTQuMyUyYzcuNSUyYzE0LjJ6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J005JTJjMTQuOUM5JTJjMTQuOSUyYzklMmMxNC45JTJjOSUyYzE0LjljMCUyYzAtMC4xJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAtMC4xJTJjMC0wLjF2LTAuOSBoMEw4LjglMmMxNGwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMHMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42QzklMmMxNC44JTJjOSUyYzE0LjklMmM5JTJjMTQuOXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEwLjQlMmMxNC45QzEwLjQlMmMxNC45JTJjMTAuNCUyYzE0LjklMmMxMC40JTJjMTQuOWMwJTJjMC0wLjElMmMwLTAuMSUyYzB2MGgwLjR2MGMtMC4xJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwIGMwJTJjMCUyYzAtMC4xJTJjMC0wLjF2LTAuOWgwTDEwLjMlMmMxNGwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMnYwLjZDMTAuNCUyYzE0LjglMmMxMC40JTJjMTQuOSUyYzEwLjQlMmMxNC45IHonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTExLjYlMmMxNC44YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjMgYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjItMC4xLTAuMi0wLjFjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMiUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjMgQzExLjUlMmMxNC42JTJjMTEuNiUyYzE0LjclMmMxMS42JTJjMTQuOHogTTExLjclMmMxNC4xYzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSBjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjQgQzExLjclMmMxNC4zJTJjMTEuNyUyYzE0LjIlMmMxMS43JTJjMTQuMXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEzLjQlMmMxMy44bC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC41IGMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjFMMTMuNCUyYzEzLjhMMTMuNCUyYzEzLjh6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J003LjglMmMxNS40Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgYzAlMmMwJTJjMCUyYzAlMmMwLjElMmMwYzAtMC4xJTJjMC0wLjElMmMwLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBDNy43JTJjMTUuNCUyYzcuOCUyYzE1LjUlMmM3LjglMmMxNS40IGMwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwQzcuOSUyYzE1LjclMmM3LjklMmMxNS41JTJjNy44JTJjMTUuNHonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTkuMyUyYzE1LjRjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYy0wLjElMmMwLTAuMSUyYzAtMC4xJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zIGMwJTJjMCUyYzAlMmMwJTJjMCUyYzAuMWMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwbDAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwLTAuMWMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwIEM5LjIlMmMxNS40JTJjOS4yJTJjMTUuNSUyYzkuMyUyYzE1LjRjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjFDOS40JTJjMTUuNyUyYzkuNCUyYzE1LjUlMmM5LjMlMmMxNS40eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTAuNSUyYzE1LjNsLTAuMyUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMnYwLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMCBMMTAuNSUyYzE1LjNMMTAuNSUyYzE1LjNMMTAuNSUyYzE1LjN6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMiUyYzE1LjJsLTAuMyUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMEMxMS45JTJjMTUuNCUyYzExLjklMmMxNS4zJTJjMTIlMmMxNS4yTDEyJTJjMTUuMkwxMiUyYzE1LjJMMTIlMmMxNS4yeiAnLyUzZSAlM2MvZyUzZSUzYy9nJTNlJTNjL3N2ZyUzZSI7CiAgZXhwb3J0IGRlZmF1bHQgaW1nOw==';
1491
+ var lang = new LocalizedStrings({
1492
+ en: {
1493
+ introPrompt: "Some things you can ask me: ",
1494
+ use: "Use",
1495
+ exploreQueries: "Explore Queries",
1496
+ explorePrompt: "to further explore the possibilities.",
1497
+ run: "We run on AutoQL by Chata",
1498
+ queryPrompt: "Type your queries here ",
1499
+ seeMore: "See more",
1500
+ clearDataResponses: "Clear data responses",
1501
+ closeDataMessenger: "Close Data Messenger",
1502
+ searchQueries: "Search relevant queries by topic",
1503
+ discoverPrompt: "Discover what you can ask by entering a topic in the search bar above. Simply click on any of the returned options to run the query in Data Messenger.",
1504
+ reportAProblem: "Report a problem",
1505
+ deleteDataResponse: "Delete data response",
1506
+ table: "Table",
1507
+ barChart: "Bar Chart",
1508
+ columnChart: "Column Chart",
1509
+ lineChart: "Line Chart",
1510
+ pieChart: "Pie Chart",
1511
+ heatMap: "Heat Map",
1512
+ bubbleChart: "Bubble Chart",
1513
+ stackedColumnChart: "Stacked Column Chart",
1514
+ stackedBarChart: "Stacked Bar Chart",
1515
+ stackedAreaChart: "Stacked Area Chart",
1516
+ downloadAsPNG: "Download as a PNG",
1517
+ filterTable: "Filter table",
1518
+ showHideColumns: "Show/hide columns",
1519
+ downloadAsCSV: "Download as a CSV",
1520
+ copyTableToClipboard: "Copy table to clipboard",
1521
+ filterColumn: "Filter column",
1522
+ columnName: "Column Name",
1523
+ visibility: "Visibility",
1524
+ cancel: "Cancel",
1525
+ apply: "Apply"
1526
+ },
1527
+ sp: {
1528
+ introPrompt: "Cosas que puedes preguntarme:",
1529
+ use: "Utiliza",
1530
+ exploreQueries: "Explorar Consultas",
1531
+ explorePrompt: "para ampliar las posibilidades.",
1532
+ run: "Corremos en AutoQL de Chata",
1533
+ queryPrompt: "Escribe tus consultas aquí",
1534
+ seeMore: "Ver más",
1535
+ clearDataResponses: "Limpiar respuestas",
1536
+ closeDataMessenger: "Cerrar Data mesenger",
1537
+ searchQueries: "Buscar consultas relevantes por tema",
1538
+ discoverPrompt: "Descubre lo que puede preguntar ingresando un tema en la barra de búsqueda de arriba. Da clic en cualquiera de las opciones devueltas para ejecutar la consulta en Data Messenger.",
1539
+ reportAProblem: "Informar de un problema",
1540
+ deleteDataResponse: "Eliminar respuesta de datos",
1541
+ table: "Tabla",
1542
+ barChart: "Gráfico de barras",
1543
+ columnChart: "Gráfico de columnas",
1544
+ lineChart: "Gráfico de linea",
1545
+ pieChart: "Gráfico circular",
1546
+ heatMap: "Mapa de calor",
1547
+ bubbleChart: "Gráfico de burbujas",
1548
+ stackedColumnChart: "Gráfico de columnas apiladas",
1549
+ stackedBarChart: "Gráfico de barras apiladas",
1550
+ stackedAreaChart: "Gráfico de área apilada",
1551
+ downloadAsPNG: "Descargar como PNG",
1552
+ filterTable: "Tabla de filtros",
1553
+ showHideColumns: "Mostrar/ocultar columnas",
1554
+ downloadAsCSV: "Descargar como CSV",
1555
+ copyTableToClipboard: "Copiar tabla al portapapelas",
1556
+ filterColumn: "Columna de filtro",
1557
+ columnName: "Nombre de columna",
1558
+ visibility: "Visibilidad",
1559
+ cancel: "Cancelar",
1560
+ apply: "Aplicar"
1561
+ }
1562
+ });
1563
+
1564
+ var setLanguage = function setLanguage() {
1565
+ var userLang = navigator.language || navigator.userLanguage;
1566
+ if (userLang.includes("sp")) {
1567
+ lang.setLanguage("sp");
1568
+ } else {
1569
+ lang.setLanguage("en");
1570
+ }
1571
+ };
1572
+
1573
+ var chataBubblesSVG = 'data:image/svg+xml;base64,dmFyIGltZyA9ICJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjJTNmeG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyUzZiUzZSUzYyEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIyLjEuMCUyYyBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLSUzZSUzY3N2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgd2lkdGg9JzI0cHgnIGhlaWdodD0nMjRweCcgdmlld0JveD0nMCAwIDI0IDI0JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCAyNCAyNCcgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM2UlM2NnJTNlICUzY2clM2UgJTNjZyUzZSAlM2NwYXRoIGZpbGw9JyUyMzI2QTdERicgZD0nTTE2JTJjNUMxNC44JTJjMi4zJTJjMTIlMmMwLjQlMmM4LjglMmMwLjRjLTQuNCUyYzAtNy42JTJjMy41LTcuNiUyYzcuOXY0YzAlMmMyLjgtMSUyYzMuNi0xJTJjMy42YzEuMyUyYzAuMSUyYzIuOS0wLjQlMmM0LTEuNSBjMC40JTJjMC40JTJjMSUyYzAuOCUyYzEuNiUyYzFjMC41JTJjMC4yJTJjMSUyYzAuNCUyYzEuNiUyYzAuNWMwLTAuMi0wLjEtMC41LTAuMS0wLjdjMC0wLjIlMmMwLTAuNSUyYzAtMC43YzAtMS42JTJjMC41LTMuMiUyYzEuMy00LjQgYzAuMy0wLjQlMmMwLjYtMC44JTJjMS0xLjJjMC4yLTAuMiUyYzAuNC0wLjMlMmMwLjYtMC41YzAuNC0wLjMlMmMwLjgtMC42JTJjMS4yLTAuOGMwLjQtMC4yJTJjMC45LTAuNCUyYzEuNC0wLjZjMC43LTAuMiUyYzEuNS0wLjMlMmMyLjMtMC4zbDAlMmMwIGMwLjMlMmMwJTJjMC41JTJjMCUyYzAuNyUyYzBjMC4yJTJjMCUyYzAuNSUyYzAuMSUyYzAuNyUyYzAuMUMxNi40JTJjNiUyYzE2LjIlMmM1LjUlMmMxNiUyYzV6Jy8lM2UgJTNjL2clM2UgJTNjL2clM2UgJTNjZyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTIyLjclMmMxOC4zdi00YzAtMy4zLTEuOC02LTQuNi03LjJjLTAuNS0wLjItMS0wLjQtMS42LTAuNWMwLjElMmMwLjUlMmMwLjIlMmMxLjElMmMwLjIlMmMxLjdjMCUyYzEuOS0wLjclMmMzLjYtMS44JTJjNC45IGMtMC41JTJjMC42LTElMmMxLTEuNyUyYzEuNWMtMC40JTJjMC4zLTAuOSUyYzAuNS0xLjMlMmMwLjdjLTAuNSUyYzAuMi0xJTJjMC4zLTEuNSUyYzAuNGMtMC41JTJjMC4xLTElMmMwLjItMS42JTJjMC4yYy0wLjMlMmMwLTAuNSUyYzAtMC43JTJjMCBjLTAuMyUyYzAtMC41LTAuMS0wLjctMC4xYzAuMSUyYzAuNiUyYzAuMyUyYzEuMSUyYzAuNSUyYzEuNmMxLjIlMmMyLjglMmMzLjklMmM0LjYlMmM3LjIlMmM0LjZjMS44JTJjMCUyYzMuNS0wLjUlMmM0LjYtMS42YzElMmMxJTJjMi45JTJjMS44JTJjNC4xJTJjMS41IEMyMy44JTJjMjEuOSUyYzIyLjclMmMyMS4zJTJjMjIuNyUyYzE4LjN6Jy8lM2UgJTNjL2clM2UgJTNjZyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xNS4xJTJjNi41Yy00LjQlMmMwLTcuOCUyYzMuNS03LjglMmM3LjljMCUyYzAuNSUyYzAuMSUyYzElMmMwLjElMmMxLjVjMC41JTJjMC4xJTJjMSUyYzAuMSUyYzEuNSUyYzAuMWM0LjQlMmMwJTJjNy44LTMuMyUyYzcuOC03LjYgYzAtMC42LTAuMS0xLjEtMC4yLTEuN0MxNi4xJTJjNi41JTJjMTUuNiUyYzYuNSUyYzE1LjElMmM2LjV6Jy8lM2UgJTNjL2clM2UgJTNjZyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xNi4zJTJjOC4yQzE2LjMlMmM4LjIlMmMxNi4yJTJjOC4yJTJjMTYuMyUyYzguMmMtMC4xJTJjMC0wLjElMmMwLTAuMiUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjElMmMwLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgQzE2LjMlMmM4LjMlMmMxNi4zJTJjOC4yJTJjMTYuMyUyYzguMnonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMy40JTJjMTFDMTMuNCUyYzExJTJjMTMuNCUyYzExJTJjMTMuNCUyYzExYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBjMCUyYzAuMiUyYzAlMmMwLjMlMmMwLjElMmMwLjRjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjFjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBDMTMuNSUyYzExLjElMmMxMy41JTJjMTEuMSUyYzEzLjQlMmMxMXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMy4zJTJjOS4xQzEzLjQlMmM5LjElMmMxMy40JTJjOS4xJTJjMTMuMyUyYzkuMUMxMy41JTJjOS4xJTJjMTMuNSUyYzklMmMxMy41JTJjOWMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAlMmMwJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDMTMuMiUyYzkuMSUyYzEzLjMlMmM5LjElMmMxMy4zJTJjOS4xeicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTExLjklMmMxMC42QzExLjklMmMxMC42JTJjMTIlMmMxMC42JTJjMTEuOSUyYzEwLjZjMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC4zIEMxMS44JTJjMTAuNiUyYzExLjklMmMxMC42JTJjMTEuOSUyYzEwLjZ6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNOS4xJTJjMTIuNUM5LjElMmMxMi41JTJjOS4xJTJjMTIuNSUyYzkuMSUyYzEyLjVjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zIGMwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuM2MwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMWMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIEM5LjIlMmMxMi42JTJjOS4yJTJjMTIuNSUyYzkuMSUyYzEyLjV6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTAuNSUyYzEwLjZDMTAuNSUyYzEwLjYlMmMxMC41JTJjMTAuNiUyYzEwLjUlMmMxMC42YzAuMS0wLjElMmMwLjEtMC4xJTJjMC4yLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAlMmMwJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDMTAuNCUyYzEwLjUlMmMxMC40JTJjMTAuNiUyYzEwLjUlMmMxMC42eicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTcuNiUyYzE0LjlDNy42JTJjMTQuOSUyYzcuNyUyYzE0LjklMmM3LjYlMmMxNC45YzAuMS0wLjElMmMwLjEtMC4xJTJjMC4yLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAlMmMwJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDNy41JTJjMTQuOCUyYzcuNiUyYzE0LjklMmM3LjYlMmMxNC45eicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTcuNiUyYzEzLjRDNy42JTJjMTMuNCUyYzcuNyUyYzEzLjQlMmM3LjYlMmMxMy40YzAuMS0wLjElMmMwLjEtMC4xJTJjMC4yLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAlMmMwJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDNy41JTJjMTMuNCUyYzcuNiUyYzEzLjQlMmM3LjYlMmMxMy40eicvJTNlICUzY3BhdGggZmlsbD0nbm9uZScgZD0nTTExLjklMmM5LjFDMTEuOSUyYzkuMSUyYzEyJTJjOS4xJTJjMTEuOSUyYzkuMUMxMiUyYzkuMSUyYzEyLjElMmM5JTJjMTIuMSUyYzljMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMS0wLjEtMC4xYzAlMmMwJTJjMCUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjMgQzExLjglMmM5LjElMmMxMS45JTJjOS4xJTJjMTEuOSUyYzkuMXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xMS45JTJjMTMuNUMxMS45JTJjMTMuNSUyYzEyJTJjMTMuNSUyYzExLjklMmMxMy41YzAuMS0wLjElMmMwLjEtMC4xJTJjMC4yLTAuMmMwLTAuMSUyYzAtMC4yJTJjMC0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zIGMwLTAuMSUyYzAtMC4xLTAuMS0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMC4xJTJjMC40IEMxMS44JTJjMTMuNSUyYzExLjglMmMxMy41JTJjMTEuOSUyYzEzLjV6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTEuOSUyYzEyLjFDMTEuOSUyYzEyLjElMmMxMiUyYzEyJTJjMTEuOSUyYzEyLjFjMC4xLTAuMSUyYzAuMS0wLjElMmMwLjItMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjMgYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBzLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAuMSUyYzAuNCBDMTEuOCUyYzEyJTJjMTEuOSUyYzEyLjElMmMxMS45JTJjMTIuMXonLyUzZSAlM2NwYXRoIGZpbGw9J25vbmUnIGQ9J00xNiUyYzcuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC0wLjElMmMwLjEtMC4xYzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4xJTJjMC0wLjEtMC4xLTAuMWMwJTJjMCUyYzAlMmMwLTAuMSUyYzBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJDMTYuMSUyYzcuMSUyYzE2JTJjNy4yJTJjMTYlMmM3LjJ6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTEuOSUyYzE1QzExLjklMmMxNSUyYzEyJTJjMTQuOSUyYzExLjklMmMxNWMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuMi0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMS0wLjEtMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMC0wLjElMmMwLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAuMSUyYzAuNCBDMTEuOCUyYzE0LjklMmMxMS44JTJjMTUlMmMxMS45JTJjMTV6Jy8lM2UgJTNjcGF0aCBmaWxsPSdub25lJyBkPSdNMTYuMyUyYzkuNkMxNi4zJTJjOS42JTJjMTYuMiUyYzkuNiUyYzE2LjMlMmM5LjZjLTAuMSUyYzAtMC4xJTJjMC0wLjIlMmMwYzAlMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zIGMwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuNGMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBzMC4xLTAuMSUyYzAuMS0wLjFjMC0wLjElMmMwLTAuMiUyYzAtMC40YzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBDMTYuMyUyYzkuNyUyYzE2LjMlMmM5LjYlMmMxNi4zJTJjOS42eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTEuNyUyYzcuNmMwLjElMmMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xLTAuMWMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuMyBjMC0wLjElMmMwLTAuMSUyYzAtMC4yYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4zJTJjMCUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwIEMxMS44JTJjNy43JTJjMTEuOCUyYzcuNiUyYzExLjclMmM3LjZjMC4xLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMC0wLjElMmMwLTAuMSUyYzAuMUMxMS42JTJjNy40JTJjMTEuNiUyYzcuNSUyYzExLjclMmM3LjZ6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMy40JTJjNi43bC0wLjIlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjF2MC41YzAlMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAtMC4xTDEzLjQlMmM2LjdMMTMuNCUyYzYuN3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTE0LjglMmM2LjdsLTAuMiUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMXYwLjVjMCUyYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xIGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBIMTV2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBzMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjFMMTQuOCUyYzYuN0wxNC44JTJjNi43eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTYlMmM3YzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMiUyYzAuMSUyYzAuM2MwLjElMmMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xLTAuMSBjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC0wLjIlMmMwLTAuM2MwLTAuMiUyYzAtMC4zLTAuMS0wLjRjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMEMxNiUyYzYuOCUyYzE2JTJjNi45JTJjMTYlMmM3eiBNMTYuMiUyYzYuOEMxNi4yJTJjNi44JTJjMTYuMyUyYzYuOCUyYzE2LjIlMmM2LjhjMC4xJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMSBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAtMC4zQzE2LjElMmM2LjklMmMxNi4xJTJjNi45JTJjMTYuMiUyYzYuOCBDMTYuMSUyYzYuOCUyYzE2LjIlMmM2LjglMmMxNi4yJTJjNi44eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTAuNCUyYzkuMUMxMC40JTJjOS4xJTJjMTAuNCUyYzkuMSUyYzEwLjQlMmM5LjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjEgVjguMmgwbC0wLjIlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjFWOS4xQzEwLjQlMmM5JTJjMTAuNCUyYzkuMSUyYzEwLjQlMmM5LjF6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMS45JTJjOS4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjNjMC0wLjIlMmMwLTAuMy0wLjEtMC40IGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJzLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjMgQzExLjclMmM5LjElMmMxMS44JTJjOS4yJTJjMTEuOSUyYzkuMnogTTExLjglMmM4LjRjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xIGMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMyBDMTEuNyUyYzguNiUyYzExLjclMmM4LjUlMmMxMS44JTJjOC40eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTMlMmM4LjdjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjNjMC4xJTJjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFTMTMuNiUyYzklMmMxMy42JTJjOSBjMC0wLjElMmMwLjEtMC4yJTJjMC4xLTAuM2MwLTAuMiUyYzAtMC4zLTAuMS0wLjRjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yIEMxMyUyYzguNSUyYzEzJTJjOC42JTJjMTMlMmM4Ljd6IE0xMy4yJTJjOC40YzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjNDMTMuMiUyYzguNiUyYzEzLjIlMmM4LjUlMmMxMy4yJTJjOC40eiAnLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTE0LjYlMmM4LjNDMTQuNiUyYzguMyUyYzE0LjYlMmM4LjMlMmMxNC42JTJjOC4zYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMVY5YzAlMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHYwSDE1djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAtMC4xJTJjMC0wLjFWOC4xaDBMMTQuNiUyYzguM0wxNC42JTJjOC4zeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTYuMiUyYzguMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjMgYzAuMSUyYzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zYzAtMC4yJTJjMC0wLjMtMC4xLTAuNCBDMTYuNCUyYzguMiUyYzE2LjMlMmM4LjElMmMxNi4yJTJjOC4xeiBNMTYuNCUyYzljMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFDMTYlMmM4LjklMmMxNiUyYzguOCUyYzE2JTJjOC43IGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMHMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgQzE2LjQlMmM4LjglMmMxNi40JTJjOC45JTJjMTYuNCUyYzl6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J005LjElMmM5LjZMOC45JTJjOS43bDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xdjAuNWMwJTJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjEgYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLTAuMSUyYzB2MGgwLjR2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBzMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjFMOS4xJTJjOS42TDkuMSUyYzkuNkw5LjElMmM5LjZ6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMC41JTJjMTAuNmMwJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zYzAtMC4yJTJjMC0wLjMtMC4xLTAuNCBjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4xJTJjMCUyYzAuMyUyYzAuMSUyYzAuMyBDMTAuMyUyYzEwLjYlMmMxMC40JTJjMTAuNiUyYzEwLjUlMmMxMC42eiBNMTAuMyUyYzkuOWMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zIEMxMC4zJTJjMTAlMmMxMC4zJTJjMTAlMmMxMC4zJTJjOS45eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTEuNyUyYzEwLjVjMC4xJTJjMC4xJTJjMC4yJTJjMC4yJTJjMC4zJTJjMC4yYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMWMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJzMC4xLTAuMiUyYzAuMS0wLjMgYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjMgQzExLjYlMmMxMC4yJTJjMTEuNiUyYzEwLjQlMmMxMS43JTJjMTAuNXogTTExLjclMmM5LjljMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMHMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMSBjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjMgQzExLjclMmMxMCUyYzExLjclMmM5LjklMmMxMS43JTJjOS45eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTMuMyUyYzEwLjZDMTMuMyUyYzEwLjYlMmMxMy4zJTJjMTAuNiUyYzEzLjMlMmMxMC42YzAlMmMwLTAuMSUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzAgYzAlMmMwJTJjMC0wLjElMmMwLTAuMVY5LjZoMGwtMC4zJTJjMC4xbDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4ydjAuNkMxMy4zJTJjMTAuNSUyYzEzLjMlMmMxMC41JTJjMTMuMyUyYzEwLjYgeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTQuNiUyYzkuN0MxNC42JTJjOS43JTJjMTQuNyUyYzkuNyUyYzE0LjYlMmM5LjdjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4ydjAuNiBjMCUyYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xczAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBIMTV2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMC0wLjElMmMwLTAuMVY5LjZoMEwxNC42JTJjOS43TDE0LjYlMmM5Ljd6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xNi4yJTJjOS42Yy0wLjElMmMwLTAuMSUyYzAtMC4xJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJzLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjQgYzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjEtMC4xYzAuMS0wLjIlMmMwLjEtMC41JTJjMC4yLTAuN2MwLTAuMSUyYzAtMC4yLTAuMS0wLjJDMTYuNCUyYzkuNiUyYzE2LjMlMmM5LjYlMmMxNi4yJTJjOS42eiBNMTYuNCUyYzEwLjQgYzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuNGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjIgYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNDMTYuNCUyYzEwLjIlMmMxNi40JTJjMTAuMyUyYzE2LjQlMmMxMC40eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNNy44JTJjMTEuNWMwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMCBjMCUyYzAlMmMwLjElMmMwJTJjMC4xLTAuMWMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4xJTJjMC0wLjItMC4xLTAuM0M3LjglMmMxMS4zJTJjNy44JTJjMTEuNCUyYzcuOCUyYzExLjUgQzcuOCUyYzExLjUlMmM3LjglMmMxMS41JTJjNy44JTJjMTEuNXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTguOSUyYzExLjJDOC45JTJjMTEuMSUyYzguOSUyYzExLjElMmM4LjklMmMxMS4yYzAuMSUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC4xJTJjMCUyYzAuMXYwLjUgQzklMmMxMS45JTJjOSUyYzEyJTJjOSUyYzEyYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLTAuMSUyYzB2MGgwLjR2MGMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMC0wLjElMmMwLTAuMVYxMWgwTDguOSUyYzExLjJMOC45JTJjMTEuMnonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEwLjUlMmMxMWwtMC4zJTJjMC4xbDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4ydjAuNmMwJTJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjEgczAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMC0wLjElMmMwdjBoMC40djBjMCUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAtMC4xJTJjMC0wLjFMMTAuNSUyYzExTDEwLjUlMmMxMXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTExLjclMmMxMS45YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4yYzAtMC4xJTJjMC4xLTAuMiUyYzAuMS0wLjMgYzAtMC4yJTJjMC0wLjMtMC4xLTAuNEMxMi4xJTJjMTElMmMxMiUyYzExJTJjMTEuOSUyYzExYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zIEMxMS42JTJjMTEuNyUyYzExLjYlMmMxMS44JTJjMTEuNyUyYzExLjl6IE0xMS43JTJjMTEuM2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC40IEMxMS43JTJjMTEuNSUyYzExLjclMmMxMS40JTJjMTEuNyUyYzExLjN6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMy43JTJjMTEuNWMwLTAuMiUyYzAtMC4zLTAuMS0wLjRDMTMuNSUyYzExJTJjMTMuNCUyYzExJTJjMTMuMyUyYzExYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjIgYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAuMSUyYzAuNGMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjMlMmMwLjJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMiBDMTMuNyUyYzExLjglMmMxMy43JTJjMTEuNyUyYzEzLjclMmMxMS41eiBNMTMuNSUyYzExLjljMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC40IGMwLTAuMSUyYzAtMC4yJTJjMC0wLjNjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMWMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuMyBDMTMuNiUyYzExLjclMmMxMy41JTJjMTEuOCUyYzEzLjUlMmMxMS45eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTQuNyUyYzEyQzE0LjclMmMxMiUyYzE0LjclMmMxMiUyYzE0LjclMmMxMmMwJTJjMC0wLjElMmMwLTAuMSUyYzB2MEgxNXYwYy0wLjElMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xIFYxMWgwbC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42QzE0LjclMmMxMiUyYzE0LjclMmMxMiUyYzE0LjclMmMxMnonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTE2JTJjMTEuMUwxNiUyYzExLjFDMTYlMmMxMS4xJTJjMTYuMSUyYzExLjElMmMxNiUyYzExLjFjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMHYwYzAtMC4xJTJjMC0wLjElMmMwLjEtMC4yTDE2JTJjMTEuMSB6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J003LjQlMmMxMy4zYzAuMSUyYzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMlM4JTJjMTMuMSUyYzglMmMxMyBjMC0wLjIlMmMwLTAuMy0wLjEtMC40Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYy0wLjElMmMwLjItMC4xJTJjMC40LTAuMSUyYzAuN0M3LjMlMmMxMy4zJTJjNy40JTJjMTMuMyUyYzcuNCUyYzEzLjMgeiBNNy41JTJjMTIuN2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjFjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNCBjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zQzcuNCUyYzEyLjklMmM3LjQlMmMxMi44JTJjNy41JTJjMTIuN3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTkuNCUyYzEzYzAtMC4yJTJjMC0wLjMtMC4xLTAuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwLjFjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMiBjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zYzAlMmMwLjElMmMwJTJjMC4zJTJjMC4xJTJjMC40YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMyUyYzAuMmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMi0wLjFzMC4xLTAuMSUyYzAuMS0wLjIgQzkuNCUyYzEzLjIlMmM5LjQlMmMxMy4xJTJjOS40JTJjMTN6IE05LjIlMmMxMy4zYzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMyBjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAuMSUyYzAuMSUyYzAuMWMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjMgQzkuMiUyYzEzLjElMmM5LjIlMmMxMy4yJTJjOS4yJTJjMTMuM3onLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEwLjMlMmMxMi42QzEwLjMlMmMxMi41JTJjMTAuNCUyYzEyLjUlMmMxMC4zJTJjMTIuNmMwLjElMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42IGMwJTJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjFjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xdi0wLjloMEwxMC4zJTJjMTIuNkwxMC4zJTJjMTIuNnonIC8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMS43JTJjMTMuNGMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjMlMmMwLjJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zIGMwLTAuMiUyYzAtMC4zLTAuMS0wLjRjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zIEMxMS42JTJjMTMuMSUyYzExLjYlMmMxMy4zJTJjMTEuNyUyYzEzLjR6IE0xMS43JTJjMTIuN2MwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC40IEMxMS43JTJjMTIuOSUyYzExLjclMmMxMi44JTJjMTEuNyUyYzEyLjd6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMy4zJTJjMTMuNUMxMy4zJTJjMTMuNSUyYzEzLjMlMmMxMy41JTJjMTMuMyUyYzEzLjVjMCUyYzAtMC4xJTJjMC0wLjElMmMwdjBoMC40djBjLTAuMSUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMCBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xdi0xaDBsLTAuMyUyYzAuMWwwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMHMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42QzEzLjMlMmMxMy40JTJjMTMuMyUyYzEzLjUlMmMxMy4zJTJjMTMuNXonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTE0LjglMmMxMi40Yy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zYzAlMmMwLjIlMmMwJTJjMC4zJTJjMC4xJTJjMC40IGMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4yYzAlMmMwJTJjMCUyYzAlMmMwLjEtMC4xYzAlMmMwJTJjMCUyYzAlMmMwLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjRjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yIEMxNC43JTJjMTIuNCUyYzE0LjglMmMxMi40JTJjMTQuOCUyYzEyLjRDMTQuOCUyYzEyLjQlMmMxNC45JTJjMTIuNCUyYzE0LjglMmMxMi40YzAuMSUyYzAuMSUyYzAuMiUyYzAuMiUyYzAuMiUyYzAuMmMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4yIGMwLjEtMC4xJTJjMC4xLTAuMiUyYzAuMi0wLjJjMC0wLjIlMmMwLTAuMy0wLjEtMC40QzE0LjklMmMxMi40JTJjMTQuOSUyYzEyLjQlMmMxNC44JTJjMTIuNHonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTcuNiUyYzE0LjljMCUyYzAlMmMwLjElMmMwJTJjMC4yLTAuMWMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMS0wLjJjMC0wLjElMmMwLjEtMC4yJTJjMC4xLTAuM2MwLTAuMiUyYzAtMC4zLTAuMS0wLjQgYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC4xLTAuMSUyYzAuMmMwJTJjMC4xLTAuMSUyYzAuMi0wLjElMmMwLjNjMCUyYzAuMSUyYzAlMmMwLjMlMmMwLjElMmMwLjMgQzcuNCUyYzE0LjklMmM3LjUlMmMxNC45JTJjNy42JTJjMTQuOXogTTcuNSUyYzE0LjJjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMC4xJTJjMC4xJTJjMC4xJTJjMC4xIGMwJTJjMC4xJTJjMCUyYzAuMiUyYzAlMmMwLjNjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwLjElMmMwJTJjMC4xLTAuMSUyYzAuMWMwJTJjMC0wLjElMmMwLTAuMSUyYzBjLTAuMSUyYzAtMC4xJTJjMC0wLjEtMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMyBDNy40JTJjMTQuNCUyYzcuNCUyYzE0LjMlMmM3LjUlMmMxNC4yeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNOSUyYzE0LjlDOSUyYzE0LjklMmM5JTJjMTQuOSUyYzklMmMxNC45YzAlMmMwLTAuMSUyYzAtMC4xJTJjMHYwaDAuNHYwYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xdi0wLjkgaDBMOC44JTJjMTRsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBzMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4ydjAuNkM5JTJjMTQuOCUyYzklMmMxNC45JTJjOSUyYzE0Ljl6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMC40JTJjMTQuOUMxMC40JTJjMTQuOSUyYzEwLjQlMmMxNC45JTJjMTAuNCUyYzE0LjljMCUyYzAtMC4xJTJjMC0wLjElMmMwdjBoMC40djBjLTAuMSUyYzAtMC4xJTJjMC0wLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMCBjMCUyYzAlMmMwLTAuMSUyYzAtMC4xdi0wLjloMEwxMC4zJTJjMTRsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC42QzEwLjQlMmMxNC44JTJjMTAuNCUyYzE0LjklMmMxMC40JTJjMTQuOSB6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMS42JTJjMTQuOGMwLjElMmMwLjElMmMwLjIlMmMwLjIlMmMwLjMlMmMwLjJjMC4xJTJjMCUyYzAuMSUyYzAlMmMwLjItMC4xYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xLTAuMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjEtMC4zIGMwLTAuMiUyYzAtMC4zLTAuMS0wLjRjLTAuMS0wLjEtMC4yLTAuMS0wLjItMC4xYy0wLjElMmMwLTAuMSUyYzAtMC4yJTJjMC4xYy0wLjElMmMwLTAuMSUyYzAuMS0wLjIlMmMwLjJjMCUyYzAuMS0wLjElMmMwLjItMC4xJTJjMC4zIEMxMS41JTJjMTQuNiUyYzExLjYlMmMxNC43JTJjMTEuNiUyYzE0Ljh6IE0xMS43JTJjMTQuMWMwLTAuMSUyYzAtMC4yJTJjMC4xLTAuMmMwJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwLjElMmMwLjElMmMwLjEgYzAlMmMwLjElMmMwJTJjMC4yJTJjMCUyYzAuM2MwJTJjMC4yJTJjMCUyYzAuMyUyYzAlMmMwLjRjMCUyYzAuMSUyYzAlMmMwLjEtMC4xJTJjMC4xYzAlMmMwLTAuMSUyYzAtMC4xJTJjMGMtMC4xJTJjMC0wLjElMmMwLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC40IEMxMS43JTJjMTQuMyUyYzExLjclMmMxNC4yJTJjMTEuNyUyYzE0LjF6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J00xMy40JTJjMTMuOGwtMC4zJTJjMC4xbDAlMmMwYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4ydjAuNSBjMC4xJTJjMCUyYzAuMS0wLjElMmMwLjEtMC4xTDEzLjQlMmMxMy44TDEzLjQlMmMxMy44eicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNNy44JTJjMTUuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFjMCUyYzAtMC4xJTJjMC0wLjElMmMwYy0wLjElMmMwLTAuMSUyYzAuMS0wLjElMmMwLjJjMCUyYzAuMSUyYzAlMmMwLjIlMmMwJTJjMC4zIGMwJTJjMCUyYzAlMmMwJTJjMC4xJTJjMGMwLTAuMSUyYzAtMC4xJTJjMC0wLjJjMC0wLjElMmMwLTAuMiUyYzAuMS0wLjJjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwQzcuNyUyYzE1LjQlMmM3LjglMmMxNS41JTJjNy44JTJjMTUuNCBjMCUyYzAuMiUyYzAlMmMwLjMlMmMwJTJjMC40YzAlMmMwJTJjMCUyYzAlMmMwJTJjMGMwJTJjMCUyYzAuMSUyYzAlMmMwLjElMmMwYzAlMmMwJTJjMCUyYzAlMmMwJTJjMEM3LjklMmMxNS43JTJjNy45JTJjMTUuNSUyYzcuOCUyYzE1LjR6Jy8lM2UgJTNjcGF0aCBmaWxsPSclMjNBM0NDMzknIGQ9J005LjMlMmMxNS40Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMtMC4xJTJjMC0wLjElMmMwLTAuMSUyYzAuMWMtMC4xJTJjMC0wLjElMmMwLjEtMC4xJTJjMC4yYzAlMmMwLjEtMC4xJTJjMC4yLTAuMSUyYzAuMyBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwLjFjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGwwJTJjMGMwJTJjMCUyYzAlMmMwJTJjMC0wLjFjMC0wLjElMmMwLTAuMiUyYzAtMC4zYzAtMC4xJTJjMC0wLjIlMmMwLjEtMC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMCBDOS4yJTJjMTUuNCUyYzkuMiUyYzE1LjUlMmM5LjMlMmMxNS40YzAlMmMwLjIlMmMwJTJjMC4zJTJjMCUyYzAuNGMwJTJjMCUyYzAlMmMwLjElMmMwJTJjMC4xYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzBjMCUyYzAlMmMwJTJjMCUyYzAtMC4xQzkuNCUyYzE1LjclMmM5LjQlMmMxNS41JTJjOS4zJTJjMTUuNHonLyUzZSAlM2NwYXRoIGZpbGw9JyUyM0EzQ0MzOScgZD0nTTEwLjUlMmMxNS4zbC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBjMCUyYzAlMmMwJTJjMCUyYzAlMmMwYzAlMmMwJTJjMCUyYzAuMSUyYzAlMmMwLjJ2MC4yYzAlMmMwJTJjMC4xJTJjMCUyYzAuMSUyYzAgTDEwLjUlMmMxNS4zTDEwLjUlMmMxNS4zTDEwLjUlMmMxNS4zeicvJTNlICUzY3BhdGggZmlsbD0nJTIzQTNDQzM5JyBkPSdNMTIlMmMxNS4ybC0wLjMlMmMwLjFsMCUyYzBjMCUyYzAlMmMwLjElMmMwJTJjMC4xJTJjMGMwJTJjMCUyYzAlMmMwJTJjMCUyYzBDMTEuOSUyYzE1LjQlMmMxMS45JTJjMTUuMyUyYzEyJTJjMTUuMkwxMiUyYzE1LjJMMTIlMmMxNS4yTDEyJTJjMTUuMnogJy8lM2UgJTNjL2clM2UlM2MvZyUzZSUzYy9zdmclM2UiOwogIGV4cG9ydCBkZWZhdWx0IGltZzs=';
1489
1574
 
1490
1575
  var bubblesIcon = React.createElement(
1491
1576
  "svg",
@@ -2268,16 +2353,89 @@ var fetchSuggestions = function fetchSuggestions() {
2268
2353
  });
2269
2354
  };
2270
2355
 
2356
+ var fetchQandASuggestions = function fetchQandASuggestions(_ref2) {
2357
+ var queryID = _ref2.queryID,
2358
+ projectID = _ref2.projectID,
2359
+ apiKey = _ref2.apiKey;
2360
+
2361
+ var url = 'https://backend-staging.chata.io/api/v1/answers/suggestions?key=' + apiKey;
2362
+ var data = {
2363
+ query_id: queryID,
2364
+ project_id: projectID
2365
+ };
2366
+ var config = {};
2367
+
2368
+ return axios.post(url, data, config).then(function (response) {
2369
+ if (response.data && typeof response.data === 'string') {
2370
+ // There was an error parsing the json
2371
+ throw new Error('Parse error');
2372
+ }
2373
+
2374
+ return Promise.resolve(response);
2375
+ }).catch(function (error) {
2376
+ if (error.message === 'Parse error') {
2377
+ return Promise.reject({ error: 'Parse error' });
2378
+ }
2379
+ if (error.response === 401 || !_get(error, 'response.data')) {
2380
+ return Promise.reject({ error: 'Unauthenticated' });
2381
+ }
2382
+ return Promise.reject(_get(error, 'response'));
2383
+ });
2384
+ };
2385
+
2386
+ /**
2387
+ * This function is for AutoAE Queries
2388
+ * @param {*} param0
2389
+ * @returns
2390
+ */
2391
+ var runQandAQuery = function runQandAQuery(_ref3) {
2392
+ var query = _ref3.query,
2393
+ projectID = _ref3.projectID,
2394
+ AutoAEId = _ref3.AutoAEId,
2395
+ apiKey = _ref3.apiKey;
2396
+
2397
+ var url = 'https://backend-staging.chata.io/api/v1/answers?key=' + apiKey;
2398
+ var data = {
2399
+ query: query,
2400
+ project_id: projectID
2401
+ };
2402
+ var config = {
2403
+ headers: {
2404
+ 'AutoAE-Session-ID': AutoAEId
2405
+ }
2406
+ };
2407
+
2408
+ return axios.post(url, data, config).then(function (response) {
2409
+ if (response.data && typeof response.data === 'string') {
2410
+ // There was an error parsing the json
2411
+ throw new Error('Parse error');
2412
+ }
2413
+
2414
+ return Promise.resolve(response);
2415
+ }).catch(function (error) {
2416
+ if (error.message === 'Parse error') {
2417
+ return Promise.reject({ error: 'Parse error' });
2418
+ }
2419
+ if (error.response === 401 || !_get(error, 'response.data')) {
2420
+ return Promise.reject({ error: 'Unauthenticated' });
2421
+ }
2422
+ return Promise.reject(_get(error, 'response'));
2423
+ });
2424
+ };
2425
+
2271
2426
  var runQueryOnly = function runQueryOnly() {
2272
- var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2273
- query = _ref2.query,
2274
- userSelection = _ref2.userSelection,
2275
- debug = _ref2.debug,
2276
- test = _ref2.test,
2277
- domain = _ref2.domain,
2278
- apiKey = _ref2.apiKey,
2279
- token = _ref2.token,
2280
- source = _ref2.source;
2427
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2428
+ query = _ref4.query,
2429
+ isQandA = _ref4.isQandA,
2430
+ projectID = _ref4.projectID,
2431
+ userSelection = _ref4.userSelection,
2432
+ debug = _ref4.debug,
2433
+ test = _ref4.test,
2434
+ domain = _ref4.domain,
2435
+ apiKey = _ref4.apiKey,
2436
+ token = _ref4.token,
2437
+ source = _ref4.source,
2438
+ AutoAEId = _ref4.AutoAEId;
2281
2439
 
2282
2440
  var url = domain + '/autoql/api/v1/query?key=' + apiKey;
2283
2441
  var finalUserSelection = transformUserSelection(userSelection);
@@ -2294,6 +2452,10 @@ var runQueryOnly = function runQueryOnly() {
2294
2452
  return Promise.reject({ error: 'No query supplied' });
2295
2453
  }
2296
2454
 
2455
+ if (isQandA) {
2456
+ return runQandAQuery({ query: query, projectID: projectID, AutoAEId: AutoAEId, apiKey: apiKey });
2457
+ }
2458
+
2297
2459
  if (!apiKey || !domain || !token) {
2298
2460
  return Promise.reject({ error: 'Unauthenticated' });
2299
2461
  }
@@ -2330,19 +2492,22 @@ var runQueryOnly = function runQueryOnly() {
2330
2492
  };
2331
2493
 
2332
2494
  var runQuery = function runQuery() {
2333
- var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2334
- query = _ref3.query,
2335
- userSelection = _ref3.userSelection,
2336
- debug = _ref3.debug,
2337
- test = _ref3.test,
2338
- enableQueryValidation = _ref3.enableQueryValidation,
2339
- domain = _ref3.domain,
2340
- apiKey = _ref3.apiKey,
2341
- token = _ref3.token,
2342
- source = _ref3.source,
2343
- skipQueryValidation = _ref3.skipQueryValidation;
2495
+ var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2496
+ query = _ref5.query,
2497
+ isQandA = _ref5.isQandA,
2498
+ projectID = _ref5.projectID,
2499
+ userSelection = _ref5.userSelection,
2500
+ debug = _ref5.debug,
2501
+ test = _ref5.test,
2502
+ enableQueryValidation = _ref5.enableQueryValidation,
2503
+ domain = _ref5.domain,
2504
+ apiKey = _ref5.apiKey,
2505
+ token = _ref5.token,
2506
+ source = _ref5.source,
2507
+ skipQueryValidation = _ref5.skipQueryValidation,
2508
+ AutoAEId = _ref5.AutoAEId;
2344
2509
 
2345
- if (enableQueryValidation && !skipQueryValidation) {
2510
+ if (enableQueryValidation && !skipQueryValidation && !isQandA) {
2346
2511
  return runQueryValidation({
2347
2512
  text: query,
2348
2513
  domain: domain,
@@ -2360,7 +2525,8 @@ var runQuery = function runQuery() {
2360
2525
  domain: domain,
2361
2526
  apiKey: apiKey,
2362
2527
  token: token,
2363
- source: source
2528
+ source: source,
2529
+ AutoAEId: AutoAEId
2364
2530
  });
2365
2531
  }).catch(function (error) {
2366
2532
  return Promise.reject(error);
@@ -2369,22 +2535,25 @@ var runQuery = function runQuery() {
2369
2535
 
2370
2536
  return runQueryOnly({
2371
2537
  query: query,
2538
+ isQandA: isQandA,
2539
+ projectID: projectID,
2372
2540
  userSelection: userSelection,
2373
2541
  debug: debug,
2374
2542
  test: test,
2375
2543
  token: token,
2376
2544
  domain: domain,
2377
2545
  apiKey: apiKey,
2378
- source: source
2546
+ source: source,
2547
+ AutoAEId: AutoAEId
2379
2548
  });
2380
2549
  };
2381
2550
 
2382
2551
  var runQueryValidation = function runQueryValidation() {
2383
- var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2384
- text = _ref4.text,
2385
- domain = _ref4.domain,
2386
- apiKey = _ref4.apiKey,
2387
- token = _ref4.token;
2552
+ var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2553
+ text = _ref6.text,
2554
+ domain = _ref6.domain,
2555
+ apiKey = _ref6.apiKey,
2556
+ token = _ref6.token;
2388
2557
 
2389
2558
  if (!text) {
2390
2559
  return Promise.reject(new Error('No text supplied'));
@@ -2410,14 +2579,14 @@ var runQueryValidation = function runQueryValidation() {
2410
2579
  };
2411
2580
 
2412
2581
  var runDrilldown = function runDrilldown() {
2413
- var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2414
- queryID = _ref5.queryID,
2415
- data = _ref5.data,
2416
- debug = _ref5.debug,
2417
- test = _ref5.test,
2418
- domain = _ref5.domain,
2419
- apiKey = _ref5.apiKey,
2420
- token = _ref5.token;
2582
+ var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2583
+ queryID = _ref7.queryID,
2584
+ data = _ref7.data,
2585
+ debug = _ref7.debug,
2586
+ test = _ref7.test,
2587
+ domain = _ref7.domain,
2588
+ apiKey = _ref7.apiKey,
2589
+ token = _ref7.token;
2421
2590
 
2422
2591
  if (!queryID) {
2423
2592
  return Promise.reject(new Error('Query ID not supplied'));
@@ -2449,11 +2618,11 @@ var runDrilldown = function runDrilldown() {
2449
2618
  };
2450
2619
 
2451
2620
  var fetchAutocomplete = function fetchAutocomplete() {
2452
- var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2453
- suggestion = _ref6.suggestion,
2454
- domain = _ref6.domain,
2455
- apiKey = _ref6.apiKey,
2456
- token = _ref6.token;
2621
+ var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2622
+ suggestion = _ref8.suggestion,
2623
+ domain = _ref8.domain,
2624
+ apiKey = _ref8.apiKey,
2625
+ token = _ref8.token;
2457
2626
 
2458
2627
  if (!suggestion || !suggestion.trim()) {
2459
2628
  return Promise.reject(new Error('No query supplied'));
@@ -2479,11 +2648,11 @@ var fetchAutocomplete = function fetchAutocomplete() {
2479
2648
  };
2480
2649
 
2481
2650
  var setColumnVisibility = function setColumnVisibility() {
2482
- var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2483
- apiKey = _ref7.apiKey,
2484
- token = _ref7.token,
2485
- domain = _ref7.domain,
2486
- columns = _ref7.columns;
2651
+ var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2652
+ apiKey = _ref9.apiKey,
2653
+ token = _ref9.token,
2654
+ domain = _ref9.domain,
2655
+ columns = _ref9.columns;
2487
2656
 
2488
2657
  var url = domain + '/autoql/api/v1/query/column-visibility?key=' + apiKey;
2489
2658
  var data = { columns: columns };
@@ -2505,17 +2674,18 @@ var setColumnVisibility = function setColumnVisibility() {
2505
2674
  });
2506
2675
  };
2507
2676
 
2508
- var sendSuggestion = function sendSuggestion(_ref8) {
2509
- var queryId = _ref8.queryId,
2510
- suggestion = _ref8.suggestion,
2511
- apiKey = _ref8.apiKey,
2512
- domain = _ref8.domain,
2513
- token = _ref8.token;
2677
+ var sendSuggestion = function sendSuggestion(_ref10) {
2678
+ var queryId = _ref10.queryId,
2679
+ suggestion = _ref10.suggestion,
2680
+ apiKey = _ref10.apiKey,
2681
+ domain = _ref10.domain,
2682
+ token = _ref10.token,
2683
+ isQandA = _ref10.isQandA;
2514
2684
 
2515
2685
  var url = domain + '/autoql/api/v1/query/' + queryId + '/suggestions?key=' + apiKey;
2516
2686
  var data = { suggestion: suggestion };
2517
2687
 
2518
- if (!token || !domain || !apiKey) {
2688
+ if (!isQandA && (!token || !domain || !apiKey)) {
2519
2689
  return Promise.reject(new Error('Unauthenticated'));
2520
2690
  }
2521
2691
 
@@ -2533,14 +2703,14 @@ var sendSuggestion = function sendSuggestion(_ref8) {
2533
2703
  };
2534
2704
 
2535
2705
  var fetchQueryTips = function fetchQueryTips() {
2536
- var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2537
- keywords = _ref9.keywords,
2538
- pageSize = _ref9.pageSize,
2539
- pageNumber = _ref9.pageNumber,
2540
- domain = _ref9.domain,
2541
- apiKey = _ref9.apiKey,
2542
- token = _ref9.token,
2543
- skipQueryValidation = _ref9.skipQueryValidation;
2706
+ var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2707
+ keywords = _ref11.keywords,
2708
+ pageSize = _ref11.pageSize,
2709
+ pageNumber = _ref11.pageNumber,
2710
+ domain = _ref11.domain,
2711
+ apiKey = _ref11.apiKey,
2712
+ token = _ref11.token,
2713
+ skipQueryValidation = _ref11.skipQueryValidation;
2544
2714
 
2545
2715
  var commaSeparatedKeywords = keywords ? keywords.split(' ') : [];
2546
2716
  var queryTipsUrl = domain + '/autoql/api/v1/query/related-queries?key=' + apiKey + '&search=' + encodeURIComponent(commaSeparatedKeywords) + '&page_size=' + pageSize + '&page=' + pageNumber;
@@ -2587,12 +2757,12 @@ var fetchQueryTips = function fetchQueryTips() {
2587
2757
  };
2588
2758
 
2589
2759
  var reportProblem = function reportProblem() {
2590
- var _ref10 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2591
- message = _ref10.message,
2592
- queryId = _ref10.queryId,
2593
- domain = _ref10.domain,
2594
- apiKey = _ref10.apiKey,
2595
- token = _ref10.token;
2760
+ var _ref12 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2761
+ message = _ref12.message,
2762
+ queryId = _ref12.queryId,
2763
+ domain = _ref12.domain,
2764
+ apiKey = _ref12.apiKey,
2765
+ token = _ref12.token;
2596
2766
 
2597
2767
  if (!queryId) {
2598
2768
  return Promise.reject(new Error('No query ID supplied'));
@@ -2713,7 +2883,7 @@ Dictaphone.propTypes = {
2713
2883
  Dictaphone.defaultProps = {};
2714
2884
 
2715
2885
 
2716
- var SpeechToTextButton = SpeechRecognition(options)(Dictaphone);
2886
+ var SpeechToTextButtonBrowser = SpeechRecognition(options)(Dictaphone);
2717
2887
 
2718
2888
  function LoadingDots() {
2719
2889
  return React.createElement(
@@ -2810,7 +2980,8 @@ var QueryInput = function (_React$Component) {
2810
2980
  query: query,
2811
2981
  userSelection: userSelection
2812
2982
  }, getAuthentication(_this.props.authentication), getAutoQLConfig$1(_this.props.autoQLConfig), {
2813
- source: newSource
2983
+ source: newSource,
2984
+ AutoAEId: _this.props.AutoAEId
2814
2985
  })).then(function (response) {
2815
2986
  _this.props.onResponseCallback(response, query);
2816
2987
  _this.setState({ isQueryRunning: false });
@@ -2823,7 +2994,8 @@ var QueryInput = function (_React$Component) {
2823
2994
  runQuery(_extends({
2824
2995
  query: query
2825
2996
  }, getAuthentication(_this.props.authentication), getAutoQLConfig$1(_this.props.autoQLConfig), {
2826
- source: newSource
2997
+ source: newSource,
2998
+ AutoAEId: _this.props.AutoAEId
2827
2999
  })).then(function (response) {
2828
3000
  _this.props.onResponseCallback(response, query);
2829
3001
  _this.setState({ isQueryRunning: false });
@@ -2839,10 +3011,11 @@ var QueryInput = function (_React$Component) {
2839
3011
  }
2840
3012
 
2841
3013
  _this.setState({ lastQuery: query, suggestions: [] });
3014
+ localStorage.setItem('inputValue', query);
2842
3015
  }
2843
3016
  }, _this.onKeyDown = function (e) {
2844
3017
  if (e.key === 'ArrowUp' && !_get(_this.state.suggestions, 'length')) {
2845
- _this.setState({ inputValue: _this.state.lastQuery });
3018
+ _this.setState({ inputValue: localStorage.getItem('inputValue') });
2846
3019
  }
2847
3020
  }, _this.onKeyPress = function (e) {
2848
3021
  if (e.key == 'Enter') {
@@ -2998,9 +3171,11 @@ var QueryInput = function (_React$Component) {
2998
3171
  { className: 'input-response-loading-container' },
2999
3172
  React.createElement(LoadingDots, null)
3000
3173
  ),
3001
- _this.props.enableVoiceRecord && React.createElement(SpeechToTextButton, {
3174
+ _this.props.enableVoiceRecord && React.createElement(SpeechToTextButtonBrowser, {
3002
3175
  onTranscriptChange: _this.onTranscriptChange,
3003
- onFinalTranscript: _this.onFinalTranscript
3176
+ onFinalTranscript: _this.onFinalTranscript,
3177
+ themeConfig: _this.props.themeConfig,
3178
+ authentication: getAuthentication(_this.props.authentication)
3004
3179
  })
3005
3180
  )
3006
3181
  );
@@ -3891,7 +4066,7 @@ var getLegendLabelsForMultiSeries = function getLegendLabelsForMultiSeries(colum
3891
4066
  var seriesIndices = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
3892
4067
 
3893
4068
  try {
3894
- if (seriesIndices.length <= 1) {
4069
+ if (seriesIndices.length < 1) {
3895
4070
  return [];
3896
4071
  }
3897
4072
 
@@ -3902,7 +4077,6 @@ var getLegendLabelsForMultiSeries = function getLegendLabelsForMultiSeries(colum
3902
4077
  hidden: columns[columnIndex].isSeriesHidden
3903
4078
  };
3904
4079
  });
3905
-
3906
4080
  return legendLabels;
3907
4081
  } catch (error) {
3908
4082
  console.error(error);
@@ -4078,7 +4252,7 @@ var ChataColumnChart = function (_Component) {
4078
4252
  React.createElement(Axes, {
4079
4253
  themeConfig: themeConfig,
4080
4254
  scales: { xScale: xScale, yScale: yScale },
4081
- xCol: columns[stringColumnIndex],
4255
+ xCol: columns[0],
4082
4256
  yCol: columns[numberColumnIndex],
4083
4257
  margins: {
4084
4258
  left: leftMargin,
@@ -4356,7 +4530,7 @@ var ChataBarChart = function (_Component) {
4356
4530
  themeConfig: themeConfig,
4357
4531
  scales: { xScale: xScale, yScale: yScale },
4358
4532
  xCol: columns[numberColumnIndex],
4359
- yCol: columns[stringColumnIndex],
4533
+ yCol: columns[0],
4360
4534
  margins: {
4361
4535
  left: leftMargin,
4362
4536
  right: rightMargin,
@@ -4642,7 +4816,7 @@ var ChataLineChart = function (_Component) {
4642
4816
  React.createElement(Axes, {
4643
4817
  themeConfig: themeConfig,
4644
4818
  scales: { xScale: xScale, yScale: yScale },
4645
- xCol: columns[stringColumnIndex],
4819
+ xCol: columns[0],
4646
4820
  yCol: columns[numberColumnIndex],
4647
4821
  margins: {
4648
4822
  left: leftMargin,
@@ -6836,6 +7010,10 @@ var ChataChart = function (_Component) {
6836
7010
  _this.updateMargins();
6837
7011
  ReactTooltip.rebuild();
6838
7012
  }
7013
+
7014
+ if (!_isEqual(_this.props.columns, prevProps.columns)) {
7015
+ _this.setNumberColumnSelectorState();
7016
+ }
6839
7017
  };
6840
7018
 
6841
7019
  _this.setNumberColumnSelectorState = function () {
@@ -7220,7 +7398,7 @@ var ChataChart = function (_Component) {
7220
7398
  React.createElement(
7221
7399
  'div',
7222
7400
  { className: 'number-selector-header' },
7223
- 'Currency'
7401
+ _this.props.dataConfig && _this.props.tableColumns && _this.props.dataConfig.legendColumnIndex !== undefined ? _this.props.tableColumns[_this.props.dataConfig.legendColumnIndex].display_name : 'Currency'
7224
7402
  ),
7225
7403
  React.createElement(SelectableList, {
7226
7404
  themeConfig: getThemeConfig(_this.props.themeConfig),
@@ -7255,7 +7433,8 @@ var ChataChart = function (_Component) {
7255
7433
  React.createElement(
7256
7434
  'div',
7257
7435
  { className: 'number-selector-header' },
7258
- 'Quantity'
7436
+ ' ',
7437
+ _this.props.dataConfig && _this.props.tableColumns && _this.props.dataConfig.legendColumnIndex !== undefined ? _this.props.tableColumns[_this.props.dataConfig.legendColumnIndex].display_name : 'Quantity'
7259
7438
  ),
7260
7439
  React.createElement(SelectableList, {
7261
7440
  themeConfig: getThemeConfig(_this.props.themeConfig),
@@ -7289,7 +7468,8 @@ var ChataChart = function (_Component) {
7289
7468
  React.createElement(
7290
7469
  'div',
7291
7470
  { className: 'number-selector-header' },
7292
- 'Ratio'
7471
+ ' ',
7472
+ _this.props.dataConfig && _this.props.tableColumns && _this.props.dataConfig.legendColumnIndex !== undefined ? _this.props.tableColumns[_this.props.dataConfig.legendColumnIndex].display_name : 'Ratio'
7293
7473
  ),
7294
7474
  React.createElement(SelectableList, {
7295
7475
  themeConfig: getThemeConfig(_this.props.themeConfig),
@@ -8135,7 +8315,9 @@ var QueryOutput = function (_React$Component) {
8135
8315
  return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = QueryOutput.__proto__ || Object.getPrototypeOf(QueryOutput)).call.apply(_ref, [this].concat(args))), _this), _this.supportedDisplayTypes = [], _this.SAFETYNET_KEY = uuid.v4(), _this.state = {
8136
8316
  displayType: null,
8137
8317
  tableFilters: [],
8138
- suggestionSelection: _this.props.selectedSuggestion
8318
+ suggestionSelection: _this.props.selectedSuggestion,
8319
+ QandAResponseCorrect: false,
8320
+ QandASuggestions: []
8139
8321
  }, _this.componentDidMount = function () {
8140
8322
  try {
8141
8323
  // Set initial config if needed
@@ -8221,7 +8403,7 @@ var QueryOutput = function (_React$Component) {
8221
8403
  }
8222
8404
 
8223
8405
  if (_this.props.optionsToolbarRef) {
8224
- _this.props.optionsToolbarRef.forceUpdate();
8406
+ _this.props.optionsToolbarRef._isMounted && _this.props.optionsToolbarRef.forceUpdate();
8225
8407
  }
8226
8408
 
8227
8409
  ReactTooltip.rebuild();
@@ -8343,8 +8525,10 @@ var QueryOutput = function (_React$Component) {
8343
8525
  _this.tableColumns = _this.formatColumnsForTable(_this.props.queryResponse.data.data.columns);
8344
8526
 
8345
8527
  _this.supportsPivot = supportsRegularPivotTable(_this.tableColumns);
8346
-
8347
- var data = _this.sortTableDataByDate(_get(_this.props.queryResponse, 'data.data.rows'));
8528
+ var filteredResponse = _this.props.queryResponse.data.data.rows.filter(function (row) {
8529
+ return row[0] !== null;
8530
+ });
8531
+ var data = _this.sortTableDataByDate(filteredResponse);
8348
8532
  _this.tableData = data;
8349
8533
 
8350
8534
  _this.numberOfTableRows = _get(data, 'length', 0);
@@ -8366,7 +8550,7 @@ var QueryOutput = function (_React$Component) {
8366
8550
  _this.props.onErrorCallback(error);
8367
8551
  _this.pivotTableData = undefined;
8368
8552
  }
8369
- }, _this.renderSuggestionMessage = function (suggestions, queryId) {
8553
+ }, _this.renderSuggestionMessage = function (suggestions, queryId, isQandA) {
8370
8554
  var suggestionListMessage = void 0;
8371
8555
 
8372
8556
  try {
@@ -8410,7 +8594,8 @@ var QueryOutput = function (_React$Component) {
8410
8594
  query: suggestion,
8411
8595
  isButtonClick: true,
8412
8596
  source: 'suggestion',
8413
- queryId: queryId
8597
+ queryId: queryId,
8598
+ isQandA: isQandA
8414
8599
  });
8415
8600
  },
8416
8601
  className: 'react-autoql-suggestion-btn'
@@ -8665,9 +8850,11 @@ var QueryOutput = function (_React$Component) {
8665
8850
 
8666
8851
  _this.dataConfig.numberColumnIndices = numberColumnIndices;
8667
8852
  _this.dataConfig.numberColumnIndex = numberColumnIndex;
8668
- } else {
8669
- _this.dataConfig.numberColumnIndex = _this.dataConfig.numberColumnIndices[0];
8670
8853
  }
8854
+ //else {
8855
+ // //here is bug!!!
8856
+ // this.dataConfig.numberColumnIndex = this.dataConfig.numberColumnIndices[0]
8857
+ // }
8671
8858
  }, _this.setSupportedDisplayTypes = function (supportedDisplayTypes, justMounted) {
8672
8859
  if (supportedDisplayTypes && (justMounted || !_isEqual(supportedDisplayTypes, _this.supportedDisplayTypes))) {
8673
8860
  _this.supportedDisplayTypes = supportedDisplayTypes;
@@ -8820,7 +9007,6 @@ var QueryOutput = function (_React$Component) {
8820
9007
  return [columns[stringColumnIndex]].concat(newNumberColumns);
8821
9008
  }, _this.getChartTableData = function (newTableData) {
8822
9009
  var tableData = _cloneDeep(newTableData) || _cloneDeep(_this.tableData);
8823
-
8824
9010
  if (shouldPlotMultiSeries(_this.tableColumns)) {
8825
9011
  return _this.getMultiSeriesData(_this.tableColumns, tableData);
8826
9012
  }
@@ -8844,6 +9030,7 @@ var QueryOutput = function (_React$Component) {
8844
9030
  try {
8845
9031
  // Get columns for chart then reset indexes if necessary
8846
9032
  var columns = _this.getChartTableColumns();
9033
+
8847
9034
  _this.chartTableColumns = columns;
8848
9035
 
8849
9036
  // Get table data for chart after columns
@@ -8919,7 +9106,6 @@ var QueryOutput = function (_React$Component) {
8919
9106
  }
8920
9107
  return chartDataObject;
8921
9108
  }, {}));
8922
-
8923
9109
  // Update supported display types after table data has been recalculated
8924
9110
  // there may be too many categories for a pie chart etc.
8925
9111
  _this.setSupportedDisplayTypes(getSupportedDisplayTypes(_this.props.queryResponse, _this.chartData));
@@ -9107,7 +9293,6 @@ var QueryOutput = function (_React$Component) {
9107
9293
  return index !== dateColumnIndex && isColumnNumberType(col);
9108
9294
  });
9109
9295
  }
9110
-
9111
9296
  var tableData = newTableData || _get(_this.props.queryResponse, 'data.data.rows');
9112
9297
 
9113
9298
  var allYears = tableData.map(function (d) {
@@ -9188,13 +9373,14 @@ var QueryOutput = function (_React$Component) {
9188
9373
 
9189
9374
  try {
9190
9375
  var tableData = newTableData || _get(_this.props.queryResponse, 'data.data.rows');
9191
-
9376
+ tableData = tableData.filter(function (row) {
9377
+ return row[0] !== null;
9378
+ });
9192
9379
  if (!_this.dataConfig) {
9193
9380
  // We should change this to getColumnIndices since this wont be
9194
9381
  // the final version that we use. We dont want to persist it
9195
9382
  _this.setColumnIndices(_this.tableColumns);
9196
9383
  }
9197
-
9198
9384
  // Set the columns used for the 2 headers (ordinal and legend for charts)
9199
9385
  // If one of the indices is already specified, use it
9200
9386
  var dataConfigWasPersisted = false;
@@ -9215,14 +9401,12 @@ var QueryOutput = function (_React$Component) {
9215
9401
  return col.groupable && i !== _this.dataConfig.stringColumnIndex;
9216
9402
  });
9217
9403
  }
9218
-
9219
9404
  // Set the number type column
9220
- if (!(_get(_this.dataConfig, 'numberColumnIndex') >= 0)) {
9405
+ if (_get(_this.dataConfig, 'numberColumnIndex') >= 0) {
9221
9406
  _this.dataConfig.numberColumnIndex = _this.tableColumns.findIndex(function (col, index) {
9222
9407
  return isColumnNumberType(col) && !col.groupable;
9223
9408
  });
9224
9409
  }
9225
-
9226
9410
  var uniqueValues0 = _this.sortTableDataByDate(tableData).map(function (d) {
9227
9411
  return d[_this.dataConfig.stringColumnIndex];
9228
9412
  }).filter(onlyUnique).reduce(function (map, title, i) {
@@ -9256,7 +9440,6 @@ var QueryOutput = function (_React$Component) {
9256
9440
  // this.setState({ displayType: "table" });
9257
9441
  // return null;
9258
9442
  // }
9259
-
9260
9443
  // Generate new column array
9261
9444
  var pivotTableColumns = [_extends({}, _this.tableColumns[_this.dataConfig.stringColumnIndex], {
9262
9445
  frozen: true,
@@ -9312,7 +9495,8 @@ var QueryOutput = function (_React$Component) {
9312
9495
  userSelection = _ref6.userSelection,
9313
9496
  isButtonClick = _ref6.isButtonClick,
9314
9497
  skipQueryValidation = _ref6.skipQueryValidation,
9315
- source = _ref6.source;
9498
+ source = _ref6.source,
9499
+ isQandA = _ref6.isQandA;
9316
9500
 
9317
9501
  // Only call suggestion endpoint if clicked from suggestion list, not query validation
9318
9502
  if (!userSelection) {
@@ -9335,7 +9519,8 @@ var QueryOutput = function (_React$Component) {
9335
9519
  userSelection: userSelection,
9336
9520
  isButtonClick: isButtonClick,
9337
9521
  skipQueryValidation: skipQueryValidation,
9338
- source: source
9522
+ source: source,
9523
+ isQandA: isQandA
9339
9524
  });
9340
9525
  }
9341
9526
  if (_this.props.queryInputRef) {
@@ -9574,10 +9759,28 @@ var QueryOutput = function (_React$Component) {
9574
9759
  errorMessages.GENERAL_QUERY
9575
9760
  );
9576
9761
  }
9762
+ }, _this.renderHTMLMessage = function (queryResponse) {
9763
+ return React.createElement(HTMLRenderer, {
9764
+ html: _get(queryResponse, 'data.data.answer'),
9765
+ components: {
9766
+ a: function a(props) {
9767
+ return React.createElement('a', _extends({}, props, { target: '_blank' }));
9768
+ }
9769
+ }
9770
+ });
9577
9771
  }, _this.renderResponse = function (width, height) {
9578
9772
  var displayType = _this.state.displayType;
9579
9773
  var queryResponse = _this.props.queryResponse;
9580
9774
 
9775
+
9776
+ if (_get(getAuthentication(_this.props.authentication), 'isQandA') && _this.state.QandASuggestions.length !== 0) {
9777
+ return _this.renderSuggestionMessage(_this.state.QandASuggestions, _get(queryResponse, 'data.data.query_id'), true);
9778
+ }
9779
+
9780
+ if (displayType === 'html') {
9781
+ return _this.renderHTMLMessage(queryResponse);
9782
+ }
9783
+
9581
9784
  var data = _get(queryResponse, 'data.data.rows');
9582
9785
 
9583
9786
  if (_this.hasError(queryResponse)) {
@@ -9635,6 +9838,68 @@ var QueryOutput = function (_React$Component) {
9635
9838
  return _this.renderMessage('display type not recognized: ' + _this.state.displayType);
9636
9839
  }
9637
9840
  return null;
9841
+ }, _this.renderQandAResponseConfirmation = function () {
9842
+ var _this$props = _this.props,
9843
+ queryResponse = _this$props.queryResponse,
9844
+ authentication = _this$props.authentication;
9845
+
9846
+ if (_get(queryResponse, 'status') === 200 && _get(queryResponse, 'data.data.answer') !== "Oops, I'm not sure if I got that right. Could you try asking a different way?") {
9847
+ return React.createElement(
9848
+ React.Fragment,
9849
+ null,
9850
+ React.createElement('br', null),
9851
+ React.createElement('br', null),
9852
+ React.createElement(
9853
+ 'div',
9854
+ null,
9855
+ 'Does this answer your question?',
9856
+ ' ',
9857
+ React.createElement(
9858
+ 'a',
9859
+ {
9860
+ role: 'button',
9861
+ onClick: function onClick() {
9862
+ _this.setState({ QandAResponseCorrect: true });
9863
+ }
9864
+ },
9865
+ 'Yes'
9866
+ ),
9867
+ '/',
9868
+ React.createElement(
9869
+ 'a',
9870
+ {
9871
+ role: 'button',
9872
+ onClick: function onClick() {
9873
+ return fetchQandASuggestions({
9874
+ queryID: _get(queryResponse, 'data.data.query_id'),
9875
+ projectID: _get(getAuthentication(authentication), 'projectID'),
9876
+ apiKey: _get(getAuthentication(authentication), 'apiKey')
9877
+ }).then(function (response) {
9878
+ var array = [];
9879
+ _get(response, 'data.data').map(function (item) {
9880
+ array.push(item.question);
9881
+ });
9882
+ _this.setState({ QandASuggestions: array });
9883
+ return _this.renderResponse();
9884
+ });
9885
+ }
9886
+ },
9887
+ 'No'
9888
+ ),
9889
+ '?',
9890
+ _this.state.QandAResponseCorrect && React.createElement(
9891
+ 'p',
9892
+ { style: { marginTop: 6 } },
9893
+ React.createElement(Icon, {
9894
+ type: 'check',
9895
+ className: 'qanda-positive-feedback-checkmark',
9896
+ size: 20
9897
+ }),
9898
+ 'Thank you for your feedback!'
9899
+ )
9900
+ )
9901
+ );
9902
+ }
9638
9903
  }, _this.renderContextMenuContent = function (_ref11) {
9639
9904
  var position = _ref11.position,
9640
9905
  nudgedLeft = _ref11.nudgedLeft,
@@ -9666,7 +9931,7 @@ var QueryOutput = function (_React$Component) {
9666
9931
  {
9667
9932
  isOpen: _this.state.isContextMenuOpen,
9668
9933
  position: 'bottom' // if you'd like, supply an array of preferred positions ordered by priority
9669
- , padding: 10 // adjust padding here!
9934
+ , padding: 10 // adjust padding here
9670
9935
  , onClickOutside: function onClickOutside() {
9671
9936
  return _this.setState({ isContextMenuOpen: false });
9672
9937
  },
@@ -9705,9 +9970,10 @@ var QueryOutput = function (_React$Component) {
9705
9970
  key: _this.COMPONENT_KEY,
9706
9971
  id: 'react-autoql-response-content-container-' + _this.COMPONENT_KEY,
9707
9972
  'data-test': 'query-response-wrapper',
9708
- className: 'react-autoql-response-content-container ' + (isTableType(_this.state.displayType) ? 'table' : '')
9973
+ className: 'react-autoql-response-content-container\n ' + (isTableType(_this.state.displayType) ? 'table' : '') + '\n ' + (_this.state.displayType === 'html' ? 'html-content' : '')
9709
9974
  },
9710
- _this.renderResponse(width, height)
9975
+ _this.renderResponse(width, height),
9976
+ _get(getAuthentication(_this.props.authentication), 'isQandA') && _this.renderQandAResponseConfirmation()
9711
9977
  ),
9712
9978
  _this.renderContextMenu()
9713
9979
  );
@@ -9957,7 +10223,9 @@ var Modal = function (_React$Component) {
9957
10223
  setCSSVars(getThemeConfig(_this.props.themeConfig));
9958
10224
  }
9959
10225
  }, _this.onClose = function () {
9960
- if (_this.props.confirmOnClose) {
10226
+ var deleteFromPortal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
10227
+
10228
+ if (_this.props.confirmOnClose && deleteFromPortal) {
9961
10229
  _this.setState({ isConfirmCloseModalVisible: true });
9962
10230
  } else {
9963
10231
  _this.props.onClose();
@@ -10010,6 +10278,8 @@ var Modal = function (_React$Component) {
10010
10278
  React.createElement(
10011
10279
  'div',
10012
10280
  { className: 'react-autoql-modal-header' },
10281
+ _this.props.titleIcon,
10282
+ ' ',
10013
10283
  _this.props.title,
10014
10284
  React.createElement(Icon, {
10015
10285
  type: 'close',
@@ -10067,6 +10337,7 @@ var Modal = function (_React$Component) {
10067
10337
  Modal.propTypes = {
10068
10338
  themeConfig: themeConfigType,
10069
10339
  title: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
10340
+ titleIcon: PropTypes.oneOfType([PropTypes.element, PropTypes.instanceOf(Icon)]),
10070
10341
  isVisible: PropTypes.bool,
10071
10342
  onClose: PropTypes.func,
10072
10343
  onConfirm: PropTypes.func,
@@ -10084,6 +10355,7 @@ Modal.propTypes = {
10084
10355
  Modal.defaultProps = {
10085
10356
  themeConfig: themeConfigDefault,
10086
10357
  title: '',
10358
+ titleIcon: undefined,
10087
10359
  isVisible: false,
10088
10360
  width: '80vw',
10089
10361
  height: undefined,
@@ -10317,10 +10589,10 @@ var fetchDataAlerts = function fetchDataAlerts(_ref5) {
10317
10589
  }
10318
10590
  });
10319
10591
 
10320
- var url = domain + '/autoql/api/v1/data-alerts?key=' + apiKey;
10592
+ var url = domain + '/autoql/management/api/v1/data-alerts?key=' + apiKey;
10321
10593
 
10322
10594
  return axiosInstance.get(url).then(function (response) {
10323
- return Promise.resolve(_get(response, 'data.data'));
10595
+ return Promise.resolve(_get(response, 'data'));
10324
10596
  }).catch(function (error) {
10325
10597
  return Promise.reject(_get(error, 'response.data'));
10326
10598
  });
@@ -10698,7 +10970,7 @@ var updateDataAlert = function updateDataAlert(_ref18) {
10698
10970
  }
10699
10971
  });
10700
10972
 
10701
- var url = domain + '/autoql/api/v1/data-alerts/' + dataAlert.id + '?key=' + apiKey;
10973
+ var url = domain + '/autoql/management/api/v1/data-alerts/' + dataAlert.id + '?key=' + apiKey;
10702
10974
 
10703
10975
  return axiosInstance.put(url, dataAlert).then(function (response) {
10704
10976
  return Promise.resolve(response);
@@ -10765,13 +11037,12 @@ var validateExpression = function validateExpression(_ref20) {
10765
11037
  };
10766
11038
 
10767
11039
  // DELETE
10768
- var deleteDataAlert = function deleteDataAlert(_ref21) {
10769
- var dataAlertId = _ref21.dataAlertId,
10770
- domain = _ref21.domain,
10771
- apiKey = _ref21.apiKey,
10772
- token = _ref21.token;
10773
-
11040
+ var deleteDataAlert = function deleteDataAlert(dataAlertId, projectId, authObject) {
10774
11041
  // If there is missing data, dont bother making the call
11042
+ var domain = authObject.domain,
11043
+ apiKey = authObject.apiKey,
11044
+ token = authObject.token;
11045
+
10775
11046
  if (!token || !apiKey || !domain) {
10776
11047
  return Promise.reject(new Error('UNAUTHORIZED'));
10777
11048
  }
@@ -10782,7 +11053,7 @@ var deleteDataAlert = function deleteDataAlert(_ref21) {
10782
11053
  }
10783
11054
  });
10784
11055
 
10785
- var url = domain + '/autoql/api/v1/data-alerts/' + dataAlertId + '?key=' + apiKey;
11056
+ var url = domain + '/autoql/management/api/v1/data-alerts/' + dataAlertId + '?key=' + apiKey;
10786
11057
 
10787
11058
  return axiosInstance.delete(url).then(function (response) {
10788
11059
  return Promise.resolve(response);
@@ -10791,11 +11062,11 @@ var deleteDataAlert = function deleteDataAlert(_ref21) {
10791
11062
  });
10792
11063
  };
10793
11064
 
10794
- var removeNotificationChannel = function removeNotificationChannel(_ref22) {
10795
- var channelId = _ref22.channelId,
10796
- domain = _ref22.domain,
10797
- apiKey = _ref22.apiKey,
10798
- token = _ref22.token;
11065
+ var removeNotificationChannel = function removeNotificationChannel(_ref21) {
11066
+ var channelId = _ref21.channelId,
11067
+ domain = _ref21.domain,
11068
+ apiKey = _ref21.apiKey,
11069
+ token = _ref21.token;
10799
11070
 
10800
11071
  // If there is missing data, dont bother making the call
10801
11072
  if (!token || !apiKey || !domain) {
@@ -12669,7 +12940,7 @@ var DataAlertModal$1 = function (_React$Component) {
12669
12940
  }, _this.initializeFields = function () {
12670
12941
  // If we are editing an existing notification
12671
12942
  // Fill the fields with the current settings
12672
- if (_this.props.currentDataAlert) {
12943
+ if (!_.isEmpty(_this.props.currentDataAlert)) {
12673
12944
  var notification = _this.props.currentDataAlert;
12674
12945
  _this.setState({
12675
12946
  titleInput: notification.title,
@@ -12677,8 +12948,6 @@ var DataAlertModal$1 = function (_React$Component) {
12677
12948
  dataReturnQuery: notification.data_return_query,
12678
12949
  isDataReturnDirty: true,
12679
12950
  expressionJSON: _get(_this.props.currentDataAlert, 'expression')
12680
- }, function () {
12681
- _this.validateExpression();
12682
12951
  });
12683
12952
  } else if (_this.props.initialQuery && typeof _this.props.initialQuery === 'string') {
12684
12953
  var expressionJSON = _this.createExpressionJSONFromQuery(_this.props.initialQuery);
@@ -12761,7 +13030,9 @@ var DataAlertModal$1 = function (_React$Component) {
12761
13030
  isSavingDataAlert: true
12762
13031
  });
12763
13032
 
12764
- var newDataAlert = _this.getDataAlertData();
13033
+ var newDataAlert = _extends({}, _this.getDataAlertData(), {
13034
+ project_id: _this.props.selectedDemoProjectId
13035
+ });
12765
13036
 
12766
13037
  var requestParams = _extends({
12767
13038
  dataAlert: newDataAlert
@@ -12853,12 +13124,22 @@ var DataAlertModal$1 = function (_React$Component) {
12853
13124
  return React.createElement(
12854
13125
  Fragment,
12855
13126
  null,
12856
- _this.state.isExpressionValidated && _this.state.isExpressionValid && React.createElement(Icon, {
12857
- className: 'expression-valid-checkmark',
12858
- type: 'check',
12859
- 'data-for': 'react-autoql-data-alert-modal-tooltip',
12860
- 'data-tip': 'Expression is valid'
12861
- }),
13127
+ _this.state.isExpressionValidated && _this.state.isExpressionValid && React.createElement(
13128
+ 'span',
13129
+ {
13130
+ style: {
13131
+ display: 'inline-block',
13132
+ position: 'absolute',
13133
+ right: '210px'
13134
+ }
13135
+ },
13136
+ React.createElement(Icon, {
13137
+ className: 'expression-valid-checkmark',
13138
+ type: 'check',
13139
+ 'data-for': 'react-autoql-data-alert-modal-tooltip',
13140
+ 'data-tip': 'Expression is valid'
13141
+ })
13142
+ ),
12862
13143
  _this.state.isExpressionValidated && !_this.state.isExpressionValid && !!_this.state.expressionError && React.createElement(
12863
13144
  'div',
12864
13145
  { className: 'expression-invalid-message-container' },
@@ -12884,7 +13165,7 @@ var DataAlertModal$1 = function (_React$Component) {
12884
13165
  onClick: _this.validateExpression,
12885
13166
  loading: _this.state.isValidating
12886
13167
  }, defineProperty(_React$createElement, 'type', 'primary'), defineProperty(_React$createElement, 'disabled', !_this.state.titleInput || !_get(_this.expressionRef, 'state.expression[0].term_value') // only checking for empty state of the first input value
12887
- ), _React$createElement),
13168
+ ), defineProperty(_React$createElement, 'style', { position: 'absolute', right: 0 }), _React$createElement),
12888
13169
  'Check Alert & continue'
12889
13170
  )
12890
13171
  );
@@ -13078,14 +13359,13 @@ var DataAlertModal$1 = function (_React$Component) {
13078
13359
  isDeletingDataAlert: true
13079
13360
  });
13080
13361
 
13081
- deleteDataAlert(_extends({
13082
- dataAlertId: dataAlertId
13083
- }, getAuthentication(_this.props.authentication))).then(function () {
13084
- _this.props.onDelete(dataAlertId);
13362
+ deleteDataAlert(dataAlertId, _this.props.activeAlertType, _this.props.authObject).then(function () {
13085
13363
  _this.setState({
13086
13364
  isDeletingDataAlert: false,
13087
13365
  isConfirmDeleteModalVisible: false
13088
13366
  });
13367
+ _this.props.handleAlertDeletedByWidget();
13368
+ _this.props.onClose(false);
13089
13369
  }).catch(function (error) {
13090
13370
  console.error(error);
13091
13371
  _this.props.onErrorCallback(error);
@@ -13139,6 +13419,7 @@ var DataAlertModal$1 = function (_React$Component) {
13139
13419
  {
13140
13420
  themeConfig: getThemeConfig(_this.props.themeConfig),
13141
13421
  title: _this.props.title,
13422
+ titleIcon: !_.isEmpty(_this.props.currentDataAlert) ? React.createElement(Icon, { type: 'edit' }) : React.createElement('span', null),
13142
13423
  ref: function ref(r) {
13143
13424
  return _this.modalRef = r;
13144
13425
  },
@@ -13247,6 +13528,7 @@ DataAlertModal$1.propTypes = {
13247
13528
  onManagementCreateDataAlert: PropTypes.func,
13248
13529
  onManagementDeleteDataAlert: PropTypes.func,
13249
13530
  title: PropTypes.string,
13531
+ titleIcon: PropTypes.oneOfType([PropTypes.element, PropTypes.instanceOf(Icon)]),
13250
13532
  enableQueryValidation: PropTypes.bool,
13251
13533
  onValidate: PropTypes.func
13252
13534
  };
@@ -13264,6 +13546,7 @@ DataAlertModal$1.defaultProps = {
13264
13546
  onManagementCreateDataAlert: function onManagementCreateDataAlert() {},
13265
13547
  onManagementDeleteDataAlert: function onManagementDeleteDataAlert() {},
13266
13548
  title: 'Create Data Alert',
13549
+ titleIcon: undefined,
13267
13550
  enableQueryValidation: true,
13268
13551
  onValidate: undefined
13269
13552
  };
@@ -13453,7 +13736,7 @@ var NotificationFeed = function (_React$Component) {
13453
13736
  onSave: _this.onDataAlertSave,
13454
13737
  onErrorCallback: _this.props.onErrorCallback,
13455
13738
  allowDelete: false
13456
- }, defineProperty(_React$createElement, 'themeConfig', getThemeConfig(_this.props.themeConfig)), defineProperty(_React$createElement, 'title', _this.state.activeDataAlert ? 'Edit Data Alert' : 'Create Data Alert'), _React$createElement));
13739
+ }, defineProperty(_React$createElement, 'themeConfig', getThemeConfig(_this.props.themeConfig)), defineProperty(_React$createElement, 'title', _this.state.activeDataAlert ? 'Edit Data Alert' : 'Create Data Alert'), defineProperty(_React$createElement, 'titleIcon', _this.state.activeDataAlert ? React.createElement(Icon, { type: 'edit' }) : React.createElement('span', null)), _React$createElement));
13457
13740
  }, _this.render = function () {
13458
13741
  if (_this.state.isFetchingFirstNotifications) {
13459
13742
  return React.createElement(
@@ -13638,19 +13921,32 @@ var DataAlerts = function (_React$Component) {
13638
13921
  customAlertsList: undefined,
13639
13922
  projectAlertsList: undefined
13640
13923
  }, _this.componentDidMount = function () {
13641
- _this.getDataAlerts();
13924
+ _this._isMounted = true;
13925
+ _this._isMounted && _this.getDataAlerts();
13642
13926
  setCSSVars(getThemeConfig(_this.props.themeConfig));
13643
- }, _this.componentDidUpdate = function (prevProps) {
13927
+ }, _this.componentDidUpdate = function (prevProps, prevState) {
13644
13928
  if (!_isEqual(getThemeConfig(_this.props.themeConfig), getThemeConfig(prevProps.themeConfig))) {
13645
13929
  setCSSVars(getThemeConfig(_this.props.themeConfig));
13646
13930
  }
13931
+ if (!_isEqual(getAuthentication(_this.props.authentication), getAuthentication(prevProps.authentication))) {
13932
+ _this.getDataAlerts();
13933
+ }
13934
+ if (!_isEqual(_this.state.projectAlertsList, prevState.projectAlertsList)) {
13935
+ _this.getDataAlerts();
13936
+ }
13937
+ }, _this.componentWillUnmount = function () {
13938
+ _this._isMounted = false;
13647
13939
  }, _this.getDataAlerts = function (type) {
13648
13940
  fetchDataAlerts(_extends({}, getAuthentication(_this.props.authentication), {
13649
13941
  type: type
13650
13942
  })).then(function (response) {
13651
- _this.setState({
13652
- customAlertsList: response.custom_alerts,
13653
- projectAlertsList: response.project_alerts
13943
+ _this._isMounted && _this.setState({
13944
+ customAlertsList: [],
13945
+ projectAlertsList: response.data.items.filter(function (al) {
13946
+ return _.find(al.projects, function (p) {
13947
+ return p.id === _this.props.selectedDemoProjectId;
13948
+ });
13949
+ })
13654
13950
  });
13655
13951
  }).catch(function (error) {
13656
13952
  console.error(error);
@@ -13699,16 +13995,23 @@ var DataAlerts = function (_React$Component) {
13699
13995
  var newStatus = e.target.checked ? 'ACTIVE' : 'INACTIVE';
13700
13996
 
13701
13997
  var listType = dataAlert.type === 'CUSTOM' ? 'customAlertsList' : 'projectAlertsList';
13998
+ var newProjects = dataAlert.projects.map(function (p) {
13999
+ if (p.id === _this.props.selectedDemoProjectId) {
14000
+ p.status = newStatus;
14001
+ }
14002
+ return p;
14003
+ });
13702
14004
 
13703
14005
  var oldList = _cloneDeep(_this.state[listType]);
13704
14006
  var newList = _this.state[listType].map(function (n) {
13705
14007
  if (dataAlert.id === n.id) {
13706
14008
  return _extends({}, n, {
13707
- status: newStatus
14009
+ projects: newProjects
13708
14010
  });
13709
14011
  }
13710
14012
  return n;
13711
14013
  });
14014
+
13712
14015
  _this.setState(defineProperty({}, '' + listType, newList));
13713
14016
 
13714
14017
  updateDataAlertStatus(_extends({
@@ -13716,7 +14019,6 @@ var DataAlerts = function (_React$Component) {
13716
14019
  type: dataAlert.type,
13717
14020
  status: newStatus
13718
14021
  }, getAuthentication(_this.props.authentication))).catch(function (error) {
13719
- console.error(error);
13720
14022
  _this.props.onErrorCallback(new Error('Something went wrong. Please try again.'));
13721
14023
 
13722
14024
  // Switch flip back
@@ -13738,7 +14040,9 @@ var DataAlerts = function (_React$Component) {
13738
14040
  onSave: _this.onDataAlertSave,
13739
14041
  onErrorCallback: _this.props.onErrorCallback,
13740
14042
  onDelete: _this.onDataAlertDelete,
13741
- title: _this.state.activeDataAlert ? 'Edit Data Alert' : 'Create Data Alert'
14043
+ title: _this.state.activeDataAlert ? 'Edit Data Alert' : 'Create Data Alert',
14044
+ titleIcon: _this.state.activeDataAlert ? React.createElement(Icon, { type: 'edit' }) : React.createElement('span', null),
14045
+ selectedDemoProjectId: _this.props.selectedDemoProjectId
13742
14046
  });
13743
14047
  }, _this.renderNotificationGroupTitle = function (title, description, includeAddBtn) {
13744
14048
  return React.createElement(
@@ -13782,7 +14086,13 @@ var DataAlerts = function (_React$Component) {
13782
14086
  isEditModalVisible: true
13783
14087
  });
13784
14088
  }, _this.hasError = function (dataAlert) {
13785
- return dataAlert.status === 'GENERAL_ERROR' || dataAlert.status === 'EVALUATION_ERROR' || dataAlert.status === 'DATA_RETURN_ERROR';
14089
+ return dataAlert.projects.map(function (p) {
14090
+ return p.id === _this.props.selectedDemoProjectId;
14091
+ })[0].status === 'GENERAL_ERROR' || dataAlert.projects.map(function (p) {
14092
+ return p.id === _this.props.selectedDemoProjectId;
14093
+ })[0].status === 'EVALUATION_ERROR' || dataAlert.projects.map(function (p) {
14094
+ return p.id === _this.props.selectedDemoProjectId;
14095
+ })[0].status === 'DATA_RETURN_ERROR';
13786
14096
  }, _this.renderNotificationlist = function (type, list) {
13787
14097
  if (type === 'project' && !_get(list, 'length')) {
13788
14098
  return null;
@@ -13863,15 +14173,43 @@ var DataAlerts = function (_React$Component) {
13863
14173
  },
13864
14174
  type: 'hour-glass'
13865
14175
  }),
13866
- React.createElement(Checkbox, {
14176
+ _this.hasError(notification) ? React.createElement(
14177
+ React.Fragment,
14178
+ null,
14179
+ React.createElement(
14180
+ Button,
14181
+ {
14182
+ type: 'primary',
14183
+ className: 'react-autoql-re-initialize-btn',
14184
+ tooltip: 'Please re-initialize data alert',
14185
+ onClick: function onClick() {
14186
+ return _this.props.handleInitialize(notification, _this.props.selectedDemoProjectId, _this.props.authentication);
14187
+ }
14188
+ },
14189
+ React.createElement(
14190
+ 'span',
14191
+ { className: 'react-autoql-re-initialize-btn-text' },
14192
+ 'Re-Initialize'
14193
+ )
14194
+ ),
14195
+ React.createElement(Checkbox, {
14196
+ themeConfig: getThemeConfig(_this.props.themeConfig),
14197
+ type: 'switch',
14198
+ className: 'react-autoql-notification-disable-checkbox'
14199
+ })
14200
+ ) : React.createElement(Checkbox, {
13867
14201
  themeConfig: getThemeConfig(_this.props.themeConfig),
13868
14202
  type: 'switch',
13869
- checked: notification.status === 'ACTIVE' || notification.status === 'WAITING',
14203
+ checked: notification.projects && notification.projects.filter(function (p) {
14204
+ return p.status === 'ACTIVE' && p.id === _this.props.selectedDemoProjectId || p.status === 'WAITING' && p.id === _this.props.selectedDemoProjectId;
14205
+ }).length > 0,
13870
14206
  className: 'react-autoql-notification-enable-checkbox',
13871
14207
  onClick: function onClick(e) {
13872
14208
  return e.stopPropagation();
13873
14209
  },
13874
- 'data-tip': notification.status === 'ACTIVE' || notification.status === 'WAITING' ? 'Turn Data Alert off' : 'Turn Data Alert on',
14210
+ 'data-tip': notification.projects && notification.projects.filter(function (p) {
14211
+ return p.status === 'ACTIVE' && p.id === _this.props.selectedDemoProjectId || p.status === 'WAITING' && p.id === _this.props.selectedDemoProjectId;
14212
+ }).length > 0 ? 'Turn Data Alert off' : 'Turn Data Alert on',
13875
14213
  'data-for': 'react-autoql-notification-settings-tooltip',
13876
14214
  onChange: function onChange(e) {
13877
14215
  _this.onEnableSwitchChange(e, notification);
@@ -13913,7 +14251,7 @@ var DataAlerts = function (_React$Component) {
13913
14251
  'data-test': 'notification-settings',
13914
14252
  style: { textAlign: 'center', marginTop: '100px' }
13915
14253
  },
13916
- 'Loading...'
14254
+ React.createElement(LoadingDots, null)
13917
14255
  );
13918
14256
  }
13919
14257
 
@@ -16047,6 +16385,7 @@ var Input$1 = function (_React$Component) {
16047
16385
  }
16048
16386
 
16049
16387
  return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Input.__proto__ || Object.getPrototypeOf(Input)).call.apply(_ref, [this].concat(args))), _this), _this.state = { isHideColumnsModalVisible: false, isSettingColumnVisibility: false }, _this.componentDidMount = function () {
16388
+ _this._isMounted = true;
16050
16389
  setCSSVars(getThemeConfig(_this.props.themeConfig));
16051
16390
  }, _this.componentDidUpdate = function (prevProps, prevState) {
16052
16391
  ReactTooltip.rebuild();
@@ -16058,6 +16397,8 @@ var Input$1 = function (_React$Component) {
16058
16397
  if (!_isEqual(getThemeConfig(_this.props.themeConfig), getThemeConfig(prevProps.themeConfig))) {
16059
16398
  setCSSVars(getThemeConfig(_this.props.themeConfig));
16060
16399
  }
16400
+ }, _this.componentWillUnmount = function () {
16401
+ _this._isMounted = false;
16061
16402
  }, _this.onTableFilter = function (newTableData) {
16062
16403
  var displayType = _get(_this.props.responseRef, 'state.displayType');
16063
16404
  if (displayType === 'table') {
@@ -16796,6 +17137,7 @@ var ChatMessage = function (_React$Component) {
16796
17137
  }, 0);
16797
17138
  }, _this.componentDidUpdate = function (prevProps, prevState) {
16798
17139
  ReactTooltip.hide();
17140
+ _this.props.scrollToBottom();
16799
17141
  }, _this.componentWillUnmount = function () {
16800
17142
  if (_this.scrollIntoViewTimeout) {
16801
17143
  clearTimeout(_this.scrollIntoViewTimeout);
@@ -16825,7 +17167,7 @@ var ChatMessage = function (_React$Component) {
16825
17167
 
16826
17168
  return false;
16827
17169
  }, _this.scrollIntoView = function () {
16828
- setTimeout(function () {
17170
+ _this.scrollIntoViewTimeout = setTimeout(function () {
16829
17171
  var element = document.getElementById('message-' + _this.props.id);
16830
17172
 
16831
17173
  if (!_this.isScrolledIntoView(element)) {
@@ -16864,6 +17206,8 @@ var ChatMessage = function (_React$Component) {
16864
17206
 
16865
17207
  if (content) {
16866
17208
  return content;
17209
+ } else if (_get(response, 'status') === 401) {
17210
+ return errorMessages.UNAUTHENTICATED;
16867
17211
  } else if (response) {
16868
17212
  return React.createElement(QueryOutput, {
16869
17213
  ref: function ref(_ref2) {
@@ -17000,7 +17344,7 @@ var ChatMessage = function (_React$Component) {
17000
17344
  }
17001
17345
 
17002
17346
  return { chartWidth: chartWidth, chartHeight: chartHeight };
17003
- }, _this.allColumnsAreHidden = function (newColumns) {
17347
+ }, _this.allColumnsAreHidden = function () {
17004
17348
  if (_this.responseRef) {
17005
17349
  return _this.responseRef.areAllColumnsHidden();
17006
17350
  }
@@ -17025,7 +17369,7 @@ var ChatMessage = function (_React$Component) {
17025
17369
  var _this$getChartDimensi = _this.getChartDimensions(),
17026
17370
  chartHeight = _this$getChartDimensi.chartHeight;
17027
17371
 
17028
- if (_this.props.type === 'text') {
17372
+ if (_this.props.type === 'text' || _this.state.displayType === 'html') {
17029
17373
  return undefined;
17030
17374
  } else if (chartHeight) {
17031
17375
  return chartHeight + 40;
@@ -17036,7 +17380,7 @@ var ChatMessage = function (_React$Component) {
17036
17380
  var numRows = _get(_this.props, 'response.data.data.rows.length');
17037
17381
  var maxRowLimit = _get(_this.props, 'response.data.data.row_limit');
17038
17382
 
17039
- if (maxRowLimit && numRows === maxRowLimit) {
17383
+ if (maxRowLimit && numRows === maxRowLimit && !_this.allColumnsAreHidden()) {
17040
17384
  return React.createElement(Icon, {
17041
17385
  type: 'warning',
17042
17386
  className: 'data-limit-warning-icon',
@@ -17051,7 +17395,6 @@ var ChatMessage = function (_React$Component) {
17051
17395
 
17052
17396
  var messageHeight = _this.getMessageHeight();
17053
17397
  var maxMessageHeight = _this.getMaxMessageheight();
17054
-
17055
17398
  return React.createElement(
17056
17399
  ErrorBoundary,
17057
17400
  null,
@@ -17071,7 +17414,9 @@ var ChatMessage = function (_React$Component) {
17071
17414
  {
17072
17415
  className: 'chat-message-bubble\n ' + (CHART_TYPES.includes(_this.state.displayType) ? ' full-width' : '') + '\n ' + (_this.props.type === 'text' ? ' text' : '') + '\n ' + (_this.props.isActive ? ' active' : ''),
17073
17416
  style: {
17074
- minWidth: _this.isTableResponse() && _this.state.supportedDisplayTypes.length >= 4 ? '400px' : undefined
17417
+ minWidth: _this.isTableResponse() && _this.state.supportedDisplayTypes.length >= 4 || _this.props.response && _this.props.response.data && _this.props.response.data.data && _this.props.response.data.data.columns && _get(_this.props.response, 'data.data.columns').every(function (col) {
17418
+ return !col.visible;
17419
+ }) || _this.allColumnsAreHidden() ? '400px' : undefined
17075
17420
  }
17076
17421
  },
17077
17422
  _this.renderContent(chartWidth, chartHeight),
@@ -17385,7 +17730,7 @@ var Cascader = function (_React$Component) {
17385
17730
  !!_get(option, 'children.length') && React.createElement(Icon, { className: 'option-arrow', type: 'caret-right' })
17386
17731
  );
17387
17732
  }),
17388
- hasNoChildren && mostRecentOptionLabel && React.createElement(
17733
+ hasNoChildren && mostRecentOptionLabel && _this.props.onSeeMoreClick && React.createElement(
17389
17734
  'div',
17390
17735
  {
17391
17736
  className: 'option',
@@ -17451,7 +17796,7 @@ Cascader.propTypes = {
17451
17796
  Cascader.defaultProps = {
17452
17797
  options: [],
17453
17798
  onFinalOptionClick: function onFinalOptionClick() {},
17454
- onSeeMoreClick: function onSeeMoreClick() {}
17799
+ onSeeMoreClick: undefined
17455
17800
  };
17456
17801
 
17457
17802
  var DataMessenger = function (_React$Component) {
@@ -17555,6 +17900,9 @@ var DataMessenger = function (_React$Component) {
17555
17900
  isIntroMessage: true
17556
17901
  };
17557
17902
  }, _this.createTopicsMessage = function () {
17903
+ var enableExploreQueries = _this.props.enableExploreQueriesTab;
17904
+ var isQandA = _get(_this.props.authentication, 'isQandA');
17905
+
17558
17906
  var topics = _this.props.queryQuickStartTopics.map(function (topic) {
17559
17907
  return {
17560
17908
  label: topic.topic,
@@ -17572,7 +17920,7 @@ var DataMessenger = function (_React$Component) {
17572
17920
  var content = React.createElement(
17573
17921
  'div',
17574
17922
  null,
17575
- 'Some things you can ask me:',
17923
+ lang.introPrompt,
17576
17924
  React.createElement('br', null),
17577
17925
  React.createElement(
17578
17926
  'div',
@@ -17585,26 +17933,31 @@ var DataMessenger = function (_React$Component) {
17585
17933
  source: 'welcome_prompt'
17586
17934
  });
17587
17935
  },
17588
- onSeeMoreClick: function onSeeMoreClick(label) {
17936
+ onSeeMoreClick: enableExploreQueries && !isQandA ? function (label) {
17589
17937
  return _this.runTopicInExporeQueries(label);
17590
- }
17938
+ } : undefined
17591
17939
  })
17592
17940
  ),
17593
- 'Use',
17594
- ' ',
17595
- React.createElement(
17596
- 'span',
17597
- {
17598
- className: 'intro-qi-link',
17599
- onClick: function onClick() {
17600
- return _this.setState({ activePage: 'explore-queries' });
17601
- }
17602
- },
17603
- React.createElement(Icon, { type: 'light-bulb', style: { marginRight: '-3px' } }),
17604
- ' Explore Queries'
17605
- ),
17606
- ' ',
17607
- 'to further explore the possibilities.'
17941
+ enableExploreQueries && !isQandA && React.createElement(
17942
+ 'div',
17943
+ null,
17944
+ lang.use,
17945
+ ' ',
17946
+ React.createElement(
17947
+ 'span',
17948
+ {
17949
+ className: 'intro-qi-link',
17950
+ onClick: function onClick() {
17951
+ return _this.setState({ activePage: 'explore-queries' });
17952
+ }
17953
+ },
17954
+ React.createElement(Icon, { type: 'light-bulb', style: { marginRight: '-3px' } }),
17955
+ ' ',
17956
+ lang.exploreQueries
17957
+ ),
17958
+ ' ',
17959
+ lang.explorePrompt
17960
+ )
17608
17961
  );
17609
17962
 
17610
17963
  return content;
@@ -17613,12 +17966,18 @@ var DataMessenger = function (_React$Component) {
17613
17966
  return undefined;
17614
17967
  }
17615
17968
  }, _this.setintroMessages = function () {
17969
+ var introMessageContent = _this.props.introMessage ? '' + _this.props.introMessage : 'Hi ' + (_this.props.userDisplayName || 'there') + '! Let\u2019s dive into your data. What can I help you discover today?';
17970
+
17971
+ if (_get(_this.props.authentication, 'isQandA')) {
17972
+ introMessageContent = _this.props.introMessage ? '' + _this.props.introMessage : 'Hi ' + (_this.props.userDisplayName || 'there') + '! What can I help you with today?';
17973
+ }
17974
+
17616
17975
  var introMessages = [_this.createIntroMessage({
17617
17976
  type: 'text',
17618
- content: _this.props.introMessage ? '' + _this.props.introMessage : 'Hi ' + (_this.props.userDisplayName || 'there') + '! Let\u2019s dive into your data. What can I help you discover today?'
17977
+ content: introMessageContent
17619
17978
  })];
17620
17979
 
17621
- if (!_this.props.introMessage && _get(_this.props.queryQuickStartTopics, 'length')) {
17980
+ if (_get(_this.props.queryQuickStartTopics, 'length')) {
17622
17981
  var topicsMessageContent = _this.createTopicsMessage();
17623
17982
 
17624
17983
  if (topicsMessageContent) {
@@ -17687,7 +18046,7 @@ var DataMessenger = function (_React$Component) {
17687
18046
  }
17688
18047
 
17689
18048
  // Required to make animation smooth
17690
- setTimeout(function () {
18049
+ _this.scrollToBottomTimeout = setTimeout(function () {
17691
18050
  if (_this.messengerScrollComponent) {
17692
18051
  _this.messengerScrollComponent.scrollToBottom();
17693
18052
  }
@@ -17772,7 +18131,7 @@ var DataMessenger = function (_React$Component) {
17772
18131
 
17773
18132
  var drilldownResponse = filterDataForDrilldown(response, drilldownData);
17774
18133
 
17775
- setTimeout(function () {
18134
+ _this.responseTimeout = setTimeout(function () {
17776
18135
  _this.addResponseMessage({
17777
18136
  response: drilldownResponse
17778
18137
  });
@@ -17922,7 +18281,7 @@ var DataMessenger = function (_React$Component) {
17922
18281
  onClick: function onClick() {
17923
18282
  return _this.setState({ activePage: 'explore-queries' });
17924
18283
  },
17925
- 'data-tip': 'Explore Queries',
18284
+ 'data-tip': lang.exploreQueries,
17926
18285
  'data-for': 'react-autoql-header-tooltip',
17927
18286
  'data-delay-show': 1000
17928
18287
  },
@@ -18020,7 +18379,7 @@ var DataMessenger = function (_React$Component) {
18020
18379
  return _this.setState({ isClearMessageConfirmVisible: true });
18021
18380
  },
18022
18381
  className: 'react-autoql-drawer-header-btn clear-all',
18023
- 'data-tip': 'Clear data responses',
18382
+ 'data-tip': lang.clearDataResponses,
18024
18383
  'data-for': 'react-autoql-header-tooltip'
18025
18384
  },
18026
18385
  React.createElement(Icon, { type: 'trash' })
@@ -18033,7 +18392,7 @@ var DataMessenger = function (_React$Component) {
18033
18392
  title = _this.props.title;
18034
18393
  }
18035
18394
  if (_this.state.activePage === 'explore-queries') {
18036
- title = 'Explore Queries';
18395
+ title = lang.exploreQueries;
18037
18396
  }
18038
18397
  if (_this.state.activePage === 'notifications') {
18039
18398
  title = 'Notifications';
@@ -18055,7 +18414,7 @@ var DataMessenger = function (_React$Component) {
18055
18414
  {
18056
18415
  onClick: _this.props.onHandleClick,
18057
18416
  className: 'react-autoql-drawer-header-btn close',
18058
- 'data-tip': 'Close Data Messenger',
18417
+ 'data-tip': lang.closeDataMessenger,
18059
18418
  'data-for': 'react-autoql-header-tooltip'
18060
18419
  },
18061
18420
  React.createElement(Icon, { type: 'close' })
@@ -18089,7 +18448,7 @@ var DataMessenger = function (_React$Component) {
18089
18448
  }
18090
18449
  }, _this.onNoneOfTheseClick = function () {
18091
18450
  _this.setState({ isChataThinking: true });
18092
- setTimeout(function () {
18451
+ _this.feedbackTimeout = setTimeout(function () {
18093
18452
  _this.setState({ isChataThinking: false });
18094
18453
  _this.addResponseMessage({ content: 'Thank you for your feedback' });
18095
18454
  }, 1000);
@@ -18163,7 +18522,7 @@ var DataMessenger = function (_React$Component) {
18163
18522
  'div',
18164
18523
  { className: 'watermark' },
18165
18524
  React.createElement(Icon, { type: 'react-autoql-bubbles-outlined' }),
18166
- 'We run on AutoQL by Chata'
18525
+ lang.run
18167
18526
  ),
18168
18527
  React.createElement(QueryInput, {
18169
18528
  authentication: getAuthentication(getAuthentication(_this.props.authentication)),
@@ -18181,7 +18540,8 @@ var DataMessenger = function (_React$Component) {
18181
18540
  placeholder: _this.props.inputPlaceholder,
18182
18541
  onErrorCallback: _this.props.onErrorCallback,
18183
18542
  hideInput: _this.props.hideInput,
18184
- source: ['data_messenger']
18543
+ source: ['data_messenger'],
18544
+ AutoAEId: _this.props.AutoAEId
18185
18545
  })
18186
18546
  )
18187
18547
  );
@@ -18245,7 +18605,7 @@ var DataMessenger = function (_React$Component) {
18245
18605
  }, _this.animateQITextAndSubmit = function (text) {
18246
18606
  if (typeof text === 'string' && _get(text, 'length')) {
18247
18607
  var _loop = function _loop(i) {
18248
- setTimeout(function () {
18608
+ _this.animateTextTimeout = setTimeout(function () {
18249
18609
  _this.setState({
18250
18610
  queryTipsInputValue: text.slice(0, i)
18251
18611
  });
@@ -18261,7 +18621,7 @@ var DataMessenger = function (_React$Component) {
18261
18621
  }
18262
18622
  }, _this.runTopicInExporeQueries = function (topic) {
18263
18623
  _this.setState({ activePage: 'explore-queries' });
18264
- setTimeout(function () {
18624
+ _this.exploreQueriesTimeout = setTimeout(function () {
18265
18625
  _this.animateQITextAndSubmit(topic);
18266
18626
  }, 500);
18267
18627
  }, _this.renderQueryTipsContent = function () {
@@ -18279,7 +18639,7 @@ var DataMessenger = function (_React$Component) {
18279
18639
  onPageChange: _this.onQueryTipsPageChange,
18280
18640
  executeQuery: function executeQuery(query) {
18281
18641
  _this.setState({ activePage: 'data-messenger' });
18282
- setTimeout(function () {
18642
+ _this.executeQueryTimeout = setTimeout(function () {
18283
18643
  _this.onSuggestionClick({ query: query, source: 'explore_queries' });
18284
18644
  }, 500);
18285
18645
  }
@@ -18416,6 +18776,14 @@ var DataMessenger = function (_React$Component) {
18416
18776
  if (_this.state.hasError) {
18417
18777
  return null;
18418
18778
  }
18779
+ var chartToolTipElement = document.getElementById('chart-element-tooltip');
18780
+ var dataMessenger = document.getElementsByClassName('drawer-content-wrapper')[0];
18781
+
18782
+ if (chartToolTipElement && dataMessenger && (_this.props.placement !== 'top' || _this.props.placement !== 'bottom')) {
18783
+ if (_get(dataMessenger, 'style.width')) {
18784
+ chartToolTipElement.style.maxWidth = _get(dataMessenger, 'style.width').match(/\d+/g)[0] - 75 + 'px';
18785
+ }
18786
+ }
18419
18787
 
18420
18788
  return React.createElement(
18421
18789
  ErrorBoundary,
@@ -18424,6 +18792,7 @@ var DataMessenger = function (_React$Component) {
18424
18792
  Fragment,
18425
18793
  null,
18426
18794
  _this.renderTooltips(),
18795
+ setLanguage(),
18427
18796
  React.createElement(
18428
18797
  Drawer,
18429
18798
  {
@@ -18442,7 +18811,7 @@ var DataMessenger = function (_React$Component) {
18442
18811
  keyboard: false
18443
18812
  },
18444
18813
  _this.props.resizable && _this.renderResizeHandle(),
18445
- (_this.props.enableExploreQueriesTab || _this.props.enableNotificationsTab) && _this.renderTabs(),
18814
+ (_this.props.enableExploreQueriesTab || _this.props.enableNotificationsTab) && !_get(_this.props.authentication, 'isQandA') && _this.renderTabs(),
18446
18815
  React.createElement(
18447
18816
  'div',
18448
18817
  { className: 'react-autoql-drawer-content-container' },
@@ -18466,6 +18835,28 @@ var DataMessenger = function (_React$Component) {
18466
18835
  try {
18467
18836
  document.removeEventListener('keydown', this.escFunction, false);
18468
18837
  window.removeEventListener('resize', this.onWindowResize);
18838
+
18839
+ if (this.scrollToBottomTimeout) {
18840
+ clearTimeout(this.scrollToBottomTimeout);
18841
+ }
18842
+ if (this.windowResizeTimer) {
18843
+ clearTimeout(this.windowResizeTimer);
18844
+ }
18845
+ if (this.responseTimeout) {
18846
+ clearTimeout(this.responseTimeout);
18847
+ }
18848
+ if (this.feedbackTimeout) {
18849
+ clearTimeout(this.feedbackTimeout);
18850
+ }
18851
+ if (this.animateTextTimeout) {
18852
+ clearTimeout(this.animateTextTimeout);
18853
+ }
18854
+ if (this.exploreQueriesTimeout) {
18855
+ clearTimeout(this.exploreQueriesTimeout);
18856
+ }
18857
+ if (this.executeQueryTimeout) {
18858
+ clearTimeout(this.executeQueryTimeout);
18859
+ }
18469
18860
  } catch (error) {
18470
18861
  console.error(error);
18471
18862
  this.setState({ hasError: true });
@@ -18578,7 +18969,8 @@ var DashboardTile = function (_React$Component) {
18578
18969
  isSecondQueryInputOpen: false,
18579
18970
  currentSource: 'user',
18580
18971
  supportedDisplayTypes: getSupportedDisplayTypes(_this.props.queryResponse) || [],
18581
- secondSupportedDisplayTypes: getSupportedDisplayTypes(_this.props.secondQueryResponse) || []
18972
+ secondSupportedDisplayTypes: getSupportedDisplayTypes(_this.props.secondQueryResponse) || [],
18973
+ isUnExecuted: false
18582
18974
  }, _this.getFilteredProps = function (props) {
18583
18975
  return _extends({}, props, {
18584
18976
  children: undefined
@@ -18758,6 +19150,8 @@ var DashboardTile = function (_React$Component) {
18758
19150
  secondskipQueryValidation = _ref7.secondskipQueryValidation,
18759
19151
  source = _ref7.source;
18760
19152
 
19153
+ _this.props.onProcessTileCallback(_this.props.tile.i);
19154
+
18761
19155
  var q1 = query || _this.props.tile.selectedSuggestion || _this.state.query;
18762
19156
  var q2 = secondQuery || _this.props.tile.secondSelectedSuggestion || _this.state.secondQuery;
18763
19157
 
@@ -19056,7 +19450,7 @@ var DashboardTile = function (_React$Component) {
19056
19450
  if (isExecuting) {
19057
19451
  // This should always take priority over the other conditions below
19058
19452
  content = React.createElement(LoadingDots, null);
19059
- } else if (!_this.props.isEditing && isExecuted) {
19453
+ } else if (!_this.props.isEditing && isExecuted && !_this.props.isUnExecuted) {
19060
19454
  content = React.createElement(
19061
19455
  'div',
19062
19456
  { className: 'dashboard-tile-placeholder-text' },
@@ -19066,7 +19460,7 @@ var DashboardTile = function (_React$Component) {
19066
19460
  'No query was supplied for this tile.'
19067
19461
  )
19068
19462
  );
19069
- } else if (_this.props.isEditing && !_get(_this.state.query, 'trim()')) {
19463
+ } else if (_this.props.isEditing && (!_get(_this.state.query, 'trim()') || _this.props.isUnExecuted)) {
19070
19464
  content = React.createElement(
19071
19465
  'div',
19072
19466
  { className: 'dashboard-tile-placeholder-text' },
@@ -19291,7 +19685,7 @@ var DashboardTile = function (_React$Component) {
19291
19685
  return React.createElement(
19292
19686
  'div',
19293
19687
  { className: 'loading-container-centered' },
19294
- !queryOutputProps.queryResponse || isExecuting ? _this.renderContentPlaceholder({ isExecuting: isExecuting, isExecuted: isExecuted }) : React.createElement(
19688
+ !queryOutputProps.queryResponse || isExecuting || _this.props.isUnExecuted ? _this.renderContentPlaceholder({ isExecuting: isExecuting, isExecuted: isExecuted }) : React.createElement(
19295
19689
  Fragment,
19296
19690
  null,
19297
19691
  _this.getIsSuggestionResponse(queryOutputProps.queryResponse) && _this.renderSuggestionMessage(customMessage),
@@ -19312,7 +19706,8 @@ var DashboardTile = function (_React$Component) {
19312
19706
  _this.forceUpdate();
19313
19707
  }, 0);
19314
19708
  }
19315
- }, queryOutputProps))
19709
+ }, queryOutputProps)),
19710
+ _this.renderDataLimitWarning()
19316
19711
  ),
19317
19712
  _this.props.isEditing && React.createElement(
19318
19713
  'div',
@@ -19469,6 +19864,18 @@ var DashboardTile = function (_React$Component) {
19469
19864
  React.createElement('div', { className: 'react-autoql-dashboard-tile-drag-handle left' }),
19470
19865
  React.createElement('div', { className: 'react-autoql-dashboard-tile-drag-handle right' })
19471
19866
  );
19867
+ }, _this.renderDataLimitWarning = function () {
19868
+ var numRows = _get(_this.props, 'queryResponse.data.data.rows.length');
19869
+ var maxRowLimit = _get(_this.props, 'queryResponse.data.data.row_limit');
19870
+
19871
+ if (maxRowLimit && numRows === maxRowLimit) {
19872
+ return React.createElement(Icon, {
19873
+ type: 'warning',
19874
+ className: 'dashboard-data-limit-warning-icon',
19875
+ 'data-tip': 'The display limit of ' + numRows + ' rows has been reached. Try querying a smaller time-frame to ensure all your data is displayed.',
19876
+ 'data-for': 'dashboard-data-limit-warning-tooltip'
19877
+ });
19878
+ }
19472
19879
  }, _this.render = function () {
19473
19880
  var _this$props = _this.props,
19474
19881
  onMouseDown = _this$props.onMouseDown,
@@ -19483,6 +19890,13 @@ var DashboardTile = function (_React$Component) {
19483
19890
  onTouchEnd: onTouchEnd
19484
19891
  };
19485
19892
 
19893
+ var dashboardTileToolTipElement = document.getElementById('dashboard-data-limit-warning-tooltip');
19894
+ if (dashboardTileToolTipElement) {
19895
+ if (_get(_this.props, 'style.width')) {
19896
+ dashboardTileToolTipElement.style.maxWidth = _get(_this.props, 'style.width').match(/\d+/g)[0] - 75 + 'px';
19897
+ }
19898
+ }
19899
+
19486
19900
  return React.createElement(
19487
19901
  ErrorBoundary,
19488
19902
  null,
@@ -19531,7 +19945,9 @@ DashboardTile.propTypes = {
19531
19945
  notExecutedText: PropTypes.string,
19532
19946
  onErrorCallback: PropTypes.func,
19533
19947
  onSuccessCallback: PropTypes.func,
19534
- autoChartAggregations: PropTypes.bool
19948
+ autoChartAggregations: PropTypes.bool,
19949
+ isUnExecuted: PropTypes.bool,
19950
+ onProcessTileCallback: PropTypes.func
19535
19951
  };
19536
19952
  DashboardTile.defaultProps = {
19537
19953
  // Global
@@ -19547,8 +19963,10 @@ DashboardTile.defaultProps = {
19547
19963
  selectedSuggestion: undefined,
19548
19964
  notExecutedText: 'Hit "Execute" to run this dashboard',
19549
19965
  autoChartAggregations: true,
19966
+ isUnExecuted: false,
19550
19967
  onErrorCallback: function onErrorCallback() {},
19551
- onSuccessCallback: function onSuccessCallback() {}
19968
+ onSuccessCallback: function onSuccessCallback() {},
19969
+ onProcessTileCallback: function onProcessTileCallback() {}
19552
19970
  };
19553
19971
 
19554
19972
  var ReactGridLayout = WidthProvider(RGL);
@@ -19563,6 +19981,16 @@ var executeDashboard = function executeDashboard(ref) {
19563
19981
  }
19564
19982
  };
19565
19983
 
19984
+ var unExecuteDashboard = function unExecuteDashboard(ref) {
19985
+ if (ref) {
19986
+ try {
19987
+ ref.unExecuteDashboard();
19988
+ } catch (error) {
19989
+ console.error(error);
19990
+ }
19991
+ }
19992
+ };
19993
+
19566
19994
  var Dashboard = function (_React$Component) {
19567
19995
  inherits(Dashboard, _React$Component);
19568
19996
 
@@ -19579,7 +20007,9 @@ var Dashboard = function (_React$Component) {
19579
20007
 
19580
20008
  return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Dashboard.__proto__ || Object.getPrototypeOf(Dashboard)).call.apply(_ref, [this].concat(args))), _this), _this.tileRefs = {}, _this.state = {
19581
20009
  isDragging: false,
19582
- previousTileState: _this.props.tiles
20010
+ previousTileState: _this.props.tiles,
20011
+ /** keep a separate un-executed value for each tile */
20012
+ isTileUnExecuted: {}
19583
20013
  }, _this.componentDidMount = function () {
19584
20014
  if (_this.props.executeOnMount) {
19585
20015
  _this.executeDashboard();
@@ -19625,6 +20055,8 @@ var Dashboard = function (_React$Component) {
19625
20055
  previousTileState: tiles
19626
20056
  });
19627
20057
  }, _this.executeDashboard = function () {
20058
+ _this.setState({ isTileUnExecuted: {} });
20059
+
19628
20060
  try {
19629
20061
  for (var dashboardTile in _this.tileRefs) {
19630
20062
  if (_this.tileRefs[dashboardTile]) {
@@ -19634,6 +20066,14 @@ var Dashboard = function (_React$Component) {
19634
20066
  } catch (error) {
19635
20067
  console.error(error);
19636
20068
  }
20069
+ }, _this.unExecuteDashboard = function () {
20070
+ var newUnExecutedObj = {};
20071
+
20072
+ _this.props.tiles.forEach(function (tile) {
20073
+ newUnExecutedObj[tile.key] = true;
20074
+ });
20075
+
20076
+ _this.setState({ isTileUnExecuted: newUnExecutedObj });
19637
20077
  }, _this.getChangeDetection = function (oldTiles, newTiles, ignoreInputs) {
19638
20078
  return !_isEqual(_this.getChangeDetectionTileStructure(oldTiles, ignoreInputs), _this.getChangeDetectionTileStructure(newTiles, ignoreInputs));
19639
20079
  }, _this.getChangeDetectionTileStructure = function (tiles, ignoreInputs) {
@@ -19842,6 +20282,23 @@ var Dashboard = function (_React$Component) {
19842
20282
  _this.optionsToolbarRef.setState({ activeMenu: 'other-problem' });
19843
20283
  }
19844
20284
  }, _this.renderDrilldownTable = function () {
20285
+ var queryOutComponent = function queryOutComponent() {
20286
+ return React.createElement(QueryOutput, {
20287
+ authentication: getAuthentication(_this.props.authentication),
20288
+ autoQLConfig: getAutoQLConfig$1(_this.props.autoQLConfig),
20289
+ themeConfig: getThemeConfig(_this.props.themeConfig),
20290
+ dataFormatting: getDataFormatting(_this.props.dataFormatting),
20291
+ queryResponse: _this.state.activeDrilldownResponse,
20292
+ renderTooltips: false,
20293
+ autoChartAggregations: _this.props.autoChartAggregations,
20294
+ backgroundColor: document.documentElement.style.getPropertyValue('--react-autoql-background-color-primary'),
20295
+ reportProblemCallback: _this.reportProblemCallback,
20296
+ ref: function ref(_ref3) {
20297
+ return _this.responseRef = _ref3;
20298
+ },
20299
+ optionsToolbarRef: _this.optionsToolbarRef
20300
+ });
20301
+ };
19845
20302
  return React.createElement(
19846
20303
  'div',
19847
20304
  { className: 'react-autoql-dashboard-drilldown-table' },
@@ -19862,22 +20319,26 @@ var Dashboard = function (_React$Component) {
19862
20319
  autoChartAggregations: _this.props.autoChartAggregations,
19863
20320
  backgroundColor: document.documentElement.style.getPropertyValue('--react-autoql-background-color-primary'),
19864
20321
  reportProblemCallback: _this.reportProblemCallback,
19865
- ref: function ref(_ref3) {
19866
- return _this.responseRef = _ref3;
20322
+ ref: function ref(_ref4) {
20323
+ return _this.responseRef = _ref4;
19867
20324
  },
19868
20325
  optionsToolbarRef: _this.optionsToolbarRef
19869
20326
  }),
19870
- React.createElement(Input$1, {
19871
- authentication: getAuthentication(_this.props.authentication),
19872
- autoQLConfig: getAutoQLConfig$1(_this.props.autoQLConfig),
19873
- themeConfig: getThemeConfig(_this.props.themeConfig),
19874
- onErrorCallback: _this.props.onErrorCallback,
19875
- onSuccessAlert: _this.props.onSuccessCallback,
19876
- ref: function ref(r) {
19877
- return _this.optionsToolbarRef = r;
19878
- },
19879
- responseRef: _this.responseRef
19880
- })
20327
+ React.createElement(
20328
+ 'div',
20329
+ { style: { display: 'none' } },
20330
+ React.createElement(Input$1, {
20331
+ authentication: getAuthentication(_this.props.authentication),
20332
+ autoQLConfig: getAutoQLConfig$1(_this.props.autoQLConfig),
20333
+ themeConfig: getThemeConfig(_this.props.themeConfig),
20334
+ onErrorCallback: _this.props.onErrorCallback,
20335
+ onSuccessAlert: _this.props.onSuccessCallback,
20336
+ ref: function ref(r) {
20337
+ return _this.optionsToolbarRef = r;
20338
+ },
20339
+ responseRef: queryOutComponent()
20340
+ })
20341
+ )
19881
20342
  )
19882
20343
  );
19883
20344
  }, _this.renderChartCollapseBtn = function (placement) {
@@ -20061,8 +20522,8 @@ var Dashboard = function (_React$Component) {
20061
20522
  tileLayout.map(function (tile) {
20062
20523
  return React.createElement(DashboardTile, {
20063
20524
  className: 'react-autoql-dashboard-tile' + (_this.state.isDragging ? ' dragging' : '') + ' ' + tile.i,
20064
- ref: function ref(_ref4) {
20065
- return _this.tileRefs[tile.key] = _ref4;
20525
+ ref: function ref(_ref5) {
20526
+ return _this.tileRefs[tile.key] = _ref5;
20066
20527
  },
20067
20528
  key: tile.key,
20068
20529
  authentication: getAuthentication(_this.props.authentication),
@@ -20084,7 +20545,15 @@ var Dashboard = function (_React$Component) {
20084
20545
  enableDynamicCharting: _this.props.enableDynamicCharting,
20085
20546
  onErrorCallback: _this.props.onErrorCallback,
20086
20547
  onSuccessCallback: _this.props.onSuccessCallback,
20087
- autoChartAggregations: _this.props.autoChartAggregations
20548
+ autoChartAggregations: _this.props.autoChartAggregations,
20549
+ isUnExecuted: _this.state.isTileUnExecuted[tile.key],
20550
+ onProcessTileCallback: function onProcessTileCallback(tileKey) {
20551
+ _this.setState(function (prevState) {
20552
+ return {
20553
+ isTileUnExecuted: _extends({}, prevState.isTileUnExecuted, defineProperty({}, tileKey, undefined))
20554
+ };
20555
+ });
20556
+ }
20088
20557
  });
20089
20558
  })
20090
20559
  );
@@ -20098,8 +20567,8 @@ var Dashboard = function (_React$Component) {
20098
20567
  React.createElement(
20099
20568
  'div',
20100
20569
  {
20101
- ref: function ref(_ref5) {
20102
- return _this.ref = _ref5;
20570
+ ref: function ref(_ref6) {
20571
+ return _this.ref = _ref6;
20103
20572
  },
20104
20573
  className: 'react-autoql-dashboard-container' + (_this.props.isEditing ? ' edit-mode' : ''),
20105
20574
  'data-test': 'react-autoql-dashboard'
@@ -20113,6 +20582,13 @@ var Dashboard = function (_React$Component) {
20113
20582
  effect: 'solid',
20114
20583
  delayShow: 500,
20115
20584
  html: true
20585
+ }),
20586
+ React.createElement(ReactTooltip, {
20587
+ place: 'left',
20588
+ className: 'react-autoql-chart-tooltip',
20589
+ id: 'dashboard-data-limit-warning-tooltip',
20590
+ effect: 'solid',
20591
+ html: true
20116
20592
  })
20117
20593
  )
20118
20594
  );
@@ -20262,4 +20738,4 @@ SpeechToTextBtn.defaultProps = {
20262
20738
  themeConfig: themeConfigDefault
20263
20739
  };
20264
20740
 
20265
- export { Dashboard, DashboardTile, DataAlertModal$1 as DataAlertModal, DataAlerts, DataMessenger, ExpressionBuilder, ExpressionBuilderSimple, Icon, LoadingDots, NotificationFeed, NotificationIcon, NotificationItem, QueryInput, QueryOutput, ScheduleBuilder, SpeechToTextBtn, executeDashboard, fetchQueryTips, getDefaultDisplayType, getSupportedDisplayTypes, isDisplayTypeValid };
20741
+ export { Dashboard, DashboardTile, DataAlertModal$1 as DataAlertModal, DataAlerts, DataMessenger, ExpressionBuilder, ExpressionBuilderSimple, Icon, LoadingDots, NotificationFeed, NotificationIcon, NotificationItem, QueryInput, QueryOutput, ScheduleBuilder, SpeechToTextBtn, executeDashboard, fetchQueryTips, getDefaultDisplayType, getSupportedDisplayTypes, isDisplayTypeValid, unExecuteDashboard };