<?php

use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;

/* @public_path/build/app.js */
class __TwigTemplate_19d9422acc16e0f7dcb46d94772d7577116908ebc7f4113259bb079e73d4f8dc extends Template
{
    private $source;
    private $macros = [];

    public function __construct(Environment $env)
    {
        parent::__construct($env);

        $this->source = $this->getSourceContext();

        $this->parent = false;

        $this->blocks = [
        ];
    }

    protected function doDisplay(array $context, array $blocks = [])
    {
        $macros = $this->macros;
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@public_path/build/app.js"));

        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "@public_path/build/app.js"));

        yield "(self[\"webpackChunk\"] = self[\"webpackChunk\"] || []).push([[\"app\"],{

/***/ \"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\":
/*!*****************************************************************************************************************!*\\
  !*** ./assets/controllers/ sync ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\.(j|t)sx?\$ ***!
  \\*****************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var map = {
\t\"./tchat_controller.js\": \"./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js\"
};


function webpackContext(req) {
\tvar id = webpackContextResolve(req);
\treturn __webpack_require__(id);
}
function webpackContextResolve(req) {
\tif(!__webpack_require__.o(map, req)) {
\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");
\t\te.code = 'MODULE_NOT_FOUND';
\t\tthrow e;
\t}
\treturn map[req];
}
webpackContext.keys = function webpackContextKeys() {
\treturn Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = \"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\";

/***/ }),

/***/ \"./node_modules/@symfony/stimulus-bridge/dist/webpack/loader.js!./assets/controllers.json\":
/*!************************************************************************************************!*\\
  !*** ./node_modules/@symfony/stimulus-bridge/dist/webpack/loader.js!./assets/controllers.json ***!
  \\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
  'symfony--ux-turbo--turbo-core': Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! @symfony/ux-turbo/dist/turbo_controller.js */ \"./node_modules/@symfony/ux-turbo/dist/turbo_controller.js\")),
  'symfony--ux-turbo-mercure--turbo-stream': Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! @symfony/ux-turbo-mercure/dist/turbo_stream_controller.js */ \"./node_modules/@symfony/ux-turbo-mercure/dist/turbo_stream_controller.js\")),
});

/***/ }),

/***/ \"./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js\":
/*!******************************************************************************************************************!*\\
  !*** ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js ***!
  \\******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ _default)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ \"./node_modules/core-js/modules/es.parse-int.js\");
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.date.to-string.js */ \"./node_modules/core-js/modules/es.date.to-string.js\");
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.timers.js */ \"./node_modules/core-js/modules/web.timers.js\");
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ \"./node_modules/core-js/modules/es.object.define-property.js\");
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ \"./node_modules/core-js/modules/es.object.get-prototype-of.js\");
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ \"./node_modules/core-js/modules/es.reflect.construct.js\");
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.object.create.js */ \"./node_modules/core-js/modules/es.object.create.js\");
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var stimulus__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! stimulus */ \"./node_modules/stimulus/index.js\");
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }



















function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }

function _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }



var _default = /*#__PURE__*/function (_Controller) {
  _inherits(_default, _Controller);

  var _super = _createSuper(_default);

  function _default() {
    var _this;

    _classCallCheck(this, _default);

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    _this = _super.call.apply(_super, [this].concat(args));

    _defineProperty(_assertThisInitialized(_this), \"total_popups\", 0);

    _defineProperty(_assertThisInitialized(_this), \"removeArray\", function (array, from, to) {
      var rest = array.slice((to || from) + 1 || array.length);
      array.length = from < 0 ? array.length + from : from;
      return array.push.apply(array, rest);
    });

    return _this;
  }

  _createClass(_default, [{
    key: \"initialise\",
    value: function initialise() {
      this.popupsValue = [];
      console.log(\"hello tchat\");
    }
    /** TCHAT **/
    //this function can remove a array element.

  }, {
    key: \"close_popup\",
    value: //this is used to close a popup
    function close_popup(id) {
      for (var iii = 0; iii < this.popupsValue.length; iii++) {
        if (id == this.popupsValue[iii]) {
          this.popupsValue = removeArray(popupe, iii);
          document.getElementById(id).remove();
          this.calculate_popups();
          return;
        }
      }
    } //displays the popups. Displays based on the maximum number of popups that can be displayed on the current viewport width

  }, {
    key: \"display_popups\",
    value: function display_popups() {
      var right = 480;
      var iii = 0;

      for (iii; iii < this.popupsValue; iii++) {
        if (this.popupsValue[iii] != undefined) {
          var element = document.getElementById(this.popupsValue[iii]);
          element.style.right = right + \"px\";
          right = right + 320;
          element.style.display = \"block\";
        }
      }

      for (var jjj = iii; jjj < this.popupsValue.length; jjj++) {
        var element = document.getElementById(this.popupsValue[jjj]);
        element.style.display = \"none\";
      }
    } //creates markup for a new popup. Adds the id to popups array.

  }, {
    key: \"register_popup\",
    value: function register_popup(event) {
      var id = event.currentTarget.dataset.tchatId;
      var class_name = event.currentTarget.dataset.tchatClass;
      var name = event.currentTarget.dataset.tchatName;

      for (var iii = 0; iii < this.popupsValue.length; iii++) {
        //already registered. Bring it to front.
        if (id == this.popupsValue[iii]) {
          this.popupsValue = this.removeArray(this.popupsValue, iii);
          this.popupsValue.unshift(id);
          this.calculate_popups();
          return;
        }
      }

      var element = '<div class=\"chatbox chatbox22 popup-box chat-popup\" id=\"' + id + '\">';
      element = element + '<div class=\"chatbox__title ' + class_name + '\">';
      element = element + '<span class=\"picto\">' + name + '</span><button class=\"chatbox__title__close\" data-id=\"' + id + '\"><span>';
      element = element + '<i class=\"fas fa-times\"></i></span></button></div>';
      element = element + '<div class=\"chatbox__body\"><ul class=\"list-chat-msg\">  <li style=\"width:100%\"> <div class=\"msj-r bg-grey  macro\"><div class=\"text text-l\"><p>J\\'ai trouvé un nouveau client. MAJ ta tournée stp.</p><p class=\"chat-msg-hour\"><small>10:31</small></p></div></div> </li><li style=\"width:100%;\"> <div class=\"msj ' + class_name + ' macro\"><div class=\"text text-r\"><p>ok</p><p class=\"chat-msg-hour\"><small>10:31</small></p></div></div></li></ul></div>';
      element = element + '<div class=\"panel-footer\">';
      element = element + '<div class=\"input-group\"><input id=\"btn-input\" type=\"text\" class=\"form-control input-sm chat-send-msg\" style=\"border:0;border-right:1px solid #ced4da\" tabindex=\"0\" dir=\"ltr\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" contenteditable=\"true\"><span class=\"input-group-btn\"><button class=\"btn bt_bg\" id=\"btn-chat\" style=\"padding-top:6px; padding-bottom:6px\"><i class=\"fa fa-paper-plane-o\" aria-hidden=\"true\"></i></button></span></div></div>';
      document.getElementsByTagName(\"body\")[0].innerHTML = document.getElementsByTagName(\"body\")[0].innerHTML + element;
      this.popupsValue.unshift(id);
      this.calculate_popups();
    } //calculate the total number of popups suitable and then populate the toatal_popups variable.

  }, {
    key: \"calculate_popups\",
    value: function calculate_popups() {
      var width = window.innerWidth;

      if (width < 540) {
        this.total_popups = 0;
      } else {
        width = width - 483; //320 is width of a single popup box

        this.total_popups = parseInt(width / 320);
      }

      this.display_popups();
    } //-- No use time. It is a javaScript effect.

  }, {
    key: \"insertChat\",
    value: function insertChat(text, parent) {
      var control = \"\";
      var date = new Date();
      var dateText = date.getHours() + ':' + date.getMinutes();
      control = '<li style=\"width:100%\">' + '<div class=\"msj-r macro bg-grey\">' + '<div class=\"text text-l\">' + '<p>' + text + '</p>' + '<p><small>' + dateText + '</small></p>' + '</div>' + '</div>' + '</li>';
      setTimeout(function () {
        parent.append(control);
        parent[0].scrollTop = parent[0].scrollHeight;
      }, 0);
      \$('.chatbox__body').scrollTop = parent[0].scrollHeight;
    }
  }]);

  return _default;
}(stimulus__WEBPACK_IMPORTED_MODULE_17__.Controller);

_defineProperty(_default, \"targets\", ['count']);

_defineProperty(_default, \"values\", {
  popups: Array
});



/***/ }),

/***/ \"./assets/app.js\":
/*!***********************!*\\
  !*** ./assets/app.js ***!
  \\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _styles_app_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./styles/app.scss */ \"./assets/styles/app.scss\");
/* harmony import */ var bootstrap_js_src_alert_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bootstrap/js/src/alert.js */ \"./node_modules/bootstrap/js/src/alert.js\");
/* harmony import */ var bootstrap_js_src_collapse_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bootstrap/js/src/collapse.js */ \"./node_modules/bootstrap/js/src/collapse.js\");
/* harmony import */ var bootstrap_js_src_modal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bootstrap/js/src/modal.js */ \"./node_modules/bootstrap/js/src/modal.js\");
/* harmony import */ var bootstrap_js_src_tab_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! bootstrap/js/src/tab.js */ \"./node_modules/bootstrap/js/src/tab.js\");
/* harmony import */ var devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! devextreme/dist/js/dx.all.js */ \"./node_modules/devextreme/dist/js/dx.all.js\");
/* harmony import */ var devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _js_main_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./js/main.js */ \"./assets/js/main.js\");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! jquery-ui/ui/widgets/autocomplete.js */ \"./node_modules/jquery-ui/ui/widgets/autocomplete.js\");
/* harmony import */ var jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! jquery-ui/ui/widgets/datepicker.js */ \"./node_modules/jquery-ui/ui/widgets/datepicker.js\");
/* harmony import */ var jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! jquery-ui/ui/i18n/datepicker-fr.js */ \"./node_modules/jquery-ui/ui/i18n/datepicker-fr.js\");
/* harmony import */ var jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! jquery-mask-plugin/dist/jquery.mask.min */ \"./node_modules/jquery-mask-plugin/dist/jquery.mask.min.js\");
/* harmony import */ var jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _js_highlight_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./js/highlight.js */ \"./assets/js/highlight.js\");
/* harmony import */ var _js_doclinks_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./js/doclinks.js */ \"./assets/js/doclinks.js\");
/* harmony import */ var _js_doclinks_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_js_doclinks_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var bootstrap_js_src_dropdown_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! bootstrap/js/src/dropdown.js */ \"./node_modules/bootstrap/js/src/dropdown.js\");
/* harmony import */ var bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle.js */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");
/* harmony import */ var bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./bootstrap */ \"./assets/bootstrap.js\");
 // loads the Bootstrap jQuery plugins







 // require jQuery normally

var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"); // create global \$ and jQuery variables


__webpack_require__.g.\$ = __webpack_require__.g.jQuery = \$;



 // loads the code syntax highlighting library

 // Creates links to the Symfony documentation

 // start the Stimulus application







var bootstrap = window.bootstrap = __webpack_require__(/*! bootstrap/dist/js/bootstrap.js */ \"./node_modules/bootstrap/dist/js/bootstrap.js\");

/***/ }),

/***/ \"./assets/bootstrap.js\":
/*!*****************************!*\\
  !*** ./assets/bootstrap.js ***!
  \\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"app\": () => (/* binding */ app)
/* harmony export */ });
/* harmony import */ var _symfony_stimulus_bridge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @symfony/stimulus-bridge */ \"./node_modules/@symfony/stimulus-bridge/dist/index.js\");
 // Registers Stimulus controllers from controllers.json and in the controllers/ directory

var app = (0,_symfony_stimulus_bridge__WEBPACK_IMPORTED_MODULE_0__.startStimulusApp)(__webpack_require__(\"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\")); // register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

/***/ }),

/***/ \"./assets/js/doclinks.js\":
/*!*******************************!*\\
  !*** ./assets/js/doclinks.js ***!
  \\*******************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

\"use strict\";
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
 // Wraps some elements in anchor tags referencing to the Symfony documentation

__webpack_require__(/*! core-js/modules/es.array.find.js */ \"./node_modules/core-js/modules/es.array.find.js\");

__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");

__webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");

__webpack_require__(/*! core-js/modules/es.string.match.js */ \"./node_modules/core-js/modules/es.string.match.js\");

\$(function () {
  var \$modal = \$('#sourceCodeModal');
  var \$controllerCode = \$modal.find('code.php');
  var \$templateCode = \$modal.find('code.twig');

  function anchor(url, content) {
    return '<a class=\"doclink\" target=\"_blank\" href=\"' + url + '\">' + content + '</a>';
  }

  ; // Wraps links to the Symfony documentation

  \$modal.find('.hljs-comment').each(function () {
    \$(this).html(\$(this).html().replace(/https:\\/\\/symfony.com\\/doc\\/[\\w/.#-]+/g, function (url) {
      return anchor(url, url);
    }));
  }); // Wraps Symfony's annotations

  var annotations = {
    '@Cache': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/cache.html',
    '@IsGranted': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#isgranted',
    '@ParamConverter': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html',
    '@Route': 'https://symfony.com/doc/current/routing.html#creating-routes-as-annotations',
    '@Security': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#security'
  };
  \$controllerCode.find('.hljs-doctag').each(function () {
    var annotation = \$(this).text();

    if (annotations[annotation]) {
      \$(this).html(anchor(annotations[annotation], annotation));
    }
  }); // Wraps Twig's tags

  \$templateCode.find('.hljs-template-tag > .hljs-name').each(function () {
    var tag = \$(this).text();

    if ('else' === tag || tag.match(/^end/)) {
      return;
    }

    var url = 'https://twig.symfony.com/doc/3.x/tags/' + tag + '.html#' + tag;
    \$(this).html(anchor(url, tag));
  }); // Wraps Twig's functions

  \$templateCode.find('.hljs-template-variable > .hljs-name').each(function () {
    var func = \$(this).text();
    var url = 'https://twig.symfony.com/doc/3.x/functions/' + func + '.html#' + func;
    \$(this).html(anchor(url, func));
  });
});

/***/ }),

/***/ \"./assets/js/highlight.js\":
/*!********************************!*\\
  !*** ./assets/js/highlight.js ***!
  \\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! highlight.js/lib/core */ \"./node_modules/highlight.js/lib/core.js\");
/* harmony import */ var highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! highlight.js/lib/languages/php */ \"./node_modules/highlight.js/lib/languages/php.js\");
/* harmony import */ var highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! highlight.js/lib/languages/twig */ \"./node_modules/highlight.js/lib/languages/twig.js\");
/* harmony import */ var highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2__);



highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().registerLanguage('php', (highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1___default()));
highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().registerLanguage('twig', (highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2___default()));
highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().initHighlightingOnLoad();

/***/ }),

/***/ \"./assets/js/main.js\":
/*!***************************!*\\
  !*** ./assets/js/main.js ***!
  \\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ \"./node_modules/core-js/modules/es.object.assign.js\");
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.array.index-of.js */ \"./node_modules/core-js/modules/es.array.index-of.js\");
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.timers.js */ \"./node_modules/core-js/modules/web.timers.js\");
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ \"./node_modules/core-js/modules/es.string.search.js\");
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/web.url.js */ \"./node_modules/core-js/modules/web.url.js\");
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.array.for-each.js */ \"./node_modules/core-js/modules/es.array.for-each.js\");
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.date.to-string.js */ \"./node_modules/core-js/modules/es.date.to-string.js\");
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ \"./node_modules/core-js/modules/es.array.join.js\");
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18__);
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! core-js/modules/es.array.every.js */ \"./node_modules/core-js/modules/es.array.every.js\");
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/es.array.find.js */ \"./node_modules/core-js/modules/es.array.find.js\");
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20__);
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23__);
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ \"./node_modules/core-js/modules/es.parse-int.js\");
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24__);
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ \"./node_modules/core-js/modules/es.string.includes.js\");
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25__);
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/es.function.bind.js */ \"./node_modules/core-js/modules/es.function.bind.js\");
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26__);
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27__);
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28__);
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29__);
/* harmony import */ var devextreme_localization_messages_fr_json__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! devextreme/localization/messages/fr.json */ \"./node_modules/devextreme/localization/messages/fr.json\");
/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/popper.js\");
/* harmony import */ var _hotwired_turbo__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @hotwired/turbo */ \"./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js\");
/* harmony import */ var devextreme_ui_validator__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! devextreme/ui/validator */ \"./node_modules/devextreme/esm/ui/validator.js\");
/* harmony import */ var devextreme_ui_text_box__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! devextreme/ui/text_box */ \"./node_modules/devextreme/esm/ui/text_box.js\");
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }


































__webpack_require__.e(/*! import() */ \"vendors-node_modules_bootstrap-select_dist_js_bootstrap-select_js\").then(__webpack_require__.t.bind(__webpack_require__, /*! bootstrap-select/dist/js/bootstrap-select.js */ \"./node_modules/bootstrap-select/dist/js/bootstrap-select.js\", 23));



var common = __webpack_require__(/*! ./common */ \"./assets/js/common.js\");

window.isDataGridRequest = false;
Object.assign(_hotwired_turbo__WEBPACK_IMPORTED_MODULE_30__.PageRenderer.prototype, {
  assignNewBody: function assignNewBody() {
    var containerApp = document.querySelector(\"#app\");
    var containerActions = document.querySelector(\"#bottom_actions\");
    var containerPopups = document.querySelector(\"#popups-list\");
    var containerJavascriptBody = document.querySelector(\"#javascript-body\");
    var newContainerApp = this.newElement.querySelector(\"#app\");
    var newContainerActions = this.newElement.querySelector(\"#bottom_actions\");
    var newContainerPopups = this.newElement.querySelector(\"#popups-list\");
    var newContainerJavascriptBody = this.newElement.querySelector(\"#javascript-body\"); //const newtest = this.newElement.querySelector('dx-header-filter-menu');

    \$(document.body).attr('class', \$(this.newElement).attr('class'));
    \$(document.body).attr('id', \$(this.newElement).attr('id'));

    if (containerActions && newContainerActions) {
      containerActions.replaceWith(newContainerActions);
    }

    if (containerPopups && newContainerPopups) {
      containerPopups.replaceWith(newContainerPopups);
    }

    if (containerJavascriptBody && newContainerJavascriptBody) {
      containerJavascriptBody.replaceWith(newContainerJavascriptBody);
    }

    if (containerApp && newContainerApp) {
      containerApp.replaceWith(newContainerApp);
    } else {
      document.body.replaceWith(this.newElement);
    }
  }
});
DevExpress.localization.locale('fr');
DevExpress.localization.loadMessages(devextreme_localization_messages_fr_json__WEBPACK_IMPORTED_MODULE_33__);

if (navigator.userAgent.indexOf(\"Edg\") !== -1) {
  document.body.classList.add(\"is-edge\");
}

\$('#filter-image').click(function () {
  \$('#filter-container').toggleClass('active');
}); //this variable represents the total number of popups can be displayed according to the viewport width

var total_popups = 0; //arrays of popups ids

var popups = [];
var methods = {
  init: function init(options) {
    methods.settings = \$.extend({}, \$.fn.flashNotification.defaults, options);
    setTimeout(function () {
      \$('.alert').show('slow').delay(methods.settings.hideDelay).hide('slow');
    }, 500);
    methods.listenIncomingMessages();
  },

  /**
   * Listen to AJAX responses and display messages if they contain some
   */
  listenIncomingMessages: function listenIncomingMessages() {
    \$(document).ajaxComplete(function (event, xhr, settings) {
      if (xhr.getResponseHeader(\"Content-Type\") == 'application/json') {
        var data = \$.parseJSON(xhr.responseText);

        if (data.messages) {
          var messages = data.messages;
          var i;

          if (messages.error) {
            for (i = 0; i < messages.error.length; i++) {
              methods.addError(messages.error[i]);
            }
          }

          if (messages.success) {
            for (i = 0; i < messages.success.length; i++) {
              methods.addSuccess(messages.success[i]);
            }
          }

          if (messages.info) {
            for (i = 0; i < messages.info.length; i++) {
              methods.addInfo(messages.info[i]);
            }
          }
        }
      }
    });
  },
  addSuccess: function addSuccess(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-success');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  addError: function addError(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-danger');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  addInfo: function addInfo(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-info');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  getBasicFlash: function getBasicFlash(message) {
    var flashMessageElt = \$('<div></div>').hide().addClass('toast alert alert-dismissible fade show').css('padding', '0.3rem').css('width', 'auto').attr('role', 'alert').append(\$('<div class=\"toast-body\"></div>').html(message)) //.append(methods.getCloseButton())
    ;
    return flashMessageElt;
  },
  getCloseButton: function getCloseButton() {
    var closeButtonElt = \$('<button></button>').addClass('btn-close').attr('data-bs-dismiss', 'alert') // .html('&times')
    .css('opacity', 1);
    return closeButtonElt;
  },
  addToList: function addToList(flashMessageElt) {
    flashMessageElt.appendTo(\$('.messages'));
  },
  display: function display(flashMessageElt) {
    setTimeout(function () {
      flashMessageElt.show('slow').delay(methods.settings.hideDelay).hide('slow', function () {
        \$(this).remove();
      });
    }, 500);
  }
};
\$(window).scroll(function () {
  if (\$(this).scrollTop() > 200) {
    \$('#scroll').fadeIn();
  } else {
    \$('#scroll').fadeOut();
  }
});
\$('#scroll a').click(function () {
  \$('body,html').animate({
    scrollTop: 0
  }, 300);
  return false;
});

\$.fn.flashNotification = function (method) {
  // Method calling logic
  if (methods[method]) {
    return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
  } else if (_typeof(method) === 'object' || !method) {
    return methods.init.apply(this, arguments);
  } else {
    \$.error('Method ' + method + ' does not exist on jQuery.flashNotification');
  }
};

\$.fn.flashNotification.defaults = {
  'hideDelay': 4500,
  'autoHide': true,
  'animate': true
};
\$(document).on('ready turbo:load', function () {
  setTimeout(function () {
    \$('.alert').delay(methods.settings.hideDelay).hide('slow');
  }, 500); //on masque le column chooser lorsqu'on change de page

  \$('.dx-datagrid-column-chooser').hide(); //gestion des page avec éléments à désactiver

  var queryString = window.location.search;
  var urlParams = new URLSearchParams(queryString);
  var type_affichage = \$('#form_client_update').length != 0 ? \$('#form_client_update').data('affichage') : '';
  type_affichage = \$('#form_agent_update').length != 0 ? \$('#form_agent_update').data('affichage') : type_affichage;

  if (type_affichage != 'edit') {
    \$('[data-disable-on-view]').each(function () {
      if (\$(this)[0].localName == 'i' && \$(this).hasClass('has-info') || \$(this)[0].localName == 'button') {
        /*|| (\$(this).hasClass('my-select-multiple') && \$(this)[0].localName == 'select')) {*/
        \$(this).addClass('disabled');
      } else {
        \$(this).attr('disabled', 'disabled');
      }
    });
  }

  common.resetForm();
  common.loadPicker(); // if (typeof window.calculate_popups !== \"undefined\") {
  //     window.calculate_popups();
  // }
  // if (typeof window.loadSidebarTchat !== \"undefined\") {
  //     window.loadSidebarTchat();
  // }

  var addLink = document.querySelectorAll('a.add_item_link');
  addLink.forEach(function (e) {
    e.addEventListener(\"click\", addFormToCollection);
    if (\$(e).prev('ul').data('index') == 1) e.click();
  });
  var collections = document.querySelectorAll('ul.collection > li');
  collections.forEach(function (e) {
    if (\$(e).next('a.add_item_link').length == 1) {
      addElementFormDeleteLink(e);
    }
  });

  function addFormToCollection(e) {
    var collectionHolder = document.querySelector('#' + e.currentTarget.dataset.collectionHolderId);
    var item = document.createElement('li');
    var class_to_add = document.querySelector('#' + e.currentTarget.dataset[\"class\"]);
    item.innerHTML = \$(collectionHolder.dataset.prototype).html().replace(/__name__/g, collectionHolder.dataset.index);
    item.style.position = 'relative'; //item.classList = 'form-control-sm form-control';

    collectionHolder.appendChild(item);
    collectionHolder.dataset.index++;
    addElementFormDeleteLink(item);
  }

  function addElementFormDeleteLink(element) {
    var removeFormButton = document.createElement('a');
    removeFormButton.classList = 'add_item_link';
    removeFormButton.innerHTML = '<i class=\"fa fa-trash del-icon\" style=\"bottom: 7px;right: 8px;top:inherit;position:absolute\"></i>';
    element.append(removeFormButton);
    removeFormButton.addEventListener('click', function (e) {
      e.preventDefault();
      element.remove();
    });
  }

  window.initDevExtremeGrids = function initDevExtremeGrids(element) {
    window.isDataGridRequest = true;
    var rowClass = \$(element).data('rowclass');
    var tooltipField = \$(element).data('tooltip-field');
    var page = \$(element).data('page');
    var columns = eval(\$(element).data('columns'));
    var patch_path = \$(element).data('patchpath');
    var remoteOperations = \$(element).data('remoteoperations');
    var allowedPageSizes = \$(element).data('allowedpagesizes');
    var key = \$(element).data('key');
    var oneditorpreparing = eval(\$(element).data('oneditorpreparing'));
    var onEditorPreparingChangeItems = \$(element).data('oneditorpreparing_change_items');
    var rowDblClick = \$(element).data('rowdblclick');
    var rang_tri = \$(element).data('rang_tri');
    var column_autowidth = \$(element).data('column_autowidth');
    var source = \$(element).data('source');
    var get_path = \$(element).data('getpath');
    var create_path = \$(element).data('createpath');
    var delete_path = \$(element).data('deletepath');
    var dataSource = common.createCustomStore(page, patch_path, get_path, create_path, delete_path, key);
    var tmpGrid = common.datagrid_obj;
    var editing = \$(element).data('editing');
    var onCellHoverChanged = false;
    var searchPanel = \$(element).data('searchpanel');
    var pagination = \$(element).data('pagination');
    var toolbarInvisible = \$(element).data('toolbarinvisible');
    var disableOnlyEditing = \$(element).data('disable-only-editing');
    var disableOnlyAdding = \$(element).data('disable-only-adding');
    var searchpanelplaceholder = \$(element).data('searchpanelplaceholder');
    var exportAllText = \$(element).data('exportalltext');
    var onRowValidating = \$(element).data('on-row-validation');
    var editOnPreparing = [];
    var defautFiltre = \$(element).data('defautfiltre');
    var defautFiltreUtilisateur = \$(element).data('defautfiltreutilisateur');
    var disableonview = \$(element).data('disableonview');
    var exportFields = \$(element).data('export-fields');
    var gridClass = \$(element).data('gridclass');
    if (defautFiltreUtilisateur) defautFiltre = defautFiltreUtilisateur;
    if (\$(element).data('style') == 'tab') var obj = Object.assign({}, tmpGrid, common.datagridSimple);else var obj = Object.assign({}, tmpGrid, common.datagridFull);

    if (column_autowidth != '') {
      obj.columnAutoWidth = column_autowidth;
    }

    if (gridClass) {
      obj.elementAttr = {
        \"class\": gridClass
      };
    }

    if (exportFields) {
      obj.onExporting = function (e) {
        e.component.beginUpdate(); // e.component.columnOption('nom_client', 'visible', true);
        // e.component.columnOption('adresse_client', 'visible', true);

        exportFields.forEach(function (field) {
          e.component.columnOption(field, 'visible', true);
        });
        e.fileName = \$(e.element).data('exportname');
      };
    }

    if (exportAllText != '' && exportAllText) {
      obj[\"export\"].texts.exportAll = exportAllText;
    }

    if (searchpanelplaceholder != '') {
      obj.searchPanel.placeholder = searchpanelplaceholder;
    } else {
      obj.searchPanel.placeholder = common.defaultPlaceHolder;
    }

    if (\$(element).attr('id') === 'intervention-grid-facturation') {
      obj.onRowInserted = function (e) {
        \$(element).trigger('grid:rowInserted', [e]);
      };

      obj.onRowRemoved = function (e) {
        \$(element).trigger('grid:rowRemoved', [e]);
      };

      obj.onRowUpdated = function (e) {
        \$(element).trigger('grid:rowUpdated', [e]);
      };

      obj.onContentReady = function (e) {
        \$(element).trigger('grid:contentReady', [e]);
      };
    }

    if (columns) {
      columns.forEach(function (e) {
        if (e.lookup) {
          e.lookup.dataSource = eval(e.lookup.dataSource);
        }

        if (e.dataType === \"date\" && e.filterValue && typeof e.filterValue === \"string\") {
          e.filterValue = new Date(e.filterValue); // Conversion correcte
        }

        if (e.editorOptions && e.editorOptions.acceptCustomValue) {
          e.editorOptions.onCustomItemCreating = function (args) {
            var newItem = {};
            newItem.id = args.text;
            newItem.libelle = args.text;
            return newItem;
          };
        }

        if (e.calculateDisplayValue) {
          e.calculateDisplayValue = function (rowData) {
            var filterExpression = [],
                values = rowData[e.dataField],
                result = '';

            if (values != null && values.length > 0) {
              for (var i = 0; i < values.length; i++) {
                if (i > 0) {
                  filterExpression.push('or');
                }

                filterExpression.push(['id', values[i]]);
              }

              result = \$.map(DevExpress.data.query(oneditorpreparing[e.dataField].datas).filter(filterExpression).toArray(), function (item) {
                return item[e.fieldDisplay];
              }).join('<br />');
            }

            return result;
          };
        }

        if (e.dataField == 'pp_photo') {
          e.width = 100, e.cellTemplate = common.cellTemplatePhoto;
        }

        if (e.dataField == 'couleur') {
          e.cellTemplate = common.cellTemplateCouleur;
        }

        if (e.calculateFilterExpression) {
          e.calculateFilterExpression = function (filterValues, selectedFilterOperation) {
            return function (itemData) {
              var array1 = itemData[e.dataField];
              var array2 = filterValues;
              if (array2.length === 0) return true;
              return array1.length === array2.length && array1.every(function (value, index) {
                return value === array2[index];
              });
            };
          };
        }

        if (e.buttons) {
          if (e.buttons[0].visible) {
            eval('var visible = ' + e.buttons[0].visible);
            e.buttons[0].visible = visible;
          }

          if (e.buttons[0].onClick) {
            eval('var onclick = ' + e.buttons[0].onClick);
            e.buttons[0].onClick = onclick;
          }
        }

        if (e.type == 'list') {
          field = e.dataField;
          colCalulated = {
            dataField: field,
            calculateCellValue: function calculateCellValue(data) {
              var value = [];
              var datas = eval('data.' + field);
              datas.forEach(function (element) {
                value.push(element.libelle);
              });
              return value.join(',');
            }
          };
          Object.assign(e, colCalulated);
        }

        if (e.onEditorPrepared) {
          editOnPreparing.push(e.dataField);
          onCellHoverChanged = true;

          e.cellTemplate = function (container, options) {
            \$('<a />').text(e.onEditorPrepared).css('text-decoration', 'underline').appendTo(container);
          };
        }
      });
    }

    if (disableOnlyEditing && disableOnlyEditing.length != 0) {
      obj.onCellPrepared = function (e) {
        var isNewRow = false;

        for (var iCount = 0; iCount < disableOnlyEditing.length; iCount++) {
          if (e.row && e.row.isNewRow) isNewRow = true;

          if (e.column.dataField === disableOnlyEditing[iCount] && !isNewRow) {
            var selectBoxElement = e.cellElement.find('.dx-selectbox');
            e.cellElement.find('input').prop('readonly', true);
            if (e.cellElement.find('.dx-texteditor-buttons-container').length == 1) e.cellElement.find('.dx-texteditor-buttons-container').remove();

            if (selectBoxElement.length > 0) {
              \$(selectBoxElement[0]).dxSelectBox('instance').option('readOnly', true);
            }
          }

          isNewRow = false;
        }

        if (disableOnlyAdding && disableOnlyAdding.length != 0) {
          for (var _iCount = 0; _iCount < disableOnlyAdding.length; _iCount++) {
            if (e.row && e.row.isNewRow) isNewRow = true;

            if (e.column.dataField === disableOnlyAdding[_iCount] && isNewRow) {
              var selectBoxElement = e.cellElement.find('.dx-selectbox');
              e.cellElement.find('input').prop('disabled', true);
              if (e.cellElement.find('.dx-texteditor-buttons-container').length == 1) e.cellElement.find('.dx-texteditor-buttons-container').remove();

              if (selectBoxElement.length > 0) {
                \$(selectBoxElement[0]).dxSelectBox('instance').option('readOnly', true);
              }
            }

            isNewRow = false;
          }
        }

        if (e.rowType === \"data\" && e.column.command === \"edit\") {
          var isEditing = e.row.isEditing,
              \$links = e.cellElement.find(\".dx-link\");
          \$links.text(\"\");

          if (isEditing) {
            \$links.filter(\".dx-link-save\").dxButton({
              icon: \"save\"
            });
            \$links.filter(\".dx-link-cancel\").dxButton({
              icon: \"revert\"
            });
          } else {
            \$links.filter(\".dx-link-edit\").dxButton({
              icon: \"edit\"
            });
            \$links.filter(\".dx-link-delete\").dxButton({
              icon: \"trash\"
            });
          }
        }
      };
    }

    if (onCellHoverChanged) {
      var popup_hover = \$(\"#popup_cell\").dxPopover({
        width: 'auto',
        height: 'auto'
      }).dxPopover(\"instance\");

      obj.onCellPrepared = function (e) {
        if (e.rowType == \"data\" && editOnPreparing.includes(e.column.dataField)) e.cellElement.addClass(\"popover_cell\");
      };

      obj.onCellHoverChanged = function (e) {
        if (e.rowType === \"data\" && editOnPreparing.includes(e.column.dataField) && e.eventType === \"mouseover\") {
          popup_hover.option(\"contentTemplate\", function (contentElement) {
            \$(\"<div/>\").append(e.text).appendTo(contentElement);
          });
          popup_hover.option(\"target\", e.cellElement);
          popup_hover.show();
        }

        if (e.rowType === \"data\" && e.eventType === \"mouseout\") {
          popup_hover.hide();
        }
      };
    }

    if (onRowValidating != \"\") {
      obj.onRowValidating = function (e) {
        if (e.oldData) {
          if (e.newData.actif == false && e.newData.date_fin_application == null && !e.oldData.date_fin_application || e.newData.date_fin_application == null && e.newData.actif == undefined && e.oldData.actif == false) {
            e.isValid = false;
            e.errorText = \"Vous devez saisir une date de fin d'application lorsque le Taux est inactif\";
            var rowIndex = e.component.getRowIndexByKey(e.key);
            var cellElement = e.component.getCellElement(rowIndex, \"date_fin_application\")[0];
            var editorElement = cellElement.getElementsByClassName(\"dx-datebox\");
            \$(editorElement[0]).dxDateBox({
              validationStatus: \"invalid\"
            });
            \$(editorElement[0]).dxDateBox('instance').focus();
          }
        }
      };
    }

    if (rowClass) {
      obj.onRowPrepared = function (e) {
        if (e.rowType === 'data') {
          // Évalue la fonction rowClass qui a été passée en string
          var rowClassFunc = eval('(' + rowClass + ')');
          var cssClass = rowClassFunc(e.data);

          if (cssClass) {
            e.rowElement.addClass(cssClass);

            if (tooltipField && e.data[tooltipField]) {
              e.rowElement.attr('title', e.data[tooltipField]);
            }
          }
        }
      };
    }

    if (oneditorpreparing) {
      obj.onEditorPreparing = function (e) {
        if ((e.parentType === \"dataRow\" || e.parentType === \"filterRow\") && oneditorpreparing[e.dataField]) {
          e.editorName = \"dxTagBox\";
          e.autoExpandGroup = false;
          var storeEditor = common.createCustomStore(oneditorpreparing[e.dataField].getData);
          e.editorOptions.dataSource = storeEditor;
          e.editorOptions.showSelectionControls = true;
          e.editorOptions.displayExpr = oneditorpreparing[e.dataField].field;
          e.editorOptions.valueExpr = \"id\";
          e.editorOptions.value = e.value || [];

          e.editorOptions.onValueChanged = function (args) {
            e.setValue(args.value);
          };

          e.editorOptions.itemTemplate = function (data) {
            return \"<span title='\" + data[oneditorpreparing[e.dataField].field] + \"'>\" + data[oneditorpreparing[e.dataField].field] + \"</span>\";
          };

          e.editorOptions.onInitialized = function (args) {
            var \$tagBox = args.element.dxTagBox(\"instance\");
            var PopupInstance = null;
            \$(e.editorElement).parent().addClass('cursor-pointer'); // Gérer l'événement de clic pour ouvrir le tagBox

            \$(e.editorElement).on(\"dxclick\", function (spanClickArgs) {
              spanClickArgs.stopPropagation();
            }); //Gérer l'événement de clic sur la cellule pour ouvrir le tagBox

            \$(e.editorElement).parent().on(\"dxclick\", function (cellClickArgs) {
              cellClickArgs.stopPropagation();
              if (\$('.dx-selectbox-popup-wrapper ').length == 1) \$tagBox.option('opened', false);else \$tagBox.option('opened', true);
            });
          };
        }
      };
    }

    if (rowDblClick) {
      obj.onRowDblClick = function (e) {
        e.component.selectRows([e.key], false);
        var url = \$('#infos_list').data('showlink').split('/');
        url[url.length - 1] = e.data.id;
        window.open(url.join('/') + '?id_equipement=' + e.data[rowDblClick], \"_blank\");
      };
    }

    if (onEditorPreparingChangeItems) {
      obj.onEditorPreparing = function (e) {
        if (e.row.isNewRow) {
          if (e.parentType === 'dataRow' && e.name == onEditorPreparingChangeItems.name) {
            var codes = [];
            var items = [];

            for (var iCount = 0; iCount < e.component.getVisibleRows().length; iCount++) {
              var row = e.component.getVisibleRows()[iCount];

              if (row.rowType === 'data') {
                codes.push(row.data[onEditorPreparingChangeItems.field]);
              }
            }

            for (var i = 0; i < e.lookup.items.length; i++) {
              if (!codes.includes(e.lookup.items[i][onEditorPreparingChangeItems.field])) {
                items.push(e.lookup.items[i]);
              }
            }

            e.lookup.items = items;
          }

          e.editorOptions.dataSource = items;
        }
      };

      obj.onRowRemoved = function (e) {
        e.component.refresh();
      };
    }

    if (source) {
      obj.dataSource = source;
    } else {
      obj.dataSource = dataSource;
    }

    if (remoteOperations) {
      obj.remoteOperations = remoteOperations;
    }

    if (editing) {
      obj.editing = editing;
      obj.editing.mode = \"row\";
    }

    if (allowedPageSizes) {
      obj.pager.allowedPageSizes = allowedPageSizes;
    }

    if (searchPanel) {
      obj.searchPanel = searchPanel;
    }

    if (pagination) {
      obj.pager = pagination;
    }

    if (toolbarInvisible) {
      obj.onToolbarPreparing = function (e) {
        e.toolbarOptions.visible = false;
      };
    }

    obj.rowDragging.allowReordering = rang_tri;
    obj.columns = columns; //on gère le filtre par défaut si on en a un

    if (defautFiltre) {
      var filtre = JSON.parse(defautFiltre.filtre);
      var colonnes = JSON.parse(defautFiltre.colonnes);
      \$('#mes-filtres').remove();
      obj.filterValue = filtre; //on parse les colonnes pour que afficher celle qui étaient visible lors du filltre

      if (colonnes) {
        obj.columns.forEach(function (value, key) {
          if (colonnes[value.dataField] != undefined) {
            obj.columns[key].visibleIndex = colonnes[value.dataField];
            obj.columns[key].visible = true;
          } else {
            obj.columns[key].visible = false;
          }
        });
      }
    }

    if (disableonview && disableonview != 'edit') {
      obj.editing.allowUpdating = function (e) {
        return false;
      };

      obj.editing.allowDeleting = function (e) {
        return false;
      };
    }

    \$(element).dxDataGrid(obj);
  };

  \$(\".grid\").each(function () {
    window.initDevExtremeGrids(this);
  });

  function onCustomItemCreating(args) {
    var newItem = {};
    newItem.ID = 9999;
    newItem.Name = args.text;
    return newItem;
  } // Fonction pour ouvrir ou fermer le dxTagBox


  function toggleTagBox(tagBox) {
    tagBox.option(\"opened\", !tagBox.option(\"opened\"));
  }

  \$('input.adresse_auto').autocomplete({
    source: function source(request, response) {
      \$.ajax({
        method: \"GET\",
        url: 'https://api-adresse.data.gouv.fr/search/?q=' + request.term + '&type=housenumber&autocomplete=1&limit10&lat&lon',
        dataType: \"json\",
        success: function success(data) {
          response(\$.map(data.features, function (item) {
            var adresses = []; // Ici on est obligé d'ajouter les CP dans un array pour ne pas avoir plusieurs fois le même

            if (\$.inArray(item.properties.label, adresses) == -1 && item.properties.housenumber) {
              adresses.push(item.properties.label);
              return {
                label: item.properties.label,
                city: item.properties.city,
                postcode: item.properties.postcode,
                name: item.properties.name,
                coordinates: item.geometry.coordinates
              };
            }
          }));
        }
      });
    },
    // On remplit aussi la ville
    select: function select(event, ui) {
      var id_site = \$(this).data('idsite');
      var id_equipement = \$(this).data('idequipement');
      var prefix = \$(this).data('prefix');
      var diverror = \$(this).data('diverror');
      var element = \$(this);
      if (id_equipement) id_equipement = '-' + id_equipement;else id_equipement = '';
      \$(\"input[name='\" + prefix + \"_code_postal\" + id_equipement + \"']\").val(ui.item.postcode);
      \$(\"input[name='\" + prefix + \"_ville\" + id_equipement + \"']\").val(ui.item.city);
      \$(\"input[name='\" + prefix + \"_adresse\" + id_equipement + \"']\").val(ui.item.name);
      \$(\"input[name='\" + prefix + \"_coordinates\" + id_equipement + \"']\").val(ui.item.coordinates);

      if (id_site != '') {
        \$.ajax({
          method: \"POST\",
          url: '/secteur/compare/secteur_site/' + id_site,
          dataType: \"json\",
          data: {
            \"coordinates\": ui.item.coordinates
          },
          success: function success(data) {
            if (data.error == true) {
              \$(diverror).show();
              \$(diverror).addClass('alert alert-danger');
              \$(diverror).css('display', 'flex');
              \$(diverror).css('align-items', 'center');
              \$(diverror).html('<i class=\"fa fa-warning\"></i>' + data.message);
            } else {
              \$(diverror).removeClass('alert alert-danger');
              \$(diverror).hide();
            }
          }
        });
      }
    }
  });
});
\$(document).ready(function () {
  var \$typeSelect = \$('.js-user-form-type');
  var \$siteTarget = \$('.js-site-target'); //gestion du lien actif du menu
  // Obtenez l'URL actuelle de la page

  var currentUrl = window.location.href; // Parcourez chaque élément de menu

  \$('#submenu .nav-item').removeClass('active');
  \$('#submenu .nav-item .dropdown-menu .dropdown-item').each(function () {
    var link = \$(this).attr('href'); // Vérifiez si l'URL de la page actuelle correspond à l'URL du lien du menu

    if (currentUrl.indexOf(link) !== -1) {
      // Ajoutez la classe 'active' à l'élément parent du lien
      \$(this).addClass('active');
      \$(this).parent().parent().parent().addClass('active');
    } else {
      \$(this).removeClass('active');
    }
  });
  \$typeSelect.on('change', function (e) {
    \$.ajax({
      url: \$typeSelect.data('specific-type-url'),
      data: {
        type_utilisateur: \$typeSelect.val()
      },
      success: function success(html) {
        if (!html) {
          \$siteTarget.find('select').remove();
          \$siteTarget.addClass('d-none');
          return;
        } // Replace the current field and show


        \$siteTarget.html(html).removeClass('d-none');
      }
    });
  });
  /** TCHAT **/
  //this function can remove a array element.

  Array.remove = function (array, from, to) {
    var rest = array.slice((to || from) + 1 || array.length);
    array.length = from < 0 ? array.length + from : from;
    return array.push.apply(array, rest);
  }; //this is used to close a popup


  window.close_popup = function close_popup(id) {
    for (var iii = 0; iii < popups.length; iii++) {
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        document.getElementById(id).remove();
        calculate_popups();
        return;
      }
    }
  }; //displays the popups. Displays based on the maximum number of popups that can be displayed on the current viewport width


  function display_popups() {
    var right = 400;

    if (\$('.chat-sidebar').css('display') == 'none') {
      right = 0;
    }

    var class_bottom = 'sans-bottom-bar';

    if (\$('.fixed-bottom').length >= 1) {
      class_bottom = 'avec-bottom-bar';
    }

    var iii = 0;

    for (iii; iii < total_popups; iii++) {
      if (popups[iii] != undefined) {
        var element = document.getElementById(popups[iii]);
        element.style.right = right + \"px\";
        \$(element).removeClass('sans-bottom-bar').removeClass('avec-bottom-bar');
        \$(element).addClass(class_bottom);
        right = right + 320;
        element.style.display = \"block\";
      }
    }

    for (var jjj = iii; jjj < popups.length; jjj++) {
      var element = document.getElementById(popups[jjj]);
      element.style.display = \"none\";
    }
  } //creates markup for a new popup. Adds the id to popups array.


  window.register_popup = function register_popup(id, name, class_name) {
    for (var iii = 0; iii < popups.length; iii++) {
      //already registered. Bring it to front.
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        loadPopupTchat(id, name, class_name);
        return;
      }
    }

    loadPopupTchat(id, name, class_name);
  };

  function loadPopupTchat(id, name, class_name) {
    var read = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
    return;
    id = parseInt(id);
    \$.ajax({
      method: \"GET\",
      url: \"/tchat/load\",
      data: {
        'id': id,
        'name': name,
        'class_name': class_name,
        'read': read
      },
      dataType: \"html\",
      success: function success(result) {
        if (\$('#' + id).length == 1) {
          var body = \$(result).children('.chatbox__body').html();
          \$('#' + id).children('.chatbox__body').html(body);
        } else {
          \$('body').append(result);
        }

        \$('#' + id + ' .panel-footer .input-group input').focus();

        if (!popups.includes(id)) {
          popups.unshift(id);
        }

        calculate_popups();
        \$('#' + id + ' > .chatbox__body')[0].scrollTop = \$('#' + id + ' > .chatbox__body')[0].scrollHeight;
        loadSidebarTchat();
      },
      error: function error() {
        alert('erreur lors de lu load popup');
      },
      timeout: 5000
    });
  } // window.loadSidebarTchat = function loadSidebarTchat() {
  //     \$.ajax({
  //         method: \"GET\",
  //         url: \"/tchat/conversations\",
  //         dataType: \"html\",
  //         success: function (result) {
  //             \$('#tchat-groups').html(result);
  //             if (\$('#hidden_tchat_numbers').text() != '0') {
  //                 \$('#number_tchat_global').text(\$('#hidden_tchat_numbers').text());
  //                 //if (\$('.chat-sidebar').css('display') == 'none') {
  //                     \$('#number_tchat_global').show();
  //                     \$('.picto-tchat').addClass('bg-rouge');
  //                // }
  //             } else {
  //                 \$('#number_tchat_global').text('');
  //                 \$('.picto-tchat').removeClass('bg-rouge');
  //                 if (\$('.chat-sidebar').css('display') == 'none') {
  //                     \$('#number_tchat_global').hide();
  //
  //                 }
  //             }
  //         },
  //         error: function () {
  //         },
  //         timeout: 10000
  //     });
  // }
  //calculate the total number of popups suitable and then populate the toatal_popups variable.


  window.calculate_popups = function calculate_popups() {
    var width = window.innerWidth;

    if (width < 540) {
      total_popups = 0;
    } else {
      if (\$('.chat-sidebar').css('display') != 'none') {
        width = width - 483;
      } //320 is width of a single popup box


      total_popups = parseInt(width / 320);
    }

    display_popups();
  }; //-- No use time. It is a javaScript effect.


  function insertChat(text, parent, class_name) {
    var control = \"\";
    var date = new Date();
    var dateText = date.getHours() + ':' + date.getMinutes();
    control = '<li style=\"width:100%;flex-direction: column;\" class=\"d-flex align-items-end\">' + '<div class=\"msj-r macro ' + class_name + '\">' + '<div class=\"text text-l\">' + '<p>' + text + '</p>' + '</div>' + '</div>' + '<div><span class=\"chat-msg-hour\"><span style=\"font-size: 0.68em\">' + dateText + '&nbsp;' + '                               <span style=\"opacity:0.6\">&check;</span>' + '                               <span style=\"opacity:0.6\">&check;</span></span></span></div>' + '</li>';
    parent.append(control);
    var chatbody = \$(parent).parent();
    chatbody.animate({
      scrollTop: chatbody[0].scrollHeight
    }, 750);
  }

  window.handleNewMessage = function handleNewMessage(id, name, class_name) {
    //on test si la popup est ouverture, on la recharge
    for (var iii = 0; iii < popups.length; iii++) {
      //already registered. Bring it to front.
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        \$('#' + id).removeClass('chatbox--tray');
        loadPopupTchat(id, name, class_name);
        return;
      }
    } //sinon on va mettre à jour la sidebartchat
    // loadSidebarTchat();

  }; //recalculate when window is loaded and also when window is resized.


  window.addEventListener(\"resize\", calculate_popups);

  window.sendMessage = function sendMessage(elementText, element) {
    var text = elementText.text();
    var class_name = elementText.data('class-name');

    if (text !== \"\") {
      //call ajax post tchat
      \$.ajax({
        method: \"POST\",
        url: \"/tchat/post\",
        data: {
          'id': element.parents('.chat-popup').attr('id'),
          'message': text
        },
        dataType: \"json\",
        success: function success(e) {
          //on recharge la popup
          loadPopupTchat(parseInt(element.parents('.chat-popup').attr('id')), '', class_name);
        }
      });
      elementText.text('');
    }
  };

  function show(element) {
    var popperInstance = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_34__.createPopper)(this, tooltip); // We need to tell Popper to update the tooltip position
    // after we show the tooltip, otherwise it will be incorrect

    popperInstance.update();
  }

  function hide(element) {} //pour valider les checkbox required (non géré par symphony de base)


  function deRequireCb(elClass) {
    var el = document.getElementsByClassName(elClass);
    var atLeastOneChecked = false; //at least one cb is checked

    for (i = 0; i < el.length; i++) {
      if (el[i].checked === true) {
        atLeastOneChecked = true;
      }
    }

    if (atLeastOneChecked === true) {
      for (var i = 0; i < el.length; i++) {
        el[i].required = false;
      }
    } else {
      for (var i = 0; i < el.length; i++) {
        el[i].required = true;
      }
    }
  }

  window.getHtmlFromAjax = function getHtmlFromAjax(route) {
    //call ajax post tchat
    return new Promise(function (resolve, reject) {
      \$.ajax({
        method: \"GET\",
        url: route,
        dataType: \"html\",
        success: function success(result) {
          resolve(result);
        },
        error: function error(xhr, status, _error) {
          reject(_error);
        }
      });
    });
  };

  \$('body').on('click', '.btn-save', function (e) {
    e.preventDefault();
    var rights = {},
        splitName = [],
        idRight = '',
        site = '',
        value = '';
    \$('#table-rights td input.form-check-input').each(function (e) {
      splitName = \$(this).attr('name').split('-');
      idRight = splitName[3];
      site = splitName[1];
      value = \$(this)[0].checked == true ? 1 : 0;

      if (!rights[site]) {
        rights[site] = {};
      }

      rights[site][idRight] = value;
    });
    rights = JSON.stringify(rights);
  });
  \$('body').on('click', '#submit-save-filter', function (e) {
    e.preventDefault();
    var arrayColumnsVisible = {};
    var titre = \$('#titre_filtre').val();
    var role = \$('#filtre_role').val();
    var defaut = false;
    var defaut_utilisateur = false;
    if (\$('#filtre_par_defaut')[0].checked == true) defaut = true;
    if (\$('#filtre_par_defaut_utilisateur')[0].checked == true) defaut_utilisateur = true; //if (\$('#gridContainer').length == 1) {

    var filtre = \$(\".grid\").dxDataGrid('instance').getCombinedFilter(true); //      console.log(\$('.grid').dxDataGrid('instance').getVisibleColumns());

    \$('.grid').dxDataGrid('instance').getVisibleColumns().forEach(function (e) {
      if (e.type != 'selection') {
        arrayColumnsVisible[e.dataField] = e.visibleIndex;
      }
    });
    common.resetForm(); // } else {
    //     var filtre = \$('#pivotgrid').dxPivotGrid('instance').getDataSource().state();
    // }

    if (filtre || arrayColumnsVisible) {
      \$.ajax({
        url: \"/filters/\" + \$('#infos_list').data('page-filtre'),
        type: \"POST\",
        dataType: \"json\",
        data: {
          'titre': titre,
          'filtres': filtre,
          'colonnes': arrayColumnsVisible,
          'defaut': defaut,
          'defaut_utilisateur': defaut_utilisateur,
          'role': role,
          'site': \$('#filtre_site').val()
        },
        success: function success(result) {
          if (result.status == 0) {
            \$('.alert').html(result.message).show();
          } else {
            popup_save_filter.hide();
          }
        },
        error: function error() {
          console.log('erreur lors de l\\'ajout du filtre');
        }
      });
    } else {
      \$('.alert').html('Vous devez filtrer vos données avant de pouvoir les enregistrer').show();
    }
  }); //page user

  \$('body').on('click', '.remove_user', function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Etes vous sur de vouloir supprimer cette liaison??</i>\", \"Utilisateur\");
    result.done(function (dialogResult) {
      if (dialogResult) {
        var id = \$(this).data('id');
        var parent = \$(this).parent().parent();
        \$.ajax({
          method: \"PATCH\",
          url: \"/\" + \$('#infos_list').data('page-filtre') + \"/\" + id,
          dataType: \"json\",
          data: {
            \"responsable\": null
          },
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            alert('erreur lors de la suppression');
          },
          timeout: 5000
        });
      }

      result = undefined;
    });
  });
  \$('body').on('click', '#add_subordonnee', function (e) {
    \$('#body-add-subordonnee').load('/configuration/utilisateurs/site-sub-select/' + userId, null);
    var popupAddSub = common.createDxPopup(\"popup-add-subordonnee\", \"Ajout d'une personne\", '80%');
    \$('#popup-add-subordonnee').show();
    popupAddSub.show();
    \$('.alert').html('').hide();
  });
  \$('body').on('click', '.btn-close-popupadd, .btn-submit-popupadd', function (e) {
    \$('#popup-add-subordonnee').dxPopup(\"instance\").hide();
  });
  \$('body').on('click', 'button[type=submit]', function (e) {
    e.preventDefault();

    if (this.hasAttribute('form')) {
      var form = '#' + \$(this).attr('form');
    } else {
      var form = e.target.form;
    } //pour les formulaires avec checkbox, on les revalident avant le submit


    if (\$(form).find('.checkbox-required > label > input').length != 0) {
      \$(form).find('.checkbox-required > label > input:first').click().click();
    }

    if (\$(form)[0].reportValidity() != false) {
      \$(form).submit();
    }
  });
  \$('body').on('submit', 'form.form-ajax', common.handleNewFormSubmit.bind(this));
  \$('body').on('click', '[data-dxpopup]', function (e) {
    e.preventDefault();
    var idPopup = \$(this).data('popup-id');
    var width = \$(this).data('popup-width');
    var height = \$(this).data('popup-height');
    var contentTemplateAjax = \$(this).data('content-template-ajax');
    var container = \$(this).data('poppup-container');
    var position_of = \$(this).data('popup-position-of');
    var position_at = \$(this).data('popup-position-at');
    var position_my = \$(this).data('popup-position-my');
    var scrollview = \$(this).data('popup-scrollview');
    var scrollview_height = \$(this).data('scrollview-height');
    var closeOnOutsideClick = \$(this).data('popup-closeoutside');
    var offset = \$(this).data('popup-offset'); //on réinitialise seulement le formulaire de la popup

    \$('#' + idPopup + ' form').each(function () {
      \$(this)[0].reset();
    });
    var popup = common.createDxPopup(idPopup, \$(this).data('popup-title'), width, height);

    if (container) {
      popup.option(\"container\", container);
    }

    if (contentTemplateAjax) {
      // var html = window.getHtmlFromAjax(contentTemplateAjax);
      // popup.option(\"contentTemplate\", html);
      window.getHtmlFromAjax(contentTemplateAjax).then(function (data) {
        popup.option(\"contentTemplate\", data);
      })[\"catch\"](function (error) {
        console.error('Erreur :', error);
      });
    }

    if (position_of) {
      popup.option('position.of', \$(position_of));
    }

    if (offset) {
      popup.option('position.offset', offset);
    }

    if (position_at) {
      popup.option('position.at', position_at);
    }

    if (position_my) {
      popup.option('position.my', position_my);
    }

    if (closeOnOutsideClick === false) {
      popup.option(\"closeOnOutsideClick\", closeOnOutsideClick);
    }

    if (scrollview) {
      popup.option(\"onShown\", function (e) {
        \$(scrollview).dxScrollView({
          scrollByContent: true,
          scrollByThumb: true,
          useNative: true,
          width: '100%',
          height: scrollview_height
        });
        popup.repaint();
      });
    }

    \$('#' + idPopup).show();
    popup.show();
    \$('.alert').html('').hide();
  });
  \$('body').on('click', 'button.btn-close-popup', function (e) {
    e.preventDefault();
    var idPopup = \$(this).data('dxpopup-id');
    \$('#' + idPopup).dxPopup('instance').hide();
  }); //pour les evenements hide/ show sur click

  \$('body').on('change', 'input[data-change-target]', function (e) {
    var target = \$(this).data('change-target');
    \$(target).toggle();
  });
  \$(document).ready(function () {
    common.resetForm();
    \$('button[data-bs-toggle=\"tab\"]').on('show.bs.tab', function (e) {
      localStorage.setItem('activeTab', \$(e.target).attr('id'));
    });
    var activeTab = localStorage.getItem('activeTab');

    if (activeTab) {
      \$('#' + activeTab).tab('show');
    }

    \$('.input_tel:not(.not_fr)').mask('00.00.00.00.00', {
      translation: {
        '0': {
          pattern: /[0-9]/,
          recursive: false
        }
      }
    });
    \$('.input_tel.not_fr').mask('9999999999'); //  window.loadSidebarTchat();
  }); //pour les evenements hide/ show sur click

  \$(document).on('click', '.toggle-click', function (e) {
    e.preventDefault();
    var target = \$(this).data('change-target');
    \$(target).toggle();

    if (target == '.chat-sidebar') {
      window.calculate_popups();
    }
  });
  \$('body').on('click', '.tchat-group-notif', function (e) {
    \$(this).toggleClass('fa-unselected');
    var idgroupe = \$(this).data('idgroupe');
    var idutilisateur = \$(this).data('idutilisateur');
    \$.ajax({
      method: \"PATCH\",
      url: \"/tchat/patch/group_utilisateur/\" + idgroupe + \"/\" + idutilisateur,
      dataType: \"json\",
      error: function error() {
        alert('erreur lors de la mise à jour');
      },
      timeout: 2000
    });
  });
  \$('body').on('click', '.tchat-group-delete', function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Êtes vous sur de vouloir supprimer le membre?</i>\", \"Utilisateur\");
    var idgroupe = \$(this).data('idgroupe');
    var idutilisateur = \$(this).data('idutilisateur');
    var parent = \$(this).parent().parent();
    result.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: \"/tchat/delete/group_utilisateur/\" + idgroupe + \"/\" + idutilisateur,
          dataType: \"json\",
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            alert('erreur lors de la suppression');
          },
          timeout: 2000
        });
      }
    });
  });
  \$('body').on('click input', '.checkbox-required > label > input', function (e) {
    var className = \$(this).data('class-validation');
    deRequireCb(className);
  });
  \$('body').on('mouseenter focus', '.tchat-infos,.collection-info,.popper', function (e) {
    if (\$(this).next().length != 0 || \$(this).parent()[0].localName == 'a') {
      var tooltip = \$(this).next()[0];
      var position = 'top';
      if (\$(this).data('popper-position')) position = \$(this).data('popper-position');
      if (\$(this).parent()[0].localName == 'a') tooltip = \$(this).parent().next()[0];
      tooltip.setAttribute('data-show', '');
      var popperInstance = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_34__.createPopper)(this, tooltip, {
        placement: position
      }); // We need to tell Popper to update the tooltip position
      // after we show the tooltip, otherwise it will be incorrect

      popperInstance.update();
    }
  });
  \$('body').on('mouseleave blur', '.tchat-infos,.collection-info,.popper', function (e) {
    if (\$(this).next().length != 0 || \$(this).parent()[0].localName == 'a') {
      var tooltip = \$(this).next()[0];
      if (\$(this).parent()[0].localName == 'a') tooltip = \$(this).parent().next()[0];
      tooltip.removeAttribute('data-show');
    }
  });
  \$('body').on('click', '.tchat-group-add', function (e) {
    var form = \$('#popup-tchat-groupe-add > .modal-dialog > .modal-content > .modal-body > form')[0];
    form.reset(); //on reset le select picker à la mano

    \$(\"#tchat_groupe_entity_user\").val('default');
    \$(\"#tchat_groupe_entity_user\").selectpicker(\"refresh\");
    var myModal = new bootstrap.Modal(document.getElementById('popup-tchat-groupe-add'));
    myModal.show();
  });
  \$('body').on('click', '.chat-people_first,.chat-people_name', function (e) {
    var parent = \$(this).parent();
    register_popup(\$(parent).data('id'), \$(parent).data('name'), \$(parent).data('class'));
  });
  \$('body').on('click', '.chatbox__title__close', function (e) {
    window.close_popup(\$(this).data('id'));
  });
  \$('body').on('click', '.chatbox__title', function (e) {
    \$(this).parents('.chatbox').toggleClass('chatbox--tray');
  });
  \$('body').on('keyup', \".chat-send-msg\", function (e) {
    e.preventDefault();

    if (e.which == 13) {
      window.sendMessage(\$(this), \$(this));
    }
  });
  \$('body').on('click', \".btn-chat-post\", function (e) {
    window.sendMessage(\$(this).prev('input'), \$(this));
  });
  \$('body').on('click', \".btn-tchat-lu\", function (e) {
    loadPopupTchat(\$(this).data('id'), \$(this).data('name'), \$(this).data('classname'), true);
  });
  \$('body').on('click', \".btn-groupe-delete\", function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Etes vous sur de vouloir supprimer le groupe?</i>\", \"Groupe\");
    var popupId = \$(this).data('dxpopup-id');
    var popup = \$('#' + popupId).dxPopup('instance');
    var url = \$(this).data('href');
    result.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: url,
          dataType: \"json\",
          success: function success(result) {
            \$('#tchat-groups').html(result.groups);
            popup.hide();
            \$('#' + popupId).hide();
          }
        });
      }

      result = undefined;
    });
  }); //confirm global

  \$('body').on('click', 'button[data-confirm=1],a[data-confirm=1]', function (e) {
    var message = \$(this).data('message');
    var ajax = \$(this).data('ajax');
    if (!message) message = 'Etes vous sur de vouloir effectuer la suppression?';
    var target_html = \$(this).data('target-html');
    var js = \$(this).data('js');
    var result = DevExpress.ui.dialog.confirm(\"<i>\" + message + \"</i>\");

    if (\$(this).data('href')) {
      var url = \$(this).data('href');
    } else {
      var url = \$(this).attr('href');
    }

    result.done(function (dialogResult) {
      if (dialogResult) {
        if (url) {
          if (ajax) {
            \$.ajax({
              method: \"GET\",
              url: url,
              timeout: 2000,
              success: function success(data, textStatus, xhr) {
                if (data.html) {
                  \$(target_html).html(data.html);
                  \$(target_html).show();
                }
              }
            });
          } else {
            document.location.href = url;
          }
        }

        if (js) {
          eval(js);
        }
      }

      result = undefined;
    });
    return false;
  });
  \$('body').on('click', '.contrat-groupe-delete', function (e) {
    window.resultContratGroupeDelete = DevExpress.ui.dialog.confirm(\"<i>Êtes vous sur de vouloir supprimer cet élément?</i>\");
    var id = \$(this).data('id');
    var parent = \$(this).parent().parent();
    return window.resultContratGroupeDelete.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: \"/contrat/groupe/\" + id,
          dataType: \"json\",
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            console.log('erreur lors de la suppression');
          },
          timeout: 2000
        });
      }
    });
  });
  \$('body').on('keyup', '#input-tchat-search', function (e) {
    var search = \$(this).val().toLowerCase();
    \$('.chat-people_name').each(function (e) {
      if (\$(this).text().toLowerCase().indexOf(search) == -1) {
        \$(this).parent().addClass('hide').removeClass('d-flex');
      } else {
        \$(this).parent().removeClass('hide').addClass('d-flex');
      }
    });
  });
  \$('body').on('click', '#nav-logout', function (e) {
    popups = [];
  });
  \$('body').on('click', 'i.disabled', function (e) {
    e.preventDefault();
    return false;
  });
});
\$('.messages').flashNotification('init');

/***/ }),

/***/ \"./assets/styles/app.scss\":
/*!********************************!*\\
  !*** ./assets/styles/app.scss ***!
  \\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ })

},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ \"use strict\";
/******/ 
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ __webpack_require__.O(0, [\"vendors-node_modules_core-js_internals_engine-user-agent_js-node_modules_core-js_internals_ex-b41e05\",\"vendors-node_modules_jquery_dist_jquery_js\",\"vendors-node_modules_core-js_internals_add-to-unscopables_js-node_modules_core-js_internals_a-5c631b\",\"vendors-node_modules_core-js_internals_array-method-has-species-support_js-node_modules_core--4e4faa\",\"vendors-node_modules_core-js_internals_function-bind_js-node_modules_core-js_modules_es_array-1797b9\",\"vendors-node_modules_core-js_modules_es_array_filter_js-node_modules_core-js_modules_es_array-0312b5\",\"vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609\",\"vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_symfony_ux-turbo-merc-726e46\",\"assets_js_common_js\"], () => (__webpack_exec__(\"./assets/app.js\")));
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ }
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vfC9cXC4oanx0KXN4Iiwid2VicGFjazovLy8uL2Fzc2V0cy9jb250cm9sbGVycy5qc29uIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb250cm9sbGVycy90Y2hhdF9jb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvZG9jbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2hpZ2hsaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2FwcC5zY3NzIl0sIm5hbWVzIjpbImFycmF5IiwiZnJvbSIsInRvIiwicmVzdCIsInNsaWNlIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwicG9wdXBzVmFsdWUiLCJjb25zb2xlIiwibG9nIiwiaWQiLCJpaWkiLCJyZW1vdmVBcnJheSIsInBvcHVwZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmUiLCJjYWxjdWxhdGVfcG9wdXBzIiwicmlnaHQiLCJ1bmRlZmluZWQiLCJlbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwiampqIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiZGF0YXNldCIsInRjaGF0SWQiLCJjbGFzc19uYW1lIiwidGNoYXRDbGFzcyIsIm5hbWUiLCJ0Y2hhdE5hbWUiLCJ1bnNoaWZ0IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJpbm5lckhUTUwiLCJ3aWR0aCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJ0b3RhbF9wb3B1cHMiLCJwYXJzZUludCIsImRpc3BsYXlfcG9wdXBzIiwidGV4dCIsInBhcmVudCIsImNvbnRyb2wiLCJkYXRlIiwiRGF0ZSIsImRhdGVUZXh0IiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwic2V0VGltZW91dCIsImFwcGVuZCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsIiQiLCJDb250cm9sbGVyIiwicG9wdXBzIiwiQXJyYXkiLCJyZXF1aXJlIiwiZ2xvYmFsIiwialF1ZXJ5IiwiYm9vdHN0cmFwIiwiYXBwIiwic3RhcnRTdGltdWx1c0FwcCIsIiRtb2RhbCIsIiRjb250cm9sbGVyQ29kZSIsImZpbmQiLCIkdGVtcGxhdGVDb2RlIiwiYW5jaG9yIiwidXJsIiwiY29udGVudCIsImVhY2giLCJodG1sIiwicmVwbGFjZSIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbiIsInRhZyIsIm1hdGNoIiwiZnVuYyIsImhsanMiLCJwaHAiLCJ0d2lnIiwiY29tbW9uIiwiaXNEYXRhR3JpZFJlcXVlc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlUmVuZGVyZXIiLCJhc3NpZ25OZXdCb2R5IiwiY29udGFpbmVyQXBwIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lckFjdGlvbnMiLCJjb250YWluZXJQb3B1cHMiLCJjb250YWluZXJKYXZhc2NyaXB0Qm9keSIsIm5ld0NvbnRhaW5lckFwcCIsIm5ld0VsZW1lbnQiLCJuZXdDb250YWluZXJBY3Rpb25zIiwibmV3Q29udGFpbmVyUG9wdXBzIiwibmV3Q29udGFpbmVySmF2YXNjcmlwdEJvZHkiLCJib2R5IiwiYXR0ciIsInJlcGxhY2VXaXRoIiwiRGV2RXhwcmVzcyIsImxvY2FsaXphdGlvbiIsImxvY2FsZSIsImxvYWRNZXNzYWdlcyIsImZyTWVzc2FnZXMiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpbmRleE9mIiwiY2xhc3NMaXN0IiwiYWRkIiwiY2xpY2siLCJ0b2dnbGVDbGFzcyIsIm1ldGhvZHMiLCJpbml0Iiwib3B0aW9ucyIsInNldHRpbmdzIiwiZXh0ZW5kIiwiZm4iLCJmbGFzaE5vdGlmaWNhdGlvbiIsImRlZmF1bHRzIiwic2hvdyIsImRlbGF5IiwiaGlkZURlbGF5IiwiaGlkZSIsImxpc3RlbkluY29taW5nTWVzc2FnZXMiLCJhamF4Q29tcGxldGUiLCJ4aHIiLCJnZXRSZXNwb25zZUhlYWRlciIsImRhdGEiLCJwYXJzZUpTT04iLCJyZXNwb25zZVRleHQiLCJtZXNzYWdlcyIsImkiLCJlcnJvciIsImFkZEVycm9yIiwic3VjY2VzcyIsImFkZFN1Y2Nlc3MiLCJpbmZvIiwiYWRkSW5mbyIsIm1lc3NhZ2UiLCJmbGFzaE1lc3NhZ2VFbHQiLCJnZXRCYXNpY0ZsYXNoIiwiYWRkQ2xhc3MiLCJhZGRUb0xpc3QiLCJjc3MiLCJnZXRDbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uRWx0IiwiYXBwZW5kVG8iLCJzY3JvbGwiLCJmYWRlSW4iLCJmYWRlT3V0IiwiYW5pbWF0ZSIsIm1ldGhvZCIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJvbiIsInF1ZXJ5U3RyaW5nIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ0eXBlX2FmZmljaGFnZSIsImxvY2FsTmFtZSIsImhhc0NsYXNzIiwicmVzZXRGb3JtIiwibG9hZFBpY2tlciIsImFkZExpbmsiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkRm9ybVRvQ29sbGVjdGlvbiIsInByZXYiLCJjb2xsZWN0aW9ucyIsIm5leHQiLCJhZGRFbGVtZW50Rm9ybURlbGV0ZUxpbmsiLCJjb2xsZWN0aW9uSG9sZGVyIiwiY29sbGVjdGlvbkhvbGRlcklkIiwiaXRlbSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc190b19hZGQiLCJpbmRleCIsInBvc2l0aW9uIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVGb3JtQnV0dG9uIiwicHJldmVudERlZmF1bHQiLCJpbml0RGV2RXh0cmVtZUdyaWRzIiwicm93Q2xhc3MiLCJ0b29sdGlwRmllbGQiLCJwYWdlIiwiY29sdW1ucyIsImV2YWwiLCJwYXRjaF9wYXRoIiwicmVtb3RlT3BlcmF0aW9ucyIsImFsbG93ZWRQYWdlU2l6ZXMiLCJrZXkiLCJvbmVkaXRvcnByZXBhcmluZyIsIm9uRWRpdG9yUHJlcGFyaW5nQ2hhbmdlSXRlbXMiLCJyb3dEYmxDbGljayIsInJhbmdfdHJpIiwiY29sdW1uX2F1dG93aWR0aCIsInNvdXJjZSIsImdldF9wYXRoIiwiY3JlYXRlX3BhdGgiLCJkZWxldGVfcGF0aCIsImRhdGFTb3VyY2UiLCJjcmVhdGVDdXN0b21TdG9yZSIsInRtcEdyaWQiLCJkYXRhZ3JpZF9vYmoiLCJlZGl0aW5nIiwib25DZWxsSG92ZXJDaGFuZ2VkIiwic2VhcmNoUGFuZWwiLCJwYWdpbmF0aW9uIiwidG9vbGJhckludmlzaWJsZSIsImRpc2FibGVPbmx5RWRpdGluZyIsImRpc2FibGVPbmx5QWRkaW5nIiwic2VhcmNocGFuZWxwbGFjZWhvbGRlciIsImV4cG9ydEFsbFRleHQiLCJvblJvd1ZhbGlkYXRpbmciLCJlZGl0T25QcmVwYXJpbmciLCJkZWZhdXRGaWx0cmUiLCJkZWZhdXRGaWx0cmVVdGlsaXNhdGV1ciIsImRpc2FibGVvbnZpZXciLCJleHBvcnRGaWVsZHMiLCJncmlkQ2xhc3MiLCJvYmoiLCJkYXRhZ3JpZFNpbXBsZSIsImRhdGFncmlkRnVsbCIsImNvbHVtbkF1dG9XaWR0aCIsImVsZW1lbnRBdHRyIiwib25FeHBvcnRpbmciLCJjb21wb25lbnQiLCJiZWdpblVwZGF0ZSIsImZpZWxkIiwiY29sdW1uT3B0aW9uIiwiZmlsZU5hbWUiLCJ0ZXh0cyIsImV4cG9ydEFsbCIsInBsYWNlaG9sZGVyIiwiZGVmYXVsdFBsYWNlSG9sZGVyIiwib25Sb3dJbnNlcnRlZCIsInRyaWdnZXIiLCJvblJvd1JlbW92ZWQiLCJvblJvd1VwZGF0ZWQiLCJvbkNvbnRlbnRSZWFkeSIsImxvb2t1cCIsImRhdGFUeXBlIiwiZmlsdGVyVmFsdWUiLCJlZGl0b3JPcHRpb25zIiwiYWNjZXB0Q3VzdG9tVmFsdWUiLCJvbkN1c3RvbUl0ZW1DcmVhdGluZyIsImFyZ3MiLCJuZXdJdGVtIiwibGliZWxsZSIsImNhbGN1bGF0ZURpc3BsYXlWYWx1ZSIsInJvd0RhdGEiLCJmaWx0ZXJFeHByZXNzaW9uIiwidmFsdWVzIiwiZGF0YUZpZWxkIiwicmVzdWx0IiwibWFwIiwicXVlcnkiLCJkYXRhcyIsImZpbHRlciIsInRvQXJyYXkiLCJmaWVsZERpc3BsYXkiLCJqb2luIiwiY2VsbFRlbXBsYXRlIiwiY2VsbFRlbXBsYXRlUGhvdG8iLCJjZWxsVGVtcGxhdGVDb3VsZXVyIiwiY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbiIsImZpbHRlclZhbHVlcyIsInNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uIiwiaXRlbURhdGEiLCJhcnJheTEiLCJhcnJheTIiLCJldmVyeSIsInZhbHVlIiwiYnV0dG9ucyIsInZpc2libGUiLCJvbkNsaWNrIiwib25jbGljayIsInR5cGUiLCJjb2xDYWx1bGF0ZWQiLCJjYWxjdWxhdGVDZWxsVmFsdWUiLCJvbkVkaXRvclByZXBhcmVkIiwiY29udGFpbmVyIiwib25DZWxsUHJlcGFyZWQiLCJpc05ld1JvdyIsImlDb3VudCIsInJvdyIsImNvbHVtbiIsInNlbGVjdEJveEVsZW1lbnQiLCJjZWxsRWxlbWVudCIsInByb3AiLCJkeFNlbGVjdEJveCIsIm9wdGlvbiIsInJvd1R5cGUiLCJjb21tYW5kIiwiaXNFZGl0aW5nIiwiJGxpbmtzIiwiZHhCdXR0b24iLCJpY29uIiwicG9wdXBfaG92ZXIiLCJkeFBvcG92ZXIiLCJoZWlnaHQiLCJpbmNsdWRlcyIsImV2ZW50VHlwZSIsImNvbnRlbnRFbGVtZW50Iiwib2xkRGF0YSIsIm5ld0RhdGEiLCJhY3RpZiIsImRhdGVfZmluX2FwcGxpY2F0aW9uIiwiaXNWYWxpZCIsImVycm9yVGV4dCIsInJvd0luZGV4IiwiZ2V0Um93SW5kZXhCeUtleSIsImdldENlbGxFbGVtZW50IiwiZWRpdG9yRWxlbWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJkeERhdGVCb3giLCJ2YWxpZGF0aW9uU3RhdHVzIiwiZm9jdXMiLCJvblJvd1ByZXBhcmVkIiwicm93Q2xhc3NGdW5jIiwiY3NzQ2xhc3MiLCJyb3dFbGVtZW50Iiwib25FZGl0b3JQcmVwYXJpbmciLCJwYXJlbnRUeXBlIiwiZWRpdG9yTmFtZSIsImF1dG9FeHBhbmRHcm91cCIsInN0b3JlRWRpdG9yIiwiZ2V0RGF0YSIsInNob3dTZWxlY3Rpb25Db250cm9scyIsImRpc3BsYXlFeHByIiwidmFsdWVFeHByIiwib25WYWx1ZUNoYW5nZWQiLCJzZXRWYWx1ZSIsIml0ZW1UZW1wbGF0ZSIsIm9uSW5pdGlhbGl6ZWQiLCIkdGFnQm94IiwiZHhUYWdCb3giLCJQb3B1cEluc3RhbmNlIiwic3BhbkNsaWNrQXJncyIsInN0b3BQcm9wYWdhdGlvbiIsImNlbGxDbGlja0FyZ3MiLCJvblJvd0RibENsaWNrIiwic2VsZWN0Um93cyIsInNwbGl0Iiwib3BlbiIsImNvZGVzIiwiaXRlbXMiLCJnZXRWaXNpYmxlUm93cyIsInJlZnJlc2giLCJtb2RlIiwicGFnZXIiLCJvblRvb2xiYXJQcmVwYXJpbmciLCJ0b29sYmFyT3B0aW9ucyIsInJvd0RyYWdnaW5nIiwiYWxsb3dSZW9yZGVyaW5nIiwiZmlsdHJlIiwiSlNPTiIsInBhcnNlIiwiY29sb25uZXMiLCJ2aXNpYmxlSW5kZXgiLCJhbGxvd1VwZGF0aW5nIiwiYWxsb3dEZWxldGluZyIsImR4RGF0YUdyaWQiLCJJRCIsIk5hbWUiLCJ0b2dnbGVUYWdCb3giLCJ0YWdCb3giLCJhdXRvY29tcGxldGUiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJhamF4IiwidGVybSIsImZlYXR1cmVzIiwiYWRyZXNzZXMiLCJpbkFycmF5IiwicHJvcGVydGllcyIsImxhYmVsIiwiaG91c2VudW1iZXIiLCJjaXR5IiwicG9zdGNvZGUiLCJjb29yZGluYXRlcyIsImdlb21ldHJ5Iiwic2VsZWN0IiwidWkiLCJpZF9zaXRlIiwiaWRfZXF1aXBlbWVudCIsInByZWZpeCIsImRpdmVycm9yIiwidmFsIiwicmVtb3ZlQ2xhc3MiLCJyZWFkeSIsIiR0eXBlU2VsZWN0IiwiJHNpdGVUYXJnZXQiLCJjdXJyZW50VXJsIiwiaHJlZiIsImxpbmsiLCJ0eXBlX3V0aWxpc2F0ZXVyIiwiY2xvc2VfcG9wdXAiLCJjbGFzc19ib3R0b20iLCJyZWdpc3Rlcl9wb3B1cCIsImxvYWRQb3B1cFRjaGF0IiwicmVhZCIsImNoaWxkcmVuIiwibG9hZFNpZGViYXJUY2hhdCIsImFsZXJ0IiwidGltZW91dCIsImluc2VydENoYXQiLCJjaGF0Ym9keSIsImhhbmRsZU5ld01lc3NhZ2UiLCJzZW5kTWVzc2FnZSIsImVsZW1lbnRUZXh0IiwicGFyZW50cyIsInBvcHBlckluc3RhbmNlIiwiY3JlYXRlUG9wcGVyIiwidG9vbHRpcCIsInVwZGF0ZSIsImRlUmVxdWlyZUNiIiwiZWxDbGFzcyIsImVsIiwiYXRMZWFzdE9uZUNoZWNrZWQiLCJjaGVja2VkIiwicmVxdWlyZWQiLCJnZXRIdG1sRnJvbUFqYXgiLCJyb3V0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3RhdHVzIiwicmlnaHRzIiwic3BsaXROYW1lIiwiaWRSaWdodCIsInNpdGUiLCJzdHJpbmdpZnkiLCJhcnJheUNvbHVtbnNWaXNpYmxlIiwidGl0cmUiLCJyb2xlIiwiZGVmYXV0IiwiZGVmYXV0X3V0aWxpc2F0ZXVyIiwiZ2V0Q29tYmluZWRGaWx0ZXIiLCJnZXRWaXNpYmxlQ29sdW1ucyIsInBvcHVwX3NhdmVfZmlsdGVyIiwiZGlhbG9nIiwiY29uZmlybSIsImRvbmUiLCJkaWFsb2dSZXN1bHQiLCJsb2FkIiwidXNlcklkIiwicG9wdXBBZGRTdWIiLCJjcmVhdGVEeFBvcHVwIiwiZHhQb3B1cCIsImhhc0F0dHJpYnV0ZSIsImZvcm0iLCJ0YXJnZXQiLCJyZXBvcnRWYWxpZGl0eSIsInN1Ym1pdCIsImhhbmRsZU5ld0Zvcm1TdWJtaXQiLCJiaW5kIiwiaWRQb3B1cCIsImNvbnRlbnRUZW1wbGF0ZUFqYXgiLCJwb3NpdGlvbl9vZiIsInBvc2l0aW9uX2F0IiwicG9zaXRpb25fbXkiLCJzY3JvbGx2aWV3Iiwic2Nyb2xsdmlld19oZWlnaHQiLCJjbG9zZU9uT3V0c2lkZUNsaWNrIiwib2Zmc2V0IiwicmVzZXQiLCJwb3B1cCIsInRoZW4iLCJkeFNjcm9sbFZpZXciLCJzY3JvbGxCeUNvbnRlbnQiLCJzY3JvbGxCeVRodW1iIiwidXNlTmF0aXZlIiwicmVwYWludCIsInRvZ2dsZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJhY3RpdmVUYWIiLCJnZXRJdGVtIiwidGFiIiwibWFzayIsInRyYW5zbGF0aW9uIiwicGF0dGVybiIsInJlY3Vyc2l2ZSIsImlkZ3JvdXBlIiwiaWR1dGlsaXNhdGV1ciIsImNsYXNzTmFtZSIsInNldEF0dHJpYnV0ZSIsInBsYWNlbWVudCIsInJlbW92ZUF0dHJpYnV0ZSIsInNlbGVjdHBpY2tlciIsIm15TW9kYWwiLCJNb2RhbCIsIndoaWNoIiwicG9wdXBJZCIsImdyb3VwcyIsInRhcmdldF9odG1sIiwianMiLCJ0ZXh0U3RhdHVzIiwicmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZSIsInRvTG93ZXJDYXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBJOzs7Ozs7Ozs7Ozs7Ozs7QUN0QkEsaUVBQWU7QUFDZixtQ0FBbUMseU1BQStFO0FBQ2xILDZDQUE2Qyx1T0FBOEY7QUFDM0ksQ0FBQyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O21FQUttQixDOztrRUFTRCxVQUFTQSxLQUFULEVBQWdCQyxJQUFoQixFQUFzQkMsRUFBdEIsRUFBMEI7QUFDcEMsVUFBSUMsSUFBSSxHQUFHSCxLQUFLLENBQUNJLEtBQU4sQ0FBWSxDQUFDRixFQUFFLElBQUlELElBQVAsSUFBZSxDQUFmLElBQW9CRCxLQUFLLENBQUNLLE1BQXRDLENBQVg7QUFDQUwsV0FBSyxDQUFDSyxNQUFOLEdBQWVKLElBQUksR0FBRyxDQUFQLEdBQVdELEtBQUssQ0FBQ0ssTUFBTixHQUFlSixJQUExQixHQUFpQ0EsSUFBaEQ7QUFDQSxhQUFPRCxLQUFLLENBQUNNLElBQU4sQ0FBV0MsS0FBWCxDQUFpQlAsS0FBakIsRUFBd0JHLElBQXhCLENBQVA7QUFDSCxLOzs7Ozs7O1dBWEQsc0JBQWE7QUFDVCxXQUFLSyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0RDLGFBQU8sQ0FBQ0MsR0FBUixDQUFZLGFBQVo7QUFDRjtBQUVEO0FBQ0k7Ozs7V0FPSjtBQUNBLHlCQUFZQyxFQUFaLEVBQ0E7QUFDSSxXQUFJLElBQUlDLEdBQUcsR0FBRyxDQUFkLEVBQWlCQSxHQUFHLEdBQUcsS0FBS0osV0FBTCxDQUFpQkgsTUFBeEMsRUFBZ0RPLEdBQUcsRUFBbkQsRUFDQTtBQUNJLFlBQUdELEVBQUUsSUFBSSxLQUFLSCxXQUFMLENBQWlCSSxHQUFqQixDQUFULEVBQ0E7QUFDSSxlQUFLSixXQUFMLEdBQW1CSyxXQUFXLENBQUNDLE1BQUQsRUFBUUYsR0FBUixDQUE5QjtBQUNBRyxrQkFBUSxDQUFDQyxjQUFULENBQXdCTCxFQUF4QixFQUE0Qk0sTUFBNUI7QUFDQSxlQUFLQyxnQkFBTDtBQUVBO0FBQ0g7QUFDSjtBQUNKLEssQ0FFRDs7OztXQUNBLDBCQUNBO0FBQ0ksVUFBSUMsS0FBSyxHQUFHLEdBQVo7QUFFQSxVQUFJUCxHQUFHLEdBQUcsQ0FBVjs7QUFDQSxXQUFJQSxHQUFKLEVBQVNBLEdBQUcsR0FBRyxLQUFLSixXQUFwQixFQUFpQ0ksR0FBRyxFQUFwQyxFQUNBO0FBQ0ksWUFBRyxLQUFLSixXQUFMLENBQWlCSSxHQUFqQixLQUF5QlEsU0FBNUIsRUFDQTtBQUNJLGNBQUlDLE9BQU8sR0FBR04sUUFBUSxDQUFDQyxjQUFULENBQXdCLEtBQUtSLFdBQUwsQ0FBaUJJLEdBQWpCLENBQXhCLENBQWQ7QUFDQVMsaUJBQU8sQ0FBQ0MsS0FBUixDQUFjSCxLQUFkLEdBQXNCQSxLQUFLLEdBQUcsSUFBOUI7QUFDQUEsZUFBSyxHQUFHQSxLQUFLLEdBQUcsR0FBaEI7QUFDQUUsaUJBQU8sQ0FBQ0MsS0FBUixDQUFjQyxPQUFkLEdBQXdCLE9BQXhCO0FBQ0g7QUFDSjs7QUFFRCxXQUFJLElBQUlDLEdBQUcsR0FBR1osR0FBZCxFQUFtQlksR0FBRyxHQUFHLEtBQUtoQixXQUFMLENBQWlCSCxNQUExQyxFQUFrRG1CLEdBQUcsRUFBckQsRUFDQTtBQUNJLFlBQUlILE9BQU8sR0FBR04sUUFBUSxDQUFDQyxjQUFULENBQXdCLEtBQUtSLFdBQUwsQ0FBaUJnQixHQUFqQixDQUF4QixDQUFkO0FBQ0FILGVBQU8sQ0FBQ0MsS0FBUixDQUFjQyxPQUFkLEdBQXdCLE1BQXhCO0FBQ0g7QUFDSixLLENBRUQ7Ozs7V0FDQSx3QkFBZUUsS0FBZixFQUNBO0FBQ0UsVUFBSWQsRUFBRSxHQUFHYyxLQUFLLENBQUNDLGFBQU4sQ0FBb0JDLE9BQXBCLENBQTRCQyxPQUFyQztBQUNBLFVBQUlDLFVBQVUsR0FBSUosS0FBSyxDQUFDQyxhQUFOLENBQW9CQyxPQUFwQixDQUE0QkcsVUFBOUM7QUFDQSxVQUFJQyxJQUFJLEdBQUlOLEtBQUssQ0FBQ0MsYUFBTixDQUFvQkMsT0FBcEIsQ0FBNEJLLFNBQXhDOztBQUVFLFdBQUksSUFBSXBCLEdBQUcsR0FBRyxDQUFkLEVBQWlCQSxHQUFHLEdBQUcsS0FBS0osV0FBTCxDQUFpQkgsTUFBeEMsRUFBZ0RPLEdBQUcsRUFBbkQsRUFDQTtBQUNJO0FBQ0EsWUFBR0QsRUFBRSxJQUFJLEtBQUtILFdBQUwsQ0FBaUJJLEdBQWpCLENBQVQsRUFDQTtBQUNJLGVBQUtKLFdBQUwsR0FBbUIsS0FBS0ssV0FBTCxDQUFpQixLQUFLTCxXQUF0QixFQUFtQ0ksR0FBbkMsQ0FBbkI7QUFDQSxlQUFLSixXQUFMLENBQWlCeUIsT0FBakIsQ0FBeUJ0QixFQUF6QjtBQUNBLGVBQUtPLGdCQUFMO0FBRUE7QUFDSDtBQUNKOztBQUNELFVBQUlHLE9BQU8sR0FBRyw2REFBNERWLEVBQTVELEdBQWdFLElBQTlFO0FBQ0FVLGFBQU8sR0FBR0EsT0FBTyxHQUFJLDZCQUFYLEdBQTBDUSxVQUExQyxHQUFzRCxJQUFoRTtBQUNBUixhQUFPLEdBQUdBLE9BQU8sR0FBRyxzQkFBVixHQUFpQ1UsSUFBakMsR0FBc0Msd0RBQXRDLEdBQWdHcEIsRUFBaEcsR0FBb0csVUFBOUc7QUFDQVUsYUFBTyxHQUFHQSxPQUFPLEdBQUcsb0RBQXBCO0FBQ0FBLGFBQU8sR0FBR0EsT0FBTyxHQUFHLGtUQUFWLEdBQThUUSxVQUE5VCxHQUEwVSx5SEFBcFY7QUFDQVIsYUFBTyxHQUFHQSxPQUFPLEdBQUcsNEJBQXBCO0FBQ0FBLGFBQU8sR0FBR0EsT0FBTyxHQUFHLHlkQUFwQjtBQUVBTixjQUFRLENBQUNtQixvQkFBVCxDQUE4QixNQUE5QixFQUFzQyxDQUF0QyxFQUF5Q0MsU0FBekMsR0FBcURwQixRQUFRLENBQUNtQixvQkFBVCxDQUE4QixNQUE5QixFQUFzQyxDQUF0QyxFQUF5Q0MsU0FBekMsR0FBcURkLE9BQTFHO0FBQ0EsV0FBS2IsV0FBTCxDQUFpQnlCLE9BQWpCLENBQXlCdEIsRUFBekI7QUFDQSxXQUFLTyxnQkFBTDtBQUNILEssQ0FFRDs7OztXQUNBLDRCQUNBO0FBQ0ksVUFBSWtCLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxVQUFuQjs7QUFDQSxVQUFHRixLQUFLLEdBQUcsR0FBWCxFQUNBO0FBQ0ksYUFBS0csWUFBTCxHQUFvQixDQUFwQjtBQUNILE9BSEQsTUFLQTtBQUNJSCxhQUFLLEdBQUdBLEtBQUssR0FBRyxHQUFoQixDQURKLENBRUk7O0FBQ0EsYUFBS0csWUFBTCxHQUFvQkMsUUFBUSxDQUFDSixLQUFLLEdBQUMsR0FBUCxDQUE1QjtBQUNIOztBQUVELFdBQUtLLGNBQUw7QUFFSCxLLENBRUQ7Ozs7V0FDQSxvQkFBV0MsSUFBWCxFQUFpQkMsTUFBakIsRUFBd0I7QUFDcEIsVUFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQSxVQUFJQyxJQUFJLEdBQUksSUFBSUMsSUFBSixFQUFaO0FBQ0EsVUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLFFBQUwsS0FBa0IsR0FBbEIsR0FBd0JILElBQUksQ0FBQ0ksVUFBTCxFQUF2QztBQUVBTCxhQUFPLEdBQUcsNEJBQ04sbUNBRE0sR0FFTiwyQkFGTSxHQUdOLEtBSE0sR0FHQ0YsSUFIRCxHQUdPLE1BSFAsR0FJTixZQUpNLEdBSU9LLFFBSlAsR0FJZ0IsY0FKaEIsR0FLTixRQUxNLEdBTU4sUUFOTSxHQU9OLE9BUEo7QUFRQUcsZ0JBQVUsQ0FDTixZQUFVO0FBQ05QLGNBQU0sQ0FBQ1EsTUFBUCxDQUFjUCxPQUFkO0FBQ0FELGNBQU0sQ0FBQyxDQUFELENBQU4sQ0FBVVMsU0FBVixHQUFzQlQsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVVSxZQUFoQztBQUNILE9BSkssRUFJSCxDQUpHLENBQVY7QUFNQUMsT0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0JGLFNBQXBCLEdBQWdDVCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVVLFlBQTFDO0FBQ0g7Ozs7RUFsSXdCRSxpRDs7cUNBQ1IsQ0FBQyxPQUFELEM7O29DQUNEO0FBQUVDLFFBQU0sRUFBRUM7QUFBVixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0NGcEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNDO0NBR0Q7O0FBQ0EsSUFBTUgsQ0FBQyxHQUFHSSxtQkFBTyxDQUFDLG9EQUFELENBQWpCLEMsQ0FFQTs7O0FBQ0FDLHFCQUFNLENBQUNMLENBQVAsR0FBV0sscUJBQU0sQ0FBQ0MsTUFBUCxHQUFnQk4sQ0FBM0I7QUFFQTtBQUNBO0FBQ0E7Q0FJQTs7Q0FHQTs7Q0FHQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBLElBQU1PLFNBQVMsR0FBR3hCLE1BQU0sQ0FBQ3dCLFNBQVAsR0FBbUJILG1CQUFPLENBQUMscUZBQUQsQ0FBNUMsQzs7Ozs7Ozs7Ozs7Ozs7OztDQ3BDQTs7QUFDTyxJQUFNSSxHQUFHLEdBQUdDLDBFQUFnQixDQUFDTCwwSUFBRCxDQUE1QixDLENBTVA7QUFDQSxnRTs7Ozs7Ozs7Ozs7O0NDUkE7Ozs7Ozs7Ozs7QUFDQUosQ0FBQyxDQUFDLFlBQVc7QUFDVCxNQUFJVSxNQUFNLEdBQUdWLENBQUMsQ0FBQyxrQkFBRCxDQUFkO0FBQ0EsTUFBSVcsZUFBZSxHQUFHRCxNQUFNLENBQUNFLElBQVAsQ0FBWSxVQUFaLENBQXRCO0FBQ0EsTUFBSUMsYUFBYSxHQUFHSCxNQUFNLENBQUNFLElBQVAsQ0FBWSxXQUFaLENBQXBCOztBQUVBLFdBQVNFLE1BQVQsQ0FBZ0JDLEdBQWhCLEVBQXFCQyxPQUFyQixFQUE4QjtBQUMxQixXQUFPLDhDQUE4Q0QsR0FBOUMsR0FBb0QsSUFBcEQsR0FBMkRDLE9BQTNELEdBQXFFLE1BQTVFO0FBQ0g7O0FBQUEsR0FQUSxDQVNUOztBQUNBTixRQUFNLENBQUNFLElBQVAsQ0FBWSxlQUFaLEVBQTZCSyxJQUE3QixDQUFrQyxZQUFXO0FBQ3pDakIsS0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixDQUFhbEIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixHQUFlQyxPQUFmLENBQXVCLHdDQUF2QixFQUFpRSxVQUFTSixHQUFULEVBQWM7QUFDeEYsYUFBT0QsTUFBTSxDQUFDQyxHQUFELEVBQU1BLEdBQU4sQ0FBYjtBQUNILEtBRlksQ0FBYjtBQUdILEdBSkQsRUFWUyxDQWdCVDs7QUFDQSxNQUFJSyxXQUFXLEdBQUc7QUFDZCxjQUFVLDJGQURJO0FBRWQsa0JBQWMsd0dBRkE7QUFHZCx1QkFBbUIsZ0dBSEw7QUFJZCxjQUFVLDZFQUpJO0FBS2QsaUJBQWE7QUFMQyxHQUFsQjtBQVFBVCxpQkFBZSxDQUFDQyxJQUFoQixDQUFxQixjQUFyQixFQUFxQ0ssSUFBckMsQ0FBMEMsWUFBVztBQUNqRCxRQUFJSSxVQUFVLEdBQUdyQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBakI7O0FBRUEsUUFBSWdDLFdBQVcsQ0FBQ0MsVUFBRCxDQUFmLEVBQTZCO0FBQ3pCckIsT0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixDQUFhSixNQUFNLENBQUNNLFdBQVcsQ0FBQ0MsVUFBRCxDQUFaLEVBQTBCQSxVQUExQixDQUFuQjtBQUNIO0FBQ0osR0FORCxFQXpCUyxDQWlDVDs7QUFDQVIsZUFBYSxDQUFDRCxJQUFkLENBQW1CLGlDQUFuQixFQUFzREssSUFBdEQsQ0FBMkQsWUFBVztBQUNsRSxRQUFJSyxHQUFHLEdBQUd0QixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBVjs7QUFFQSxRQUFJLFdBQVdrQyxHQUFYLElBQWtCQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxNQUFWLENBQXRCLEVBQXlDO0FBQ3JDO0FBQ0g7O0FBRUQsUUFBSVIsR0FBRyxHQUFHLDJDQUEyQ08sR0FBM0MsR0FBaUQsUUFBakQsR0FBNERBLEdBQXRFO0FBRUF0QixLQUFDLENBQUMsSUFBRCxDQUFELENBQVFrQixJQUFSLENBQWFKLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNTyxHQUFOLENBQW5CO0FBQ0gsR0FWRCxFQWxDUyxDQThDVDs7QUFDQVQsZUFBYSxDQUFDRCxJQUFkLENBQW1CLHNDQUFuQixFQUEyREssSUFBM0QsQ0FBZ0UsWUFBVztBQUN2RSxRQUFJTyxJQUFJLEdBQUd4QixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBWDtBQUVBLFFBQUkyQixHQUFHLEdBQUcsZ0RBQWdEUyxJQUFoRCxHQUF1RCxRQUF2RCxHQUFrRUEsSUFBNUU7QUFFQXhCLEtBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWtCLElBQVIsQ0FBYUosTUFBTSxDQUFDQyxHQUFELEVBQU1TLElBQU4sQ0FBbkI7QUFDSCxHQU5EO0FBT0gsQ0F0REEsQ0FBRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIQTtBQUNBO0FBQ0E7QUFFQUMsNkVBQUEsQ0FBc0IsS0FBdEIsRUFBNkJDLHVFQUE3QjtBQUNBRCw2RUFBQSxDQUFzQixNQUF0QixFQUE4QkUsd0VBQTlCO0FBRUFGLG1GQUFBLEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUEE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUlHLE1BQU0sR0FBR3hCLG1CQUFPLENBQUMsdUNBQUQsQ0FBcEI7O0FBQ0FyQixNQUFNLENBQUM4QyxpQkFBUCxHQUEyQixLQUEzQjtBQUVBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0Msb0VBQWQsRUFBc0M7QUFDbENDLGVBRGtDLDJCQUNsQjtBQUNaLFFBQU1DLFlBQVksR0FBR3pFLFFBQVEsQ0FBQzBFLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBckI7QUFDQSxRQUFNQyxnQkFBZ0IsR0FBRzNFLFFBQVEsQ0FBQzBFLGFBQVQsQ0FBdUIsaUJBQXZCLENBQXpCO0FBQ0EsUUFBTUUsZUFBZSxHQUFHNUUsUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixjQUF2QixDQUF4QjtBQUNBLFFBQU1HLHVCQUF1QixHQUFHN0UsUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixrQkFBdkIsQ0FBaEM7QUFFQSxRQUFNSSxlQUFlLEdBQUcsS0FBS0MsVUFBTCxDQUFnQkwsYUFBaEIsQ0FBOEIsTUFBOUIsQ0FBeEI7QUFDQSxRQUFNTSxtQkFBbUIsR0FBRyxLQUFLRCxVQUFMLENBQWdCTCxhQUFoQixDQUE4QixpQkFBOUIsQ0FBNUI7QUFDQSxRQUFNTyxrQkFBa0IsR0FBRyxLQUFLRixVQUFMLENBQWdCTCxhQUFoQixDQUE4QixjQUE5QixDQUEzQjtBQUNBLFFBQU1RLDBCQUEwQixHQUFHLEtBQUtILFVBQUwsQ0FBZ0JMLGFBQWhCLENBQThCLGtCQUE5QixDQUFuQyxDQVRZLENBVVo7O0FBRUFuQyxLQUFDLENBQUN2QyxRQUFRLENBQUNtRixJQUFWLENBQUQsQ0FBaUJDLElBQWpCLENBQXNCLE9BQXRCLEVBQThCN0MsQ0FBQyxDQUFDLEtBQUt3QyxVQUFOLENBQUQsQ0FBbUJLLElBQW5CLENBQXdCLE9BQXhCLENBQTlCO0FBQ0E3QyxLQUFDLENBQUN2QyxRQUFRLENBQUNtRixJQUFWLENBQUQsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLEVBQTJCN0MsQ0FBQyxDQUFDLEtBQUt3QyxVQUFOLENBQUQsQ0FBbUJLLElBQW5CLENBQXdCLElBQXhCLENBQTNCOztBQUNBLFFBQUlULGdCQUFnQixJQUFJSyxtQkFBeEIsRUFBNkM7QUFDekNMLHNCQUFnQixDQUFDVSxXQUFqQixDQUE2QkwsbUJBQTdCO0FBQ0g7O0FBQ0QsUUFBSUosZUFBZSxJQUFJSyxrQkFBdkIsRUFBMkM7QUFDdkNMLHFCQUFlLENBQUNTLFdBQWhCLENBQTRCSixrQkFBNUI7QUFDSDs7QUFDRCxRQUFJSix1QkFBdUIsSUFBSUssMEJBQS9CLEVBQTJEO0FBQ3ZETCw2QkFBdUIsQ0FBQ1EsV0FBeEIsQ0FBb0NILDBCQUFwQztBQUNIOztBQUNELFFBQUlULFlBQVksSUFBSUssZUFBcEIsRUFBcUM7QUFDakNMLGtCQUFZLENBQUNZLFdBQWIsQ0FBeUJQLGVBQXpCO0FBQ0gsS0FGRCxNQUVPO0FBQ0g5RSxjQUFRLENBQUNtRixJQUFULENBQWNFLFdBQWQsQ0FBMEIsS0FBS04sVUFBL0I7QUFDSDtBQUNKO0FBN0JpQyxDQUF0QztBQWdDQU8sVUFBVSxDQUFDQyxZQUFYLENBQXdCQyxNQUF4QixDQUErQixJQUEvQjtBQUNBRixVQUFVLENBQUNDLFlBQVgsQ0FBd0JFLFlBQXhCLENBQXFDQyxzRUFBckM7O0FBRUEsSUFBSUMsU0FBUyxDQUFDQyxTQUFWLENBQW9CQyxPQUFwQixDQUE0QixLQUE1QixNQUF1QyxDQUFDLENBQTVDLEVBQStDO0FBQzNDN0YsVUFBUSxDQUFDbUYsSUFBVCxDQUFjVyxTQUFkLENBQXdCQyxHQUF4QixDQUE0QixTQUE1QjtBQUNIOztBQUVEeEQsQ0FBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQnlELEtBQW5CLENBQXlCLFlBQVc7QUFDaEN6RCxHQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QjBELFdBQXZCLENBQW1DLFFBQW5DO0FBQ0gsQ0FGRCxFLENBTUE7O0FBQ0EsSUFBSXpFLFlBQVksR0FBRyxDQUFuQixDLENBRUE7O0FBQ0EsSUFBSWlCLE1BQU0sR0FBRyxFQUFiO0FBRUEsSUFBSXlELE9BQU8sR0FBRztBQUNWQyxNQUFJLEVBQUUsY0FBU0MsT0FBVCxFQUFrQjtBQUNwQkYsV0FBTyxDQUFDRyxRQUFSLEdBQW1COUQsQ0FBQyxDQUFDK0QsTUFBRixDQUFTLEVBQVQsRUFBYS9ELENBQUMsQ0FBQ2dFLEVBQUYsQ0FBS0MsaUJBQUwsQ0FBdUJDLFFBQXBDLEVBQThDTCxPQUE5QyxDQUFuQjtBQUNBakUsY0FBVSxDQUNOLFlBQVc7QUFDUEksT0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUNLbUUsSUFETCxDQUNVLE1BRFYsRUFFS0MsS0FGTCxDQUVXVCxPQUFPLENBQUNHLFFBQVIsQ0FBaUJPLFNBRjVCLEVBR0tDLElBSEwsQ0FHVSxNQUhWO0FBS0gsS0FQSyxFQVFOLEdBUk0sQ0FBVjtBQVVBWCxXQUFPLENBQUNZLHNCQUFSO0FBQ0gsR0FkUzs7QUFpQlY7QUFDSjtBQUNBO0FBQ0lBLHdCQUFzQixFQUFFLGtDQUFXO0FBQy9CdkUsS0FBQyxDQUFDdkMsUUFBRCxDQUFELENBQVkrRyxZQUFaLENBQXlCLFVBQVNyRyxLQUFULEVBQWdCc0csR0FBaEIsRUFBcUJYLFFBQXJCLEVBQStCO0FBQ3BELFVBQUlXLEdBQUcsQ0FBQ0MsaUJBQUosQ0FBc0IsY0FBdEIsS0FBeUMsa0JBQTdDLEVBQWlFO0FBQzdELFlBQUlDLElBQUksR0FBRzNFLENBQUMsQ0FBQzRFLFNBQUYsQ0FBWUgsR0FBRyxDQUFDSSxZQUFoQixDQUFYOztBQUNBLFlBQUlGLElBQUksQ0FBQ0csUUFBVCxFQUFtQjtBQUNmLGNBQUlBLFFBQVEsR0FBR0gsSUFBSSxDQUFDRyxRQUFwQjtBQUNBLGNBQUlDLENBQUo7O0FBRUEsY0FBSUQsUUFBUSxDQUFDRSxLQUFiLEVBQW9CO0FBQ2hCLGlCQUFLRCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsS0FBVCxDQUFlakksTUFBL0IsRUFBdUNnSSxDQUFDLEVBQXhDLEVBQTRDO0FBQ3hDcEIscUJBQU8sQ0FBQ3NCLFFBQVIsQ0FBaUJILFFBQVEsQ0FBQ0UsS0FBVCxDQUFlRCxDQUFmLENBQWpCO0FBQ0g7QUFDSjs7QUFFRCxjQUFJRCxRQUFRLENBQUNJLE9BQWIsRUFBc0I7QUFDbEIsaUJBQUtILENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR0QsUUFBUSxDQUFDSSxPQUFULENBQWlCbkksTUFBakMsRUFBeUNnSSxDQUFDLEVBQTFDLEVBQThDO0FBQzFDcEIscUJBQU8sQ0FBQ3dCLFVBQVIsQ0FBbUJMLFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQkgsQ0FBakIsQ0FBbkI7QUFDSDtBQUNKOztBQUVELGNBQUlELFFBQVEsQ0FBQ00sSUFBYixFQUFtQjtBQUNmLGlCQUFLTCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ00sSUFBVCxDQUFjckksTUFBOUIsRUFBc0NnSSxDQUFDLEVBQXZDLEVBQTJDO0FBQ3ZDcEIscUJBQU8sQ0FBQzBCLE9BQVIsQ0FBZ0JQLFFBQVEsQ0FBQ00sSUFBVCxDQUFjTCxDQUFkLENBQWhCO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7QUFDSixLQTFCRDtBQTJCSCxHQWhEUztBQWtEVkksWUFBVSxFQUFFLG9CQUFTRyxPQUFULEVBQWtCO0FBQzFCLFFBQUlDLGVBQWUsR0FBRzVCLE9BQU8sQ0FBQzZCLGFBQVIsQ0FBc0JGLE9BQXRCLEVBQStCRyxRQUEvQixDQUF3QyxlQUF4QyxDQUF0QjtBQUNBOUIsV0FBTyxDQUFDK0IsU0FBUixDQUFrQkgsZUFBbEI7QUFDQTVCLFdBQU8sQ0FBQzFGLE9BQVIsQ0FBZ0JzSCxlQUFoQjtBQUNILEdBdERTO0FBd0RWTixVQUFRLEVBQUUsa0JBQVNLLE9BQVQsRUFBa0I7QUFDeEIsUUFBSUMsZUFBZSxHQUFHNUIsT0FBTyxDQUFDNkIsYUFBUixDQUFzQkYsT0FBdEIsRUFBK0JHLFFBQS9CLENBQXdDLGNBQXhDLENBQXRCO0FBRUE5QixXQUFPLENBQUMrQixTQUFSLENBQWtCSCxlQUFsQjtBQUNBNUIsV0FBTyxDQUFDMUYsT0FBUixDQUFnQnNILGVBQWhCO0FBQ0gsR0E3RFM7QUErRFZGLFNBQU8sRUFBRSxpQkFBU0MsT0FBVCxFQUFrQjtBQUN2QixRQUFJQyxlQUFlLEdBQUc1QixPQUFPLENBQUM2QixhQUFSLENBQXNCRixPQUF0QixFQUErQkcsUUFBL0IsQ0FBd0MsWUFBeEMsQ0FBdEI7QUFFQTlCLFdBQU8sQ0FBQytCLFNBQVIsQ0FBa0JILGVBQWxCO0FBQ0E1QixXQUFPLENBQUMxRixPQUFSLENBQWdCc0gsZUFBaEI7QUFDSCxHQXBFUztBQXNFVkMsZUFBYSxFQUFFLHVCQUFTRixPQUFULEVBQWtCO0FBQzdCLFFBQUlDLGVBQWUsR0FBR3ZGLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FDakJzRSxJQURpQixHQUVqQm1CLFFBRmlCLENBRVIseUNBRlEsRUFHakJFLEdBSGlCLENBR2IsU0FIYSxFQUdILFFBSEcsRUFHT0EsR0FIUCxDQUdXLE9BSFgsRUFHbUIsTUFIbkIsRUFJakI5QyxJQUppQixDQUlaLE1BSlksRUFJSixPQUpJLEVBS2pCaEQsTUFMaUIsQ0FLVkcsQ0FBQyxDQUFDLGdDQUFELENBQUQsQ0FBb0NrQixJQUFwQyxDQUF5Q29FLE9BQXpDLENBTFUsQ0FBdEIsQ0FNSTtBQU5KO0FBU0EsV0FBT0MsZUFBUDtBQUNILEdBakZTO0FBbUZWSyxnQkFBYyxFQUFFLDBCQUFXO0FBQ3ZCLFFBQUlDLGNBQWMsR0FBRzdGLENBQUMsQ0FBQyxtQkFBRCxDQUFELENBQ2hCeUYsUUFEZ0IsQ0FDUCxXQURPLEVBRWhCNUMsSUFGZ0IsQ0FFWCxpQkFGVyxFQUVRLE9BRlIsRUFHbEI7QUFIa0IsS0FJaEI4QyxHQUpnQixDQUlaLFNBSlksRUFJRCxDQUpDLENBQXJCO0FBT0EsV0FBT0UsY0FBUDtBQUNILEdBNUZTO0FBOEZWSCxXQUFTLEVBQUUsbUJBQVNILGVBQVQsRUFBMEI7QUFDakNBLG1CQUFlLENBQUNPLFFBQWhCLENBQXlCOUYsQ0FBQyxDQUFDLFdBQUQsQ0FBMUI7QUFDSCxHQWhHUztBQWtHVi9CLFNBQU8sRUFBRSxpQkFBU3NILGVBQVQsRUFBMEI7QUFDL0IzRixjQUFVLENBQ04sWUFBVztBQUNQMkYscUJBQWUsQ0FDVnBCLElBREwsQ0FDVSxNQURWLEVBRUtDLEtBRkwsQ0FFV1QsT0FBTyxDQUFDRyxRQUFSLENBQWlCTyxTQUY1QixFQUdLQyxJQUhMLENBR1UsTUFIVixFQUdrQixZQUFXO0FBQUV0RSxTQUFDLENBQUMsSUFBRCxDQUFELENBQVFyQyxNQUFSO0FBQW1CLE9BSGxEO0FBS0gsS0FQSyxFQVFOLEdBUk0sQ0FBVjtBQVVIO0FBN0dTLENBQWQ7QUErR0FxQyxDQUFDLENBQUNqQixNQUFELENBQUQsQ0FBVWdILE1BQVYsQ0FBaUIsWUFBVTtBQUN2QixNQUFJL0YsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRRixTQUFSLEtBQXNCLEdBQTFCLEVBQThCO0FBQzFCRSxLQUFDLENBQUMsU0FBRCxDQUFELENBQWFnRyxNQUFiO0FBQ0gsR0FGRCxNQUVLO0FBQ0RoRyxLQUFDLENBQUMsU0FBRCxDQUFELENBQWFpRyxPQUFiO0FBQ0g7QUFDSixDQU5EO0FBT0FqRyxDQUFDLENBQUMsV0FBRCxDQUFELENBQWV5RCxLQUFmLENBQXFCLFlBQVU7QUFDM0J6RCxHQUFDLENBQUMsV0FBRCxDQUFELENBQWVrRyxPQUFmLENBQXVCO0FBQ25CcEcsYUFBUyxFQUFFO0FBRFEsR0FBdkIsRUFFRyxHQUZIO0FBR0EsU0FBTyxLQUFQO0FBQ0gsQ0FMRDs7QUFPQUUsQ0FBQyxDQUFDZ0UsRUFBRixDQUFLQyxpQkFBTCxHQUF5QixVQUFTa0MsTUFBVCxFQUFpQjtBQUN0QztBQUNBLE1BQUl4QyxPQUFPLENBQUN3QyxNQUFELENBQVgsRUFBcUI7QUFDakIsV0FBT3hDLE9BQU8sQ0FBRXdDLE1BQUYsQ0FBUCxDQUFrQmxKLEtBQWxCLENBQXdCLElBQXhCLEVBQThCa0QsS0FBSyxDQUFDaUcsU0FBTixDQUFnQnRKLEtBQWhCLENBQXNCdUosSUFBdEIsQ0FBMkJDLFNBQTNCLEVBQXNDLENBQXRDLENBQTlCLENBQVA7QUFDSCxHQUZELE1BRU8sSUFBSSxRQUFPSCxNQUFQLE1BQWtCLFFBQWxCLElBQThCLENBQUVBLE1BQXBDLEVBQTRDO0FBQy9DLFdBQU94QyxPQUFPLENBQUNDLElBQVIsQ0FBYTNHLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUJxSixTQUF6QixDQUFQO0FBQ0gsR0FGTSxNQUVBO0FBQ0h0RyxLQUFDLENBQUNnRixLQUFGLENBQVEsWUFBYW1CLE1BQWIsR0FBc0IsNkNBQTlCO0FBQ0g7QUFDSixDQVREOztBQVdBbkcsQ0FBQyxDQUFDZ0UsRUFBRixDQUFLQyxpQkFBTCxDQUF1QkMsUUFBdkIsR0FBa0M7QUFDOUIsZUFBc0IsSUFEUTtBQUU5QixjQUFzQixJQUZRO0FBRzlCLGFBQXNCO0FBSFEsQ0FBbEM7QUFNQ2xFLENBQUMsQ0FBQ3ZDLFFBQUQsQ0FBRCxDQUFZOEksRUFBWixDQUFlLGtCQUFmLEVBQW1DLFlBQVc7QUFDMUMzRyxZQUFVLENBQ04sWUFBVztBQUNQSSxLQUFDLENBQUMsUUFBRCxDQUFELENBQ0tvRSxLQURMLENBQ1dULE9BQU8sQ0FBQ0csUUFBUixDQUFpQk8sU0FENUIsRUFFS0MsSUFGTCxDQUVVLE1BRlY7QUFJSCxHQU5LLEVBT04sR0FQTSxDQUFWLENBRDBDLENBVzFDOztBQUNBdEUsR0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUNzRSxJQUFqQyxHQVowQyxDQWMxQzs7QUFDQSxNQUFNa0MsV0FBVyxHQUFHekgsTUFBTSxDQUFDMEgsUUFBUCxDQUFnQkMsTUFBcEM7QUFDQSxNQUFNQyxTQUFTLEdBQUcsSUFBSUMsZUFBSixDQUFvQkosV0FBcEIsQ0FBbEI7QUFDQSxNQUFJSyxjQUFjLEdBQUk3RyxDQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QmpELE1BQXpCLElBQW1DLENBQXBDLEdBQXlDaUQsQ0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUIyRSxJQUF6QixDQUE4QixXQUE5QixDQUF6QyxHQUFzRixFQUEzRztBQUNBa0MsZ0JBQWMsR0FBSTdHLENBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCakQsTUFBeEIsSUFBa0MsQ0FBbkMsR0FBd0NpRCxDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QjJFLElBQXhCLENBQTZCLFdBQTdCLENBQXhDLEdBQW9Ga0MsY0FBckc7O0FBQ0EsTUFBSUEsY0FBYyxJQUFJLE1BQXRCLEVBQThCO0FBQzFCN0csS0FBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJpQixJQUE1QixDQUFpQyxZQUFXO0FBQ3pDLFVBQUtqQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXOEcsU0FBWCxJQUF3QixHQUF4QixJQUErQjlHLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUStHLFFBQVIsQ0FBaUIsVUFBakIsQ0FBaEMsSUFBaUUvRyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXOEcsU0FBWCxJQUF3QixRQUE3RixFQUFzRztBQUFFO0FBQ3BHOUcsU0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFReUYsUUFBUixDQUFpQixVQUFqQjtBQUVILE9BSEQsTUFHTztBQUNIekYsU0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRNkMsSUFBUixDQUFhLFVBQWIsRUFBeUIsVUFBekI7QUFDSDtBQUVILEtBUkQ7QUFTSDs7QUFFRGpCLFFBQU0sQ0FBQ29GLFNBQVA7QUFDQXBGLFFBQU0sQ0FBQ3FGLFVBQVAsR0FoQzBDLENBaUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHekosUUFBUSxDQUFDMEosZ0JBQVQsQ0FBMEIsaUJBQTFCLENBQWhCO0FBQ0FELFNBQU8sQ0FBQ0UsT0FBUixDQUFnQixVQUFVQyxDQUFWLEVBQWE7QUFDekJBLEtBQUMsQ0FBQ0MsZ0JBQUYsQ0FBbUIsT0FBbkIsRUFBNEJDLG1CQUE1QjtBQUNBLFFBQUl2SCxDQUFDLENBQUNxSCxDQUFELENBQUQsQ0FBS0csSUFBTCxDQUFVLElBQVYsRUFBZ0I3QyxJQUFoQixDQUFxQixPQUFyQixLQUFpQyxDQUFyQyxFQUF3QzBDLENBQUMsQ0FBQzVELEtBQUY7QUFDM0MsR0FIRDtBQUtBLE1BQU1nRSxXQUFXLEdBQUdoSyxRQUFRLENBQUMwSixnQkFBVCxDQUEwQixvQkFBMUIsQ0FBcEI7QUFDQU0sYUFBVyxDQUFDTCxPQUFaLENBQW9CLFVBQVVDLENBQVYsRUFBYTtBQUM3QixRQUFJckgsQ0FBQyxDQUFDcUgsQ0FBRCxDQUFELENBQUtLLElBQUwsQ0FBVSxpQkFBVixFQUE2QjNLLE1BQTdCLElBQXVDLENBQTNDLEVBQThDO0FBQzFDNEssOEJBQXdCLENBQUNOLENBQUQsQ0FBeEI7QUFDSDtBQUNKLEdBSkQ7O0FBTUEsV0FBU0UsbUJBQVQsQ0FBNkJGLENBQTdCLEVBQWdDO0FBQzVCLFFBQU1PLGdCQUFnQixHQUFHbkssUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixNQUFNa0YsQ0FBQyxDQUFDakosYUFBRixDQUFnQkMsT0FBaEIsQ0FBd0J3SixrQkFBckQsQ0FBekI7QUFDQSxRQUFNQyxJQUFJLEdBQUdySyxRQUFRLENBQUNzSyxhQUFULENBQXVCLElBQXZCLENBQWI7QUFDQSxRQUFNQyxZQUFZLEdBQUd2SyxRQUFRLENBQUMwRSxhQUFULENBQXVCLE1BQU1rRixDQUFDLENBQUNqSixhQUFGLENBQWdCQyxPQUFoQixTQUE3QixDQUFyQjtBQUNBeUosUUFBSSxDQUFDakosU0FBTCxHQUFpQm1CLENBQUMsQ0FBQzRILGdCQUFnQixDQUFDdkosT0FBakIsQ0FBeUIrSCxTQUExQixDQUFELENBQXNDbEYsSUFBdEMsR0FBNkNDLE9BQTdDLENBQ2IsV0FEYSxFQUVieUcsZ0JBQWdCLENBQUN2SixPQUFqQixDQUF5QjRKLEtBRlosQ0FBakI7QUFJQUgsUUFBSSxDQUFDOUosS0FBTCxDQUFXa0ssUUFBWCxHQUFzQixVQUF0QixDQVI0QixDQVM1Qjs7QUFFQU4sb0JBQWdCLENBQUNPLFdBQWpCLENBQTZCTCxJQUE3QjtBQUNBRixvQkFBZ0IsQ0FBQ3ZKLE9BQWpCLENBQXlCNEosS0FBekI7QUFDQU4sNEJBQXdCLENBQUNHLElBQUQsQ0FBeEI7QUFDSDs7QUFFRCxXQUFTSCx3QkFBVCxDQUFrQzVKLE9BQWxDLEVBQTJDO0FBQ3ZDLFFBQU1xSyxnQkFBZ0IsR0FBRzNLLFFBQVEsQ0FBQ3NLLGFBQVQsQ0FBdUIsR0FBdkIsQ0FBekI7QUFDQUssb0JBQWdCLENBQUM3RSxTQUFqQixHQUE2QixlQUE3QjtBQUNBNkUsb0JBQWdCLENBQUN2SixTQUFqQixHQUE2QixtR0FBN0I7QUFFQWQsV0FBTyxDQUFDOEIsTUFBUixDQUFldUksZ0JBQWY7QUFFQUEsb0JBQWdCLENBQUNkLGdCQUFqQixDQUFrQyxPQUFsQyxFQUEyQyxVQUFVRCxDQUFWLEVBQWE7QUFDcERBLE9BQUMsQ0FBQ2dCLGNBQUY7QUFDQXRLLGFBQU8sQ0FBQ0osTUFBUjtBQUNILEtBSEQ7QUFJSDs7QUFDRG9CLFFBQU0sQ0FBQ3VKLG1CQUFQLEdBQTZCLFNBQVNBLG1CQUFULENBQTZCdkssT0FBN0IsRUFBc0M7QUFDL0RnQixVQUFNLENBQUM4QyxpQkFBUCxHQUEyQixJQUEzQjtBQUNBLFFBQUkwRyxRQUFRLEdBQUd2SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsVUFBaEIsQ0FBZjtBQUNBLFFBQUk2RCxZQUFZLEdBQUd4SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsZUFBaEIsQ0FBbkI7QUFDQSxRQUFJOEQsSUFBSSxHQUFHekksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLE1BQWhCLENBQVg7QUFDQSxRQUFJK0QsT0FBTyxHQUFHQyxJQUFJLENBQUMzSSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsU0FBaEIsQ0FBRCxDQUFsQjtBQUNBLFFBQUlpRSxVQUFVLEdBQUc1SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsV0FBaEIsQ0FBakI7QUFDQSxRQUFJa0UsZ0JBQWdCLEdBQUc3SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSW1FLGdCQUFnQixHQUFHOUksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGtCQUFoQixDQUF2QjtBQUNBLFFBQUlvRSxHQUFHLEdBQUcvSSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsS0FBaEIsQ0FBVjtBQUNBLFFBQUlxRSxpQkFBaUIsR0FBR0wsSUFBSSxDQUFDM0ksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLG1CQUFoQixDQUFELENBQTVCO0FBQ0EsUUFBSXNFLDRCQUE0QixHQUFHakosQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGdDQUFoQixDQUFuQztBQUNBLFFBQUl1RSxXQUFXLEdBQUdsSixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsYUFBaEIsQ0FBbEI7QUFDQSxRQUFJd0UsUUFBUSxHQUFHbkosQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLFVBQWhCLENBQWY7QUFDQSxRQUFJeUUsZ0JBQWdCLEdBQUdwSixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSTBFLE1BQU0sR0FBR3JKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixRQUFoQixDQUFiO0FBQ0EsUUFBSTJFLFFBQVEsR0FBR3RKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixTQUFoQixDQUFmO0FBQ0EsUUFBSTRFLFdBQVcsR0FBR3ZKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixZQUFoQixDQUFsQjtBQUNBLFFBQUk2RSxXQUFXLEdBQUd4SixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsWUFBaEIsQ0FBbEI7QUFDQSxRQUFJOEUsVUFBVSxHQUFHN0gsTUFBTSxDQUFDOEgsaUJBQVAsQ0FBeUJqQixJQUF6QixFQUErQkcsVUFBL0IsRUFBMkNVLFFBQTNDLEVBQXFEQyxXQUFyRCxFQUFrRUMsV0FBbEUsRUFBK0VULEdBQS9FLENBQWpCO0FBQ0EsUUFBSVksT0FBTyxHQUFHL0gsTUFBTSxDQUFDZ0ksWUFBckI7QUFDQSxRQUFJQyxPQUFPLEdBQUc3SixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsU0FBaEIsQ0FBZDtBQUNBLFFBQUltRixrQkFBa0IsR0FBRyxLQUF6QjtBQUNBLFFBQUlDLFdBQVcsR0FBRy9KLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixhQUFoQixDQUFsQjtBQUNBLFFBQUlxRixVQUFVLEdBQUdoSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsWUFBaEIsQ0FBakI7QUFDQSxRQUFJc0YsZ0JBQWdCLEdBQUdqSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSXVGLGtCQUFrQixHQUFHbEssQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLHNCQUFoQixDQUF6QjtBQUNBLFFBQUl3RixpQkFBaUIsR0FBR25LLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixxQkFBaEIsQ0FBeEI7QUFDQSxRQUFJeUYsc0JBQXNCLEdBQUdwSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isd0JBQWhCLENBQTdCO0FBQ0EsUUFBSTBGLGFBQWEsR0FBR3JLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixlQUFoQixDQUFwQjtBQUNBLFFBQUkyRixlQUFlLEdBQUd0SyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsbUJBQWhCLENBQXRCO0FBQ0EsUUFBSTRGLGVBQWUsR0FBRyxFQUF0QjtBQUNBLFFBQUlDLFlBQVksR0FBR3hLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixjQUFoQixDQUFuQjtBQUNBLFFBQUk4Rix1QkFBdUIsR0FBR3pLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQix5QkFBaEIsQ0FBOUI7QUFDQSxRQUFJK0YsYUFBYSxHQUFHMUssQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGVBQWhCLENBQXBCO0FBQ0EsUUFBSWdHLFlBQVksR0FBRzNLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixlQUFoQixDQUFuQjtBQUNBLFFBQUlpRyxTQUFTLEdBQUc1SyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsV0FBaEIsQ0FBaEI7QUFFQSxRQUFJOEYsdUJBQUosRUFBNkJELFlBQVksR0FBR0MsdUJBQWY7QUFFN0IsUUFBSXpLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixPQUFoQixLQUE0QixLQUFoQyxFQUNJLElBQUlrRyxHQUFHLEdBQUcvSSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCNEgsT0FBbEIsRUFBMkIvSCxNQUFNLENBQUNrSixjQUFsQyxDQUFWLENBREosS0FHSSxJQUFJRCxHQUFHLEdBQUcvSSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCNEgsT0FBbEIsRUFBMkIvSCxNQUFNLENBQUNtSixZQUFsQyxDQUFWOztBQUVKLFFBQUkzQixnQkFBZ0IsSUFBSSxFQUF4QixFQUE0QjtBQUN4QnlCLFNBQUcsQ0FBQ0csZUFBSixHQUFzQjVCLGdCQUF0QjtBQUNIOztBQUNELFFBQUl3QixTQUFKLEVBQWM7QUFDVkMsU0FBRyxDQUFDSSxXQUFKLEdBQWtCO0FBQUUsaUJBQU9MO0FBQVQsT0FBbEI7QUFDSDs7QUFFRCxRQUFJRCxZQUFKLEVBQWtCO0FBQ2RFLFNBQUcsQ0FBQ0ssV0FBSixHQUFrQixVQUFTN0QsQ0FBVCxFQUFZO0FBQzFCQSxTQUFDLENBQUM4RCxTQUFGLENBQVlDLFdBQVosR0FEMEIsQ0FFMUI7QUFDQTs7QUFDQVQsb0JBQVksQ0FBQ3ZELE9BQWIsQ0FBcUIsVUFBU2lFLEtBQVQsRUFBZ0I7QUFDakNoRSxXQUFDLENBQUM4RCxTQUFGLENBQVlHLFlBQVosQ0FBeUJELEtBQXpCLEVBQWdDLFNBQWhDLEVBQTJDLElBQTNDO0FBQ0gsU0FGRDtBQUdBaEUsU0FBQyxDQUFDa0UsUUFBRixHQUFhdkwsQ0FBQyxDQUFDcUgsQ0FBQyxDQUFDdEosT0FBSCxDQUFELENBQWE0RyxJQUFiLENBQWtCLFlBQWxCLENBQWI7QUFDSCxPQVJEO0FBU0g7O0FBQ0QsUUFBSTBGLGFBQWEsSUFBSSxFQUFqQixJQUF1QkEsYUFBM0IsRUFBMEM7QUFDdENRLFNBQUcsVUFBSCxDQUFXVyxLQUFYLENBQWlCQyxTQUFqQixHQUE2QnBCLGFBQTdCO0FBQ0g7O0FBQ0QsUUFBSUQsc0JBQXNCLElBQUksRUFBOUIsRUFBa0M7QUFDOUJTLFNBQUcsQ0FBQ2QsV0FBSixDQUFnQjJCLFdBQWhCLEdBQThCdEIsc0JBQTlCO0FBQ0gsS0FGRCxNQUVPO0FBQ0hTLFNBQUcsQ0FBQ2QsV0FBSixDQUFnQjJCLFdBQWhCLEdBQThCOUosTUFBTSxDQUFDK0osa0JBQXJDO0FBQ0g7O0FBQ0QsUUFBSTNMLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOEUsSUFBWCxDQUFnQixJQUFoQixNQUEwQiwrQkFBOUIsRUFBK0Q7QUFDM0RnSSxTQUFHLENBQUNlLGFBQUosR0FBb0IsVUFBU3ZFLENBQVQsRUFBWTtBQUM1QnJILFNBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOE4sT0FBWCxDQUFtQixrQkFBbkIsRUFBdUMsQ0FBQ3hFLENBQUQsQ0FBdkM7QUFDSCxPQUZEOztBQUlBd0QsU0FBRyxDQUFDaUIsWUFBSixHQUFtQixVQUFTekUsQ0FBVCxFQUFZO0FBQzNCckgsU0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc4TixPQUFYLENBQW1CLGlCQUFuQixFQUFzQyxDQUFDeEUsQ0FBRCxDQUF0QztBQUNILE9BRkQ7O0FBSUF3RCxTQUFHLENBQUNrQixZQUFKLEdBQW1CLFVBQVMxRSxDQUFULEVBQVk7QUFDM0JySCxTQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzhOLE9BQVgsQ0FBbUIsaUJBQW5CLEVBQXNDLENBQUN4RSxDQUFELENBQXRDO0FBQ0gsT0FGRDs7QUFJQXdELFNBQUcsQ0FBQ21CLGNBQUosR0FBcUIsVUFBUzNFLENBQVQsRUFBWTtBQUM3QnJILFNBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOE4sT0FBWCxDQUFtQixtQkFBbkIsRUFBd0MsQ0FBQ3hFLENBQUQsQ0FBeEM7QUFDSCxPQUZEO0FBR0g7O0FBR0QsUUFBSXFCLE9BQUosRUFBYTtBQUNUQSxhQUFPLENBQUN0QixPQUFSLENBQWdCLFVBQVVDLENBQVYsRUFBYTtBQUN6QixZQUFJQSxDQUFDLENBQUM0RSxNQUFOLEVBQWM7QUFDVjVFLFdBQUMsQ0FBQzRFLE1BQUYsQ0FBU3hDLFVBQVQsR0FBc0JkLElBQUksQ0FBQ3RCLENBQUMsQ0FBQzRFLE1BQUYsQ0FBU3hDLFVBQVYsQ0FBMUI7QUFDSDs7QUFDRCxZQUFJcEMsQ0FBQyxDQUFDNkUsUUFBRixLQUFlLE1BQWYsSUFBeUI3RSxDQUFDLENBQUM4RSxXQUEzQixJQUEwQyxPQUFPOUUsQ0FBQyxDQUFDOEUsV0FBVCxLQUF5QixRQUF2RSxFQUFpRjtBQUM3RTlFLFdBQUMsQ0FBQzhFLFdBQUYsR0FBZ0IsSUFBSTNNLElBQUosQ0FBUzZILENBQUMsQ0FBQzhFLFdBQVgsQ0FBaEIsQ0FENkUsQ0FDcEM7QUFDNUM7O0FBRUQsWUFBSTlFLENBQUMsQ0FBQytFLGFBQUYsSUFBbUIvRSxDQUFDLENBQUMrRSxhQUFGLENBQWdCQyxpQkFBdkMsRUFBMEQ7QUFDdERoRixXQUFDLENBQUMrRSxhQUFGLENBQWdCRSxvQkFBaEIsR0FBdUMsVUFBVUMsSUFBVixFQUFnQjtBQUNuRCxnQkFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQUEsbUJBQU8sQ0FBQ25QLEVBQVIsR0FBYWtQLElBQUksQ0FBQ25OLElBQWxCO0FBQ0FvTixtQkFBTyxDQUFDQyxPQUFSLEdBQWtCRixJQUFJLENBQUNuTixJQUF2QjtBQUNBLG1CQUFPb04sT0FBUDtBQUNILFdBTEQ7QUFNSDs7QUFFRCxZQUFJbkYsQ0FBQyxDQUFDcUYscUJBQU4sRUFBNkI7QUFDekJyRixXQUFDLENBQUNxRixxQkFBRixHQUEwQixVQUFVQyxPQUFWLEVBQW1CO0FBQ3pDLGdCQUFJQyxnQkFBZ0IsR0FBRyxFQUF2QjtBQUFBLGdCQUNJQyxNQUFNLEdBQUdGLE9BQU8sQ0FBQ3RGLENBQUMsQ0FBQ3lGLFNBQUgsQ0FEcEI7QUFBQSxnQkFFSUMsTUFBTSxHQUFHLEVBRmI7O0FBR0EsZ0JBQUlGLE1BQU0sSUFBSSxJQUFWLElBQWtCQSxNQUFNLENBQUM5UCxNQUFQLEdBQWdCLENBQXRDLEVBQXlDO0FBQ3JDLG1CQUFLLElBQUlnSSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHOEgsTUFBTSxDQUFDOVAsTUFBM0IsRUFBbUNnSSxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLG9CQUFJQSxDQUFDLEdBQUcsQ0FBUixFQUFXO0FBQ1A2SCxrQ0FBZ0IsQ0FBQzVQLElBQWpCLENBQXNCLElBQXRCO0FBQ0g7O0FBQ0Q0UCxnQ0FBZ0IsQ0FBQzVQLElBQWpCLENBQXNCLENBQUMsSUFBRCxFQUFPNlAsTUFBTSxDQUFDOUgsQ0FBRCxDQUFiLENBQXRCO0FBQ0g7O0FBQ0RnSSxvQkFBTSxHQUFHL00sQ0FBQyxDQUFDZ04sR0FBRixDQUFNakssVUFBVSxDQUFDNEIsSUFBWCxDQUFnQnNJLEtBQWhCLENBQXNCakUsaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCSSxLQUFyRCxFQUE0REMsTUFBNUQsQ0FBbUVQLGdCQUFuRSxFQUFxRlEsT0FBckYsRUFBTixFQUFzRyxVQUFVdEYsSUFBVixFQUFnQjtBQUMzSCx1QkFBT0EsSUFBSSxDQUFDVCxDQUFDLENBQUNnRyxZQUFILENBQVg7QUFDSCxlQUZRLEVBRU5DLElBRk0sQ0FFRCxRQUZDLENBQVQ7QUFHSDs7QUFFRCxtQkFBT1AsTUFBUDtBQUNILFdBakJEO0FBa0JIOztBQUNELFlBQUkxRixDQUFDLENBQUN5RixTQUFGLElBQWUsVUFBbkIsRUFBK0I7QUFDM0J6RixXQUFDLENBQUN2SSxLQUFGLEdBQVUsR0FBVixFQUNJdUksQ0FBQyxDQUFDa0csWUFBRixHQUFpQjNMLE1BQU0sQ0FBQzRMLGlCQUQ1QjtBQUVIOztBQUNELFlBQUluRyxDQUFDLENBQUN5RixTQUFGLElBQWUsU0FBbkIsRUFBOEI7QUFDMUJ6RixXQUFDLENBQUNrRyxZQUFGLEdBQWlCM0wsTUFBTSxDQUFDNkwsbUJBQXhCO0FBQ0g7O0FBQ0QsWUFBSXBHLENBQUMsQ0FBQ3FHLHlCQUFOLEVBQWlDO0FBQzdCckcsV0FBQyxDQUFDcUcseUJBQUYsR0FBOEIsVUFBVUMsWUFBVixFQUF3QkMsdUJBQXhCLEVBQWlEO0FBQzNFLG1CQUFPLFVBQVVDLFFBQVYsRUFBb0I7QUFDdkIsa0JBQUlDLE1BQU0sR0FBR0QsUUFBUSxDQUFDeEcsQ0FBQyxDQUFDeUYsU0FBSCxDQUFyQjtBQUNBLGtCQUFJaUIsTUFBTSxHQUFHSixZQUFiO0FBRUEsa0JBQUlJLE1BQU0sQ0FBQ2hSLE1BQVAsS0FBa0IsQ0FBdEIsRUFDSSxPQUFPLElBQVA7QUFFSixxQkFBTytRLE1BQU0sQ0FBQy9RLE1BQVAsS0FBa0JnUixNQUFNLENBQUNoUixNQUF6QixJQUFtQytRLE1BQU0sQ0FBQ0UsS0FBUCxDQUFhLFVBQVVDLEtBQVYsRUFBaUJoRyxLQUFqQixFQUF3QjtBQUMzRSx1QkFBT2dHLEtBQUssS0FBS0YsTUFBTSxDQUFDOUYsS0FBRCxDQUF2QjtBQUNILGVBRnlDLENBQTFDO0FBR0gsYUFWRDtBQVdILFdBWkQ7QUFhSDs7QUFFRCxZQUFJWixDQUFDLENBQUM2RyxPQUFOLEVBQWU7QUFDWCxjQUFJN0csQ0FBQyxDQUFDNkcsT0FBRixDQUFVLENBQVYsRUFBYUMsT0FBakIsRUFBMEI7QUFDdEJ4RixnQkFBSSxDQUFDLG1CQUFtQnRCLENBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFDLE9BQWpDLENBQUo7QUFDQTlHLGFBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFDLE9BQWIsR0FBdUJBLE9BQXZCO0FBQ0g7O0FBQ0QsY0FBSTlHLENBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFFLE9BQWpCLEVBQTBCO0FBQ3RCekYsZ0JBQUksQ0FBQyxtQkFBbUJ0QixDQUFDLENBQUM2RyxPQUFGLENBQVUsQ0FBVixFQUFhRSxPQUFqQyxDQUFKO0FBQ0EvRyxhQUFDLENBQUM2RyxPQUFGLENBQVUsQ0FBVixFQUFhRSxPQUFiLEdBQXVCQyxPQUF2QjtBQUNIO0FBQ0o7O0FBRUQsWUFBSWhILENBQUMsQ0FBQ2lILElBQUYsSUFBVSxNQUFkLEVBQXNCO0FBQ2xCakQsZUFBSyxHQUFHaEUsQ0FBQyxDQUFDeUYsU0FBVjtBQUNBeUIsc0JBQVksR0FBRztBQUNYekIscUJBQVMsRUFBRXpCLEtBREE7QUFFWG1ELDhCQUFrQixFQUFFLDRCQUFVN0osSUFBVixFQUFnQjtBQUNoQyxrQkFBSXNKLEtBQUssR0FBRyxFQUFaO0FBQ0Esa0JBQUlmLEtBQUssR0FBR3ZFLElBQUksQ0FBQyxVQUFVMEMsS0FBWCxDQUFoQjtBQUNBNkIsbUJBQUssQ0FBQzlGLE9BQU4sQ0FBYyxVQUFVckosT0FBVixFQUFtQjtBQUM3QmtRLHFCQUFLLENBQUNqUixJQUFOLENBQVdlLE9BQU8sQ0FBQzBPLE9BQW5CO0FBQ0gsZUFGRDtBQUdBLHFCQUFPd0IsS0FBSyxDQUFDWCxJQUFOLENBQVcsR0FBWCxDQUFQO0FBQ0g7QUFUVSxXQUFmO0FBV0F4TCxnQkFBTSxDQUFDQyxNQUFQLENBQWNzRixDQUFkLEVBQWlCa0gsWUFBakI7QUFDSDs7QUFDRCxZQUFJbEgsQ0FBQyxDQUFDb0gsZ0JBQU4sRUFBd0I7QUFDcEJsRSx5QkFBZSxDQUFDdk4sSUFBaEIsQ0FBcUJxSyxDQUFDLENBQUN5RixTQUF2QjtBQUNBaEQsNEJBQWtCLEdBQUcsSUFBckI7O0FBQ0F6QyxXQUFDLENBQUNrRyxZQUFGLEdBQWlCLFVBQVVtQixTQUFWLEVBQXFCN0ssT0FBckIsRUFBOEI7QUFDM0M3RCxhQUFDLENBQUMsT0FBRCxDQUFELENBQVdaLElBQVgsQ0FBZ0JpSSxDQUFDLENBQUNvSCxnQkFBbEIsRUFBb0M5SSxHQUFwQyxDQUF3QyxpQkFBeEMsRUFBMkQsV0FBM0QsRUFBd0VHLFFBQXhFLENBQWlGNEksU0FBakY7QUFDSCxXQUZEO0FBR0g7QUFDSixPQTdGRDtBQThGSDs7QUFFRCxRQUFJeEUsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDbk4sTUFBbkIsSUFBNkIsQ0FBdkQsRUFBMEQ7QUFDdEQ4TixTQUFHLENBQUM4RCxjQUFKLEdBQXFCLFVBQVV0SCxDQUFWLEVBQWE7QUFDOUIsWUFBSXVILFFBQVEsR0FBRyxLQUFmOztBQUNBLGFBQUssSUFBSUMsTUFBTSxHQUFHLENBQWxCLEVBQXFCQSxNQUFNLEdBQUczRSxrQkFBa0IsQ0FBQ25OLE1BQWpELEVBQXlEOFIsTUFBTSxFQUEvRCxFQUFtRTtBQUMvRCxjQUFJeEgsQ0FBQyxDQUFDeUgsR0FBRixJQUFTekgsQ0FBQyxDQUFDeUgsR0FBRixDQUFNRixRQUFuQixFQUE2QkEsUUFBUSxHQUFHLElBQVg7O0FBQzdCLGNBQUl2SCxDQUFDLENBQUMwSCxNQUFGLENBQVNqQyxTQUFULEtBQXVCNUMsa0JBQWtCLENBQUMyRSxNQUFELENBQXpDLElBQXFELENBQUNELFFBQTFELEVBQW9FO0FBQ2hFLGdCQUFJSSxnQkFBZ0IsR0FBSTNILENBQUMsQ0FBQzRILFdBQUYsQ0FBY3JPLElBQWQsQ0FBbUIsZUFBbkIsQ0FBeEI7QUFDQXlHLGFBQUMsQ0FBQzRILFdBQUYsQ0FBY3JPLElBQWQsQ0FBbUIsT0FBbkIsRUFBNEJzTyxJQUE1QixDQUFpQyxVQUFqQyxFQUE2QyxJQUE3QztBQUNBLGdCQUFJN0gsQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixrQ0FBbkIsRUFBdUQ3RCxNQUF2RCxJQUFpRSxDQUFyRSxFQUNJc0ssQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixrQ0FBbkIsRUFBdURqRCxNQUF2RDs7QUFDSixnQkFBSXFSLGdCQUFnQixDQUFDalMsTUFBakIsR0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0JpRCxlQUFDLENBQUNnUCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpCLENBQUQsQ0FBdUJHLFdBQXZCLENBQW1DLFVBQW5DLEVBQStDQyxNQUEvQyxDQUFzRCxVQUF0RCxFQUFrRSxJQUFsRTtBQUNIO0FBQ0o7O0FBQ0RSLGtCQUFRLEdBQUcsS0FBWDtBQUNIOztBQUNELFlBQUl6RSxpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNwTixNQUFsQixJQUE0QixDQUFyRCxFQUF3RDtBQUNwRCxlQUFLLElBQUk4UixPQUFNLEdBQUcsQ0FBbEIsRUFBcUJBLE9BQU0sR0FBRzFFLGlCQUFpQixDQUFDcE4sTUFBaEQsRUFBd0Q4UixPQUFNLEVBQTlELEVBQWtFO0FBQzlELGdCQUFJeEgsQ0FBQyxDQUFDeUgsR0FBRixJQUFTekgsQ0FBQyxDQUFDeUgsR0FBRixDQUFNRixRQUFuQixFQUE2QkEsUUFBUSxHQUFHLElBQVg7O0FBQzdCLGdCQUFJdkgsQ0FBQyxDQUFDMEgsTUFBRixDQUFTakMsU0FBVCxLQUF1QjNDLGlCQUFpQixDQUFDMEUsT0FBRCxDQUF4QyxJQUFvREQsUUFBeEQsRUFBa0U7QUFDOUQsa0JBQUlJLGdCQUFnQixHQUFJM0gsQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixlQUFuQixDQUF4QjtBQUNBeUcsZUFBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixPQUFuQixFQUE0QnNPLElBQTVCLENBQWlDLFVBQWpDLEVBQTZDLElBQTdDO0FBQ0Esa0JBQUk3SCxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLGtDQUFuQixFQUF1RDdELE1BQXZELElBQWlFLENBQXJFLEVBQ0lzSyxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLGtDQUFuQixFQUF1RGpELE1BQXZEOztBQUNKLGtCQUFJcVIsZ0JBQWdCLENBQUNqUyxNQUFqQixHQUEwQixDQUE5QixFQUFpQztBQUM3QmlELGlCQUFDLENBQUNnUCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpCLENBQUQsQ0FBdUJHLFdBQXZCLENBQW1DLFVBQW5DLEVBQStDQyxNQUEvQyxDQUFzRCxVQUF0RCxFQUFrRSxJQUFsRTtBQUNIO0FBQ0o7O0FBQ0RSLG9CQUFRLEdBQUcsS0FBWDtBQUNIO0FBQ0o7O0FBQ0QsWUFBSXZILENBQUMsQ0FBQ2dJLE9BQUYsS0FBYyxNQUFkLElBQXdCaEksQ0FBQyxDQUFDMEgsTUFBRixDQUFTTyxPQUFULEtBQXFCLE1BQWpELEVBQXlEO0FBQ3JELGNBQUlDLFNBQVMsR0FBR2xJLENBQUMsQ0FBQ3lILEdBQUYsQ0FBTVMsU0FBdEI7QUFBQSxjQUNJQyxNQUFNLEdBQUduSSxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLFVBQW5CLENBRGI7QUFHQTRPLGdCQUFNLENBQUNwUSxJQUFQLENBQVksRUFBWjs7QUFFQSxjQUFJbVEsU0FBSixFQUFlO0FBQ1hDLGtCQUFNLENBQUNyQyxNQUFQLENBQWMsZUFBZCxFQUErQnNDLFFBQS9CLENBQXdDO0FBQ3BDQyxrQkFBSSxFQUFFO0FBRDhCLGFBQXhDO0FBR0FGLGtCQUFNLENBQUNyQyxNQUFQLENBQWMsaUJBQWQsRUFBaUNzQyxRQUFqQyxDQUEwQztBQUN0Q0Msa0JBQUksRUFBRTtBQURnQyxhQUExQztBQUdILFdBUEQsTUFPTztBQUNIRixrQkFBTSxDQUFDckMsTUFBUCxDQUFjLGVBQWQsRUFBK0JzQyxRQUEvQixDQUF3QztBQUNwQ0Msa0JBQUksRUFBRTtBQUQ4QixhQUF4QztBQUlBRixrQkFBTSxDQUFDckMsTUFBUCxDQUFjLGlCQUFkLEVBQWlDc0MsUUFBakMsQ0FBMEM7QUFDdENDLGtCQUFJLEVBQUU7QUFEZ0MsYUFBMUM7QUFHSDtBQUNKO0FBQ0osT0FyREQ7QUFzREg7O0FBRUQsUUFBSTVGLGtCQUFKLEVBQXdCO0FBQ3BCLFVBQUk2RixXQUFXLEdBQUczUCxDQUFDLENBQUMsYUFBRCxDQUFELENBQWlCNFAsU0FBakIsQ0FBMkI7QUFDekM5USxhQUFLLEVBQUUsTUFEa0M7QUFFekMrUSxjQUFNLEVBQUU7QUFGaUMsT0FBM0IsRUFHZkQsU0FIZSxDQUdMLFVBSEssQ0FBbEI7O0FBS0EvRSxTQUFHLENBQUM4RCxjQUFKLEdBQXFCLFVBQVV0SCxDQUFWLEVBQWE7QUFDOUIsWUFBSUEsQ0FBQyxDQUFDZ0ksT0FBRixJQUFhLE1BQWIsSUFBdUI5RSxlQUFlLENBQUN1RixRQUFoQixDQUF5QnpJLENBQUMsQ0FBQzBILE1BQUYsQ0FBU2pDLFNBQWxDLENBQTNCLEVBQ0l6RixDQUFDLENBQUM0SCxXQUFGLENBQWN4SixRQUFkLENBQXVCLGNBQXZCO0FBQ1AsT0FIRDs7QUFJQW9GLFNBQUcsQ0FBQ2Ysa0JBQUosR0FBeUIsVUFBVXpDLENBQVYsRUFBYTtBQUNsQyxZQUFJQSxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBZCxJQUF3QjlFLGVBQWUsQ0FBQ3VGLFFBQWhCLENBQXlCekksQ0FBQyxDQUFDMEgsTUFBRixDQUFTakMsU0FBbEMsQ0FBeEIsSUFBd0V6RixDQUFDLENBQUMwSSxTQUFGLEtBQWdCLFdBQTVGLEVBQXlHO0FBQ3JHSixxQkFBVyxDQUFDUCxNQUFaLENBQW1CLGlCQUFuQixFQUNJLFVBQVVZLGNBQVYsRUFBMEI7QUFDdEJoUSxhQUFDLENBQUMsUUFBRCxDQUFELENBQ0tILE1BREwsQ0FDWXdILENBQUMsQ0FBQ2pJLElBRGQsRUFFSzBHLFFBRkwsQ0FFY2tLLGNBRmQ7QUFHSCxXQUxMO0FBTUFMLHFCQUFXLENBQUNQLE1BQVosQ0FBbUIsUUFBbkIsRUFBNkIvSCxDQUFDLENBQUM0SCxXQUEvQjtBQUNBVSxxQkFBVyxDQUFDeEwsSUFBWjtBQUVIOztBQUNELFlBQUlrRCxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBZCxJQUF3QmhJLENBQUMsQ0FBQzBJLFNBQUYsS0FBZ0IsVUFBNUMsRUFBd0Q7QUFDcERKLHFCQUFXLENBQUNyTCxJQUFaO0FBQ0g7QUFDSixPQWZEO0FBZ0JIOztBQUNELFFBQUlnRyxlQUFlLElBQUksRUFBdkIsRUFBMkI7QUFDdkJPLFNBQUcsQ0FBQ1AsZUFBSixHQUFzQixVQUFVakQsQ0FBVixFQUFhO0FBQy9CLFlBQUlBLENBQUMsQ0FBQzRJLE9BQU4sRUFBZTtBQUNYLGNBQUs1SSxDQUFDLENBQUM2SSxPQUFGLENBQVVDLEtBQVYsSUFBbUIsS0FBbkIsSUFBNEI5SSxDQUFDLENBQUM2SSxPQUFGLENBQVVFLG9CQUFWLElBQWtDLElBQTlELElBQXNFLENBQUMvSSxDQUFDLENBQUM0SSxPQUFGLENBQVVHLG9CQUFsRixJQUNJL0ksQ0FBQyxDQUFDNkksT0FBRixDQUFVRSxvQkFBVixJQUFrQyxJQUFsQyxJQUEwQy9JLENBQUMsQ0FBQzZJLE9BQUYsQ0FBVUMsS0FBVixJQUFtQnJTLFNBQTdELElBQTBFdUosQ0FBQyxDQUFDNEksT0FBRixDQUFVRSxLQUFWLElBQW1CLEtBRHJHLEVBQzZHO0FBQ3pHOUksYUFBQyxDQUFDZ0osT0FBRixHQUFZLEtBQVo7QUFDQWhKLGFBQUMsQ0FBQ2lKLFNBQUYsR0FBYyw2RUFBZDtBQUNBLGdCQUFNQyxRQUFRLEdBQUdsSixDQUFDLENBQUM4RCxTQUFGLENBQVlxRixnQkFBWixDQUE2Qm5KLENBQUMsQ0FBQzBCLEdBQS9CLENBQWpCO0FBQ0EsZ0JBQU1rRyxXQUFXLEdBQUc1SCxDQUFDLENBQUM4RCxTQUFGLENBQVlzRixjQUFaLENBQ2hCRixRQURnQixFQUVoQixzQkFGZ0IsRUFHbEIsQ0FIa0IsQ0FBcEI7QUFJQSxnQkFBTUcsYUFBYSxHQUFHekIsV0FBVyxDQUFDMEIsc0JBQVosQ0FDbEIsWUFEa0IsQ0FBdEI7QUFHQTNRLGFBQUMsQ0FBQzBRLGFBQWEsQ0FBQyxDQUFELENBQWQsQ0FBRCxDQUFvQkUsU0FBcEIsQ0FBOEI7QUFDMUJDLDhCQUFnQixFQUFFO0FBRFEsYUFBOUI7QUFHQTdRLGFBQUMsQ0FBQzBRLGFBQWEsQ0FBQyxDQUFELENBQWQsQ0FBRCxDQUFvQkUsU0FBcEIsQ0FBOEIsVUFBOUIsRUFBMENFLEtBQTFDO0FBQ0g7QUFDSjtBQUVKLE9BckJEO0FBc0JIOztBQUVELFFBQUl2SSxRQUFKLEVBQWM7QUFDVnNDLFNBQUcsQ0FBQ2tHLGFBQUosR0FBb0IsVUFBUzFKLENBQVQsRUFBWTtBQUM1QixZQUFJQSxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBbEIsRUFBMEI7QUFDdEI7QUFFQSxjQUFJMkIsWUFBWSxHQUFHckksSUFBSSxDQUFDLE1BQU1KLFFBQU4sR0FBaUIsR0FBbEIsQ0FBdkI7QUFDQSxjQUFJMEksUUFBUSxHQUFHRCxZQUFZLENBQUMzSixDQUFDLENBQUMxQyxJQUFILENBQTNCOztBQUNBLGNBQUlzTSxRQUFKLEVBQWM7QUFDVjVKLGFBQUMsQ0FBQzZKLFVBQUYsQ0FBYXpMLFFBQWIsQ0FBc0J3TCxRQUF0Qjs7QUFDQSxnQkFBSXpJLFlBQVksSUFBSW5CLENBQUMsQ0FBQzFDLElBQUYsQ0FBTzZELFlBQVAsQ0FBcEIsRUFBMEM7QUFDdENuQixlQUFDLENBQUM2SixVQUFGLENBQWFyTyxJQUFiLENBQWtCLE9BQWxCLEVBQTJCd0UsQ0FBQyxDQUFDMUMsSUFBRixDQUFPNkQsWUFBUCxDQUEzQjtBQUNIO0FBQ0o7QUFDSjtBQUNKLE9BYkQ7QUFjSDs7QUFFRCxRQUFJUSxpQkFBSixFQUF1QjtBQUNuQjZCLFNBQUcsQ0FBQ3NHLGlCQUFKLEdBQXdCLFVBQVU5SixDQUFWLEVBQWE7QUFDakMsWUFBSSxDQUFDQSxDQUFDLENBQUMrSixVQUFGLEtBQWlCLFNBQWpCLElBQThCL0osQ0FBQyxDQUFDK0osVUFBRixLQUFpQixXQUFoRCxLQUFnRXBJLGlCQUFpQixDQUFDM0IsQ0FBQyxDQUFDeUYsU0FBSCxDQUFyRixFQUFvRztBQUNoR3pGLFdBQUMsQ0FBQ2dLLFVBQUYsR0FBZSxVQUFmO0FBQ0FoSyxXQUFDLENBQUNpSyxlQUFGLEdBQW9CLEtBQXBCO0FBQ0EsY0FBSUMsV0FBVyxHQUFHM1AsTUFBTSxDQUFDOEgsaUJBQVAsQ0FBeUJWLGlCQUFpQixDQUFDM0IsQ0FBQyxDQUFDeUYsU0FBSCxDQUFqQixDQUErQjBFLE9BQXhELENBQWxCO0FBQ0FuSyxXQUFDLENBQUMrRSxhQUFGLENBQWdCM0MsVUFBaEIsR0FBNkI4SCxXQUE3QjtBQUNBbEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQnFGLHFCQUFoQixHQUF3QyxJQUF4QztBQUNBcEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQnNGLFdBQWhCLEdBQThCMUksaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCekIsS0FBN0Q7QUFDQWhFLFdBQUMsQ0FBQytFLGFBQUYsQ0FBZ0J1RixTQUFoQixHQUE0QixJQUE1QjtBQUVBdEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQjZCLEtBQWhCLEdBQXdCNUcsQ0FBQyxDQUFDNEcsS0FBRixJQUFXLEVBQW5DOztBQUNBNUcsV0FBQyxDQUFDK0UsYUFBRixDQUFnQndGLGNBQWhCLEdBQWlDLFVBQVVyRixJQUFWLEVBQWdCO0FBQzdDbEYsYUFBQyxDQUFDd0ssUUFBRixDQUFXdEYsSUFBSSxDQUFDMEIsS0FBaEI7QUFDSCxXQUZEOztBQUlBNUcsV0FBQyxDQUFDK0UsYUFBRixDQUFnQjBGLFlBQWhCLEdBQStCLFVBQVVuTixJQUFWLEVBQWdCO0FBQzNDLG1CQUFPLGtCQUFrQkEsSUFBSSxDQUFDcUUsaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCekIsS0FBaEMsQ0FBdEIsR0FBK0QsSUFBL0QsR0FBc0UxRyxJQUFJLENBQUNxRSxpQkFBaUIsQ0FBQzNCLENBQUMsQ0FBQ3lGLFNBQUgsQ0FBakIsQ0FBK0J6QixLQUFoQyxDQUExRSxHQUFtSCxTQUExSDtBQUNILFdBRkQ7O0FBSUFoRSxXQUFDLENBQUMrRSxhQUFGLENBQWdCMkYsYUFBaEIsR0FBZ0MsVUFBVXhGLElBQVYsRUFBZ0I7QUFDNUMsZ0JBQUl5RixPQUFPLEdBQUd6RixJQUFJLENBQUN4TyxPQUFMLENBQWFrVSxRQUFiLENBQXNCLFVBQXRCLENBQWQ7QUFDQSxnQkFBSUMsYUFBYSxHQUFHLElBQXBCO0FBRUFsUyxhQUFDLENBQUNxSCxDQUFDLENBQUNxSixhQUFILENBQUQsQ0FBbUJyUixNQUFuQixHQUE0Qm9HLFFBQTVCLENBQXFDLGdCQUFyQyxFQUo0QyxDQUs1Qzs7QUFFQXpGLGFBQUMsQ0FBQ3FILENBQUMsQ0FBQ3FKLGFBQUgsQ0FBRCxDQUFtQm5LLEVBQW5CLENBQXNCLFNBQXRCLEVBQWlDLFVBQVU0TCxhQUFWLEVBQXlCO0FBQ3REQSwyQkFBYSxDQUFDQyxlQUFkO0FBQ0gsYUFGRCxFQVA0QyxDQVc1Qzs7QUFDQXBTLGFBQUMsQ0FBQ3FILENBQUMsQ0FBQ3FKLGFBQUgsQ0FBRCxDQUFtQnJSLE1BQW5CLEdBQTRCa0gsRUFBNUIsQ0FBK0IsU0FBL0IsRUFBMEMsVUFBVThMLGFBQVYsRUFBeUI7QUFDL0RBLDJCQUFhLENBQUNELGVBQWQ7QUFDQSxrQkFBSXBTLENBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDakQsTUFBbEMsSUFBNEMsQ0FBaEQsRUFDSWlWLE9BQU8sQ0FBQzVDLE1BQVIsQ0FBZSxRQUFmLEVBQXlCLEtBQXpCLEVBREosS0FHSTRDLE9BQU8sQ0FBQzVDLE1BQVIsQ0FBZSxRQUFmLEVBQXlCLElBQXpCO0FBQ1AsYUFORDtBQU9ILFdBbkJEO0FBb0JIO0FBQ0osT0F4Q0Q7QUF5Q0g7O0FBQ0QsUUFBSWxHLFdBQUosRUFBaUI7QUFDYjJCLFNBQUcsQ0FBQ3lILGFBQUosR0FBb0IsVUFBVWpMLENBQVYsRUFBYTtBQUM3QkEsU0FBQyxDQUFDOEQsU0FBRixDQUFZb0gsVUFBWixDQUF1QixDQUFDbEwsQ0FBQyxDQUFDMEIsR0FBSCxDQUF2QixFQUFnQyxLQUFoQztBQUNBLFlBQUloSSxHQUFHLEdBQUdmLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixVQUF0QixFQUFrQzZOLEtBQWxDLENBQXdDLEdBQXhDLENBQVY7QUFDQXpSLFdBQUcsQ0FBQ0EsR0FBRyxDQUFDaEUsTUFBSixHQUFhLENBQWQsQ0FBSCxHQUFzQnNLLENBQUMsQ0FBQzFDLElBQUYsQ0FBT3RILEVBQTdCO0FBQ0EwQixjQUFNLENBQUMwVCxJQUFQLENBQVkxUixHQUFHLENBQUN1TSxJQUFKLENBQVMsR0FBVCxJQUFnQixpQkFBaEIsR0FBb0NqRyxDQUFDLENBQUMxQyxJQUFGLENBQU91RSxXQUFQLENBQWhELEVBQXFFLFFBQXJFO0FBQ0gsT0FMRDtBQU1IOztBQUNELFFBQUlELDRCQUFKLEVBQWtDO0FBQzlCNEIsU0FBRyxDQUFDc0csaUJBQUosR0FBd0IsVUFBVTlKLENBQVYsRUFBYTtBQUNqQyxZQUFJQSxDQUFDLENBQUN5SCxHQUFGLENBQU1GLFFBQVYsRUFBb0I7QUFDaEIsY0FBSXZILENBQUMsQ0FBQytKLFVBQUYsS0FBaUIsU0FBakIsSUFBOEIvSixDQUFDLENBQUM1SSxJQUFGLElBQVV3Syw0QkFBNEIsQ0FBQ3hLLElBQXpFLEVBQStFO0FBQzNFLGdCQUFJaVUsS0FBSyxHQUFHLEVBQVo7QUFDQSxnQkFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsaUJBQUssSUFBSTlELE1BQU0sR0FBRyxDQUFsQixFQUFxQkEsTUFBTSxHQUFHeEgsQ0FBQyxDQUFDOEQsU0FBRixDQUFZeUgsY0FBWixHQUE2QjdWLE1BQTNELEVBQW1FOFIsTUFBTSxFQUF6RSxFQUE2RTtBQUN6RSxrQkFBTUMsR0FBRyxHQUFHekgsQ0FBQyxDQUFDOEQsU0FBRixDQUFZeUgsY0FBWixHQUE2Qi9ELE1BQTdCLENBQVo7O0FBQ0Esa0JBQUlDLEdBQUcsQ0FBQ08sT0FBSixLQUFnQixNQUFwQixFQUE0QjtBQUN4QnFELHFCQUFLLENBQUMxVixJQUFOLENBQVc4UixHQUFHLENBQUNuSyxJQUFKLENBQVNzRSw0QkFBNEIsQ0FBQ29DLEtBQXRDLENBQVg7QUFDSDtBQUNKOztBQUNELGlCQUFLLElBQUl0RyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHc0MsQ0FBQyxDQUFDNEUsTUFBRixDQUFTMEcsS0FBVCxDQUFlNVYsTUFBbkMsRUFBMkNnSSxDQUFDLEVBQTVDLEVBQWdEO0FBQzVDLGtCQUFJLENBQUMyTixLQUFLLENBQUM1QyxRQUFOLENBQWV6SSxDQUFDLENBQUM0RSxNQUFGLENBQVMwRyxLQUFULENBQWU1TixDQUFmLEVBQWtCa0UsNEJBQTRCLENBQUNvQyxLQUEvQyxDQUFmLENBQUwsRUFBNEU7QUFDeEVzSCxxQkFBSyxDQUFDM1YsSUFBTixDQUFXcUssQ0FBQyxDQUFDNEUsTUFBRixDQUFTMEcsS0FBVCxDQUFlNU4sQ0FBZixDQUFYO0FBQ0g7QUFDSjs7QUFDRHNDLGFBQUMsQ0FBQzRFLE1BQUYsQ0FBUzBHLEtBQVQsR0FBaUJBLEtBQWpCO0FBRUg7O0FBQ0R0TCxXQUFDLENBQUMrRSxhQUFGLENBQWdCM0MsVUFBaEIsR0FBNkJrSixLQUE3QjtBQUNIO0FBQ0osT0FyQkQ7O0FBc0JBOUgsU0FBRyxDQUFDaUIsWUFBSixHQUFtQixVQUFVekUsQ0FBVixFQUFhO0FBQzVCQSxTQUFDLENBQUM4RCxTQUFGLENBQVkwSCxPQUFaO0FBQ0gsT0FGRDtBQUdIOztBQUNELFFBQUl4SixNQUFKLEVBQVk7QUFDUndCLFNBQUcsQ0FBQ3BCLFVBQUosR0FBaUJKLE1BQWpCO0FBQ0gsS0FGRCxNQUVPO0FBQ0h3QixTQUFHLENBQUNwQixVQUFKLEdBQWlCQSxVQUFqQjtBQUNIOztBQUVELFFBQUlaLGdCQUFKLEVBQXNCO0FBQ2xCZ0MsU0FBRyxDQUFDaEMsZ0JBQUosR0FBdUJBLGdCQUF2QjtBQUNIOztBQUVELFFBQUlnQixPQUFKLEVBQWE7QUFDVGdCLFNBQUcsQ0FBQ2hCLE9BQUosR0FBY0EsT0FBZDtBQUNBZ0IsU0FBRyxDQUFDaEIsT0FBSixDQUFZaUosSUFBWixHQUFtQixLQUFuQjtBQUNIOztBQUNELFFBQUloSyxnQkFBSixFQUFzQjtBQUNsQitCLFNBQUcsQ0FBQ2tJLEtBQUosQ0FBVWpLLGdCQUFWLEdBQTZCQSxnQkFBN0I7QUFDSDs7QUFHRCxRQUFJaUIsV0FBSixFQUFpQjtBQUNiYyxTQUFHLENBQUNkLFdBQUosR0FBa0JBLFdBQWxCO0FBQ0g7O0FBRUQsUUFBSUMsVUFBSixFQUFnQjtBQUNaYSxTQUFHLENBQUNrSSxLQUFKLEdBQVkvSSxVQUFaO0FBQ0g7O0FBRUQsUUFBSUMsZ0JBQUosRUFBc0I7QUFDbEJZLFNBQUcsQ0FBQ21JLGtCQUFKLEdBQXlCLFVBQVUzTCxDQUFWLEVBQWE7QUFDbENBLFNBQUMsQ0FBQzRMLGNBQUYsQ0FBaUI5RSxPQUFqQixHQUEyQixLQUEzQjtBQUNILE9BRkQ7QUFHSDs7QUFFRHRELE9BQUcsQ0FBQ3FJLFdBQUosQ0FBZ0JDLGVBQWhCLEdBQWtDaEssUUFBbEM7QUFDQTBCLE9BQUcsQ0FBQ25DLE9BQUosR0FBY0EsT0FBZCxDQXphK0QsQ0EyYS9EOztBQUNBLFFBQUk4QixZQUFKLEVBQWtCO0FBQ2QsVUFBSTRJLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVc5SSxZQUFZLENBQUM0SSxNQUF4QixDQUFiO0FBQ0EsVUFBSUcsUUFBUSxHQUFHRixJQUFJLENBQUNDLEtBQUwsQ0FBVzlJLFlBQVksQ0FBQytJLFFBQXhCLENBQWY7QUFDQXZULE9BQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JyQyxNQUFsQjtBQUNBa04sU0FBRyxDQUFDc0IsV0FBSixHQUFrQmlILE1BQWxCLENBSmMsQ0FLZDs7QUFDQSxVQUFJRyxRQUFKLEVBQWM7QUFDVjFJLFdBQUcsQ0FBQ25DLE9BQUosQ0FBWXRCLE9BQVosQ0FBb0IsVUFBVTZHLEtBQVYsRUFBaUJsRixHQUFqQixFQUFzQjtBQUN0QyxjQUFJd0ssUUFBUSxDQUFDdEYsS0FBSyxDQUFDbkIsU0FBUCxDQUFSLElBQTZCaFAsU0FBakMsRUFBNEM7QUFDeEMrTSxlQUFHLENBQUNuQyxPQUFKLENBQVlLLEdBQVosRUFBaUJ5SyxZQUFqQixHQUFnQ0QsUUFBUSxDQUFDdEYsS0FBSyxDQUFDbkIsU0FBUCxDQUF4QztBQUNBakMsZUFBRyxDQUFDbkMsT0FBSixDQUFZSyxHQUFaLEVBQWlCb0YsT0FBakIsR0FBMkIsSUFBM0I7QUFDSCxXQUhELE1BR087QUFDSHRELGVBQUcsQ0FBQ25DLE9BQUosQ0FBWUssR0FBWixFQUFpQm9GLE9BQWpCLEdBQTJCLEtBQTNCO0FBQ0g7QUFDSixTQVBEO0FBUUg7QUFDSjs7QUFFRCxRQUFJekQsYUFBYSxJQUFJQSxhQUFhLElBQUksTUFBdEMsRUFBOEM7QUFDMUNHLFNBQUcsQ0FBQ2hCLE9BQUosQ0FBWTRKLGFBQVosR0FBNEIsVUFBVXBNLENBQVYsRUFBYTtBQUNyQyxlQUFPLEtBQVA7QUFDSCxPQUZEOztBQUdBd0QsU0FBRyxDQUFDaEIsT0FBSixDQUFZNkosYUFBWixHQUE0QixVQUFVck0sQ0FBVixFQUFhO0FBQ3JDLGVBQU8sS0FBUDtBQUNILE9BRkQ7QUFHSDs7QUFDRHJILEtBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNFYsVUFBWCxDQUFzQjlJLEdBQXRCO0FBQ0gsR0F2Y0Q7O0FBd2NBN0ssR0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXaUIsSUFBWCxDQUFnQixZQUFXO0FBQ3ZCbEMsVUFBTSxDQUFDdUosbUJBQVAsQ0FBMkIsSUFBM0I7QUFDSCxHQUZEOztBQUdBLFdBQVNnRSxvQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7QUFDaEMsUUFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQUEsV0FBTyxDQUFDb0gsRUFBUixHQUFhLElBQWI7QUFDQXBILFdBQU8sQ0FBQ3FILElBQVIsR0FBZXRILElBQUksQ0FBQ25OLElBQXBCO0FBQ0EsV0FBT29OLE9BQVA7QUFDSCxHQWhpQnlDLENBa2lCMUM7OztBQUNBLFdBQVNzSCxZQUFULENBQXNCQyxNQUF0QixFQUE4QjtBQUMxQkEsVUFBTSxDQUFDM0UsTUFBUCxDQUFjLFFBQWQsRUFBd0IsQ0FBQzJFLE1BQU0sQ0FBQzNFLE1BQVAsQ0FBYyxRQUFkLENBQXpCO0FBQ0g7O0FBRURwUCxHQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QmdVLFlBQXhCLENBQXFDO0FBQ2pDM0ssVUFBTSxFQUFFLGdCQUFTNEssT0FBVCxFQUFrQkMsUUFBbEIsRUFBNEI7QUFDaENsVSxPQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGNBQU0sRUFBRSxLQURMO0FBRUhwRixXQUFHLEVBQUUsZ0RBQWdEa1QsT0FBTyxDQUFDRyxJQUF4RCxHQUErRCxrREFGakU7QUFHSGxJLGdCQUFRLEVBQUUsTUFIUDtBQUlIaEgsZUFBTyxFQUFFLGlCQUFTUCxJQUFULEVBQWM7QUFDbkJ1UCxrQkFBUSxDQUFDbFUsQ0FBQyxDQUFDZ04sR0FBRixDQUFNckksSUFBSSxDQUFDMFAsUUFBWCxFQUFxQixVQUFVdk0sSUFBVixFQUFnQjtBQUMxQyxnQkFBSXdNLFFBQVEsR0FBRyxFQUFmLENBRDBDLENBRTFDOztBQUNBLGdCQUFJdFUsQ0FBQyxDQUFDdVUsT0FBRixDQUFVek0sSUFBSSxDQUFDME0sVUFBTCxDQUFnQkMsS0FBMUIsRUFBaUNILFFBQWpDLEtBQThDLENBQUMsQ0FBL0MsSUFBb0R4TSxJQUFJLENBQUMwTSxVQUFMLENBQWdCRSxXQUF4RSxFQUFxRjtBQUNqRkosc0JBQVEsQ0FBQ3RYLElBQVQsQ0FBYzhLLElBQUksQ0FBQzBNLFVBQUwsQ0FBZ0JDLEtBQTlCO0FBQ0EscUJBQU87QUFBRUEscUJBQUssRUFBRTNNLElBQUksQ0FBQzBNLFVBQUwsQ0FBZ0JDLEtBQXpCO0FBQ0hFLG9CQUFJLEVBQUU3TSxJQUFJLENBQUMwTSxVQUFMLENBQWdCRyxJQURuQjtBQUVIQyx3QkFBUSxFQUFFOU0sSUFBSSxDQUFDME0sVUFBTCxDQUFnQkksUUFGdkI7QUFHSG5XLG9CQUFJLEVBQUVxSixJQUFJLENBQUMwTSxVQUFMLENBQWdCL1YsSUFIbkI7QUFJSG9XLDJCQUFXLEVBQUUvTSxJQUFJLENBQUNnTixRQUFMLENBQWNEO0FBSnhCLGVBQVA7QUFNSDtBQUNKLFdBWlEsQ0FBRCxDQUFSO0FBYUg7QUFsQkUsT0FBUDtBQW9CSCxLQXRCZ0M7QUF1QmpDO0FBQ0FFLFVBQU0sRUFBRSxnQkFBUzVXLEtBQVQsRUFBZ0I2VyxFQUFoQixFQUFvQjtBQUN4QixVQUFJQyxPQUFPLEdBQUdqVixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsUUFBYixDQUFkO0FBQ0EsVUFBSXVRLGFBQWEsR0FBR2xWLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxjQUFiLENBQXBCO0FBQ0EsVUFBSXdRLE1BQU0sR0FBR25WLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxRQUFiLENBQWI7QUFDQSxVQUFJeVEsUUFBUSxHQUFHcFYsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZjtBQUNBLFVBQUk1RyxPQUFPLEdBQUdpQyxDQUFDLENBQUMsSUFBRCxDQUFmO0FBQ0EsVUFBSWtWLGFBQUosRUFBbUJBLGFBQWEsR0FBRyxNQUFNQSxhQUF0QixDQUFuQixLQUNLQSxhQUFhLEdBQUcsRUFBaEI7QUFFTGxWLE9BQUMsQ0FBQyxpQkFBZW1WLE1BQWYsR0FBc0IsY0FBdEIsR0FBc0NELGFBQXRDLEdBQW9ELElBQXJELENBQUQsQ0FBNERHLEdBQTVELENBQWdFTCxFQUFFLENBQUNsTixJQUFILENBQVE4TSxRQUF4RTtBQUNBNVUsT0FBQyxDQUFDLGlCQUFlbVYsTUFBZixHQUFzQixRQUF0QixHQUFnQ0QsYUFBaEMsR0FBOEMsSUFBL0MsQ0FBRCxDQUFzREcsR0FBdEQsQ0FBMERMLEVBQUUsQ0FBQ2xOLElBQUgsQ0FBUTZNLElBQWxFO0FBQ0EzVSxPQUFDLENBQUMsaUJBQWVtVixNQUFmLEdBQXNCLFVBQXRCLEdBQWtDRCxhQUFsQyxHQUFnRCxJQUFqRCxDQUFELENBQXdERyxHQUF4RCxDQUE0REwsRUFBRSxDQUFDbE4sSUFBSCxDQUFRckosSUFBcEU7QUFDQXVCLE9BQUMsQ0FBQyxpQkFBZW1WLE1BQWYsR0FBc0IsY0FBdEIsR0FBc0NELGFBQXRDLEdBQW9ELElBQXJELENBQUQsQ0FBNERHLEdBQTVELENBQWdFTCxFQUFFLENBQUNsTixJQUFILENBQVErTSxXQUF4RTs7QUFDQSxVQUFJSSxPQUFPLElBQUksRUFBZixFQUFtQjtBQUNmalYsU0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxnQkFBTSxFQUFFLE1BREw7QUFFSHBGLGFBQUcsRUFBRSxtQ0FBbUNrVSxPQUZyQztBQUdIL0ksa0JBQVEsRUFBRSxNQUhQO0FBSUh2SCxjQUFJLEVBQUU7QUFBQywyQkFBZXFRLEVBQUUsQ0FBQ2xOLElBQUgsQ0FBUStNO0FBQXhCLFdBSkg7QUFLSDNQLGlCQUFPLEVBQUUsaUJBQVVQLElBQVYsRUFBZ0I7QUFDckIsZ0JBQUlBLElBQUksQ0FBQ0ssS0FBTCxJQUFjLElBQWxCLEVBQXdCO0FBQ3BCaEYsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVlqUixJQUFaO0FBQ0FuRSxlQUFDLENBQUNvVixRQUFELENBQUQsQ0FBWTNQLFFBQVosQ0FBcUIsb0JBQXJCO0FBQ0F6RixlQUFDLENBQUNvVixRQUFELENBQUQsQ0FBWXpQLEdBQVosQ0FBZ0IsU0FBaEIsRUFBMkIsTUFBM0I7QUFDQTNGLGVBQUMsQ0FBQ29WLFFBQUQsQ0FBRCxDQUFZelAsR0FBWixDQUFnQixhQUFoQixFQUErQixRQUEvQjtBQUNBM0YsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVlsVSxJQUFaLENBQWlCLGtDQUFpQ3lELElBQUksQ0FBQ1csT0FBdkQ7QUFDSCxhQU5ELE1BTU87QUFDSHRGLGVBQUMsQ0FBQ29WLFFBQUQsQ0FBRCxDQUFZRSxXQUFaLENBQXdCLG9CQUF4QjtBQUNBdFYsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVk5USxJQUFaO0FBQ0g7QUFDSjtBQWhCRSxTQUFQO0FBa0JIO0FBQ0o7QUF6RGdDLEdBQXJDO0FBNERILENBbm1CRDtBQXNtQkR0RSxDQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThYLEtBQVosQ0FBa0IsWUFBVztBQUN6QixNQUFJQyxXQUFXLEdBQUd4VixDQUFDLENBQUMsb0JBQUQsQ0FBbkI7QUFDQSxNQUFJeVYsV0FBVyxHQUFHelYsQ0FBQyxDQUFDLGlCQUFELENBQW5CLENBRnlCLENBSXpCO0FBQ0E7O0FBQ0EsTUFBSTBWLFVBQVUsR0FBRzNXLE1BQU0sQ0FBQzBILFFBQVAsQ0FBZ0JrUCxJQUFqQyxDQU55QixDQU96Qjs7QUFDQTNWLEdBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCc1YsV0FBeEIsQ0FBb0MsUUFBcEM7QUFDQXRWLEdBQUMsQ0FBQyxrREFBRCxDQUFELENBQXNEaUIsSUFBdEQsQ0FBMkQsWUFBVztBQUNsRSxRQUFJMlUsSUFBSSxHQUFHNVYsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRNkMsSUFBUixDQUFhLE1BQWIsQ0FBWCxDQURrRSxDQUdsRTs7QUFDQSxRQUFJNlMsVUFBVSxDQUFDcFMsT0FBWCxDQUFtQnNTLElBQW5CLE1BQTZCLENBQUMsQ0FBbEMsRUFBcUM7QUFDakM7QUFDQTVWLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXlGLFFBQVIsQ0FBaUIsUUFBakI7QUFDQXpGLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsR0FBMEJBLE1BQTFCLEdBQW1Db0csUUFBbkMsQ0FBNEMsUUFBNUM7QUFDSCxLQUpELE1BSU87QUFDSHpGLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXNWLFdBQVIsQ0FBb0IsUUFBcEI7QUFDSDtBQUNKLEdBWEQ7QUFhQUUsYUFBVyxDQUFDalAsRUFBWixDQUFlLFFBQWYsRUFBeUIsVUFBVWMsQ0FBVixFQUFhO0FBQ2xDckgsS0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hwVCxTQUFHLEVBQUV5VSxXQUFXLENBQUM3USxJQUFaLENBQWlCLG1CQUFqQixDQURGO0FBRUhBLFVBQUksRUFBRTtBQUNGa1Isd0JBQWdCLEVBQUVMLFdBQVcsQ0FBQ0gsR0FBWjtBQURoQixPQUZIO0FBS0huUSxhQUFPLEVBQUUsaUJBQVVoRSxJQUFWLEVBQWdCO0FBQ3JCLFlBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1B1VSxxQkFBVyxDQUFDN1UsSUFBWixDQUFpQixRQUFqQixFQUEyQmpELE1BQTNCO0FBQ0E4WCxxQkFBVyxDQUFDaFEsUUFBWixDQUFxQixRQUFyQjtBQUNBO0FBQ0gsU0FMb0IsQ0FNckI7OztBQUNBZ1EsbUJBQVcsQ0FDTnZVLElBREwsQ0FDVUEsSUFEVixFQUVLb1UsV0FGTCxDQUVpQixRQUZqQjtBQUdIO0FBZkUsS0FBUDtBQWlCSCxHQWxCRDtBQW9CQTtBQUNBOztBQUNBblYsT0FBSyxDQUFDeEMsTUFBTixHQUFlLFVBQVVqQixLQUFWLEVBQWlCQyxJQUFqQixFQUF1QkMsRUFBdkIsRUFBMkI7QUFDdEMsUUFBSUMsSUFBSSxHQUFHSCxLQUFLLENBQUNJLEtBQU4sQ0FBWSxDQUFDRixFQUFFLElBQUlELElBQVAsSUFBZSxDQUFmLElBQW9CRCxLQUFLLENBQUNLLE1BQXRDLENBQVg7QUFDQUwsU0FBSyxDQUFDSyxNQUFOLEdBQWVKLElBQUksR0FBRyxDQUFQLEdBQVdELEtBQUssQ0FBQ0ssTUFBTixHQUFlSixJQUExQixHQUFpQ0EsSUFBaEQ7QUFDQSxXQUFPRCxLQUFLLENBQUNNLElBQU4sQ0FBV0MsS0FBWCxDQUFpQlAsS0FBakIsRUFBd0JHLElBQXhCLENBQVA7QUFDSCxHQUpELENBNUN5QixDQW1EekI7OztBQUNBa0MsUUFBTSxDQUFDK1csV0FBUCxHQUFxQixTQUFTQSxXQUFULENBQXFCelksRUFBckIsRUFBeUI7QUFDMUMsU0FBSyxJQUFJQyxHQUFHLEdBQUcsQ0FBZixFQUFrQkEsR0FBRyxHQUFHNEMsTUFBTSxDQUFDbkQsTUFBL0IsRUFBdUNPLEdBQUcsRUFBMUMsRUFBOEM7QUFDMUMsVUFBSUQsRUFBRSxJQUFJNkMsTUFBTSxDQUFDNUMsR0FBRCxDQUFoQixFQUF1QjtBQUNuQjZDLGFBQUssQ0FBQ3hDLE1BQU4sQ0FBYXVDLE1BQWIsRUFBcUI1QyxHQUFyQjtBQUNBRyxnQkFBUSxDQUFDQyxjQUFULENBQXdCTCxFQUF4QixFQUE0Qk0sTUFBNUI7QUFDQUMsd0JBQWdCO0FBRWhCO0FBQ0g7QUFDSjtBQUNKLEdBVkQsQ0FwRHlCLENBZ0V6Qjs7O0FBQ0EsV0FBU3VCLGNBQVQsR0FBMEI7QUFDdEIsUUFBSXRCLEtBQUssR0FBRyxHQUFaOztBQUNBLFFBQUltQyxDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CMkYsR0FBbkIsQ0FBdUIsU0FBdkIsS0FBcUMsTUFBekMsRUFBaUQ7QUFDN0M5SCxXQUFLLEdBQUcsQ0FBUjtBQUNIOztBQUVELFFBQUlrWSxZQUFZLEdBQUcsaUJBQW5COztBQUNBLFFBQUkvVixDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CakQsTUFBbkIsSUFBNkIsQ0FBakMsRUFBb0M7QUFDaENnWixrQkFBWSxHQUFHLGlCQUFmO0FBQ0g7O0FBRUQsUUFBSXpZLEdBQUcsR0FBRyxDQUFWOztBQUNBLFNBQUtBLEdBQUwsRUFBVUEsR0FBRyxHQUFHMkIsWUFBaEIsRUFBOEIzQixHQUFHLEVBQWpDLEVBQXFDO0FBQ2pDLFVBQUk0QyxNQUFNLENBQUM1QyxHQUFELENBQU4sSUFBZVEsU0FBbkIsRUFBOEI7QUFDMUIsWUFBSUMsT0FBTyxHQUFHTixRQUFRLENBQUNDLGNBQVQsQ0FBd0J3QyxNQUFNLENBQUM1QyxHQUFELENBQTlCLENBQWQ7QUFDQVMsZUFBTyxDQUFDQyxLQUFSLENBQWNILEtBQWQsR0FBc0JBLEtBQUssR0FBRyxJQUE5QjtBQUNBbUMsU0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVd1WCxXQUFYLENBQXVCLGlCQUF2QixFQUEwQ0EsV0FBMUMsQ0FBc0QsaUJBQXREO0FBQ0F0VixTQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzBILFFBQVgsQ0FBb0JzUSxZQUFwQjtBQUNBbFksYUFBSyxHQUFHQSxLQUFLLEdBQUcsR0FBaEI7QUFDQUUsZUFBTyxDQUFDQyxLQUFSLENBQWNDLE9BQWQsR0FBd0IsT0FBeEI7QUFDSDtBQUNKOztBQUVELFNBQUssSUFBSUMsR0FBRyxHQUFHWixHQUFmLEVBQW9CWSxHQUFHLEdBQUdnQyxNQUFNLENBQUNuRCxNQUFqQyxFQUF5Q21CLEdBQUcsRUFBNUMsRUFBZ0Q7QUFDNUMsVUFBSUgsT0FBTyxHQUFHTixRQUFRLENBQUNDLGNBQVQsQ0FBd0J3QyxNQUFNLENBQUNoQyxHQUFELENBQTlCLENBQWQ7QUFDQUgsYUFBTyxDQUFDQyxLQUFSLENBQWNDLE9BQWQsR0FBd0IsTUFBeEI7QUFDSDtBQUNKLEdBNUZ3QixDQThGekI7OztBQUNBYyxRQUFNLENBQUNpWCxjQUFQLEdBQXdCLFNBQVNBLGNBQVQsQ0FBd0IzWSxFQUF4QixFQUE0Qm9CLElBQTVCLEVBQWtDRixVQUFsQyxFQUE4QztBQUNsRSxTQUFLLElBQUlqQixHQUFHLEdBQUcsQ0FBZixFQUFrQkEsR0FBRyxHQUFHNEMsTUFBTSxDQUFDbkQsTUFBL0IsRUFBdUNPLEdBQUcsRUFBMUMsRUFBOEM7QUFDMUM7QUFDQSxVQUFJRCxFQUFFLElBQUk2QyxNQUFNLENBQUM1QyxHQUFELENBQWhCLEVBQXVCO0FBQ25CNkMsYUFBSyxDQUFDeEMsTUFBTixDQUFhdUMsTUFBYixFQUFxQjVDLEdBQXJCO0FBRUEyWSxzQkFBYyxDQUFDNVksRUFBRCxFQUFLb0IsSUFBTCxFQUFXRixVQUFYLENBQWQ7QUFFQTtBQUNIO0FBQ0o7O0FBQ0QwWCxrQkFBYyxDQUFDNVksRUFBRCxFQUFLb0IsSUFBTCxFQUFXRixVQUFYLENBQWQ7QUFDSCxHQVpEOztBQWNBLFdBQVMwWCxjQUFULENBQXdCNVksRUFBeEIsRUFBNEJvQixJQUE1QixFQUFrQ0YsVUFBbEMsRUFBNEQ7QUFBQSxRQUFkMlgsSUFBYyx1RUFBUCxLQUFPO0FBQ3hEO0FBQ0E3WSxNQUFFLEdBQUk2QixRQUFRLENBQUM3QixFQUFELENBQWQ7QUFDQTJDLEtBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sWUFBTSxFQUFFLEtBREw7QUFFSHBGLFNBQUcsRUFBRSxhQUZGO0FBR0g0RCxVQUFJLEVBQUU7QUFBQyxjQUFNdEgsRUFBUDtBQUFXLGdCQUFRb0IsSUFBbkI7QUFBeUIsc0JBQWNGLFVBQXZDO0FBQW1ELGdCQUFRMlg7QUFBM0QsT0FISDtBQUlIaEssY0FBUSxFQUFFLE1BSlA7QUFLSGhILGFBQU8sRUFBRSxpQkFBVTZILE1BQVYsRUFBa0I7QUFDdkIsWUFBSS9NLENBQUMsQ0FBQyxNQUFNM0MsRUFBUCxDQUFELENBQVlOLE1BQVosSUFBc0IsQ0FBMUIsRUFBNkI7QUFDekIsY0FBSTZGLElBQUksR0FBRzVDLENBQUMsQ0FBQytNLE1BQUQsQ0FBRCxDQUFVb0osUUFBVixDQUFtQixnQkFBbkIsRUFBcUNqVixJQUFyQyxFQUFYO0FBQ0FsQixXQUFDLENBQUMsTUFBTTNDLEVBQVAsQ0FBRCxDQUFZOFksUUFBWixDQUFxQixnQkFBckIsRUFBdUNqVixJQUF2QyxDQUE0QzBCLElBQTVDO0FBQ0gsU0FIRCxNQUdPO0FBQ0g1QyxXQUFDLENBQUMsTUFBRCxDQUFELENBQVVILE1BQVYsQ0FBaUJrTixNQUFqQjtBQUNIOztBQUNEL00sU0FBQyxDQUFDLE1BQUszQyxFQUFMLEdBQVMsbUNBQVYsQ0FBRCxDQUFnRHlULEtBQWhEOztBQUVBLFlBQUksQ0FBQzVRLE1BQU0sQ0FBQzRQLFFBQVAsQ0FBZ0J6UyxFQUFoQixDQUFMLEVBQTBCO0FBQ3RCNkMsZ0JBQU0sQ0FBQ3ZCLE9BQVAsQ0FBZXRCLEVBQWY7QUFDSDs7QUFDRE8sd0JBQWdCO0FBQ2hCb0MsU0FBQyxDQUFDLE1BQU0zQyxFQUFOLEdBQVcsbUJBQVosQ0FBRCxDQUFrQyxDQUFsQyxFQUFxQ3lDLFNBQXJDLEdBQWlERSxDQUFDLENBQUMsTUFBTTNDLEVBQU4sR0FBVSxtQkFBWCxDQUFELENBQWlDLENBQWpDLEVBQW9DMEMsWUFBckY7QUFDQXFXLHdCQUFnQjtBQUNuQixPQXBCRTtBQXFCSHBSLFdBQUssRUFBRSxpQkFBWTtBQUNmcVIsYUFBSyxDQUFDLDhCQUFELENBQUw7QUFDSCxPQXZCRTtBQXdCSEMsYUFBTyxFQUFFO0FBeEJOLEtBQVA7QUEwQkgsR0ExSXdCLENBNEl6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBQ0F2WCxRQUFNLENBQUNuQixnQkFBUCxHQUEwQixTQUFTQSxnQkFBVCxHQUE0QjtBQUNsRCxRQUFJa0IsS0FBSyxHQUFHQyxNQUFNLENBQUNDLFVBQW5COztBQUNBLFFBQUlGLEtBQUssR0FBRyxHQUFaLEVBQWlCO0FBQ2JHLGtCQUFZLEdBQUcsQ0FBZjtBQUNILEtBRkQsTUFHSztBQUNELFVBQUllLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUIyRixHQUFuQixDQUF1QixTQUF2QixLQUFxQyxNQUF6QyxFQUFpRDtBQUM3QzdHLGFBQUssR0FBR0EsS0FBSyxHQUFHLEdBQWhCO0FBQ0gsT0FIQSxDQUtEOzs7QUFDQUcsa0JBQVksR0FBR0MsUUFBUSxDQUFDSixLQUFLLEdBQUcsR0FBVCxDQUF2QjtBQUNIOztBQUVESyxrQkFBYztBQUVqQixHQWhCRCxDQXpLeUIsQ0EyTHpCOzs7QUFDQSxXQUFTb1gsVUFBVCxDQUFvQm5YLElBQXBCLEVBQTBCQyxNQUExQixFQUFrQ2QsVUFBbEMsRUFBOEM7QUFDMUMsUUFBSWUsT0FBTyxHQUFHLEVBQWQ7QUFDQSxRQUFJQyxJQUFJLEdBQUcsSUFBSUMsSUFBSixFQUFYO0FBQ0EsUUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLFFBQUwsS0FBa0IsR0FBbEIsR0FBd0JILElBQUksQ0FBQ0ksVUFBTCxFQUF2QztBQUVBTCxXQUFPLEdBQUcsbUZBQ04sMEJBRE0sR0FDdUJmLFVBRHZCLEdBQ29DLElBRHBDLEdBRU4sMkJBRk0sR0FHTixLQUhNLEdBR0VhLElBSEYsR0FHUyxNQUhULEdBSU4sUUFKTSxHQUtOLFFBTE0sR0FNTixtRUFOTSxHQU1nRUssUUFOaEUsR0FNMkUsUUFOM0UsR0FPTix5RUFQTSxHQVFOLDZGQVJNLEdBU04sT0FUSjtBQVdBSixVQUFNLENBQUNRLE1BQVAsQ0FBY1AsT0FBZDtBQUVBLFFBQUlrWCxRQUFRLEdBQUd4VyxDQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVQSxNQUFWLEVBQWY7QUFDQW1YLFlBQVEsQ0FBQ3RRLE9BQVQsQ0FBaUI7QUFBQ3BHLGVBQVMsRUFBRTBXLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWXpXO0FBQXhCLEtBQWpCLEVBQXdELEdBQXhEO0FBQ0g7O0FBRURoQixRQUFNLENBQUMwWCxnQkFBUCxHQUEwQixTQUFTQSxnQkFBVCxDQUEwQnBaLEVBQTFCLEVBQThCb0IsSUFBOUIsRUFBb0NGLFVBQXBDLEVBQWdEO0FBQ3RFO0FBQ0EsU0FBSyxJQUFJakIsR0FBRyxHQUFHLENBQWYsRUFBa0JBLEdBQUcsR0FBRzRDLE1BQU0sQ0FBQ25ELE1BQS9CLEVBQXVDTyxHQUFHLEVBQTFDLEVBQThDO0FBQzFDO0FBQ0EsVUFBSUQsRUFBRSxJQUFJNkMsTUFBTSxDQUFDNUMsR0FBRCxDQUFoQixFQUF1QjtBQUNuQjZDLGFBQUssQ0FBQ3hDLE1BQU4sQ0FBYXVDLE1BQWIsRUFBcUI1QyxHQUFyQjtBQUNBMEMsU0FBQyxDQUFDLE1BQU0zQyxFQUFQLENBQUQsQ0FBWWlZLFdBQVosQ0FBd0IsZUFBeEI7QUFDQVcsc0JBQWMsQ0FBQzVZLEVBQUQsRUFBS29CLElBQUwsRUFBV0YsVUFBWCxDQUFkO0FBRUE7QUFDSDtBQUNKLEtBWHFFLENBWXRFO0FBQ0Q7O0FBQ0YsR0FkRCxDQWxOeUIsQ0FrT3pCOzs7QUFDQVEsUUFBTSxDQUFDdUksZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MxSixnQkFBbEM7O0FBRUFtQixRQUFNLENBQUMyWCxXQUFQLEdBQXFCLFNBQVNBLFdBQVQsQ0FBcUJDLFdBQXJCLEVBQWtDNVksT0FBbEMsRUFBMkM7QUFDNUQsUUFBSXFCLElBQUksR0FBR3VYLFdBQVcsQ0FBQ3ZYLElBQVosRUFBWDtBQUNBLFFBQUliLFVBQVUsR0FBR29ZLFdBQVcsQ0FBQ2hTLElBQVosQ0FBaUIsWUFBakIsQ0FBakI7O0FBQ0EsUUFBSXZGLElBQUksS0FBSyxFQUFiLEVBQWlCO0FBQ2I7QUFDQVksT0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxjQUFNLEVBQUUsTUFETDtBQUVIcEYsV0FBRyxFQUFFLGFBRkY7QUFHSDRELFlBQUksRUFBRTtBQUFDLGdCQUFNNUcsT0FBTyxDQUFDNlksT0FBUixDQUFnQixhQUFoQixFQUErQi9ULElBQS9CLENBQW9DLElBQXBDLENBQVA7QUFBa0QscUJBQVd6RDtBQUE3RCxTQUhIO0FBSUg4TSxnQkFBUSxFQUFFLE1BSlA7QUFLSGhILGVBQU8sRUFBRSxpQkFBU21DLENBQVQsRUFBWTtBQUNqQjtBQUNBNE8sd0JBQWMsQ0FBQy9XLFFBQVEsQ0FBQ25CLE9BQU8sQ0FBQzZZLE9BQVIsQ0FBZ0IsYUFBaEIsRUFBK0IvVCxJQUEvQixDQUFvQyxJQUFwQyxDQUFELENBQVQsRUFBc0QsRUFBdEQsRUFBMER0RSxVQUExRCxDQUFkO0FBQ0g7QUFSRSxPQUFQO0FBV0FvWSxpQkFBVyxDQUFDdlgsSUFBWixDQUFpQixFQUFqQjtBQUNIO0FBQ0osR0FsQkQ7O0FBb0JBLFdBQVMrRSxJQUFULENBQWNwRyxPQUFkLEVBQXVCO0FBQ25CLFFBQU04WSxjQUFjLEdBQUdDLDZEQUFZLENBQUMsSUFBRCxFQUFPQyxPQUFQLENBQW5DLENBRG1CLENBRW5CO0FBQ0E7O0FBQ0FGLGtCQUFjLENBQUNHLE1BQWY7QUFDSDs7QUFFRCxXQUFTMVMsSUFBVCxDQUFjdkcsT0FBZCxFQUF1QixDQUV0QixDQWxRd0IsQ0FvUXpCOzs7QUFDQSxXQUFTa1osV0FBVCxDQUFxQkMsT0FBckIsRUFBOEI7QUFDMUIsUUFBSUMsRUFBRSxHQUFHMVosUUFBUSxDQUFDa1Qsc0JBQVQsQ0FBZ0N1RyxPQUFoQyxDQUFUO0FBQ0EsUUFBSUUsaUJBQWlCLEdBQUcsS0FBeEIsQ0FGMEIsQ0FFSTs7QUFDOUIsU0FBS3JTLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQW5CLEVBQTJCZ0ksQ0FBQyxFQUE1QixFQUFnQztBQUM1QixVQUFJb1MsRUFBRSxDQUFDcFMsQ0FBRCxDQUFGLENBQU1zUyxPQUFOLEtBQWtCLElBQXRCLEVBQTRCO0FBQ3hCRCx5QkFBaUIsR0FBRyxJQUFwQjtBQUNIO0FBQ0o7O0FBRUQsUUFBSUEsaUJBQWlCLEtBQUssSUFBMUIsRUFBZ0M7QUFDNUIsV0FBSyxJQUFJclMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQXZCLEVBQStCZ0ksQ0FBQyxFQUFoQyxFQUFvQztBQUNoQ29TLFVBQUUsQ0FBQ3BTLENBQUQsQ0FBRixDQUFNdVMsUUFBTixHQUFpQixLQUFqQjtBQUNIO0FBQ0osS0FKRCxNQUlPO0FBQ0gsV0FBSyxJQUFJdlMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQXZCLEVBQStCZ0ksQ0FBQyxFQUFoQyxFQUFvQztBQUNoQ29TLFVBQUUsQ0FBQ3BTLENBQUQsQ0FBRixDQUFNdVMsUUFBTixHQUFpQixJQUFqQjtBQUNIO0FBQ0o7QUFDSjs7QUFHRHZZLFFBQU0sQ0FBQ3dZLGVBQVAsR0FBeUIsU0FBU0EsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0M7QUFDckQ7QUFDQSxXQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFVQyxPQUFWLEVBQW1CQyxNQUFuQixFQUEyQjtBQUMxQzNYLE9BQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sY0FBTSxFQUFFLEtBREw7QUFFSHBGLFdBQUcsRUFBRXlXLEtBRkY7QUFHSHRMLGdCQUFRLEVBQUUsTUFIUDtBQUlIaEgsZUFBTyxFQUFFLGlCQUFVNkgsTUFBVixFQUFrQjtBQUN2QjJLLGlCQUFPLENBQUMzSyxNQUFELENBQVA7QUFDSCxTQU5FO0FBT0gvSCxhQUFLLEVBQUUsZUFBVVAsR0FBVixFQUFlbVQsTUFBZixFQUF1QjVTLE1BQXZCLEVBQThCO0FBQ2pDMlMsZ0JBQU0sQ0FBQzNTLE1BQUQsQ0FBTjtBQUNIO0FBVEUsT0FBUDtBQVdILEtBWk0sQ0FBUDtBQWFILEdBZkQ7O0FBa0JBaEYsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBcUIsV0FBckIsRUFBa0MsVUFBVWMsQ0FBVixFQUFhO0FBQzNDQSxLQUFDLENBQUNnQixjQUFGO0FBQ0EsUUFBSXdQLE1BQU0sR0FBRyxFQUFiO0FBQUEsUUFBaUJDLFNBQVMsR0FBRyxFQUE3QjtBQUFBLFFBQWlDQyxPQUFPLEdBQUcsRUFBM0M7QUFBQSxRQUErQ0MsSUFBSSxHQUFHLEVBQXREO0FBQUEsUUFBMEQvSixLQUFLLEdBQUcsRUFBbEU7QUFFQWpPLEtBQUMsQ0FBQyx5Q0FBRCxDQUFELENBQTZDaUIsSUFBN0MsQ0FBa0QsVUFBVW9HLENBQVYsRUFBYTtBQUMzRHlRLGVBQVMsR0FBRzlYLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTZDLElBQVIsQ0FBYSxNQUFiLEVBQXFCMlAsS0FBckIsQ0FBMkIsR0FBM0IsQ0FBWjtBQUNBdUYsYUFBTyxHQUFHRCxTQUFTLENBQUMsQ0FBRCxDQUFuQjtBQUNBRSxVQUFJLEdBQUdGLFNBQVMsQ0FBQyxDQUFELENBQWhCO0FBRUE3SixXQUFLLEdBQUtqTyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXcVgsT0FBWCxJQUFzQixJQUF2QixHQUErQixDQUEvQixHQUFtQyxDQUE1Qzs7QUFDQSxVQUFJLENBQUNRLE1BQU0sQ0FBQ0csSUFBRCxDQUFYLEVBQW1CO0FBQ2ZILGNBQU0sQ0FBQ0csSUFBRCxDQUFOLEdBQWUsRUFBZjtBQUNIOztBQUNESCxZQUFNLENBQUNHLElBQUQsQ0FBTixDQUFhRCxPQUFiLElBQXdCOUosS0FBeEI7QUFDSCxLQVZEO0FBV0E0SixVQUFNLEdBQUd4RSxJQUFJLENBQUM0RSxTQUFMLENBQWVKLE1BQWYsQ0FBVDtBQUVILEdBakJEO0FBbUJBN1gsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0REEsS0FBQyxDQUFDZ0IsY0FBRjtBQUNBLFFBQUk2UCxtQkFBbUIsR0FBRyxFQUExQjtBQUNBLFFBQUlDLEtBQUssR0FBR25ZLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJxVixHQUFuQixFQUFaO0FBQ0EsUUFBSStDLElBQUksR0FBR3BZLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JxVixHQUFsQixFQUFYO0FBQ0EsUUFBSWdELE1BQU0sR0FBSSxLQUFkO0FBQ0EsUUFBSUMsa0JBQWtCLEdBQUcsS0FBekI7QUFFQSxRQUFJdFksQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0IsQ0FBeEIsRUFBMkJxWCxPQUEzQixJQUFzQyxJQUExQyxFQUFnRGdCLE1BQU0sR0FBRyxJQUFUO0FBQ2hELFFBQUlyWSxDQUFDLENBQUMsZ0NBQUQsQ0FBRCxDQUFvQyxDQUFwQyxFQUF1Q3FYLE9BQXZDLElBQWtELElBQXRELEVBQTREaUIsa0JBQWtCLEdBQUcsSUFBckIsQ0FUTixDQVV0RDs7QUFDSSxRQUFJbEYsTUFBTSxHQUFHcFQsQ0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXMlQsVUFBWCxDQUFzQixVQUF0QixFQUFrQzRFLGlCQUFsQyxDQUFvRCxJQUFwRCxDQUFiLENBWGtELENBWXhEOztBQUNFdlksS0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXMlQsVUFBWCxDQUFzQixVQUF0QixFQUFrQzZFLGlCQUFsQyxHQUFzRHBSLE9BQXRELENBQThELFVBQVNDLENBQVQsRUFBWTtBQUN0RSxVQUFJQSxDQUFDLENBQUNpSCxJQUFGLElBQVUsV0FBZCxFQUEyQjtBQUN2QjRKLDJCQUFtQixDQUFDN1EsQ0FBQyxDQUFDeUYsU0FBSCxDQUFuQixHQUFtQ3pGLENBQUMsQ0FBQ21NLFlBQXJDO0FBQ0g7QUFDSixLQUpEO0FBS0E1UixVQUFNLENBQUNvRixTQUFQLEdBbEJzRCxDQW1CdEQ7QUFDQTtBQUNBOztBQUNBLFFBQUlvTSxNQUFNLElBQUk4RSxtQkFBZCxFQUFtQztBQUMvQmxZLE9BQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIcFQsV0FBRyxFQUFFLGNBQWNmLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixhQUF0QixDQURoQjtBQUVIMkosWUFBSSxFQUFFLE1BRkg7QUFHSHBDLGdCQUFRLEVBQUUsTUFIUDtBQUlIdkgsWUFBSSxFQUFFO0FBQUMsbUJBQVN3VCxLQUFWO0FBQWlCLHFCQUFXL0UsTUFBNUI7QUFBb0Msc0JBQVk4RSxtQkFBaEQ7QUFBcUUsb0JBQVVHLE1BQS9FO0FBQXNGLGdDQUFzQkMsa0JBQTVHO0FBQWdJLGtCQUFRRixJQUF4STtBQUE4SSxrQkFBUXBZLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JxVixHQUFsQjtBQUF0SixTQUpIO0FBS0huUSxlQUFPLEVBQUUsaUJBQVU2SCxNQUFWLEVBQWtCO0FBQ3ZCLGNBQUlBLE1BQU0sQ0FBQzZLLE1BQVAsSUFBaUIsQ0FBckIsRUFBd0I7QUFDcEI1WCxhQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCNkwsTUFBTSxDQUFDekgsT0FBeEIsRUFBaUNuQixJQUFqQztBQUNILFdBRkQsTUFFTztBQUNIc1UsNkJBQWlCLENBQUNuVSxJQUFsQjtBQUNIO0FBQ0osU0FYRTtBQVlIVSxhQUFLLEVBQUUsaUJBQVk7QUFDZjdILGlCQUFPLENBQUNDLEdBQVIsQ0FBWSxtQ0FBWjtBQUNIO0FBZEUsT0FBUDtBQWdCSCxLQWpCRCxNQWlCTztBQUNINEMsT0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUFZa0IsSUFBWixDQUFpQixpRUFBakIsRUFBb0ZpRCxJQUFwRjtBQUNIO0FBRUosR0EzQ0QsRUEvVHlCLENBNFd6Qjs7QUFDQW5FLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGNBQXRCLEVBQXNDLFVBQVVjLENBQVYsRUFBYTtBQUMvQyxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsMkRBQTdCLEVBQTBGLGFBQTFGLENBQWI7QUFDQTVMLFVBQU0sQ0FBQzZMLElBQVAsQ0FBWSxVQUFVQyxZQUFWLEVBQXdCO0FBQ2hDLFVBQUlBLFlBQUosRUFBa0I7QUFDZCxZQUFJeGIsRUFBRSxHQUFHMkMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLElBQWIsQ0FBVDtBQUNBLFlBQUl0RixNQUFNLEdBQUdXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsRUFBYjtBQUNBVyxTQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGdCQUFNLEVBQUUsT0FETDtBQUVIcEYsYUFBRyxFQUFFLE1BQU1mLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixhQUF0QixDQUFOLEdBQTZDLEdBQTdDLEdBQW1EdEgsRUFGckQ7QUFHSDZPLGtCQUFRLEVBQUUsTUFIUDtBQUlIdkgsY0FBSSxFQUFFO0FBQUMsMkJBQWU7QUFBaEIsV0FKSDtBQUtITyxpQkFBTyxFQUFFLGlCQUFVNkgsTUFBVixFQUFrQjtBQUN2Qi9NLGFBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVUxQixNQUFWO0FBQ0gsV0FQRTtBQVFIcUgsZUFBSyxFQUFFLGlCQUFZO0FBQ2ZxUixpQkFBSyxDQUFDLCtCQUFELENBQUw7QUFDSCxXQVZFO0FBV0hDLGlCQUFPLEVBQUU7QUFYTixTQUFQO0FBYUg7O0FBQ0R2SixZQUFNLEdBQUdqUCxTQUFUO0FBQ0gsS0FuQkQ7QUFvQkgsR0F0QkQ7QUF1QkFrQyxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixrQkFBdEIsRUFBMEMsVUFBVWMsQ0FBVixFQUFhO0FBQ25EckgsS0FBQyxDQUFDLHVCQUFELENBQUQsQ0FBMkI4WSxJQUEzQixDQUFnQyxpREFBaURDLE1BQWpGLEVBQXlGLElBQXpGO0FBQ0EsUUFBSUMsV0FBVyxHQUFHcFgsTUFBTSxDQUFDcVgsYUFBUCxDQUFxQix1QkFBckIsRUFBOEMsc0JBQTlDLEVBQXNFLEtBQXRFLENBQWxCO0FBQ0FqWixLQUFDLENBQUMsd0JBQUQsQ0FBRCxDQUE0Qm1FLElBQTVCO0FBQ0E2VSxlQUFXLENBQUM3VSxJQUFaO0FBQ0FuRSxLQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCLEVBQWpCLEVBQXFCb0QsSUFBckI7QUFDSCxHQU5EO0FBT0F0RSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQiwyQ0FBdEIsRUFBbUUsVUFBVWMsQ0FBVixFQUFhO0FBQzVFckgsS0FBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJrWixPQUE1QixDQUFvQyxVQUFwQyxFQUFnRDVVLElBQWhEO0FBQ0gsR0FGRDtBQUdBdEUsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0REEsS0FBQyxDQUFDZ0IsY0FBRjs7QUFDQSxRQUFJLEtBQUs4USxZQUFMLENBQWtCLE1BQWxCLENBQUosRUFBK0I7QUFDM0IsVUFBSUMsSUFBSSxHQUFHLE1BQU1wWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVE2QyxJQUFSLENBQWEsTUFBYixDQUFqQjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUl1VyxJQUFJLEdBQUcvUixDQUFDLENBQUNnUyxNQUFGLENBQVNELElBQXBCO0FBQ0gsS0FOcUQsQ0FRdEQ7OztBQUNBLFFBQUlwWixDQUFDLENBQUNvWixJQUFELENBQUQsQ0FBUXhZLElBQVIsQ0FBYSxvQ0FBYixFQUFtRDdELE1BQW5ELElBQTZELENBQWpFLEVBQW9FO0FBQ2hFaUQsT0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVF4WSxJQUFSLENBQWEsMENBQWIsRUFBeUQ2QyxLQUF6RCxHQUFpRUEsS0FBakU7QUFDSDs7QUFDRCxRQUFJekQsQ0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXRSxjQUFYLE1BQStCLEtBQW5DLEVBQTBDO0FBQ3RDdFosT0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVFHLE1BQVI7QUFDSDtBQUNKLEdBZkQ7QUFnQkF2WixHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsUUFBYixFQUF1QixnQkFBdkIsRUFBeUMzRSxNQUFNLENBQUM0WCxtQkFBUCxDQUEyQkMsSUFBM0IsQ0FBZ0MsSUFBaEMsQ0FBekM7QUFFQXpaLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGdCQUF0QixFQUF3QyxVQUFVYyxDQUFWLEVBQWE7QUFDakRBLEtBQUMsQ0FBQ2dCLGNBQUY7QUFDQSxRQUFJcVIsT0FBTyxHQUFHMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZDtBQUNBLFFBQUk3RixLQUFLLEdBQUdrQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsYUFBYixDQUFaO0FBQ0EsUUFBSWtMLE1BQU0sR0FBRzdQLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxjQUFiLENBQWI7QUFDQSxRQUFJZ1YsbUJBQW1CLEdBQUczWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsdUJBQWIsQ0FBMUI7QUFDQSxRQUFJK0osU0FBUyxHQUFHMU8sQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGtCQUFiLENBQWhCO0FBQ0EsUUFBSWlWLFdBQVcsR0FBRzVaLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxtQkFBYixDQUFsQjtBQUNBLFFBQUlrVixXQUFXLEdBQUc3WixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsbUJBQWIsQ0FBbEI7QUFDQSxRQUFJbVYsV0FBVyxHQUFHOVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLG1CQUFiLENBQWxCO0FBQ0EsUUFBSW9WLFVBQVUsR0FBRy9aLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxrQkFBYixDQUFqQjtBQUNBLFFBQUlxVixpQkFBaUIsR0FBR2hhLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxtQkFBYixDQUF4QjtBQUNBLFFBQUlzVixtQkFBbUIsR0FBR2phLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxvQkFBYixDQUExQjtBQUNBLFFBQUl1VixNQUFNLEdBQUlsYSxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsY0FBYixDQUFkLENBYmlELENBZWpEOztBQUNBM0UsS0FBQyxDQUFDLE1BQUkwWixPQUFKLEdBQWMsT0FBZixDQUFELENBQXlCelksSUFBekIsQ0FBOEIsWUFBVztBQUNoQ2pCLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUSxDQUFSLEVBQVdtYSxLQUFYO0FBQ1IsS0FGRDtBQUdBLFFBQUlDLEtBQUssR0FBR3hZLE1BQU0sQ0FBQ3FYLGFBQVAsQ0FBcUJTLE9BQXJCLEVBQThCMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGFBQWIsQ0FBOUIsRUFBMkQ3RixLQUEzRCxFQUFrRStRLE1BQWxFLENBQVo7O0FBQ0EsUUFBSW5CLFNBQUosRUFBZTtBQUNYMEwsV0FBSyxDQUFDaEwsTUFBTixDQUFhLFdBQWIsRUFBMEJWLFNBQTFCO0FBQ0g7O0FBQ0QsUUFBSWlMLG1CQUFKLEVBQXlCO0FBQ3JCO0FBQ0E7QUFDQTVhLFlBQU0sQ0FBQ3dZLGVBQVAsQ0FBdUJvQyxtQkFBdkIsRUFDS1UsSUFETCxDQUNVLFVBQVUxVixJQUFWLEVBQWdCO0FBQ2xCeVYsYUFBSyxDQUFDaEwsTUFBTixDQUFhLGlCQUFiLEVBQWdDekssSUFBaEM7QUFDSCxPQUhMLFdBSVcsVUFBVUssS0FBVixFQUFpQjtBQUNwQjdILGVBQU8sQ0FBQzZILEtBQVIsQ0FBYyxVQUFkLEVBQTBCQSxLQUExQjtBQUNILE9BTkw7QUFPSDs7QUFDRCxRQUFJNFUsV0FBSixFQUFpQjtBQUNiUSxXQUFLLENBQUNoTCxNQUFOLENBQWEsYUFBYixFQUE0QnBQLENBQUMsQ0FBQzRaLFdBQUQsQ0FBN0I7QUFDSDs7QUFDRCxRQUFJTSxNQUFKLEVBQVk7QUFDUkUsV0FBSyxDQUFDaEwsTUFBTixDQUFhLGlCQUFiLEVBQWdDOEssTUFBaEM7QUFDSDs7QUFDRCxRQUFJTCxXQUFKLEVBQWlCO0FBQ2JPLFdBQUssQ0FBQ2hMLE1BQU4sQ0FBYSxhQUFiLEVBQTRCeUssV0FBNUI7QUFDSDs7QUFDRCxRQUFJQyxXQUFKLEVBQWlCO0FBQ2JNLFdBQUssQ0FBQ2hMLE1BQU4sQ0FBYSxhQUFiLEVBQTRCMEssV0FBNUI7QUFDSDs7QUFDRCxRQUFJRyxtQkFBbUIsS0FBSyxLQUE1QixFQUFtQztBQUMvQkcsV0FBSyxDQUFDaEwsTUFBTixDQUFhLHFCQUFiLEVBQW9DNkssbUJBQXBDO0FBQ0g7O0FBQ0QsUUFBSUYsVUFBSixFQUFnQjtBQUNaSyxXQUFLLENBQUNoTCxNQUFOLENBQWEsU0FBYixFQUF3QixVQUFTL0gsQ0FBVCxFQUFZO0FBQ2hDckgsU0FBQyxDQUFDK1osVUFBRCxDQUFELENBQWNPLFlBQWQsQ0FBMkI7QUFDdkJDLHlCQUFlLEVBQUUsSUFETTtBQUV2QkMsdUJBQWEsRUFBRSxJQUZRO0FBR3ZCQyxtQkFBUyxFQUFFLElBSFk7QUFJdkIzYixlQUFLLEVBQUUsTUFKZ0I7QUFLdkIrUSxnQkFBTSxFQUFFbUs7QUFMZSxTQUEzQjtBQU9BSSxhQUFLLENBQUNNLE9BQU47QUFDSCxPQVREO0FBVUg7O0FBRUQxYSxLQUFDLENBQUMsTUFBTTBaLE9BQVAsQ0FBRCxDQUFpQnZWLElBQWpCO0FBRUFpVyxTQUFLLENBQUNqVyxJQUFOO0FBQ0FuRSxLQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCLEVBQWpCLEVBQXFCb0QsSUFBckI7QUFDSCxHQWxFRDtBQW9FQXRFLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHdCQUF0QixFQUFnRCxVQUFVYyxDQUFWLEVBQWE7QUFDekRBLEtBQUMsQ0FBQ2dCLGNBQUY7QUFDQSxRQUFJcVIsT0FBTyxHQUFHMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFlBQWIsQ0FBZDtBQUNBM0UsS0FBQyxDQUFDLE1BQU0wWixPQUFQLENBQUQsQ0FBaUJSLE9BQWpCLENBQXlCLFVBQXpCLEVBQXFDNVUsSUFBckM7QUFDSCxHQUpELEVBcGV5QixDQTBlekI7O0FBQ0F0RSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsUUFBYixFQUF1QiwyQkFBdkIsRUFBb0QsVUFBVWMsQ0FBVixFQUFhO0FBQzdELFFBQUlnUyxNQUFNLEdBQUdyWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFiO0FBQ0EzRSxLQUFDLENBQUNxWixNQUFELENBQUQsQ0FBVXNCLE1BQVY7QUFDSCxHQUhEO0FBS0EzYSxHQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThYLEtBQVosQ0FBa0IsWUFBWTtBQUMxQjNULFVBQU0sQ0FBQ29GLFNBQVA7QUFDQWhILEtBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDdUcsRUFBbEMsQ0FBcUMsYUFBckMsRUFBb0QsVUFBVWMsQ0FBVixFQUFhO0FBQzdEdVQsa0JBQVksQ0FBQ0MsT0FBYixDQUFxQixXQUFyQixFQUFrQzdhLENBQUMsQ0FBQ3FILENBQUMsQ0FBQ2dTLE1BQUgsQ0FBRCxDQUFZeFcsSUFBWixDQUFpQixJQUFqQixDQUFsQztBQUNILEtBRkQ7QUFHQSxRQUFJaVksU0FBUyxHQUFHRixZQUFZLENBQUNHLE9BQWIsQ0FBcUIsV0FBckIsQ0FBaEI7O0FBQ0EsUUFBSUQsU0FBSixFQUFlO0FBQ1g5YSxPQUFDLENBQUMsTUFBTThhLFNBQVAsQ0FBRCxDQUFtQkUsR0FBbkIsQ0FBdUIsTUFBdkI7QUFDSDs7QUFDRGhiLEtBQUMsQ0FBQyx5QkFBRCxDQUFELENBQTZCaWIsSUFBN0IsQ0FBa0MsZ0JBQWxDLEVBQW1EO0FBQUNDLGlCQUFXLEVBQUc7QUFBQyxhQUFLO0FBQUNDLGlCQUFPLEVBQUUsT0FBVjtBQUFtQkMsbUJBQVMsRUFBRTtBQUE5QjtBQUFOO0FBQWYsS0FBbkQ7QUFDRHBiLEtBQUMsQ0FBQyxtQkFBRCxDQUFELENBQXVCaWIsSUFBdkIsQ0FBNEIsWUFBNUIsRUFWMkIsQ0FZNUI7QUFDRCxHQWJELEVBaGZ5QixDQStmekI7O0FBQ0FqYixHQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThJLEVBQVosQ0FBZSxPQUFmLEVBQXdCLGVBQXhCLEVBQXlDLFVBQVVjLENBQVYsRUFBYTtBQUNsREEsS0FBQyxDQUFDZ0IsY0FBRjtBQUNBLFFBQUlnUixNQUFNLEdBQUdyWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFiO0FBQ0EzRSxLQUFDLENBQUNxWixNQUFELENBQUQsQ0FBVXNCLE1BQVY7O0FBQ0EsUUFBSXRCLE1BQU0sSUFBSSxlQUFkLEVBQStCO0FBQzNCdGEsWUFBTSxDQUFDbkIsZ0JBQVA7QUFDSDtBQUNKLEdBUEQ7QUFTQW9DLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLG9CQUF0QixFQUE0QyxVQUFVYyxDQUFWLEVBQWE7QUFDckRySCxLQUFDLENBQUMsSUFBRCxDQUFELENBQVEwRCxXQUFSLENBQW9CLGVBQXBCO0FBQ0EsUUFBSTJYLFFBQVEsR0FBR3JiLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxVQUFiLENBQWY7QUFDQSxRQUFJMlcsYUFBYSxHQUFHdGIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGVBQWIsQ0FBcEI7QUFDQTNFLEtBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sWUFBTSxFQUFFLE9BREw7QUFFSHBGLFNBQUcsRUFBRSxvQ0FBb0NzYSxRQUFwQyxHQUErQyxHQUEvQyxHQUFxREMsYUFGdkQ7QUFHSHBQLGNBQVEsRUFBRSxNQUhQO0FBSUhsSCxXQUFLLEVBQUUsaUJBQVk7QUFDZnFSLGFBQUssQ0FBQywrQkFBRCxDQUFMO0FBQ0gsT0FORTtBQU9IQyxhQUFPLEVBQUU7QUFQTixLQUFQO0FBU0gsR0FiRDtBQWVBdFcsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0RCxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsc0RBQTdCLEVBQXFGLGFBQXJGLENBQWI7QUFDQSxRQUFJMEMsUUFBUSxHQUFHcmIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZjtBQUNBLFFBQUkyVyxhQUFhLEdBQUd0YixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFwQjtBQUNBLFFBQUl0RixNQUFNLEdBQUdXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsRUFBYjtBQUNBME4sVUFBTSxDQUFDNkwsSUFBUCxDQUFZLFVBQVVDLFlBQVYsRUFBd0I7QUFDaEMsVUFBSUEsWUFBSixFQUFrQjtBQUNkN1ksU0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxnQkFBTSxFQUFFLFFBREw7QUFFSHBGLGFBQUcsRUFBRSxxQ0FBcUNzYSxRQUFyQyxHQUFnRCxHQUFoRCxHQUFzREMsYUFGeEQ7QUFHSHBQLGtCQUFRLEVBQUUsTUFIUDtBQUlIaEgsaUJBQU8sRUFBRSxpQkFBVTZILE1BQVYsRUFBa0I7QUFDdkIvTSxhQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVMUIsTUFBVjtBQUNILFdBTkU7QUFPSHFILGVBQUssRUFBRSxpQkFBWTtBQUNmcVIsaUJBQUssQ0FBQywrQkFBRCxDQUFMO0FBQ0gsV0FURTtBQVVIQyxpQkFBTyxFQUFFO0FBVk4sU0FBUDtBQVlIO0FBQ0osS0FmRDtBQWdCSCxHQXJCRDtBQXNCQXRXLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxhQUFiLEVBQTRCLG9DQUE1QixFQUFrRSxVQUFVYyxDQUFWLEVBQWE7QUFDM0UsUUFBSWtVLFNBQVMsR0FBR3ZiLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxrQkFBYixDQUFoQjtBQUNBc1MsZUFBVyxDQUFDc0UsU0FBRCxDQUFYO0FBQ0gsR0FIRDtBQUtBdmIsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLGtCQUFiLEVBQWlDLHVDQUFqQyxFQUEwRSxVQUFVYyxDQUFWLEVBQWE7QUFDbkYsUUFBSXJILENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTBILElBQVIsR0FBZTNLLE1BQWYsSUFBeUIsQ0FBekIsSUFBOEJpRCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFYLE1BQVIsR0FBaUIsQ0FBakIsRUFBb0J5SCxTQUFwQixJQUFpQyxHQUFuRSxFQUF3RTtBQUNwRSxVQUFJaVEsT0FBTyxHQUFHL1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMEgsSUFBUixHQUFlLENBQWYsQ0FBZDtBQUNBLFVBQUlRLFFBQVEsR0FBRyxLQUFmO0FBQ0EsVUFBSWxJLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxpQkFBYixDQUFKLEVBQXFDdUQsUUFBUSxHQUFFbEksQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGlCQUFiLENBQVY7QUFDckMsVUFBSTNFLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQixDQUFqQixFQUFvQnlILFNBQXBCLElBQWlDLEdBQXJDLEVBQTBDaVEsT0FBTyxHQUFHL1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCcUksSUFBakIsR0FBd0IsQ0FBeEIsQ0FBVjtBQUMxQ3FQLGFBQU8sQ0FBQ3lFLFlBQVIsQ0FBcUIsV0FBckIsRUFBa0MsRUFBbEM7QUFDQSxVQUFNM0UsY0FBYyxHQUFHQyw2REFBWSxDQUFDLElBQUQsRUFBT0MsT0FBUCxFQUFnQjtBQUFDMEUsaUJBQVMsRUFBRXZUO0FBQVosT0FBaEIsQ0FBbkMsQ0FOb0UsQ0FPcEU7QUFDQTs7QUFDQTJPLG9CQUFjLENBQUNHLE1BQWY7QUFDSDtBQUNKLEdBWkQ7QUFhQWhYLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxpQkFBYixFQUFnQyx1Q0FBaEMsRUFBeUUsVUFBVWMsQ0FBVixFQUFhO0FBQ2xGLFFBQUlySCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEwSCxJQUFSLEdBQWUzSyxNQUFmLElBQXlCLENBQXpCLElBQThCaUQsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCLENBQWpCLEVBQW9CeUgsU0FBcEIsSUFBaUMsR0FBbkUsRUFBd0U7QUFDcEUsVUFBSWlRLE9BQU8sR0FBRy9XLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTBILElBQVIsR0FBZSxDQUFmLENBQWQ7QUFDQSxVQUFJMUgsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCLENBQWpCLEVBQW9CeUgsU0FBcEIsSUFBaUMsR0FBckMsRUFBMENpUSxPQUFPLEdBQUcvVyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFYLE1BQVIsR0FBaUJxSSxJQUFqQixHQUF3QixDQUF4QixDQUFWO0FBQzFDcVAsYUFBTyxDQUFDMkUsZUFBUixDQUF3QixXQUF4QjtBQUNIO0FBRUosR0FQRDtBQVNBMWIsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isa0JBQXRCLEVBQTBDLFVBQVVjLENBQVYsRUFBYTtBQUNuRCxRQUFJK1IsSUFBSSxHQUFHcFosQ0FBQyxDQUFDLCtFQUFELENBQUQsQ0FBbUYsQ0FBbkYsQ0FBWDtBQUNBb1osUUFBSSxDQUFDZSxLQUFMLEdBRm1ELENBR25EOztBQUNBbmEsS0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0JxVixHQUEvQixDQUFtQyxTQUFuQztBQUNBclYsS0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0IyYixZQUEvQixDQUE0QyxTQUE1QztBQUVBLFFBQUlDLE9BQU8sR0FBRyxJQUFJcmIsU0FBUyxDQUFDc2IsS0FBZCxDQUFvQnBlLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3Qix3QkFBeEIsQ0FBcEIsQ0FBZDtBQUNBa2UsV0FBTyxDQUFDelgsSUFBUjtBQUNILEdBVEQ7QUFVQW5FLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHNDQUF0QixFQUE4RCxVQUFVYyxDQUFWLEVBQWE7QUFDdkUsUUFBSWhJLE1BQU0sR0FBR1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEVBQWI7QUFDQTJXLGtCQUFjLENBQUNoVyxDQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVc0YsSUFBVixDQUFlLElBQWYsQ0FBRCxFQUF1QjNFLENBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVVzRixJQUFWLENBQWUsTUFBZixDQUF2QixFQUErQzNFLENBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVVzRixJQUFWLENBQWUsT0FBZixDQUEvQyxDQUFkO0FBQ0gsR0FIRDtBQUlBM0UsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isd0JBQXRCLEVBQWdELFVBQVVjLENBQVYsRUFBYTtBQUN6RHRJLFVBQU0sQ0FBQytXLFdBQVAsQ0FBbUI5VixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFuQjtBQUNILEdBRkQ7QUFHQTNFLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGlCQUF0QixFQUF5QyxVQUFVYyxDQUFWLEVBQWE7QUFDbERySCxLQUFDLENBQUMsSUFBRCxDQUFELENBQVE0VyxPQUFSLENBQWdCLFVBQWhCLEVBQTRCbFQsV0FBNUIsQ0FBd0MsZUFBeEM7QUFDSCxHQUZEO0FBR0ExRCxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixnQkFBdEIsRUFBd0MsVUFBVWMsQ0FBVixFQUFhO0FBQ2pEQSxLQUFDLENBQUNnQixjQUFGOztBQUNBLFFBQUloQixDQUFDLENBQUN5VSxLQUFGLElBQVcsRUFBZixFQUFtQjtBQUNmL2MsWUFBTSxDQUFDMlgsV0FBUCxDQUFtQjFXLENBQUMsQ0FBQyxJQUFELENBQXBCLEVBQTRCQSxDQUFDLENBQUMsSUFBRCxDQUE3QjtBQUNIO0FBQ0osR0FMRDtBQU1BQSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixnQkFBdEIsRUFBd0MsVUFBVWMsQ0FBVixFQUFhO0FBQ2pEdEksVUFBTSxDQUFDMlgsV0FBUCxDQUFtQjFXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXdILElBQVIsQ0FBYSxPQUFiLENBQW5CLEVBQTBDeEgsQ0FBQyxDQUFDLElBQUQsQ0FBM0M7QUFDSCxHQUZEO0FBR0FBLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGVBQXRCLEVBQXVDLFVBQVVjLENBQVYsRUFBYTtBQUNoRDRPLGtCQUFjLENBQUNqVyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFELEVBQXFCM0UsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBckIsRUFBMEMzRSxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsV0FBYixDQUExQyxFQUFxRSxJQUFyRSxDQUFkO0FBQ0gsR0FGRDtBQUdBM0UsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isb0JBQXRCLEVBQTRDLFVBQVVjLENBQVYsRUFBYTtBQUNyRCxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsc0RBQTdCLEVBQXFGLFFBQXJGLENBQWI7QUFDQSxRQUFJb0QsT0FBTyxHQUFHL2IsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFlBQWIsQ0FBZDtBQUNBLFFBQUl5VixLQUFLLEdBQUdwYSxDQUFDLENBQUMsTUFBTStiLE9BQVAsQ0FBRCxDQUFpQjdDLE9BQWpCLENBQXlCLFVBQXpCLENBQVo7QUFDQSxRQUFJblksR0FBRyxHQUFHZixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsTUFBYixDQUFWO0FBQ0FvSSxVQUFNLENBQUM2TCxJQUFQLENBQVksVUFBVUMsWUFBVixFQUF3QjtBQUNoQyxVQUFJQSxZQUFKLEVBQWtCO0FBQ2Q3WSxTQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGdCQUFNLEVBQUUsUUFETDtBQUVIcEYsYUFBRyxFQUFFQSxHQUZGO0FBR0htTCxrQkFBUSxFQUFFLE1BSFA7QUFJSGhILGlCQUFPLEVBQUUsaUJBQVU2SCxNQUFWLEVBQWtCO0FBQ3ZCL00sYUFBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQmtCLElBQW5CLENBQXdCNkwsTUFBTSxDQUFDaVAsTUFBL0I7QUFDQTVCLGlCQUFLLENBQUM5VixJQUFOO0FBQ0F0RSxhQUFDLENBQUMsTUFBTStiLE9BQVAsQ0FBRCxDQUFpQnpYLElBQWpCO0FBQ0g7QUFSRSxTQUFQO0FBVUg7O0FBQ0R5SSxZQUFNLEdBQUdqUCxTQUFUO0FBQ0gsS0FkRDtBQWVILEdBcEJELEVBem1CeUIsQ0ErbkJ6Qjs7QUFDQWtDLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLDBDQUF0QixFQUFrRSxVQUFVYyxDQUFWLEVBQWE7QUFDM0UsUUFBSS9CLE9BQU8sR0FBR3RGLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxTQUFiLENBQWQ7QUFDQSxRQUFJd1AsSUFBSSxHQUFHblUsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBWDtBQUNBLFFBQUksQ0FBQ1csT0FBTCxFQUFjQSxPQUFPLEdBQUksb0RBQVg7QUFDZCxRQUFJMlcsV0FBVyxHQUFHamMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGFBQWIsQ0FBbEI7QUFDQSxRQUFJdVgsRUFBRSxHQUFHbGMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLElBQWIsQ0FBVDtBQUNBLFFBQUlvSSxNQUFNLEdBQUdoSyxVQUFVLENBQUNpUyxFQUFYLENBQWMwRCxNQUFkLENBQXFCQyxPQUFyQixDQUE2QixRQUFNclQsT0FBTixHQUFjLE1BQTNDLENBQWI7O0FBRUEsUUFBSXRGLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxNQUFiLENBQUosRUFBMEI7QUFDdEIsVUFBSTVELEdBQUcsR0FBR2YsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBVjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUk1RCxHQUFHLEdBQUdmLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTZDLElBQVIsQ0FBYSxNQUFiLENBQVY7QUFDSDs7QUFFRGtLLFVBQU0sQ0FBQzZMLElBQVAsQ0FBWSxVQUFVQyxZQUFWLEVBQXdCO0FBQ2hDLFVBQUlBLFlBQUosRUFBa0I7QUFDZCxZQUFJOVgsR0FBSixFQUFTO0FBQ0wsY0FBSW9ULElBQUosRUFBVTtBQUNOblUsYUFBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxvQkFBTSxFQUFFLEtBREw7QUFFSHBGLGlCQUFHLEVBQUVBLEdBRkY7QUFHSHVWLHFCQUFPLEVBQUUsSUFITjtBQUlIcFIscUJBQU8sRUFBRSxpQkFBVVAsSUFBVixFQUFnQndYLFVBQWhCLEVBQTRCMVgsR0FBNUIsRUFBaUM7QUFDdEMsb0JBQUlFLElBQUksQ0FBQ3pELElBQVQsRUFBZTtBQUNYbEIsbUJBQUMsQ0FBQ2ljLFdBQUQsQ0FBRCxDQUFlL2EsSUFBZixDQUFvQnlELElBQUksQ0FBQ3pELElBQXpCO0FBQ0FsQixtQkFBQyxDQUFDaWMsV0FBRCxDQUFELENBQWU5WCxJQUFmO0FBQ0g7QUFDSjtBQVRFLGFBQVA7QUFXSCxXQVpELE1BWU87QUFDSDFHLG9CQUFRLENBQUNnSixRQUFULENBQWtCa1AsSUFBbEIsR0FBeUI1VSxHQUF6QjtBQUNIO0FBQ0o7O0FBQ0QsWUFBSW1iLEVBQUosRUFBUTtBQUNKdlQsY0FBSSxDQUFDdVQsRUFBRCxDQUFKO0FBQ0g7QUFDSjs7QUFDRG5QLFlBQU0sR0FBR2pQLFNBQVQ7QUFDSCxLQXhCRDtBQXlCQSxXQUFPLEtBQVA7QUFDSCxHQXhDRDtBQTJDQWtDLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHdCQUF0QixFQUFnRCxVQUFVYyxDQUFWLEVBQWE7QUFDekR0SSxVQUFNLENBQUNxZCx5QkFBUCxHQUFtQ3JaLFVBQVUsQ0FBQ2lTLEVBQVgsQ0FBYzBELE1BQWQsQ0FBcUJDLE9BQXJCLENBQTZCLHdEQUE3QixDQUFuQztBQUNBLFFBQUl0YixFQUFFLEdBQUcyQyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFUO0FBQ0EsUUFBSXRGLE1BQU0sR0FBR1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCQSxNQUFqQixFQUFiO0FBQ0EsV0FBT04sTUFBTSxDQUFDcWQseUJBQVAsQ0FBaUN4RCxJQUFqQyxDQUFzQyxVQUFVQyxZQUFWLEVBQXdCO0FBQ2pFLFVBQUlBLFlBQUosRUFBa0I7QUFDZDdZLFNBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sZ0JBQU0sRUFBRSxRQURMO0FBRUhwRixhQUFHLEVBQUUscUJBQXFCMUQsRUFGdkI7QUFHSDZPLGtCQUFRLEVBQUUsTUFIUDtBQUlIaEgsaUJBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCNkgsTUFBakIsRUFBeUI7QUFDOUIvTSxhQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVMUIsTUFBVjtBQUNILFdBTkU7QUFPSHFILGVBQUssRUFBRSxTQUFTQSxLQUFULEdBQWlCO0FBQ3BCN0gsbUJBQU8sQ0FBQ0MsR0FBUixDQUFZLCtCQUFaO0FBQ0gsV0FURTtBQVVIa1osaUJBQU8sRUFBRTtBQVZOLFNBQVA7QUFZSDtBQUNKLEtBZk0sQ0FBUDtBQWdCSCxHQXBCRDtBQXVCQXRXLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHFCQUF0QixFQUE2QyxVQUFVYyxDQUFWLEVBQWE7QUFDdEQsUUFBSVgsTUFBTSxHQUFHMUcsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRcVYsR0FBUixHQUFjZ0gsV0FBZCxFQUFiO0FBQ0FyYyxLQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QmlCLElBQXZCLENBQTRCLFVBQVVvRyxDQUFWLEVBQWE7QUFDckMsVUFBSXJILENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVosSUFBUixHQUFlaWQsV0FBZixHQUE2Qi9ZLE9BQTdCLENBQXFDb0QsTUFBckMsS0FBZ0QsQ0FBQyxDQUFyRCxFQUF3RDtBQUNwRDFHLFNBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQm9HLFFBQWpCLENBQTBCLE1BQTFCLEVBQWtDNlAsV0FBbEMsQ0FBOEMsUUFBOUM7QUFDSCxPQUZELE1BRU87QUFDSHRWLFNBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQmlXLFdBQWpCLENBQTZCLE1BQTdCLEVBQXFDN1AsUUFBckMsQ0FBOEMsUUFBOUM7QUFDSDtBQUNKLEtBTkQ7QUFPSCxHQVREO0FBV0F6RixHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixhQUF0QixFQUFxQyxVQUFTYyxDQUFULEVBQVk7QUFDN0NuSCxVQUFNLEdBQUcsRUFBVDtBQUNILEdBRkQ7QUFHQUYsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IsWUFBdEIsRUFBb0MsVUFBU2MsQ0FBVCxFQUFZO0FBQzVDQSxLQUFDLENBQUNnQixjQUFGO0FBQ0EsV0FBTyxLQUFQO0FBQ0gsR0FIRDtBQUlILENBcHRCRDtBQXV0QkFySSxDQUFDLENBQUMsV0FBRCxDQUFELENBQWVpRSxpQkFBZixDQUFpQyxNQUFqQyxFOzs7Ozs7Ozs7Ozs7QUN6Z0RBIiwiZmlsZSI6ImFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtYXAgPSB7XG5cdFwiLi90Y2hhdF9jb250cm9sbGVyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvQHN5bWZvbnkvc3RpbXVsdXMtYnJpZGdlL2xhenktY29udHJvbGxlci1sb2FkZXIuanMhLi9hc3NldHMvY29udHJvbGxlcnMvdGNoYXRfY29udHJvbGxlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuL2Fzc2V0cy9jb250cm9sbGVycyBzeW5jIHJlY3Vyc2l2ZSAuL25vZGVfbW9kdWxlcy9Ac3ltZm9ueS9zdGltdWx1cy1icmlkZ2UvbGF6eS1jb250cm9sbGVyLWxvYWRlci5qcyEgXFxcXC4oanx0KXN4PyRcIjsiLCJleHBvcnQgZGVmYXVsdCB7XG4gICdzeW1mb255LS11eC10dXJiby0tdHVyYm8tY29yZSc6IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovICdAc3ltZm9ueS91eC10dXJiby9kaXN0L3R1cmJvX2NvbnRyb2xsZXIuanMnKSxcbiAgJ3N5bWZvbnktLXV4LXR1cmJvLW1lcmN1cmUtLXR1cmJvLXN0cmVhbSc6IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovICdAc3ltZm9ueS91eC10dXJiby1tZXJjdXJlL2Rpc3QvdHVyYm9fc3RyZWFtX2NvbnRyb2xsZXIuanMnKSxcbn07IiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ3N0aW11bHVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgdGFyZ2V0cyA9IFsnY291bnQnXTtcbiAgICBzdGF0aWMgdmFsdWVzID0geyBwb3B1cHM6IEFycmF5fTtcbiAgICB0b3RhbF9wb3B1cHMgPSAwO1xuXG4gICAgaW5pdGlhbGlzZSgpIHtcbiAgICAgICAgdGhpcy5wb3B1cHNWYWx1ZSA9IFtdO1xuICAgICAgIGNvbnNvbGUubG9nKFwiaGVsbG8gdGNoYXRcIik7XG4gICAgfVxuXG4gICAgLyoqIFRDSEFUICoqL1xuICAgICAgICAvL3RoaXMgZnVuY3Rpb24gY2FuIHJlbW92ZSBhIGFycmF5IGVsZW1lbnQuXG4gICAgcmVtb3ZlQXJyYXkgPSBmdW5jdGlvbihhcnJheSwgZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHJlc3QgPSBhcnJheS5zbGljZSgodG8gfHwgZnJvbSkgKyAxIHx8IGFycmF5Lmxlbmd0aCk7XG4gICAgICAgIGFycmF5Lmxlbmd0aCA9IGZyb20gPCAwID8gYXJyYXkubGVuZ3RoICsgZnJvbSA6IGZyb207XG4gICAgICAgIHJldHVybiBhcnJheS5wdXNoLmFwcGx5KGFycmF5LCByZXN0KTtcbiAgICB9O1xuXG4gICAgLy90aGlzIGlzIHVzZWQgdG8gY2xvc2UgYSBwb3B1cFxuICAgIGNsb3NlX3BvcHVwKGlkKVxuICAgIHtcbiAgICAgICAgZm9yKHZhciBpaWkgPSAwOyBpaWkgPCB0aGlzLnBvcHVwc1ZhbHVlLmxlbmd0aDsgaWlpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGlkID09IHRoaXMucG9wdXBzVmFsdWVbaWlpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwc1ZhbHVlID0gcmVtb3ZlQXJyYXkocG9wdXBlLGlpaSlcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVfcG9wdXBzKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2Rpc3BsYXlzIHRoZSBwb3B1cHMuIERpc3BsYXlzIGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3B1cHMgdGhhdCBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0IHdpZHRoXG4gICAgZGlzcGxheV9wb3B1cHMoKVxuICAgIHtcbiAgICAgICAgdmFyIHJpZ2h0ID0gNDgwO1xuXG4gICAgICAgIHZhciBpaWkgPSAwO1xuICAgICAgICBmb3IoaWlpOyBpaWkgPCB0aGlzLnBvcHVwc1ZhbHVlOyBpaWkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodGhpcy5wb3B1cHNWYWx1ZVtpaWldICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucG9wdXBzVmFsdWVbaWlpXSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9IHJpZ2h0ICsgXCJweFwiO1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQgKyAzMjA7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKHZhciBqamogPSBpaWk7IGpqaiA8IHRoaXMucG9wdXBzVmFsdWUubGVuZ3RoOyBqamorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBvcHVwc1ZhbHVlW2pqal0pO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2NyZWF0ZXMgbWFya3VwIGZvciBhIG5ldyBwb3B1cC4gQWRkcyB0aGUgaWQgdG8gcG9wdXBzIGFycmF5LlxuICAgIHJlZ2lzdGVyX3BvcHVwKGV2ZW50KVxuICAgIHtcbiAgICAgIHZhciBpZCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC50Y2hhdElkO1xuICAgICAgdmFyIGNsYXNzX25hbWUgPSAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LnRjaGF0Q2xhc3M7XG4gICAgICB2YXIgbmFtZSA9ICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQudGNoYXROYW1lO1xuXG4gICAgICAgIGZvcih2YXIgaWlpID0gMDsgaWlpIDwgdGhpcy5wb3B1cHNWYWx1ZS5sZW5ndGg7IGlpaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL2FscmVhZHkgcmVnaXN0ZXJlZC4gQnJpbmcgaXQgdG8gZnJvbnQuXG4gICAgICAgICAgICBpZihpZCA9PSB0aGlzLnBvcHVwc1ZhbHVlW2lpaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cHNWYWx1ZSA9IHRoaXMucmVtb3ZlQXJyYXkodGhpcy5wb3B1cHNWYWx1ZSwgaWlpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwc1ZhbHVlLnVuc2hpZnQoaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlX3BvcHVwcygpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBlbGVtZW50ID0gJzxkaXYgY2xhc3M9XCJjaGF0Ym94IGNoYXRib3gyMiBwb3B1cC1ib3ggY2hhdC1wb3B1cFwiIGlkPVwiJysgaWQgKydcIj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICAnPGRpdiBjbGFzcz1cImNoYXRib3hfX3RpdGxlICcrIGNsYXNzX25hbWUgKydcIj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8c3BhbiBjbGFzcz1cInBpY3RvXCI+JytuYW1lKyc8L3NwYW4+PGJ1dHRvbiBjbGFzcz1cImNoYXRib3hfX3RpdGxlX19jbG9zZVwiIGRhdGEtaWQ9XCInKyBpZCArJ1wiPjxzcGFuPic7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50ICsgJzxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPjwvc3Bhbj48L2J1dHRvbj48L2Rpdj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8ZGl2IGNsYXNzPVwiY2hhdGJveF9fYm9keVwiPjx1bCBjbGFzcz1cImxpc3QtY2hhdC1tc2dcIj4gIDxsaSBzdHlsZT1cIndpZHRoOjEwMCVcIj4gPGRpdiBjbGFzcz1cIm1zai1yIGJnLWdyZXkgIG1hY3JvXCI+PGRpdiBjbGFzcz1cInRleHQgdGV4dC1sXCI+PHA+SlxcJ2FpIHRyb3V2w6kgdW4gbm91dmVhdSBjbGllbnQuIE1BSiB0YSB0b3VybsOpZSBzdHAuPC9wPjxwIGNsYXNzPVwiY2hhdC1tc2ctaG91clwiPjxzbWFsbD4xMDozMTwvc21hbGw+PC9wPjwvZGl2PjwvZGl2PiA8L2xpPjxsaSBzdHlsZT1cIndpZHRoOjEwMCU7XCI+IDxkaXYgY2xhc3M9XCJtc2ogJysgY2xhc3NfbmFtZSArJyBtYWNyb1wiPjxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtclwiPjxwPm9rPC9wPjxwIGNsYXNzPVwiY2hhdC1tc2ctaG91clwiPjxzbWFsbD4xMDozMTwvc21hbGw+PC9wPjwvZGl2PjwvZGl2PjwvbGk+PC91bD48L2Rpdj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyXCI+JztcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQgKyAnPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+PGlucHV0IGlkPVwiYnRuLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbSBjaGF0LXNlbmQtbXNnXCIgc3R5bGU9XCJib3JkZXI6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjZWQ0ZGFcIiB0YWJpbmRleD1cIjBcIiBkaXI9XCJsdHJcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRfYmdcIiBpZD1cImJ0bi1jaGF0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDo2cHg7IHBhZGRpbmctYm90dG9tOjZweFwiPjxpIGNsYXNzPVwiZmEgZmEtcGFwZXItcGxhbmUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj48L3NwYW4+PC9kaXY+PC9kaXY+JztcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0uaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdLmlubmVySFRNTCArIGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucG9wdXBzVmFsdWUudW5zaGlmdChpZCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlX3BvcHVwcygpO1xuICAgIH1cblxuICAgIC8vY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIHN1aXRhYmxlIGFuZCB0aGVuIHBvcHVsYXRlIHRoZSB0b2F0YWxfcG9wdXBzIHZhcmlhYmxlLlxuICAgIGNhbGN1bGF0ZV9wb3B1cHMoKVxuICAgIHtcbiAgICAgICAgdmFyIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmKHdpZHRoIDwgNTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRvdGFsX3BvcHVwcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHdpZHRoIC0gNDgzO1xuICAgICAgICAgICAgLy8zMjAgaXMgd2lkdGggb2YgYSBzaW5nbGUgcG9wdXAgYm94XG4gICAgICAgICAgICB0aGlzLnRvdGFsX3BvcHVwcyA9IHBhcnNlSW50KHdpZHRoLzMyMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BsYXlfcG9wdXBzKCk7XG5cbiAgICB9XG5cbiAgICAvLy0tIE5vIHVzZSB0aW1lLiBJdCBpcyBhIGphdmFTY3JpcHQgZWZmZWN0LlxuICAgIGluc2VydENoYXQodGV4dCwgcGFyZW50KXtcbiAgICAgICAgdmFyIGNvbnRyb2wgPSBcIlwiO1xuICAgICAgICB2YXIgZGF0ZSA9ICBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgZGF0ZVRleHQgPSBkYXRlLmdldEhvdXJzKCkgKyAnOicgKyBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgICAgICBjb250cm9sID0gJzxsaSBzdHlsZT1cIndpZHRoOjEwMCVcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXNqLXIgbWFjcm8gYmctZ3JleVwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtbFwiPicgK1xuICAgICAgICAgICAgJzxwPicrIHRleHQgKyc8L3A+JyArXG4gICAgICAgICAgICAnPHA+PHNtYWxsPicrZGF0ZVRleHQrJzwvc21hbGw+PC9wPicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvbGk+JztcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRbMF0uc2Nyb2xsVG9wID0gcGFyZW50WzBdLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICQoJy5jaGF0Ym94X19ib2R5Jykuc2Nyb2xsVG9wID0gcGFyZW50WzBdLnNjcm9sbEhlaWdodDtcbiAgICB9XG59IiwiaW1wb3J0ICcuL3N0eWxlcy9hcHAuc2Nzcyc7XHJcblxyXG4vLyBsb2FkcyB0aGUgQm9vdHN0cmFwIGpRdWVyeSBwbHVnaW5zXHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9hbGVydC5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9jb2xsYXBzZS5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9tb2RhbC5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy90YWIuanMnO1xyXG5cclxuaW1wb3J0ICdkZXZleHRyZW1lL2Rpc3QvanMvZHguYWxsLmpzJztcclxuIGltcG9ydCAnLi9qcy9tYWluLmpzJztcclxuaW1wb3J0ICdqcXVlcnknXHJcblxyXG4vLyByZXF1aXJlIGpRdWVyeSBub3JtYWxseVxyXG5jb25zdCAkID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XHJcblxyXG4vLyBjcmVhdGUgZ2xvYmFsICQgYW5kIGpRdWVyeSB2YXJpYWJsZXNcclxuZ2xvYmFsLiQgPSBnbG9iYWwualF1ZXJ5ID0gJDtcclxuXHJcbmltcG9ydCAnanF1ZXJ5LXVpL3VpL3dpZGdldHMvYXV0b2NvbXBsZXRlLmpzJztcclxuaW1wb3J0ICdqcXVlcnktdWkvdWkvd2lkZ2V0cy9kYXRlcGlja2VyLmpzJztcclxuaW1wb3J0ICdqcXVlcnktdWkvdWkvaTE4bi9kYXRlcGlja2VyLWZyLmpzJztcclxuaW1wb3J0ICdqcXVlcnktbWFzay1wbHVnaW4vZGlzdC9qcXVlcnkubWFzay5taW4nO1xyXG5cclxuXHJcbi8vIGxvYWRzIHRoZSBjb2RlIHN5bnRheCBoaWdobGlnaHRpbmcgbGlicmFyeVxyXG5pbXBvcnQgJy4vanMvaGlnaGxpZ2h0LmpzJztcclxuXHJcbi8vIENyZWF0ZXMgbGlua3MgdG8gdGhlIFN5bWZvbnkgZG9jdW1lbnRhdGlvblxyXG5pbXBvcnQgJy4vanMvZG9jbGlua3MuanMnO1xyXG5cclxuLy8gc3RhcnQgdGhlIFN0aW11bHVzIGFwcGxpY2F0aW9uXHJcbmltcG9ydCAnQHBvcHBlcmpzL2NvcmUvZGlzdC91bWQvcG9wcGVyLmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvanMvc3JjL2FsZXJ0LmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLmpzJztcclxuaW1wb3J0ICcuL2Jvb3RzdHJhcCc7XHJcblxyXG5cclxuY29uc3QgYm9vdHN0cmFwID0gd2luZG93LmJvb3RzdHJhcCA9IHJlcXVpcmUoJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcycpO1xyXG4iLCJpbXBvcnQgeyBzdGFydFN0aW11bHVzQXBwIH0gZnJvbSAnQHN5bWZvbnkvc3RpbXVsdXMtYnJpZGdlJztcclxuXHJcbi8vIFJlZ2lzdGVycyBTdGltdWx1cyBjb250cm9sbGVycyBmcm9tIGNvbnRyb2xsZXJzLmpzb24gYW5kIGluIHRoZSBjb250cm9sbGVycy8gZGlyZWN0b3J5XHJcbmV4cG9ydCBjb25zdCBhcHAgPSBzdGFydFN0aW11bHVzQXBwKHJlcXVpcmUuY29udGV4dChcclxuICAgICdAc3ltZm9ueS9zdGltdWx1cy1icmlkZ2UvbGF6eS1jb250cm9sbGVyLWxvYWRlciEuL2NvbnRyb2xsZXJzJyxcclxuICAgIHRydWUsXHJcbiAgICAvXFwuKGp8dClzeD8kL1xyXG4pKTtcclxuXHJcbi8vIHJlZ2lzdGVyIGFueSBjdXN0b20sIDNyZCBwYXJ0eSBjb250cm9sbGVycyBoZXJlXHJcbi8vIGFwcC5yZWdpc3Rlcignc29tZV9jb250cm9sbGVyX25hbWUnLCBTb21lSW1wb3J0ZWRDb250cm9sbGVyKTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gV3JhcHMgc29tZSBlbGVtZW50cyBpbiBhbmNob3IgdGFncyByZWZlcmVuY2luZyB0byB0aGUgU3ltZm9ueSBkb2N1bWVudGF0aW9uXHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgJG1vZGFsID0gJCgnI3NvdXJjZUNvZGVNb2RhbCcpO1xyXG4gICAgdmFyICRjb250cm9sbGVyQ29kZSA9ICRtb2RhbC5maW5kKCdjb2RlLnBocCcpO1xyXG4gICAgdmFyICR0ZW1wbGF0ZUNvZGUgPSAkbW9kYWwuZmluZCgnY29kZS50d2lnJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gYW5jaG9yKHVybCwgY29udGVudCkge1xyXG4gICAgICAgIHJldHVybiAnPGEgY2xhc3M9XCJkb2NsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIicgKyB1cmwgKyAnXCI+JyArIGNvbnRlbnQgKyAnPC9hPic7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFdyYXBzIGxpbmtzIHRvIHRoZSBTeW1mb255IGRvY3VtZW50YXRpb25cclxuICAgICRtb2RhbC5maW5kKCcuaGxqcy1jb21tZW50JykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmh0bWwoJCh0aGlzKS5odG1sKCkucmVwbGFjZSgvaHR0cHM6XFwvXFwvc3ltZm9ueS5jb21cXC9kb2NcXC9bXFx3Ly4jLV0rL2csIGZ1bmN0aW9uKHVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYW5jaG9yKHVybCwgdXJsKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXcmFwcyBTeW1mb255J3MgYW5ub3RhdGlvbnNcclxuICAgIHZhciBhbm5vdGF0aW9ucyA9IHtcclxuICAgICAgICAnQENhY2hlJzogJ2h0dHBzOi8vc3ltZm9ueS5jb20vZG9jL2N1cnJlbnQvYnVuZGxlcy9TZW5zaW9GcmFtZXdvcmtFeHRyYUJ1bmRsZS9hbm5vdGF0aW9ucy9jYWNoZS5odG1sJyxcclxuICAgICAgICAnQElzR3JhbnRlZCc6ICdodHRwczovL3N5bWZvbnkuY29tL2RvYy9jdXJyZW50L2J1bmRsZXMvU2Vuc2lvRnJhbWV3b3JrRXh0cmFCdW5kbGUvYW5ub3RhdGlvbnMvc2VjdXJpdHkuaHRtbCNpc2dyYW50ZWQnLFxyXG4gICAgICAgICdAUGFyYW1Db252ZXJ0ZXInOiAnaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9idW5kbGVzL1NlbnNpb0ZyYW1ld29ya0V4dHJhQnVuZGxlL2Fubm90YXRpb25zL2NvbnZlcnRlcnMuaHRtbCcsXHJcbiAgICAgICAgJ0BSb3V0ZSc6ICdodHRwczovL3N5bWZvbnkuY29tL2RvYy9jdXJyZW50L3JvdXRpbmcuaHRtbCNjcmVhdGluZy1yb3V0ZXMtYXMtYW5ub3RhdGlvbnMnLFxyXG4gICAgICAgICdAU2VjdXJpdHknOiAnaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9idW5kbGVzL1NlbnNpb0ZyYW1ld29ya0V4dHJhQnVuZGxlL2Fubm90YXRpb25zL3NlY3VyaXR5Lmh0bWwjc2VjdXJpdHknXHJcbiAgICB9O1xyXG5cclxuICAgICRjb250cm9sbGVyQ29kZS5maW5kKCcuaGxqcy1kb2N0YWcnKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9uID0gJCh0aGlzKS50ZXh0KCk7XHJcblxyXG4gICAgICAgIGlmIChhbm5vdGF0aW9uc1thbm5vdGF0aW9uXSkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmh0bWwoYW5jaG9yKGFubm90YXRpb25zW2Fubm90YXRpb25dLCBhbm5vdGF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV3JhcHMgVHdpZydzIHRhZ3NcclxuICAgICR0ZW1wbGF0ZUNvZGUuZmluZCgnLmhsanMtdGVtcGxhdGUtdGFnID4gLmhsanMtbmFtZScpLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRhZyA9ICQodGhpcykudGV4dCgpO1xyXG5cclxuICAgICAgICBpZiAoJ2Vsc2UnID09PSB0YWcgfHwgdGFnLm1hdGNoKC9eZW5kLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHVybCA9ICdodHRwczovL3R3aWcuc3ltZm9ueS5jb20vZG9jLzMueC90YWdzLycgKyB0YWcgKyAnLmh0bWwjJyArIHRhZztcclxuXHJcbiAgICAgICAgJCh0aGlzKS5odG1sKGFuY2hvcih1cmwsIHRhZykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV3JhcHMgVHdpZydzIGZ1bmN0aW9uc1xyXG4gICAgJHRlbXBsYXRlQ29kZS5maW5kKCcuaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSA+IC5obGpzLW5hbWUnKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBmdW5jID0gJCh0aGlzKS50ZXh0KCk7XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSAnaHR0cHM6Ly90d2lnLnN5bWZvbnkuY29tL2RvYy8zLngvZnVuY3Rpb25zLycgKyBmdW5jICsgJy5odG1sIycgKyBmdW5jO1xyXG5cclxuICAgICAgICAkKHRoaXMpLmh0bWwoYW5jaG9yKHVybCwgZnVuYykpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgaGxqcyBmcm9tICdoaWdobGlnaHQuanMvbGliL2NvcmUnO1xyXG5pbXBvcnQgcGhwIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocCc7XHJcbmltcG9ydCB0d2lnIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R3aWcnO1xyXG5cclxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAnLCBwaHApO1xyXG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R3aWcnLCB0d2lnKTtcclxuXHJcbmhsanMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpO1xyXG4iLCJpbXBvcnQgZnJNZXNzYWdlcyBmcm9tIFwiZGV2ZXh0cmVtZS9sb2NhbGl6YXRpb24vbWVzc2FnZXMvZnIuanNvblwiO1xyXG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBQYWdlUmVuZGVyZXIgfSBmcm9tIFwiQGhvdHdpcmVkL3R1cmJvXCI7XHJcbmltcG9ydCgnYm9vdHN0cmFwLXNlbGVjdC9kaXN0L2pzL2Jvb3RzdHJhcC1zZWxlY3QuanMnKTtcclxuaW1wb3J0IFZhbGlkYXRvciBmcm9tICdkZXZleHRyZW1lL3VpL3ZhbGlkYXRvcic7XHJcbmltcG9ydCBUZXh0Qm94IGZyb20gXCJkZXZleHRyZW1lL3VpL3RleHRfYm94XCI7XHJcblxyXG5sZXQgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xyXG53aW5kb3cuaXNEYXRhR3JpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcbk9iamVjdC5hc3NpZ24oUGFnZVJlbmRlcmVyLnByb3RvdHlwZSwge1xyXG4gICAgYXNzaWduTmV3Qm9keSgpIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXJBcHAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcFwiKTtcclxuICAgICAgICBjb25zdCBjb250YWluZXJBY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNib3R0b21fYWN0aW9uc1wiKTtcclxuICAgICAgICBjb25zdCBjb250YWluZXJQb3B1cHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BvcHVwcy1saXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckphdmFzY3JpcHRCb2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNqYXZhc2NyaXB0LWJvZHlcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lckFwcCA9IHRoaXMubmV3RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcFwiKTtcclxuICAgICAgICBjb25zdCBuZXdDb250YWluZXJBY3Rpb25zID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYm90dG9tX2FjdGlvbnNcIik7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyUG9wdXBzID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcG9wdXBzLWxpc3RcIik7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGFpbmVySmF2YXNjcmlwdEJvZHkgPSB0aGlzLm5ld0VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNqYXZhc2NyaXB0LWJvZHlcIik7XHJcbiAgICAgICAgLy9jb25zdCBuZXd0ZXN0ID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2R4LWhlYWRlci1maWx0ZXItbWVudScpO1xyXG5cclxuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmF0dHIoJ2NsYXNzJywkKHRoaXMubmV3RWxlbWVudCkuYXR0cignY2xhc3MnKSk7XHJcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5hdHRyKCdpZCcsJCh0aGlzLm5ld0VsZW1lbnQpLmF0dHIoJ2lkJykpO1xyXG4gICAgICAgIGlmIChjb250YWluZXJBY3Rpb25zICYmIG5ld0NvbnRhaW5lckFjdGlvbnMpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyQWN0aW9ucy5yZXBsYWNlV2l0aChuZXdDb250YWluZXJBY3Rpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lclBvcHVwcyAmJiBuZXdDb250YWluZXJQb3B1cHMpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyUG9wdXBzLnJlcGxhY2VXaXRoKG5ld0NvbnRhaW5lclBvcHVwcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250YWluZXJKYXZhc2NyaXB0Qm9keSAmJiBuZXdDb250YWluZXJKYXZhc2NyaXB0Qm9keSkge1xyXG4gICAgICAgICAgICBjb250YWluZXJKYXZhc2NyaXB0Qm9keS5yZXBsYWNlV2l0aChuZXdDb250YWluZXJKYXZhc2NyaXB0Qm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250YWluZXJBcHAgJiYgbmV3Q29udGFpbmVyQXBwKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lckFwcC5yZXBsYWNlV2l0aChuZXdDb250YWluZXJBcHApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVwbGFjZVdpdGgodGhpcy5uZXdFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pXHJcblxyXG5EZXZFeHByZXNzLmxvY2FsaXphdGlvbi5sb2NhbGUoJ2ZyJyk7XHJcbkRldkV4cHJlc3MubG9jYWxpemF0aW9uLmxvYWRNZXNzYWdlcyhmck1lc3NhZ2VzKTtcclxuXHJcbmlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJFZGdcIikgIT09IC0xKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJpcy1lZGdlXCIpO1xyXG59XHJcblxyXG4kKCcjZmlsdGVyLWltYWdlJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAkKCcjZmlsdGVyLWNvbnRhaW5lcicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxufSk7XHJcblxyXG5cclxuXHJcbi8vdGhpcyB2YXJpYWJsZSByZXByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIGNhbiBiZSBkaXNwbGF5ZWQgYWNjb3JkaW5nIHRvIHRoZSB2aWV3cG9ydCB3aWR0aFxyXG52YXIgdG90YWxfcG9wdXBzID0gMDtcclxuXHJcbi8vYXJyYXlzIG9mIHBvcHVwcyBpZHNcclxudmFyIHBvcHVwcyA9IFtdO1xyXG5cclxudmFyIG1ldGhvZHMgPSB7XHJcbiAgICBpbml0OiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbWV0aG9kcy5zZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmZsYXNoTm90aWZpY2F0aW9uLmRlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICQoJy5hbGVydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNob3coJ3Nsb3cnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheShtZXRob2RzLnNldHRpbmdzLmhpZGVEZWxheSlcclxuICAgICAgICAgICAgICAgICAgICAuaGlkZSgnc2xvdycpXHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDUwMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWV0aG9kcy5saXN0ZW5JbmNvbWluZ01lc3NhZ2VzKCk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RlbiB0byBBSkFYIHJlc3BvbnNlcyBhbmQgZGlzcGxheSBtZXNzYWdlcyBpZiB0aGV5IGNvbnRhaW4gc29tZVxyXG4gICAgICovXHJcbiAgICBsaXN0ZW5JbmNvbWluZ01lc3NhZ2VzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAkKGRvY3VtZW50KS5hamF4Q29tcGxldGUoZnVuY3Rpb24oZXZlbnQsIHhociwgc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSA9PSAnYXBwbGljYXRpb24vanNvbicpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IGRhdGEubWVzc2FnZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuZXJyb3IubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuYWRkRXJyb3IobWVzc2FnZXMuZXJyb3JbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuc3VjY2Vzcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5hZGRTdWNjZXNzKG1lc3NhZ2VzLnN1Y2Nlc3NbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMuaW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuaW5mby5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5hZGRJbmZvKG1lc3NhZ2VzLmluZm9baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZFN1Y2Nlc3M6IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZmxhc2hNZXNzYWdlRWx0ID0gbWV0aG9kcy5nZXRCYXNpY0ZsYXNoKG1lc3NhZ2UpLmFkZENsYXNzKCdhbGVydC1zdWNjZXNzJyk7XHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZmxhc2hNZXNzYWdlRWx0ID0gbWV0aG9kcy5nZXRCYXNpY0ZsYXNoKG1lc3NhZ2UpLmFkZENsYXNzKCdhbGVydC1kYW5nZXInKTtcclxuXHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkSW5mbzogZnVuY3Rpb24obWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBmbGFzaE1lc3NhZ2VFbHQgPSBtZXRob2RzLmdldEJhc2ljRmxhc2gobWVzc2FnZSkuYWRkQ2xhc3MoJ2FsZXJ0LWluZm8nKTtcclxuXHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QmFzaWNGbGFzaDogZnVuY3Rpb24obWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBmbGFzaE1lc3NhZ2VFbHQgPSAkKCc8ZGl2PjwvZGl2PicpXHJcbiAgICAgICAgICAgIC5oaWRlKClcclxuICAgICAgICAgICAgLmFkZENsYXNzKCd0b2FzdCBhbGVydCBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3cnKVxyXG4gICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywnMC4zcmVtJykuY3NzKCd3aWR0aCcsJ2F1dG8nKVxyXG4gICAgICAgICAgICAuYXR0cigncm9sZScsICdhbGVydCcpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJCgnPGRpdiBjbGFzcz1cInRvYXN0LWJvZHlcIj48L2Rpdj4nKS5odG1sKG1lc3NhZ2UpKVxyXG4gICAgICAgICAgICAvLy5hcHBlbmQobWV0aG9kcy5nZXRDbG9zZUJ1dHRvbigpKVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZsYXNoTWVzc2FnZUVsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2xvc2VCdXR0b246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjbG9zZUJ1dHRvbkVsdCA9ICQoJzxidXR0b24+PC9idXR0b24+JylcclxuICAgICAgICAgICAgLmFkZENsYXNzKCdidG4tY2xvc2UnKVxyXG4gICAgICAgICAgICAuYXR0cignZGF0YS1icy1kaXNtaXNzJywgJ2FsZXJ0JylcclxuICAgICAgICAgICAvLyAuaHRtbCgnJnRpbWVzJylcclxuICAgICAgICAgICAgLmNzcygnb3BhY2l0eScsIDEpXHJcbiAgICAgICAgO1xyXG5cclxuICAgICAgICByZXR1cm4gY2xvc2VCdXR0b25FbHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZFRvTGlzdDogZnVuY3Rpb24oZmxhc2hNZXNzYWdlRWx0KSB7XHJcbiAgICAgICAgZmxhc2hNZXNzYWdlRWx0LmFwcGVuZFRvKCQoJy5tZXNzYWdlcycpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzcGxheTogZnVuY3Rpb24oZmxhc2hNZXNzYWdlRWx0KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFzaE1lc3NhZ2VFbHRcclxuICAgICAgICAgICAgICAgICAgICAuc2hvdygnc2xvdycpXHJcbiAgICAgICAgICAgICAgICAgICAgLmRlbGF5KG1ldGhvZHMuc2V0dGluZ3MuaGlkZURlbGF5KVxyXG4gICAgICAgICAgICAgICAgICAgIC5oaWRlKCdzbG93JywgZnVuY3Rpb24oKSB7ICQodGhpcykucmVtb3ZlKCk7IH0gKVxyXG4gICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICA1MDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG4kKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCl7XHJcbiAgICBpZiAoJCh0aGlzKS5zY3JvbGxUb3AoKSA+IDIwMCl7XHJcbiAgICAgICAgJCgnI3Njcm9sbCcpLmZhZGVJbigpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgJCgnI3Njcm9sbCcpLmZhZGVPdXQoKTtcclxuICAgIH1cclxufSk7XHJcbiQoJyNzY3JvbGwgYScpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtcclxuICAgICAgICBzY3JvbGxUb3A6IDBcclxuICAgIH0sIDMwMCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0pO1xyXG5cclxuJC5mbi5mbGFzaE5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uKG1ldGhvZCkge1xyXG4gICAgLy8gTWV0aG9kIGNhbGxpbmcgbG9naWNcclxuICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHtcclxuICAgICAgICByZXR1cm4gbWV0aG9kc1sgbWV0aG9kIF0uYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdvYmplY3QnIHx8ICEgbWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkLmVycm9yKCdNZXRob2QgJyArICBtZXRob2QgKyAnIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5mbGFzaE5vdGlmaWNhdGlvbicpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuJC5mbi5mbGFzaE5vdGlmaWNhdGlvbi5kZWZhdWx0cyA9IHtcclxuICAgICdoaWRlRGVsYXknICAgICAgICAgOiA0NTAwLFxyXG4gICAgJ2F1dG9IaWRlJyAgICAgICAgICA6IHRydWUsXHJcbiAgICAnYW5pbWF0ZScgICAgICAgICAgIDogdHJ1ZVxyXG59O1xyXG5cclxuICQoZG9jdW1lbnQpLm9uKCdyZWFkeSB0dXJibzpsb2FkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAkKCcuYWxlcnQnKVxyXG4gICAgICAgICAgICAgICAgIC5kZWxheShtZXRob2RzLnNldHRpbmdzLmhpZGVEZWxheSlcclxuICAgICAgICAgICAgICAgICAuaGlkZSgnc2xvdycpXHJcbiAgICAgICAgICAgICA7XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIDUwMFxyXG4gICAgICk7XHJcblxyXG4gICAgIC8vb24gbWFzcXVlIGxlIGNvbHVtbiBjaG9vc2VyIGxvcnNxdSdvbiBjaGFuZ2UgZGUgcGFnZVxyXG4gICAgICQoJy5keC1kYXRhZ3JpZC1jb2x1bW4tY2hvb3NlcicpLmhpZGUoKTtcclxuXHJcbiAgICAgLy9nZXN0aW9uIGRlcyBwYWdlIGF2ZWMgw6lsw6ltZW50cyDDoCBkw6lzYWN0aXZlclxyXG4gICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcclxuICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICB2YXIgdHlwZV9hZmZpY2hhZ2UgPSAoJCgnI2Zvcm1fY2xpZW50X3VwZGF0ZScpLmxlbmd0aCAhPSAwKSA/ICQoJyNmb3JtX2NsaWVudF91cGRhdGUnKS5kYXRhKCdhZmZpY2hhZ2UnKSA6ICcnO1xyXG4gICAgIHR5cGVfYWZmaWNoYWdlID0gKCQoJyNmb3JtX2FnZW50X3VwZGF0ZScpLmxlbmd0aCAhPSAwKSA/ICQoJyNmb3JtX2FnZW50X3VwZGF0ZScpLmRhdGEoJ2FmZmljaGFnZScpIDogdHlwZV9hZmZpY2hhZ2U7XHJcbiAgICAgaWYgKHR5cGVfYWZmaWNoYWdlICE9ICdlZGl0Jykge1xyXG4gICAgICAgICAkKCdbZGF0YS1kaXNhYmxlLW9uLXZpZXddJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCgkKHRoaXMpWzBdLmxvY2FsTmFtZSA9PSAnaScgJiYgJCh0aGlzKS5oYXNDbGFzcygnaGFzLWluZm8nKSkgfHwgJCh0aGlzKVswXS5sb2NhbE5hbWUgPT0gJ2J1dHRvbicpeyAvKnx8ICgkKHRoaXMpLmhhc0NsYXNzKCdteS1zZWxlY3QtbXVsdGlwbGUnKSAmJiAkKHRoaXMpWzBdLmxvY2FsTmFtZSA9PSAnc2VsZWN0JykpIHsqL1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIH0pO1xyXG4gICAgIH1cclxuXHJcbiAgICAgY29tbW9uLnJlc2V0Rm9ybSgpO1xyXG4gICAgIGNvbW1vbi5sb2FkUGlja2VyKCk7XHJcbiAgICAgLy8gaWYgKHR5cGVvZiB3aW5kb3cuY2FsY3VsYXRlX3BvcHVwcyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgIC8vICAgICB3aW5kb3cuY2FsY3VsYXRlX3BvcHVwcygpO1xyXG4gICAgIC8vIH1cclxuICAgICAvLyBpZiAodHlwZW9mIHdpbmRvdy5sb2FkU2lkZWJhclRjaGF0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgLy8gICAgIHdpbmRvdy5sb2FkU2lkZWJhclRjaGF0KCk7XHJcbiAgICAgLy8gfVxyXG4gICAgIGNvbnN0IGFkZExpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLmFkZF9pdGVtX2xpbmsnKTtcclxuICAgICBhZGRMaW5rLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYWRkRm9ybVRvQ29sbGVjdGlvbik7XHJcbiAgICAgICAgIGlmICgkKGUpLnByZXYoJ3VsJykuZGF0YSgnaW5kZXgnKSA9PSAxKSBlLmNsaWNrKCk7XHJcbiAgICAgfSk7XHJcblxyXG4gICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndWwuY29sbGVjdGlvbiA+IGxpJyk7XHJcbiAgICAgY29sbGVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICBpZiAoJChlKS5uZXh0KCdhLmFkZF9pdGVtX2xpbmsnKS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGUpO1xyXG4gICAgICAgICB9XHJcbiAgICAgfSk7XHJcblxyXG4gICAgIGZ1bmN0aW9uIGFkZEZvcm1Ub0NvbGxlY3Rpb24oZSkge1xyXG4gICAgICAgICBjb25zdCBjb2xsZWN0aW9uSG9sZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jb2xsZWN0aW9uSG9sZGVySWQpO1xyXG4gICAgICAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcclxuICAgICAgICAgY29uc3QgY2xhc3NfdG9fYWRkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jbGFzcyk7XHJcbiAgICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gJChjb2xsZWN0aW9uSG9sZGVyLmRhdGFzZXQucHJvdG90eXBlKS5odG1sKCkucmVwbGFjZShcclxuICAgICAgICAgICAgIC9fX25hbWVfXy9nLFxyXG4gICAgICAgICAgICAgY29sbGVjdGlvbkhvbGRlci5kYXRhc2V0LmluZGV4XHJcbiAgICAgICAgIClcclxuICAgICAgICAgaXRlbS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICAgICAgIC8vaXRlbS5jbGFzc0xpc3QgPSAnZm9ybS1jb250cm9sLXNtIGZvcm0tY29udHJvbCc7XHJcblxyXG4gICAgICAgICBjb2xsZWN0aW9uSG9sZGVyLmFwcGVuZENoaWxkKGl0ZW0pO1xyXG4gICAgICAgICBjb2xsZWN0aW9uSG9sZGVyLmRhdGFzZXQuaW5kZXgrKztcclxuICAgICAgICAgYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGl0ZW0pO1xyXG4gICAgIH1cclxuXHJcbiAgICAgZnVuY3Rpb24gYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGVsZW1lbnQpIHtcclxuICAgICAgICAgY29uc3QgcmVtb3ZlRm9ybUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgcmVtb3ZlRm9ybUJ1dHRvbi5jbGFzc0xpc3QgPSAnYWRkX2l0ZW1fbGluayc7XHJcbiAgICAgICAgIHJlbW92ZUZvcm1CdXR0b24uaW5uZXJIVE1MID0gJzxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsLWljb25cIiBzdHlsZT1cImJvdHRvbTogN3B4O3JpZ2h0OiA4cHg7dG9wOmluaGVyaXQ7cG9zaXRpb246YWJzb2x1dGVcIj48L2k+JztcclxuXHJcbiAgICAgICAgIGVsZW1lbnQuYXBwZW5kKHJlbW92ZUZvcm1CdXR0b24pO1xyXG5cclxuICAgICAgICAgcmVtb3ZlRm9ybUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9XHJcbiAgICAgd2luZG93LmluaXREZXZFeHRyZW1lR3JpZHMgPSBmdW5jdGlvbiBpbml0RGV2RXh0cmVtZUdyaWRzKGVsZW1lbnQpIHtcclxuICAgICAgICAgd2luZG93LmlzRGF0YUdyaWRSZXF1ZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgdmFyIHJvd0NsYXNzID0gJChlbGVtZW50KS5kYXRhKCdyb3djbGFzcycpO1xyXG4gICAgICAgICB2YXIgdG9vbHRpcEZpZWxkID0gJChlbGVtZW50KS5kYXRhKCd0b29sdGlwLWZpZWxkJyk7XHJcbiAgICAgICAgIHZhciBwYWdlID0gJChlbGVtZW50KS5kYXRhKCdwYWdlJyk7XHJcbiAgICAgICAgIHZhciBjb2x1bW5zID0gZXZhbCgkKGVsZW1lbnQpLmRhdGEoJ2NvbHVtbnMnKSk7XHJcbiAgICAgICAgIHZhciBwYXRjaF9wYXRoID0gJChlbGVtZW50KS5kYXRhKCdwYXRjaHBhdGgnKTtcclxuICAgICAgICAgdmFyIHJlbW90ZU9wZXJhdGlvbnMgPSAkKGVsZW1lbnQpLmRhdGEoJ3JlbW90ZW9wZXJhdGlvbnMnKTtcclxuICAgICAgICAgdmFyIGFsbG93ZWRQYWdlU2l6ZXMgPSAkKGVsZW1lbnQpLmRhdGEoJ2FsbG93ZWRwYWdlc2l6ZXMnKVxyXG4gICAgICAgICB2YXIga2V5ID0gJChlbGVtZW50KS5kYXRhKCdrZXknKTtcclxuICAgICAgICAgdmFyIG9uZWRpdG9ycHJlcGFyaW5nID0gZXZhbCgkKGVsZW1lbnQpLmRhdGEoJ29uZWRpdG9ycHJlcGFyaW5nJykpO1xyXG4gICAgICAgICB2YXIgb25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcyA9ICQoZWxlbWVudCkuZGF0YSgnb25lZGl0b3JwcmVwYXJpbmdfY2hhbmdlX2l0ZW1zJyk7XHJcbiAgICAgICAgIHZhciByb3dEYmxDbGljayA9ICQoZWxlbWVudCkuZGF0YSgncm93ZGJsY2xpY2snKTtcclxuICAgICAgICAgdmFyIHJhbmdfdHJpID0gJChlbGVtZW50KS5kYXRhKCdyYW5nX3RyaScpO1xyXG4gICAgICAgICB2YXIgY29sdW1uX2F1dG93aWR0aCA9ICQoZWxlbWVudCkuZGF0YSgnY29sdW1uX2F1dG93aWR0aCcpO1xyXG4gICAgICAgICB2YXIgc291cmNlID0gJChlbGVtZW50KS5kYXRhKCdzb3VyY2UnKTtcclxuICAgICAgICAgdmFyIGdldF9wYXRoID0gJChlbGVtZW50KS5kYXRhKCdnZXRwYXRoJyk7XHJcbiAgICAgICAgIHZhciBjcmVhdGVfcGF0aCA9ICQoZWxlbWVudCkuZGF0YSgnY3JlYXRlcGF0aCcpO1xyXG4gICAgICAgICB2YXIgZGVsZXRlX3BhdGggPSAkKGVsZW1lbnQpLmRhdGEoJ2RlbGV0ZXBhdGgnKTtcclxuICAgICAgICAgdmFyIGRhdGFTb3VyY2UgPSBjb21tb24uY3JlYXRlQ3VzdG9tU3RvcmUocGFnZSwgcGF0Y2hfcGF0aCwgZ2V0X3BhdGgsIGNyZWF0ZV9wYXRoLCBkZWxldGVfcGF0aCwga2V5KTtcclxuICAgICAgICAgdmFyIHRtcEdyaWQgPSBjb21tb24uZGF0YWdyaWRfb2JqO1xyXG4gICAgICAgICB2YXIgZWRpdGluZyA9ICQoZWxlbWVudCkuZGF0YSgnZWRpdGluZycpO1xyXG4gICAgICAgICB2YXIgb25DZWxsSG92ZXJDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgIHZhciBzZWFyY2hQYW5lbCA9ICQoZWxlbWVudCkuZGF0YSgnc2VhcmNocGFuZWwnKTtcclxuICAgICAgICAgdmFyIHBhZ2luYXRpb24gPSAkKGVsZW1lbnQpLmRhdGEoJ3BhZ2luYXRpb24nKTtcclxuICAgICAgICAgdmFyIHRvb2xiYXJJbnZpc2libGUgPSAkKGVsZW1lbnQpLmRhdGEoJ3Rvb2xiYXJpbnZpc2libGUnKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVPbmx5RWRpdGluZyA9ICQoZWxlbWVudCkuZGF0YSgnZGlzYWJsZS1vbmx5LWVkaXRpbmcnKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVPbmx5QWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdkaXNhYmxlLW9ubHktYWRkaW5nJyk7XHJcbiAgICAgICAgIHZhciBzZWFyY2hwYW5lbHBsYWNlaG9sZGVyID0gJChlbGVtZW50KS5kYXRhKCdzZWFyY2hwYW5lbHBsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgIHZhciBleHBvcnRBbGxUZXh0ID0gJChlbGVtZW50KS5kYXRhKCdleHBvcnRhbGx0ZXh0Jyk7XHJcbiAgICAgICAgIHZhciBvblJvd1ZhbGlkYXRpbmcgPSAkKGVsZW1lbnQpLmRhdGEoJ29uLXJvdy12YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgIHZhciBlZGl0T25QcmVwYXJpbmcgPSBbXTtcclxuICAgICAgICAgdmFyIGRlZmF1dEZpbHRyZSA9ICQoZWxlbWVudCkuZGF0YSgnZGVmYXV0ZmlsdHJlJyk7XHJcbiAgICAgICAgIHZhciBkZWZhdXRGaWx0cmVVdGlsaXNhdGV1ciA9ICQoZWxlbWVudCkuZGF0YSgnZGVmYXV0ZmlsdHJldXRpbGlzYXRldXInKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVvbnZpZXcgPSAkKGVsZW1lbnQpLmRhdGEoJ2Rpc2FibGVvbnZpZXcnKTtcclxuICAgICAgICAgdmFyIGV4cG9ydEZpZWxkcyA9ICQoZWxlbWVudCkuZGF0YSgnZXhwb3J0LWZpZWxkcycpO1xyXG4gICAgICAgICB2YXIgZ3JpZENsYXNzID0gJChlbGVtZW50KS5kYXRhKCdncmlkY2xhc3MnKTtcclxuXHJcbiAgICAgICAgIGlmIChkZWZhdXRGaWx0cmVVdGlsaXNhdGV1cikgZGVmYXV0RmlsdHJlID0gZGVmYXV0RmlsdHJlVXRpbGlzYXRldXI7XHJcblxyXG4gICAgICAgICBpZiAoJChlbGVtZW50KS5kYXRhKCdzdHlsZScpID09ICd0YWInKVxyXG4gICAgICAgICAgICAgdmFyIG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRtcEdyaWQsIGNvbW1vbi5kYXRhZ3JpZFNpbXBsZSk7XHJcbiAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgIHZhciBvYmogPSBPYmplY3QuYXNzaWduKHt9LCB0bXBHcmlkLCBjb21tb24uZGF0YWdyaWRGdWxsKTtcclxuXHJcbiAgICAgICAgIGlmIChjb2x1bW5fYXV0b3dpZHRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICBvYmouY29sdW1uQXV0b1dpZHRoID0gY29sdW1uX2F1dG93aWR0aDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoZ3JpZENsYXNzKXtcclxuICAgICAgICAgICAgIG9iai5lbGVtZW50QXR0ciA9IHsgY2xhc3M6IGdyaWRDbGFzcyB9O1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAoZXhwb3J0RmllbGRzKSB7XHJcbiAgICAgICAgICAgICBvYmoub25FeHBvcnRpbmcgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgZS5jb21wb25lbnQuYmVnaW5VcGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAvLyBlLmNvbXBvbmVudC5jb2x1bW5PcHRpb24oJ25vbV9jbGllbnQnLCAndmlzaWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgIC8vIGUuY29tcG9uZW50LmNvbHVtbk9wdGlvbignYWRyZXNzZV9jbGllbnQnLCAndmlzaWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgIGV4cG9ydEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmNvbHVtbk9wdGlvbihmaWVsZCwgJ3Zpc2libGUnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICBlLmZpbGVOYW1lID0gJChlLmVsZW1lbnQpLmRhdGEoJ2V4cG9ydG5hbWUnKSA7XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmIChleHBvcnRBbGxUZXh0ICE9ICcnICYmIGV4cG9ydEFsbFRleHQpIHtcclxuICAgICAgICAgICAgIG9iai5leHBvcnQudGV4dHMuZXhwb3J0QWxsID0gZXhwb3J0QWxsVGV4dDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoc2VhcmNocGFuZWxwbGFjZWhvbGRlciAhPSAnJykge1xyXG4gICAgICAgICAgICAgb2JqLnNlYXJjaFBhbmVsLnBsYWNlaG9sZGVyID0gc2VhcmNocGFuZWxwbGFjZWhvbGRlcjtcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIG9iai5zZWFyY2hQYW5lbC5wbGFjZWhvbGRlciA9IGNvbW1vbi5kZWZhdWx0UGxhY2VIb2xkZXI7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cignaWQnKSA9PT0gJ2ludGVydmVudGlvbi1ncmlkLWZhY3R1cmF0aW9uJykge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93SW5zZXJ0ZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOnJvd0luc2VydGVkJywgW2VdKTtcclxuICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgb2JqLm9uUm93UmVtb3ZlZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoJ2dyaWQ6cm93UmVtb3ZlZCcsIFtlXSk7XHJcbiAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgIG9iai5vblJvd1VwZGF0ZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOnJvd1VwZGF0ZWQnLCBbZV0pO1xyXG4gICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICBvYmoub25Db250ZW50UmVhZHkgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOmNvbnRlbnRSZWFkeScsIFtlXSk7XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgaWYgKGNvbHVtbnMpIHtcclxuICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIGlmIChlLmxvb2t1cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmxvb2t1cC5kYXRhU291cmNlID0gZXZhbChlLmxvb2t1cC5kYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09IFwiZGF0ZVwiICYmIGUuZmlsdGVyVmFsdWUgJiYgdHlwZW9mIGUuZmlsdGVyVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZS5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKGUuZmlsdGVyVmFsdWUpOyAvLyBDb252ZXJzaW9uIGNvcnJlY3RlXHJcbiAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICBpZiAoZS5lZGl0b3JPcHRpb25zICYmIGUuZWRpdG9yT3B0aW9ucy5hY2NlcHRDdXN0b21WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmVkaXRvck9wdGlvbnMub25DdXN0b21JdGVtQ3JlYXRpbmcgPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0uaWQgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLmxpYmVsbGUgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuY2FsY3VsYXRlRGlzcGxheVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuY2FsY3VsYXRlRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKHJvd0RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJFeHByZXNzaW9uID0gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gcm93RGF0YVtlLmRhdGFGaWVsZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzICE9IG51bGwgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHVzaCgnb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnB1c2goWydpZCcsIHZhbHVlc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAkLm1hcChEZXZFeHByZXNzLmRhdGEucXVlcnkob25lZGl0b3JwcmVwYXJpbmdbZS5kYXRhRmllbGRdLmRhdGFzKS5maWx0ZXIoZmlsdGVyRXhwcmVzc2lvbikudG9BcnJheSgpLCBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtlLmZpZWxkRGlzcGxheV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignPGJyIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhRmllbGQgPT0gJ3BwX3Bob3RvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLndpZHRoID0gMTAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBjb21tb24uY2VsbFRlbXBsYXRlUGhvdG87XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIGlmIChlLmRhdGFGaWVsZCA9PSAnY291bGV1cicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBjb21tb24uY2VsbFRlbXBsYXRlQ291bGV1cjtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmNhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZmlsdGVyVmFsdWVzLCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdGVtRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheTEgPSBpdGVtRGF0YVtlLmRhdGFGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5MiA9IGZpbHRlclZhbHVlcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5Mi5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IGFycmF5MltpbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuYnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5idXR0b25zWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciB2aXNpYmxlID0gJyArIGUuYnV0dG9uc1swXS52aXNpYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUuYnV0dG9uc1swXS52aXNpYmxlID0gdmlzaWJsZTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5idXR0b25zWzBdLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBvbmNsaWNrID0gJyArIGUuYnV0dG9uc1swXS5vbkNsaWNrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUuYnV0dG9uc1swXS5vbkNsaWNrID0gb25jbGljaztcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUudHlwZSA9PSAnbGlzdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBlLmRhdGFGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgY29sQ2FsdWxhdGVkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZUNlbGxWYWx1ZTogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YXMgPSBldmFsKCdkYXRhLicgKyBmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGVsZW1lbnQubGliZWxsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlLCBjb2xDYWx1bGF0ZWQpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5vbkVkaXRvclByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVkaXRPblByZXBhcmluZy5wdXNoKGUuZGF0YUZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgb25DZWxsSG92ZXJDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YSAvPicpLnRleHQoZS5vbkVkaXRvclByZXBhcmVkKS5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICd1bmRlcmxpbmUnKS5hcHBlbmRUbyhjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChkaXNhYmxlT25seUVkaXRpbmcgJiYgZGlzYWJsZU9ubHlFZGl0aW5nLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICBvYmoub25DZWxsUHJlcGFyZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIHZhciBpc05ld1JvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgIGZvciAobGV0IGlDb3VudCA9IDA7IGlDb3VudCA8IGRpc2FibGVPbmx5RWRpdGluZy5sZW5ndGg7IGlDb3VudCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChlLnJvdyAmJiBlLnJvdy5pc05ld1JvdykgaXNOZXdSb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBkaXNhYmxlT25seUVkaXRpbmdbaUNvdW50XSAmJiAhaXNOZXdSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RCb3hFbGVtZW50ID0gKGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXNlbGVjdGJveCcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCdpbnB1dCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtdGV4dGVkaXRvci1idXR0b25zLWNvbnRhaW5lcicpLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXRleHRlZGl0b3ItYnV0dG9ucy1jb250YWluZXInKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RCb3hFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHNlbGVjdEJveEVsZW1lbnRbMF0pLmR4U2VsZWN0Qm94KCdpbnN0YW5jZScpLm9wdGlvbigncmVhZE9ubHknLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICBpc05ld1JvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZU9ubHlBZGRpbmcgJiYgZGlzYWJsZU9ubHlBZGRpbmcubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaUNvdW50ID0gMDsgaUNvdW50IDwgZGlzYWJsZU9ubHlBZGRpbmcubGVuZ3RoOyBpQ291bnQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUucm93ICYmIGUucm93LmlzTmV3Um93KSBpc05ld1JvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBkaXNhYmxlT25seUFkZGluZ1tpQ291bnRdICYmIGlzTmV3Um93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdEJveEVsZW1lbnQgPSAoZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtc2VsZWN0Ym94JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCdpbnB1dCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXRleHRlZGl0b3ItYnV0dG9ucy1jb250YWluZXInKS5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtdGV4dGVkaXRvci1idXR0b25zLWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RCb3hFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChzZWxlY3RCb3hFbGVtZW50WzBdKS5keFNlbGVjdEJveCgnaW5zdGFuY2UnKS5vcHRpb24oJ3JlYWRPbmx5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXdSb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlLmNvbHVtbi5jb21tYW5kID09PSBcImVkaXRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0aW5nID0gZS5yb3cuaXNFZGl0aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtzID0gZS5jZWxsRWxlbWVudC5maW5kKFwiLmR4LWxpbmtcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAkbGlua3MudGV4dChcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rcy5maWx0ZXIoXCIuZHgtbGluay1zYXZlXCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcInNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkbGlua3MuZmlsdGVyKFwiLmR4LWxpbmstY2FuY2VsXCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcInJldmVydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rcy5maWx0ZXIoXCIuZHgtbGluay1lZGl0XCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcImVkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtzLmZpbHRlcihcIi5keC1saW5rLWRlbGV0ZVwiKS5keEJ1dHRvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJ0cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChvbkNlbGxIb3ZlckNoYW5nZWQpIHtcclxuICAgICAgICAgICAgIHZhciBwb3B1cF9ob3ZlciA9ICQoXCIjcG9wdXBfY2VsbFwiKS5keFBvcG92ZXIoe1xyXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bydcclxuICAgICAgICAgICAgIH0pLmR4UG9wb3ZlcihcImluc3RhbmNlXCIpO1xyXG5cclxuICAgICAgICAgICAgIG9iai5vbkNlbGxQcmVwYXJlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUucm93VHlwZSA9PSBcImRhdGFcIiAmJiBlZGl0T25QcmVwYXJpbmcuaW5jbHVkZXMoZS5jb2x1bW4uZGF0YUZpZWxkKSlcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5hZGRDbGFzcyhcInBvcG92ZXJfY2VsbFwiKTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICBvYmoub25DZWxsSG92ZXJDaGFuZ2VkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlZGl0T25QcmVwYXJpbmcuaW5jbHVkZXMoZS5jb2x1bW4uZGF0YUZpZWxkKSAmJiBlLmV2ZW50VHlwZSA9PT0gXCJtb3VzZW92ZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICBwb3B1cF9ob3Zlci5vcHRpb24oXCJjb250ZW50VGVtcGxhdGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChjb250ZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCI8ZGl2Lz5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChlLnRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhjb250ZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaG92ZXIub3B0aW9uKFwidGFyZ2V0XCIsIGUuY2VsbEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICBwb3B1cF9ob3Zlci5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlLmV2ZW50VHlwZSA9PT0gXCJtb3VzZW91dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHBvcHVwX2hvdmVyLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmIChvblJvd1ZhbGlkYXRpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93VmFsaWRhdGluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUub2xkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoKGUubmV3RGF0YS5hY3RpZiA9PSBmYWxzZSAmJiBlLm5ld0RhdGEuZGF0ZV9maW5fYXBwbGljYXRpb24gPT0gbnVsbCAmJiAhZS5vbGREYXRhLmRhdGVfZmluX2FwcGxpY2F0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGUubmV3RGF0YS5kYXRlX2Zpbl9hcHBsaWNhdGlvbiA9PSBudWxsICYmIGUubmV3RGF0YS5hY3RpZiA9PSB1bmRlZmluZWQgJiYgZS5vbGREYXRhLmFjdGlmID09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBlLmVycm9yVGV4dCA9IFwiVm91cyBkZXZleiBzYWlzaXIgdW5lIGRhdGUgZGUgZmluIGQnYXBwbGljYXRpb24gbG9yc3F1ZSBsZSBUYXV4IGVzdCBpbmFjdGlmXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IGUuY29tcG9uZW50LmdldFJvd0luZGV4QnlLZXkoZS5rZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSBlLmNvbXBvbmVudC5nZXRDZWxsRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGVfZmluX2FwcGxpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gY2VsbEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImR4LWRhdGVib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICQoZWRpdG9yRWxlbWVudFswXSkuZHhEYXRlQm94KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uU3RhdHVzOiBcImludmFsaWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJChlZGl0b3JFbGVtZW50WzBdKS5keERhdGVCb3goJ2luc3RhbmNlJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChyb3dDbGFzcykge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93UHJlcGFyZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIC8vIMOJdmFsdWUgbGEgZm9uY3Rpb24gcm93Q2xhc3MgcXVpIGEgw6l0w6kgcGFzc8OpZSBlbiBzdHJpbmdcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIHZhciByb3dDbGFzc0Z1bmMgPSBldmFsKCcoJyArIHJvd0NsYXNzICsgJyknKTtcclxuICAgICAgICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gcm93Q2xhc3NGdW5jKGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChjc3NDbGFzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5yb3dFbGVtZW50LmFkZENsYXNzKGNzc0NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b29sdGlwRmllbGQgJiYgZS5kYXRhW3Rvb2x0aXBGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnJvd0VsZW1lbnQuYXR0cigndGl0bGUnLCBlLmRhdGFbdG9vbHRpcEZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAob25lZGl0b3JwcmVwYXJpbmcpIHtcclxuICAgICAgICAgICAgIG9iai5vbkVkaXRvclByZXBhcmluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKChlLnBhcmVudFR5cGUgPT09IFwiZGF0YVJvd1wiIHx8IGUucGFyZW50VHlwZSA9PT0gXCJmaWx0ZXJSb3dcIikgJiYgb25lZGl0b3JwcmVwYXJpbmdbZS5kYXRhRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yTmFtZSA9IFwiZHhUYWdCb3hcIjtcclxuICAgICAgICAgICAgICAgICAgICAgZS5hdXRvRXhwYW5kR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlRWRpdG9yID0gY29tbW9uLmNyZWF0ZUN1c3RvbVN0b3JlKG9uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5nZXREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLmRhdGFTb3VyY2UgPSBzdG9yZUVkaXRvcjtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLnNob3dTZWxlY3Rpb25Db250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5kaXNwbGF5RXhwciA9IG9uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLnZhbHVlRXhwciA9IFwiaWRcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy52YWx1ZSA9IGUudmFsdWUgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBlLnNldFZhbHVlKGFyZ3MudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLml0ZW1UZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiB0aXRsZT0nXCIgKyBkYXRhW29uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZF0gKyBcIic+XCIgKyBkYXRhW29uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZF0gKyBcIjwvc3Bhbj5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5vbkluaXRpYWxpemVkID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkdGFnQm94ID0gYXJncy5lbGVtZW50LmR4VGFnQm94KFwiaW5zdGFuY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUG9wdXBJbnN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJChlLmVkaXRvckVsZW1lbnQpLnBhcmVudCgpLmFkZENsYXNzKCdjdXJzb3ItcG9pbnRlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gR8OpcmVyIGwnw6l2w6luZW1lbnQgZGUgY2xpYyBwb3VyIG91dnJpciBsZSB0YWdCb3hcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkKGUuZWRpdG9yRWxlbWVudCkub24oXCJkeGNsaWNrXCIsIGZ1bmN0aW9uIChzcGFuQ2xpY2tBcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkNsaWNrQXJncy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIC8vR8OpcmVyIGwnw6l2w6luZW1lbnQgZGUgY2xpYyBzdXIgbGEgY2VsbHVsZSBwb3VyIG91dnJpciBsZSB0YWdCb3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICQoZS5lZGl0b3JFbGVtZW50KS5wYXJlbnQoKS5vbihcImR4Y2xpY2tcIiwgZnVuY3Rpb24gKGNlbGxDbGlja0FyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ2xpY2tBcmdzLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKCcuZHgtc2VsZWN0Ym94LXBvcHVwLXdyYXBwZXIgJykubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWdCb3gub3B0aW9uKCdvcGVuZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFnQm94Lm9wdGlvbignb3BlbmVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAocm93RGJsQ2xpY2spIHtcclxuICAgICAgICAgICAgIG9iai5vblJvd0RibENsaWNrID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBlLmNvbXBvbmVudC5zZWxlY3RSb3dzKFtlLmtleV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgnI2luZm9zX2xpc3QnKS5kYXRhKCdzaG93bGluaycpLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgdXJsW3VybC5sZW5ndGggLSAxXSA9IGUuZGF0YS5pZDtcclxuICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmwuam9pbignLycpICsgJz9pZF9lcXVpcGVtZW50PScgKyBlLmRhdGFbcm93RGJsQ2xpY2tdLCBcIl9ibGFua1wiKTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAob25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcykge1xyXG4gICAgICAgICAgICAgb2JqLm9uRWRpdG9yUHJlcGFyaW5nID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3cuaXNOZXdSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgaWYgKGUucGFyZW50VHlwZSA9PT0gJ2RhdGFSb3cnICYmIGUubmFtZSA9PSBvbkVkaXRvclByZXBhcmluZ0NoYW5nZUl0ZW1zLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpQ291bnQgPSAwOyBpQ291bnQgPCBlLmNvbXBvbmVudC5nZXRWaXNpYmxlUm93cygpLmxlbmd0aDsgaUNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBlLmNvbXBvbmVudC5nZXRWaXNpYmxlUm93cygpW2lDb3VudF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5yb3dUeXBlID09PSAnZGF0YScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaChyb3cuZGF0YVtvbkVkaXRvclByZXBhcmluZ0NoYW5nZUl0ZW1zLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlLmxvb2t1cC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZXMuaW5jbHVkZXMoZS5sb29rdXAuaXRlbXNbaV1bb25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcy5maWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goZS5sb29rdXAuaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUubG9va3VwLml0ZW1zID0gaXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5kYXRhU291cmNlID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIG9iai5vblJvd1JlbW92ZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgb2JqLmRhdGFTb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICBvYmouZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChyZW1vdGVPcGVyYXRpb25zKSB7XHJcbiAgICAgICAgICAgICBvYmoucmVtb3RlT3BlcmF0aW9ucyA9IHJlbW90ZU9wZXJhdGlvbnM7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChlZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICBvYmouZWRpdGluZyA9IGVkaXRpbmc7XHJcbiAgICAgICAgICAgICBvYmouZWRpdGluZy5tb2RlID0gXCJyb3dcIjtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoYWxsb3dlZFBhZ2VTaXplcykge1xyXG4gICAgICAgICAgICAgb2JqLnBhZ2VyLmFsbG93ZWRQYWdlU2l6ZXMgPSBhbGxvd2VkUGFnZVNpemVzO1xyXG4gICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgaWYgKHNlYXJjaFBhbmVsKSB7XHJcbiAgICAgICAgICAgICBvYmouc2VhcmNoUGFuZWwgPSBzZWFyY2hQYW5lbDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcclxuICAgICAgICAgICAgIG9iai5wYWdlciA9IHBhZ2luYXRpb247XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmICh0b29sYmFySW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICBvYmoub25Ub29sYmFyUHJlcGFyaW5nID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBlLnRvb2xiYXJPcHRpb25zLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgb2JqLnJvd0RyYWdnaW5nLmFsbG93UmVvcmRlcmluZyA9IHJhbmdfdHJpO1xyXG4gICAgICAgICBvYmouY29sdW1ucyA9IGNvbHVtbnM7XHJcblxyXG4gICAgICAgICAvL29uIGfDqHJlIGxlIGZpbHRyZSBwYXIgZMOpZmF1dCBzaSBvbiBlbiBhIHVuXHJcbiAgICAgICAgIGlmIChkZWZhdXRGaWx0cmUpIHtcclxuICAgICAgICAgICAgIHZhciBmaWx0cmUgPSBKU09OLnBhcnNlKGRlZmF1dEZpbHRyZS5maWx0cmUpO1xyXG4gICAgICAgICAgICAgdmFyIGNvbG9ubmVzID0gSlNPTi5wYXJzZShkZWZhdXRGaWx0cmUuY29sb25uZXMpO1xyXG4gICAgICAgICAgICAgJCgnI21lcy1maWx0cmVzJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICBvYmouZmlsdGVyVmFsdWUgPSBmaWx0cmU7XHJcbiAgICAgICAgICAgICAvL29uIHBhcnNlIGxlcyBjb2xvbm5lcyBwb3VyIHF1ZSBhZmZpY2hlciBjZWxsZSBxdWkgw6l0YWllbnQgdmlzaWJsZSBsb3JzIGR1IGZpbGx0cmVcclxuICAgICAgICAgICAgIGlmIChjb2xvbm5lcykge1xyXG4gICAgICAgICAgICAgICAgIG9iai5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9ubmVzW3ZhbHVlLmRhdGFGaWVsZF0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29sdW1uc1trZXldLnZpc2libGVJbmRleCA9IGNvbG9ubmVzW3ZhbHVlLmRhdGFGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29sdW1uc1trZXldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbHVtbnNba2V5XS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAoZGlzYWJsZW9udmlldyAmJiBkaXNhYmxlb252aWV3ICE9ICdlZGl0Jykge1xyXG4gICAgICAgICAgICAgb2JqLmVkaXRpbmcuYWxsb3dVcGRhdGluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIG9iai5lZGl0aW5nLmFsbG93RGVsZXRpbmcgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgJChlbGVtZW50KS5keERhdGFHcmlkKG9iaik7XHJcbiAgICAgfVxyXG4gICAgICQoXCIuZ3JpZFwiKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICB3aW5kb3cuaW5pdERldkV4dHJlbWVHcmlkcyh0aGlzKTtcclxuICAgICB9KTtcclxuICAgICBmdW5jdGlvbiBvbkN1c3RvbUl0ZW1DcmVhdGluZyhhcmdzKSB7XHJcbiAgICAgICAgIHZhciBuZXdJdGVtID0ge307XHJcbiAgICAgICAgIG5ld0l0ZW0uSUQgPSA5OTk5O1xyXG4gICAgICAgICBuZXdJdGVtLk5hbWUgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgIH1cclxuXHJcbiAgICAgLy8gRm9uY3Rpb24gcG91ciBvdXZyaXIgb3UgZmVybWVyIGxlIGR4VGFnQm94XHJcbiAgICAgZnVuY3Rpb24gdG9nZ2xlVGFnQm94KHRhZ0JveCkge1xyXG4gICAgICAgICB0YWdCb3gub3B0aW9uKFwib3BlbmVkXCIsICF0YWdCb3gub3B0aW9uKFwib3BlbmVkXCIpKTtcclxuICAgICB9XHJcblxyXG4gICAgICQoJ2lucHV0LmFkcmVzc2VfYXV0bycpLmF1dG9jb21wbGV0ZSh7XHJcbiAgICAgICAgIHNvdXJjZTogZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nICsgcmVxdWVzdC50ZXJtICsgJyZ0eXBlPWhvdXNlbnVtYmVyJmF1dG9jb21wbGV0ZT0xJmxpbWl0MTAmbGF0JmxvbicsXHJcbiAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICByZXNwb25zZSgkLm1hcChkYXRhLmZlYXR1cmVzLCBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkcmVzc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2kgb24gZXN0IG9ibGlnw6kgZCdham91dGVyIGxlcyBDUCBkYW5zIHVuIGFycmF5IHBvdXIgbmUgcGFzIGF2b2lyIHBsdXNpZXVycyBmb2lzIGxlIG3Dqm1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KGl0ZW0ucHJvcGVydGllcy5sYWJlbCwgYWRyZXNzZXMpID09IC0xICYmIGl0ZW0ucHJvcGVydGllcy5ob3VzZW51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkcmVzc2VzLnB1c2goaXRlbS5wcm9wZXJ0aWVzLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogaXRlbS5wcm9wZXJ0aWVzLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5OiBpdGVtLnByb3BlcnRpZXMuY2l0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGl0ZW0ucHJvcGVydGllcy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5wcm9wZXJ0aWVzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBpdGVtLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIC8vIE9uIHJlbXBsaXQgYXVzc2kgbGEgdmlsbGVcclxuICAgICAgICAgc2VsZWN0OiBmdW5jdGlvbihldmVudCwgdWkpIHtcclxuICAgICAgICAgICAgIHZhciBpZF9zaXRlID0gJCh0aGlzKS5kYXRhKCdpZHNpdGUnKTtcclxuICAgICAgICAgICAgIHZhciBpZF9lcXVpcGVtZW50ID0gJCh0aGlzKS5kYXRhKCdpZGVxdWlwZW1lbnQnKTtcclxuICAgICAgICAgICAgIHZhciBwcmVmaXggPSAkKHRoaXMpLmRhdGEoJ3ByZWZpeCcpO1xyXG4gICAgICAgICAgICAgdmFyIGRpdmVycm9yID0gJCh0aGlzKS5kYXRhKCdkaXZlcnJvcicpO1xyXG4gICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgaWYgKGlkX2VxdWlwZW1lbnQpIGlkX2VxdWlwZW1lbnQgPSAnLScgKyBpZF9lcXVpcGVtZW50O1xyXG4gICAgICAgICAgICAgZWxzZSBpZF9lcXVpcGVtZW50ID0gJyc7XHJcblxyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl9jb2RlX3Bvc3RhbFwiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0ucG9zdGNvZGUpO1xyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl92aWxsZVwiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0uY2l0eSk7XHJcbiAgICAgICAgICAgICAkKFwiaW5wdXRbbmFtZT0nXCIrcHJlZml4K1wiX2FkcmVzc2VcIisgaWRfZXF1aXBlbWVudCtcIiddXCIpLnZhbCh1aS5pdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl9jb29yZGluYXRlc1wiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0uY29vcmRpbmF0ZXMpO1xyXG4gICAgICAgICAgICAgaWYgKGlkX3NpdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VjdGV1ci9jb21wYXJlL3NlY3RldXJfc2l0ZS8nICsgaWRfc2l0ZSAsXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YToge1wiY29vcmRpbmF0ZXNcIjogdWkuaXRlbS5jb29yZGluYXRlc30sXHJcbiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkaXZlcnJvcikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLmFkZENsYXNzKCdhbGVydCBhbGVydC1kYW5nZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRpdmVycm9yKS5jc3MoJ2Rpc3BsYXknLCAnZmxleCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLmNzcygnYWxpZ24taXRlbXMnLCAnY2VudGVyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkaXZlcnJvcikuaHRtbCgnPGkgY2xhc3M9XCJmYSBmYS13YXJuaW5nXCI+PC9pPicgK2RhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLnJlbW92ZUNsYXNzKCdhbGVydCBhbGVydC1kYW5nZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRpdmVycm9yKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgIH0pO1xyXG5cclxuIH0pO1xyXG5cclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyICR0eXBlU2VsZWN0ID0gJCgnLmpzLXVzZXItZm9ybS10eXBlJyk7XHJcbiAgICB2YXIgJHNpdGVUYXJnZXQgPSAkKCcuanMtc2l0ZS10YXJnZXQnKTtcclxuXHJcbiAgICAvL2dlc3Rpb24gZHUgbGllbiBhY3RpZiBkdSBtZW51XHJcbiAgICAvLyBPYnRlbmV6IGwnVVJMIGFjdHVlbGxlIGRlIGxhIHBhZ2VcclxuICAgIHZhciBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAvLyBQYXJjb3VyZXogY2hhcXVlIMOpbMOpbWVudCBkZSBtZW51XHJcbiAgICAkKCcjc3VibWVudSAubmF2LWl0ZW0nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAkKCcjc3VibWVudSAubmF2LWl0ZW0gLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaW5rID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XHJcblxyXG4gICAgICAgIC8vIFbDqXJpZmlleiBzaSBsJ1VSTCBkZSBsYSBwYWdlIGFjdHVlbGxlIGNvcnJlc3BvbmQgw6AgbCdVUkwgZHUgbGllbiBkdSBtZW51XHJcbiAgICAgICAgaWYgKGN1cnJlbnRVcmwuaW5kZXhPZihsaW5rKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gQWpvdXRleiBsYSBjbGFzc2UgJ2FjdGl2ZScgw6AgbCfDqWzDqW1lbnQgcGFyZW50IGR1IGxpZW5cclxuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgICR0eXBlU2VsZWN0Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogJHR5cGVTZWxlY3QuZGF0YSgnc3BlY2lmaWMtdHlwZS11cmwnKSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgdHlwZV91dGlsaXNhdGV1cjogJHR5cGVTZWxlY3QudmFsKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzaXRlVGFyZ2V0LmZpbmQoJ3NlbGVjdCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICRzaXRlVGFyZ2V0LmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjdXJyZW50IGZpZWxkIGFuZCBzaG93XHJcbiAgICAgICAgICAgICAgICAkc2l0ZVRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgIC5odG1sKGh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdkLW5vbmUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiogVENIQVQgKiovXHJcbiAgICAvL3RoaXMgZnVuY3Rpb24gY2FuIHJlbW92ZSBhIGFycmF5IGVsZW1lbnQuXHJcbiAgICBBcnJheS5yZW1vdmUgPSBmdW5jdGlvbiAoYXJyYXksIGZyb20sIHRvKSB7XHJcbiAgICAgICAgdmFyIHJlc3QgPSBhcnJheS5zbGljZSgodG8gfHwgZnJvbSkgKyAxIHx8IGFycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgYXJyYXkubGVuZ3RoID0gZnJvbSA8IDAgPyBhcnJheS5sZW5ndGggKyBmcm9tIDogZnJvbTtcclxuICAgICAgICByZXR1cm4gYXJyYXkucHVzaC5hcHBseShhcnJheSwgcmVzdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvL3RoaXMgaXMgdXNlZCB0byBjbG9zZSBhIHBvcHVwXHJcbiAgICB3aW5kb3cuY2xvc2VfcG9wdXAgPSBmdW5jdGlvbiBjbG9zZV9wb3B1cChpZCkge1xyXG4gICAgICAgIGZvciAodmFyIGlpaSA9IDA7IGlpaSA8IHBvcHVwcy5sZW5ndGg7IGlpaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpZCA9PSBwb3B1cHNbaWlpXSkge1xyXG4gICAgICAgICAgICAgICAgQXJyYXkucmVtb3ZlKHBvcHVwcywgaWlpKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZV9wb3B1cHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9kaXNwbGF5cyB0aGUgcG9wdXBzLiBEaXNwbGF5cyBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9wdXBzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCB3aWR0aFxyXG4gICAgZnVuY3Rpb24gZGlzcGxheV9wb3B1cHMoKSB7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gNDAwO1xyXG4gICAgICAgIGlmICgkKCcuY2hhdC1zaWRlYmFyJykuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjbGFzc19ib3R0b20gPSAnc2Fucy1ib3R0b20tYmFyJztcclxuICAgICAgICBpZiAoJCgnLmZpeGVkLWJvdHRvbScpLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIGNsYXNzX2JvdHRvbSA9ICdhdmVjLWJvdHRvbS1iYXInO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlpaSA9IDA7XHJcbiAgICAgICAgZm9yIChpaWk7IGlpaSA8IHRvdGFsX3BvcHVwczsgaWlpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvcHVwc1tpaWldICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwb3B1cHNbaWlpXSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKCdzYW5zLWJvdHRvbS1iYXInKS5yZW1vdmVDbGFzcygnYXZlYy1ib3R0b20tYmFyJyk7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmFkZENsYXNzKGNsYXNzX2JvdHRvbSk7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IHJpZ2h0ICsgMzIwO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBqamogPSBpaWk7IGpqaiA8IHBvcHVwcy5sZW5ndGg7IGpqaisrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9wdXBzW2pqal0pO1xyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9jcmVhdGVzIG1hcmt1cCBmb3IgYSBuZXcgcG9wdXAuIEFkZHMgdGhlIGlkIHRvIHBvcHVwcyBhcnJheS5cclxuICAgIHdpbmRvdy5yZWdpc3Rlcl9wb3B1cCA9IGZ1bmN0aW9uIHJlZ2lzdGVyX3BvcHVwKGlkLCBuYW1lLCBjbGFzc19uYW1lKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaWlpID0gMDsgaWlpIDwgcG9wdXBzLmxlbmd0aDsgaWlpKyspIHtcclxuICAgICAgICAgICAgLy9hbHJlYWR5IHJlZ2lzdGVyZWQuIEJyaW5nIGl0IHRvIGZyb250LlxyXG4gICAgICAgICAgICBpZiAoaWQgPT0gcG9wdXBzW2lpaV0pIHtcclxuICAgICAgICAgICAgICAgIEFycmF5LnJlbW92ZShwb3B1cHMsIGlpaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9hZFBvcHVwVGNoYXQoaWQsIG5hbWUsIGNsYXNzX25hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkUG9wdXBUY2hhdChpZCwgbmFtZSwgY2xhc3NfbmFtZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRQb3B1cFRjaGF0KGlkLCBuYW1lLCBjbGFzc19uYW1lLCByZWFkID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWQgID0gcGFyc2VJbnQoaWQpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgdXJsOiBcIi90Y2hhdC9sb2FkXCIsXHJcbiAgICAgICAgICAgIGRhdGE6IHsnaWQnOiBpZCwgJ25hbWUnOiBuYW1lLCAnY2xhc3NfbmFtZSc6IGNsYXNzX25hbWUsICdyZWFkJzogcmVhZH0sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImh0bWxcIixcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQoJyMnICsgaWQpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSAkKHJlc3VsdCkuY2hpbGRyZW4oJy5jaGF0Ym94X19ib2R5JykuaHRtbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgaWQpLmNoaWxkcmVuKCcuY2hhdGJveF9fYm9keScpLmh0bWwoYm9keSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoJyMnICtpZCArJyAucGFuZWwtZm9vdGVyIC5pbnB1dC1ncm91cCBpbnB1dCcpLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwb3B1cHMuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXBzLnVuc2hpZnQoaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlX3BvcHVwcygpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBpZCAgKycgPiAuY2hhdGJveF9fYm9keScpWzBdLnNjcm9sbFRvcCA9ICQoJyMnICsgaWQgKycgPiAuY2hhdGJveF9fYm9keScpWzBdLnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGxvYWRTaWRlYmFyVGNoYXQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsdSBsb2FkIHBvcHVwJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3aW5kb3cubG9hZFNpZGViYXJUY2hhdCA9IGZ1bmN0aW9uIGxvYWRTaWRlYmFyVGNoYXQoKSB7XHJcbiAgICAvLyAgICAgJC5hamF4KHtcclxuICAgIC8vICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgLy8gICAgICAgICB1cmw6IFwiL3RjaGF0L2NvbnZlcnNhdGlvbnNcIixcclxuICAgIC8vICAgICAgICAgZGF0YVR5cGU6IFwiaHRtbFwiLFxyXG4gICAgLy8gICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAkKCcjdGNoYXQtZ3JvdXBzJykuaHRtbChyZXN1bHQpO1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKCQoJyNoaWRkZW5fdGNoYXRfbnVtYmVycycpLnRleHQoKSAhPSAnMCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAkKCcjbnVtYmVyX3RjaGF0X2dsb2JhbCcpLnRleHQoJCgnI2hpZGRlbl90Y2hhdF9udW1iZXJzJykudGV4dCgpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAvL2lmICgkKCcuY2hhdC1zaWRlYmFyJykuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICQoJyNudW1iZXJfdGNoYXRfZ2xvYmFsJykuc2hvdygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAkKCcucGljdG8tdGNoYXQnKS5hZGRDbGFzcygnYmctcm91Z2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgJCgnI251bWJlcl90Y2hhdF9nbG9iYWwnKS50ZXh0KCcnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAkKCcucGljdG8tdGNoYXQnKS5yZW1vdmVDbGFzcygnYmctcm91Z2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoJCgnLmNoYXQtc2lkZWJhcicpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAkKCcjbnVtYmVyX3RjaGF0X2dsb2JhbCcpLmhpZGUoKTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIHN1aXRhYmxlIGFuZCB0aGVuIHBvcHVsYXRlIHRoZSB0b2F0YWxfcG9wdXBzIHZhcmlhYmxlLlxyXG4gICAgd2luZG93LmNhbGN1bGF0ZV9wb3B1cHMgPSBmdW5jdGlvbiBjYWxjdWxhdGVfcG9wdXBzKCkge1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGlmICh3aWR0aCA8IDU0MCkge1xyXG4gICAgICAgICAgICB0b3RhbF9wb3B1cHMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQoJy5jaGF0LXNpZGViYXInKS5jc3MoJ2Rpc3BsYXknKSAhPSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggLSA0ODM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vMzIwIGlzIHdpZHRoIG9mIGEgc2luZ2xlIHBvcHVwIGJveFxyXG4gICAgICAgICAgICB0b3RhbF9wb3B1cHMgPSBwYXJzZUludCh3aWR0aCAvIDMyMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaXNwbGF5X3BvcHVwcygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLy0tIE5vIHVzZSB0aW1lLiBJdCBpcyBhIGphdmFTY3JpcHQgZWZmZWN0LlxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0Q2hhdCh0ZXh0LCBwYXJlbnQsIGNsYXNzX25hbWUpIHtcclxuICAgICAgICB2YXIgY29udHJvbCA9IFwiXCI7XHJcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXRlVGV4dCA9IGRhdGUuZ2V0SG91cnMoKSArICc6JyArIGRhdGUuZ2V0TWludXRlcygpO1xyXG5cclxuICAgICAgICBjb250cm9sID0gJzxsaSBzdHlsZT1cIndpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmRcIj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtc2otciBtYWNybyAnICsgY2xhc3NfbmFtZSArICdcIj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtbFwiPicgK1xyXG4gICAgICAgICAgICAnPHA+JyArIHRleHQgKyAnPC9wPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXY+PHNwYW4gY2xhc3M9XCJjaGF0LW1zZy1ob3VyXCI+PHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDAuNjhlbVwiPicgKyBkYXRlVGV4dCArICcmbmJzcDsnICtcclxuICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6MC42XCI+JmNoZWNrOzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6MC42XCI+JmNoZWNrOzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9saT4nO1xyXG5cclxuICAgICAgICBwYXJlbnQuYXBwZW5kKGNvbnRyb2wpO1xyXG5cclxuICAgICAgICB2YXIgY2hhdGJvZHkgPSAkKHBhcmVudCkucGFyZW50KCk7XHJcbiAgICAgICAgY2hhdGJvZHkuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBjaGF0Ym9keVswXS5zY3JvbGxIZWlnaHR9LCA3NTApO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5oYW5kbGVOZXdNZXNzYWdlID0gZnVuY3Rpb24gaGFuZGxlTmV3TWVzc2FnZShpZCwgbmFtZSwgY2xhc3NfbmFtZSkge1xyXG4gICAgICAgIC8vb24gdGVzdCBzaSBsYSBwb3B1cCBlc3Qgb3V2ZXJ0dXJlLCBvbiBsYSByZWNoYXJnZVxyXG4gICAgICAgIGZvciAodmFyIGlpaSA9IDA7IGlpaSA8IHBvcHVwcy5sZW5ndGg7IGlpaSsrKSB7XHJcbiAgICAgICAgICAgIC8vYWxyZWFkeSByZWdpc3RlcmVkLiBCcmluZyBpdCB0byBmcm9udC5cclxuICAgICAgICAgICAgaWYgKGlkID09IHBvcHVwc1tpaWldKSB7XHJcbiAgICAgICAgICAgICAgICBBcnJheS5yZW1vdmUocG9wdXBzLCBpaWkpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBpZCkucmVtb3ZlQ2xhc3MoJ2NoYXRib3gtLXRyYXknKTtcclxuICAgICAgICAgICAgICAgIGxvYWRQb3B1cFRjaGF0KGlkLCBuYW1lLCBjbGFzc19uYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9zaW5vbiBvbiB2YSBtZXR0cmUgw6Agam91ciBsYSBzaWRlYmFydGNoYXRcclxuICAgICAgIC8vIGxvYWRTaWRlYmFyVGNoYXQoKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9yZWNhbGN1bGF0ZSB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgYW5kIGFsc28gd2hlbiB3aW5kb3cgaXMgcmVzaXplZC5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGNhbGN1bGF0ZV9wb3B1cHMpO1xyXG5cclxuICAgIHdpbmRvdy5zZW5kTWVzc2FnZSA9IGZ1bmN0aW9uIHNlbmRNZXNzYWdlKGVsZW1lbnRUZXh0LCBlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSBlbGVtZW50VGV4dC50ZXh0KCk7XHJcbiAgICAgICAgdmFyIGNsYXNzX25hbWUgPSBlbGVtZW50VGV4dC5kYXRhKCdjbGFzcy1uYW1lJyk7XHJcbiAgICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgLy9jYWxsIGFqYXggcG9zdCB0Y2hhdFxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogXCIvdGNoYXQvcG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogeydpZCc6IGVsZW1lbnQucGFyZW50cygnLmNoYXQtcG9wdXAnKS5hdHRyKCdpZCcpLCAnbWVzc2FnZSc6IHRleHR9LFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vb24gcmVjaGFyZ2UgbGEgcG9wdXBcclxuICAgICAgICAgICAgICAgICAgICBsb2FkUG9wdXBUY2hhdChwYXJzZUludChlbGVtZW50LnBhcmVudHMoJy5jaGF0LXBvcHVwJykuYXR0cignaWQnKSksICcnLCBjbGFzc19uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50VGV4dC50ZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBjcmVhdGVQb3BwZXIodGhpcywgdG9vbHRpcCk7XHJcbiAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIFBvcHBlciB0byB1cGRhdGUgdGhlIHRvb2x0aXAgcG9zaXRpb25cclxuICAgICAgICAvLyBhZnRlciB3ZSBzaG93IHRoZSB0b29sdGlwLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpbmNvcnJlY3RcclxuICAgICAgICBwb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoaWRlKGVsZW1lbnQpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9wb3VyIHZhbGlkZXIgbGVzIGNoZWNrYm94IHJlcXVpcmVkIChub24gZ8OpcsOpIHBhciBzeW1waG9ueSBkZSBiYXNlKVxyXG4gICAgZnVuY3Rpb24gZGVSZXF1aXJlQ2IoZWxDbGFzcykge1xyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZWxDbGFzcyk7XHJcbiAgICAgICAgdmFyIGF0TGVhc3RPbmVDaGVja2VkID0gZmFsc2U7Ly9hdCBsZWFzdCBvbmUgY2IgaXMgY2hlY2tlZFxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZWxbaV0uY2hlY2tlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgYXRMZWFzdE9uZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXRMZWFzdE9uZUNoZWNrZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZWxbaV0ucmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGVsW2ldLnJlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgd2luZG93LmdldEh0bWxGcm9tQWpheCA9IGZ1bmN0aW9uIGdldEh0bWxGcm9tQWpheChyb3V0ZSkge1xyXG4gICAgICAgIC8vY2FsbCBhamF4IHBvc3QgdGNoYXRcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiByb3V0ZSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImh0bWxcIixcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIsIHN0YXR1cywgZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCcuYnRuLXNhdmUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB2YXIgcmlnaHRzID0ge30sIHNwbGl0TmFtZSA9IFtdLCBpZFJpZ2h0ID0gJycsIHNpdGUgPSAnJywgdmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgJCgnI3RhYmxlLXJpZ2h0cyB0ZCBpbnB1dC5mb3JtLWNoZWNrLWlucHV0JykuZWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBzcGxpdE5hbWUgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKS5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICBpZFJpZ2h0ID0gc3BsaXROYW1lWzNdO1xyXG4gICAgICAgICAgICBzaXRlID0gc3BsaXROYW1lWzFdO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUgPSAoKCQodGhpcylbMF0uY2hlY2tlZCA9PSB0cnVlKSA/IDEgOiAwKTtcclxuICAgICAgICAgICAgaWYgKCFyaWdodHNbc2l0ZV0pIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0c1tzaXRlXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJpZ2h0c1tzaXRlXVtpZFJpZ2h0XSA9IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJpZ2h0cyA9IEpTT04uc3RyaW5naWZ5KHJpZ2h0cyk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcjc3VibWl0LXNhdmUtZmlsdGVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdmFyIGFycmF5Q29sdW1uc1Zpc2libGUgPSB7fTtcclxuICAgICAgICB2YXIgdGl0cmUgPSAkKCcjdGl0cmVfZmlsdHJlJykudmFsKCk7XHJcbiAgICAgICAgdmFyIHJvbGUgPSAkKCcjZmlsdHJlX3JvbGUnKS52YWwoKTtcclxuICAgICAgICB2YXIgZGVmYXV0ICA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBkZWZhdXRfdXRpbGlzYXRldXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCQoJyNmaWx0cmVfcGFyX2RlZmF1dCcpWzBdLmNoZWNrZWQgPT0gdHJ1ZSkgZGVmYXV0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoJCgnI2ZpbHRyZV9wYXJfZGVmYXV0X3V0aWxpc2F0ZXVyJylbMF0uY2hlY2tlZCA9PSB0cnVlKSBkZWZhdXRfdXRpbGlzYXRldXIgPSB0cnVlO1xyXG4gICAgICAgIC8vaWYgKCQoJyNncmlkQ29udGFpbmVyJykubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdmFyIGZpbHRyZSA9ICQoXCIuZ3JpZFwiKS5keERhdGFHcmlkKCdpbnN0YW5jZScpLmdldENvbWJpbmVkRmlsdGVyKHRydWUpO1xyXG4gICAgICAvLyAgICAgIGNvbnNvbGUubG9nKCQoJy5ncmlkJykuZHhEYXRhR3JpZCgnaW5zdGFuY2UnKS5nZXRWaXNpYmxlQ29sdW1ucygpKTtcclxuICAgICAgICAkKCcuZ3JpZCcpLmR4RGF0YUdyaWQoJ2luc3RhbmNlJykuZ2V0VmlzaWJsZUNvbHVtbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUudHlwZSAhPSAnc2VsZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlDb2x1bW5zVmlzaWJsZVtlLmRhdGFGaWVsZF0gPSBlLnZpc2libGVJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbW1vbi5yZXNldEZvcm0oKTtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB2YXIgZmlsdHJlID0gJCgnI3Bpdm90Z3JpZCcpLmR4UGl2b3RHcmlkKCdpbnN0YW5jZScpLmdldERhdGFTb3VyY2UoKS5zdGF0ZSgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBpZiAoZmlsdHJlIHx8IGFycmF5Q29sdW1uc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogXCIvZmlsdGVycy9cIiArICQoJyNpbmZvc19saXN0JykuZGF0YSgncGFnZS1maWx0cmUnKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogeyd0aXRyZSc6IHRpdHJlLCAnZmlsdHJlcyc6IGZpbHRyZSwgJ2NvbG9ubmVzJzogYXJyYXlDb2x1bW5zVmlzaWJsZSwgJ2RlZmF1dCc6IGRlZmF1dCwnZGVmYXV0X3V0aWxpc2F0ZXVyJzogZGVmYXV0X3V0aWxpc2F0ZXVyLCAncm9sZSc6IHJvbGUsICdzaXRlJzogJCgnI2ZpbHRyZV9zaXRlJykudmFsKCl9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmFsZXJ0JykuaHRtbChyZXN1bHQubWVzc2FnZSkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwX3NhdmVfZmlsdGVyLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyZXVyIGxvcnMgZGUgbFxcJ2Fqb3V0IGR1IGZpbHRyZScpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJCgnLmFsZXJ0JykuaHRtbCgnVm91cyBkZXZleiBmaWx0cmVyIHZvcyBkb25uw6llcyBhdmFudCBkZSBwb3V2b2lyIGxlcyBlbnJlZ2lzdHJlcicpLnNob3coKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLy9wYWdlIHVzZXJcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLnJlbW92ZV91c2VyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPkV0ZXMgdm91cyBzdXIgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0dGUgbGlhaXNvbj8/PC9pPlwiLCBcIlV0aWxpc2F0ZXVyXCIpO1xyXG4gICAgICAgIHJlc3VsdC5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvXCIgKyAkKCcjaW5mb3NfbGlzdCcpLmRhdGEoJ3BhZ2UtZmlsdHJlJykgKyBcIi9cIiArIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XCJyZXNwb25zYWJsZVwiOiBudWxsfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQocGFyZW50KS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJyNhZGRfc3Vib3Jkb25uZWUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICQoJyNib2R5LWFkZC1zdWJvcmRvbm5lZScpLmxvYWQoJy9jb25maWd1cmF0aW9uL3V0aWxpc2F0ZXVycy9zaXRlLXN1Yi1zZWxlY3QvJyArIHVzZXJJZCwgbnVsbCk7XHJcbiAgICAgICAgdmFyIHBvcHVwQWRkU3ViID0gY29tbW9uLmNyZWF0ZUR4UG9wdXAoXCJwb3B1cC1hZGQtc3Vib3Jkb25uZWVcIiwgXCJBam91dCBkJ3VuZSBwZXJzb25uZVwiLCAnODAlJyk7XHJcbiAgICAgICAgJCgnI3BvcHVwLWFkZC1zdWJvcmRvbm5lZScpLnNob3coKTtcclxuICAgICAgICBwb3B1cEFkZFN1Yi5zaG93KCk7XHJcbiAgICAgICAgJCgnLmFsZXJ0JykuaHRtbCgnJykuaGlkZSgpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5idG4tY2xvc2UtcG9wdXBhZGQsIC5idG4tc3VibWl0LXBvcHVwYWRkJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAkKCcjcG9wdXAtYWRkLXN1Ym9yZG9ubmVlJykuZHhQb3B1cChcImluc3RhbmNlXCIpLmhpZGUoKTtcclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICdidXR0b25bdHlwZT1zdWJtaXRdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdmb3JtJykpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm0gPSAnIycgKyAkKHRoaXMpLmF0dHIoJ2Zvcm0nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZm9ybSA9IGUudGFyZ2V0LmZvcm07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3BvdXIgbGVzIGZvcm11bGFpcmVzIGF2ZWMgY2hlY2tib3gsIG9uIGxlcyByZXZhbGlkZW50IGF2YW50IGxlIHN1Ym1pdFxyXG4gICAgICAgIGlmICgkKGZvcm0pLmZpbmQoJy5jaGVja2JveC1yZXF1aXJlZCA+IGxhYmVsID4gaW5wdXQnKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAkKGZvcm0pLmZpbmQoJy5jaGVja2JveC1yZXF1aXJlZCA+IGxhYmVsID4gaW5wdXQ6Zmlyc3QnKS5jbGljaygpLmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkKGZvcm0pWzBdLnJlcG9ydFZhbGlkaXR5KCkgIT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgJChmb3JtKS5zdWJtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignc3VibWl0JywgJ2Zvcm0uZm9ybS1hamF4JywgY29tbW9uLmhhbmRsZU5ld0Zvcm1TdWJtaXQuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICdbZGF0YS1keHBvcHVwXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHZhciBpZFBvcHVwID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1pZCcpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9ICQodGhpcykuZGF0YSgncG9wdXAtd2lkdGgnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1oZWlnaHQnKTtcclxuICAgICAgICB2YXIgY29udGVudFRlbXBsYXRlQWpheCA9ICQodGhpcykuZGF0YSgnY29udGVudC10ZW1wbGF0ZS1hamF4Jyk7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQodGhpcykuZGF0YSgncG9wcHVwLWNvbnRhaW5lcicpO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbl9vZiA9ICQodGhpcykuZGF0YSgncG9wdXAtcG9zaXRpb24tb2YnKTtcclxuICAgICAgICB2YXIgcG9zaXRpb25fYXQgPSAkKHRoaXMpLmRhdGEoJ3BvcHVwLXBvc2l0aW9uLWF0Jyk7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uX215ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1wb3NpdGlvbi1teScpO1xyXG4gICAgICAgIHZhciBzY3JvbGx2aWV3ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1zY3JvbGx2aWV3Jyk7XHJcbiAgICAgICAgdmFyIHNjcm9sbHZpZXdfaGVpZ2h0ID0gJCh0aGlzKS5kYXRhKCdzY3JvbGx2aWV3LWhlaWdodCcpO1xyXG4gICAgICAgIHZhciBjbG9zZU9uT3V0c2lkZUNsaWNrID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1jbG9zZW91dHNpZGUnKTtcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gICQodGhpcykuZGF0YSgncG9wdXAtb2Zmc2V0Jyk7XHJcblxyXG4gICAgICAgIC8vb24gcsOpaW5pdGlhbGlzZSBzZXVsZW1lbnQgbGUgZm9ybXVsYWlyZSBkZSBsYSBwb3B1cFxyXG4gICAgICAgICQoJyMnK2lkUG9wdXAgKyAnIGZvcm0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICQodGhpcylbMF0ucmVzZXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgcG9wdXAgPSBjb21tb24uY3JlYXRlRHhQb3B1cChpZFBvcHVwLCAkKHRoaXMpLmRhdGEoJ3BvcHVwLXRpdGxlJyksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKFwiY29udGFpbmVyXCIsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZW50VGVtcGxhdGVBamF4KSB7XHJcbiAgICAgICAgICAgIC8vIHZhciBodG1sID0gd2luZG93LmdldEh0bWxGcm9tQWpheChjb250ZW50VGVtcGxhdGVBamF4KTtcclxuICAgICAgICAgICAgLy8gcG9wdXAub3B0aW9uKFwiY29udGVudFRlbXBsYXRlXCIsIGh0bWwpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZ2V0SHRtbEZyb21BamF4KGNvbnRlbnRUZW1wbGF0ZUFqYXgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLm9wdGlvbihcImNvbnRlbnRUZW1wbGF0ZVwiLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyZXVyIDonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uX29mKSB7XHJcbiAgICAgICAgICAgIHBvcHVwLm9wdGlvbigncG9zaXRpb24ub2YnLCAkKHBvc2l0aW9uX29mKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvZmZzZXQpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKCdwb3NpdGlvbi5vZmZzZXQnLCBvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb25fYXQpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKCdwb3NpdGlvbi5hdCcsIHBvc2l0aW9uX2F0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uX215KSB7XHJcbiAgICAgICAgICAgIHBvcHVwLm9wdGlvbigncG9zaXRpb24ubXknLCBwb3NpdGlvbl9teSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbG9zZU9uT3V0c2lkZUNsaWNrID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBwb3B1cC5vcHRpb24oXCJjbG9zZU9uT3V0c2lkZUNsaWNrXCIsIGNsb3NlT25PdXRzaWRlQ2xpY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Nyb2xsdmlldykge1xyXG4gICAgICAgICAgICBwb3B1cC5vcHRpb24oXCJvblNob3duXCIsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICQoc2Nyb2xsdmlldykuZHhTY3JvbGxWaWV3KHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxCeUNvbnRlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQnlUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VOYXRpdmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbHZpZXdfaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5yZXBhaW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCgnIycgKyBpZFBvcHVwKS5zaG93KCk7XHJcblxyXG4gICAgICAgIHBvcHVwLnNob3coKTtcclxuICAgICAgICAkKCcuYWxlcnQnKS5odG1sKCcnKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJ2J1dHRvbi5idG4tY2xvc2UtcG9wdXAnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB2YXIgaWRQb3B1cCA9ICQodGhpcykuZGF0YSgnZHhwb3B1cC1pZCcpO1xyXG4gICAgICAgICQoJyMnICsgaWRQb3B1cCkuZHhQb3B1cCgnaW5zdGFuY2UnKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL3BvdXIgbGVzIGV2ZW5lbWVudHMgaGlkZS8gc2hvdyBzdXIgY2xpY2tcclxuICAgICQoJ2JvZHknKS5vbignY2hhbmdlJywgJ2lucHV0W2RhdGEtY2hhbmdlLXRhcmdldF0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ2NoYW5nZS10YXJnZXQnKTtcclxuICAgICAgICAkKHRhcmdldCkudG9nZ2xlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29tbW9uLnJlc2V0Rm9ybSgpO1xyXG4gICAgICAgICQoJ2J1dHRvbltkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXScpLm9uKCdzaG93LmJzLnRhYicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhY3RpdmVUYWInLCAkKGUudGFyZ2V0KS5hdHRyKCdpZCcpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgYWN0aXZlVGFiID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYicpO1xyXG4gICAgICAgIGlmIChhY3RpdmVUYWIpIHtcclxuICAgICAgICAgICAgJCgnIycgKyBhY3RpdmVUYWIpLnRhYignc2hvdycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKCcuaW5wdXRfdGVsOm5vdCgubm90X2ZyKScpLm1hc2soJzAwLjAwLjAwLjAwLjAwJyx7dHJhbnNsYXRpb246ICB7JzAnOiB7cGF0dGVybjogL1swLTldLywgcmVjdXJzaXZlOiBmYWxzZX19fSk7XHJcbiAgICAgICAkKCcuaW5wdXRfdGVsLm5vdF9mcicpLm1hc2soJzk5OTk5OTk5OTknKTtcclxuXHJcbiAgICAgIC8vICB3aW5kb3cubG9hZFNpZGViYXJUY2hhdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9wb3VyIGxlcyBldmVuZW1lbnRzIGhpZGUvIHNob3cgc3VyIGNsaWNrXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLnRvZ2dsZS1jbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ2NoYW5nZS10YXJnZXQnKTtcclxuICAgICAgICAkKHRhcmdldCkudG9nZ2xlKCk7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSAnLmNoYXQtc2lkZWJhcicpIHtcclxuICAgICAgICAgICAgd2luZG93LmNhbGN1bGF0ZV9wb3B1cHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy50Y2hhdC1ncm91cC1ub3RpZicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnZmEtdW5zZWxlY3RlZCcpO1xyXG4gICAgICAgIHZhciBpZGdyb3VwZSA9ICQodGhpcykuZGF0YSgnaWRncm91cGUnKTtcclxuICAgICAgICB2YXIgaWR1dGlsaXNhdGV1ciA9ICQodGhpcykuZGF0YSgnaWR1dGlsaXNhdGV1cicpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxyXG4gICAgICAgICAgICB1cmw6IFwiL3RjaGF0L3BhdGNoL2dyb3VwX3V0aWxpc2F0ZXVyL1wiICsgaWRncm91cGUgKyBcIi9cIiArIGlkdXRpbGlzYXRldXIsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXInKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcudGNoYXQtZ3JvdXAtZGVsZXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPsOKdGVzIHZvdXMgc3VyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxlIG1lbWJyZT88L2k+XCIsIFwiVXRpbGlzYXRldXJcIik7XHJcbiAgICAgICAgdmFyIGlkZ3JvdXBlID0gJCh0aGlzKS5kYXRhKCdpZGdyb3VwZScpO1xyXG4gICAgICAgIHZhciBpZHV0aWxpc2F0ZXVyID0gJCh0aGlzKS5kYXRhKCdpZHV0aWxpc2F0ZXVyJyk7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICAgICAgcmVzdWx0LmRvbmUoZnVuY3Rpb24gKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoZGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL3RjaGF0L2RlbGV0ZS9ncm91cF91dGlsaXNhdGV1ci9cIiArIGlkZ3JvdXBlICsgXCIvXCIgKyBpZHV0aWxpc2F0ZXVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQocGFyZW50KS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljayBpbnB1dCcsICcuY2hlY2tib3gtcmVxdWlyZWQgPiBsYWJlbCA+IGlucHV0JywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gJCh0aGlzKS5kYXRhKCdjbGFzcy12YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgZGVSZXF1aXJlQ2IoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ2JvZHknKS5vbignbW91c2VlbnRlciBmb2N1cycsICcudGNoYXQtaW5mb3MsLmNvbGxlY3Rpb24taW5mbywucG9wcGVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJCh0aGlzKS5uZXh0KCkubGVuZ3RoICE9IDAgfHwgJCh0aGlzKS5wYXJlbnQoKVswXS5sb2NhbE5hbWUgPT0gJ2EnKSB7XHJcbiAgICAgICAgICAgIHZhciB0b29sdGlwID0gJCh0aGlzKS5uZXh0KClbMF07XHJcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICd0b3AnO1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5kYXRhKCdwb3BwZXItcG9zaXRpb24nKSkgcG9zaXRpb24gPSQodGhpcykuZGF0YSgncG9wcGVyLXBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnBhcmVudCgpWzBdLmxvY2FsTmFtZSA9PSAnYScpIHRvb2x0aXAgPSAkKHRoaXMpLnBhcmVudCgpLm5leHQoKVswXTtcclxuICAgICAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2hvdycsICcnKTtcclxuICAgICAgICAgICAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBjcmVhdGVQb3BwZXIodGhpcywgdG9vbHRpcCwge3BsYWNlbWVudDogcG9zaXRpb259KTtcclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIFBvcHBlciB0byB1cGRhdGUgdGhlIHRvb2x0aXAgcG9zaXRpb25cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgd2Ugc2hvdyB0aGUgdG9vbHRpcCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgaW5jb3JyZWN0XHJcbiAgICAgICAgICAgIHBvcHBlckluc3RhbmNlLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdtb3VzZWxlYXZlIGJsdXInLCAnLnRjaGF0LWluZm9zLC5jb2xsZWN0aW9uLWluZm8sLnBvcHBlcicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykubmV4dCgpLmxlbmd0aCAhPSAwIHx8ICQodGhpcykucGFyZW50KClbMF0ubG9jYWxOYW1lID09ICdhJykge1xyXG4gICAgICAgICAgICB2YXIgdG9vbHRpcCA9ICQodGhpcykubmV4dCgpWzBdO1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5wYXJlbnQoKVswXS5sb2NhbE5hbWUgPT0gJ2EnKSB0b29sdGlwID0gJCh0aGlzKS5wYXJlbnQoKS5uZXh0KClbMF07XHJcbiAgICAgICAgICAgIHRvb2x0aXAucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNob3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcudGNoYXQtZ3JvdXAtYWRkJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgZm9ybSA9ICQoJyNwb3B1cC10Y2hhdC1ncm91cGUtYWRkID4gLm1vZGFsLWRpYWxvZyA+IC5tb2RhbC1jb250ZW50ID4gLm1vZGFsLWJvZHkgPiBmb3JtJylbMF07XHJcbiAgICAgICAgZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIC8vb24gcmVzZXQgbGUgc2VsZWN0IHBpY2tlciDDoCBsYSBtYW5vXHJcbiAgICAgICAgJChcIiN0Y2hhdF9ncm91cGVfZW50aXR5X3VzZXJcIikudmFsKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgJChcIiN0Y2hhdF9ncm91cGVfZW50aXR5X3VzZXJcIikuc2VsZWN0cGlja2VyKFwicmVmcmVzaFwiKTtcclxuXHJcbiAgICAgICAgdmFyIG15TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cC10Y2hhdC1ncm91cGUtYWRkJykpXHJcbiAgICAgICAgbXlNb2RhbC5zaG93KCk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLmNoYXQtcGVvcGxlX2ZpcnN0LC5jaGF0LXBlb3BsZV9uYW1lJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoKTtcclxuICAgICAgICByZWdpc3Rlcl9wb3B1cCgkKHBhcmVudCkuZGF0YSgnaWQnKSwgJChwYXJlbnQpLmRhdGEoJ25hbWUnKSwgJChwYXJlbnQpLmRhdGEoJ2NsYXNzJykpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5jaGF0Ym94X190aXRsZV9fY2xvc2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHdpbmRvdy5jbG9zZV9wb3B1cCgkKHRoaXMpLmRhdGEoJ2lkJykpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5jaGF0Ym94X190aXRsZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuY2hhdGJveCcpLnRvZ2dsZUNsYXNzKCdjaGF0Ym94LS10cmF5Jyk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbigna2V5dXAnLCBcIi5jaGF0LXNlbmQtbXNnXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmIChlLndoaWNoID09IDEzKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zZW5kTWVzc2FnZSgkKHRoaXMpLCAkKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCBcIi5idG4tY2hhdC1wb3N0XCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgd2luZG93LnNlbmRNZXNzYWdlKCQodGhpcykucHJldignaW5wdXQnKSwgJCh0aGlzKSk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCBcIi5idG4tdGNoYXQtbHVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBsb2FkUG9wdXBUY2hhdCgkKHRoaXMpLmRhdGEoJ2lkJyksICQodGhpcykuZGF0YSgnbmFtZScpLCQodGhpcykuZGF0YSgnY2xhc3NuYW1lJyksIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgXCIuYnRuLWdyb3VwZS1kZWxldGVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPkV0ZXMgdm91cyBzdXIgZGUgdm91bG9pciBzdXBwcmltZXIgbGUgZ3JvdXBlPzwvaT5cIiwgXCJHcm91cGVcIik7XHJcbiAgICAgICAgdmFyIHBvcHVwSWQgPSAkKHRoaXMpLmRhdGEoJ2R4cG9wdXAtaWQnKTtcclxuICAgICAgICB2YXIgcG9wdXAgPSAkKCcjJyArIHBvcHVwSWQpLmR4UG9wdXAoJ2luc3RhbmNlJyk7XHJcbiAgICAgICAgdmFyIHVybCA9ICQodGhpcykuZGF0YSgnaHJlZicpO1xyXG4gICAgICAgIHJlc3VsdC5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3RjaGF0LWdyb3VwcycpLmh0bWwocmVzdWx0Lmdyb3Vwcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBwb3B1cElkKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vY29uZmlybSBnbG9iYWxcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnYnV0dG9uW2RhdGEtY29uZmlybT0xXSxhW2RhdGEtY29uZmlybT0xXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSAkKHRoaXMpLmRhdGEoJ21lc3NhZ2UnKTtcclxuICAgICAgICB2YXIgYWpheCA9ICQodGhpcykuZGF0YSgnYWpheCcpO1xyXG4gICAgICAgIGlmICghbWVzc2FnZSkgbWVzc2FnZSA9ICAnRXRlcyB2b3VzIHN1ciBkZSB2b3Vsb2lyIGVmZmVjdHVlciBsYSBzdXBwcmVzc2lvbj8nO1xyXG4gICAgICAgIHZhciB0YXJnZXRfaHRtbCA9ICQodGhpcykuZGF0YSgndGFyZ2V0LWh0bWwnKTtcclxuICAgICAgICB2YXIganMgPSAkKHRoaXMpLmRhdGEoJ2pzJyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IERldkV4cHJlc3MudWkuZGlhbG9nLmNvbmZpcm0oXCI8aT5cIittZXNzYWdlK1wiPC9pPlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnaHJlZicpKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSAkKHRoaXMpLmRhdGEoJ2hyZWYnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHQuZG9uZShmdW5jdGlvbiAoZGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWpheCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAyMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEsIHRleHRTdGF0dXMsIHhocikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmh0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0YXJnZXRfaHRtbCkuaHRtbChkYXRhLmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRhcmdldF9odG1sKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChqcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoanMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuY29udHJhdC1ncm91cGUtZGVsZXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB3aW5kb3cucmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZSA9IERldkV4cHJlc3MudWkuZGlhbG9nLmNvbmZpcm0oXCI8aT7DinRlcyB2b3VzIHN1ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50PzwvaT5cIik7XHJcbiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpO1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cucmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZS5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9jb250cmF0L2dyb3VwZS9cIiArIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiBzdWNjZXNzKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHBhcmVudCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2tleXVwJywgJyNpbnB1dC10Y2hhdC1zZWFyY2gnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHZhciBzZWFyY2ggPSAkKHRoaXMpLnZhbCgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgJCgnLmNoYXQtcGVvcGxlX25hbWUnKS5lYWNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnaGlkZScpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2hpZGUnKS5hZGRDbGFzcygnZC1mbGV4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnI25hdi1sb2dvdXQnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgcG9wdXBzID0gW107XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnaS5kaXNhYmxlZCcsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSlcclxufSk7XHJcblxyXG5cclxuJCgnLm1lc3NhZ2VzJykuZmxhc2hOb3RpZmljYXRpb24oJ2luaXQnKTtcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwic291cmNlUm9vdCI6IiJ9";
        
        $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);

        
        $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);

        return; yield '';
    }

    /**
     * @codeCoverageIgnore
     */
    public function getTemplateName()
    {
        return "@public_path/build/app.js";
    }

    /**
     * @codeCoverageIgnore
     */
    public function getDebugInfo()
    {
        return array ();
    }

    public function getSourceContext()
    {
        return new Source("(self[\"webpackChunk\"] = self[\"webpackChunk\"] || []).push([[\"app\"],{

/***/ \"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\":
/*!*****************************************************************************************************************!*\\
  !*** ./assets/controllers/ sync ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\.(j|t)sx?\$ ***!
  \\*****************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var map = {
\t\"./tchat_controller.js\": \"./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js\"
};


function webpackContext(req) {
\tvar id = webpackContextResolve(req);
\treturn __webpack_require__(id);
}
function webpackContextResolve(req) {
\tif(!__webpack_require__.o(map, req)) {
\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");
\t\te.code = 'MODULE_NOT_FOUND';
\t\tthrow e;
\t}
\treturn map[req];
}
webpackContext.keys = function webpackContextKeys() {
\treturn Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = \"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\";

/***/ }),

/***/ \"./node_modules/@symfony/stimulus-bridge/dist/webpack/loader.js!./assets/controllers.json\":
/*!************************************************************************************************!*\\
  !*** ./node_modules/@symfony/stimulus-bridge/dist/webpack/loader.js!./assets/controllers.json ***!
  \\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
  'symfony--ux-turbo--turbo-core': Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! @symfony/ux-turbo/dist/turbo_controller.js */ \"./node_modules/@symfony/ux-turbo/dist/turbo_controller.js\")),
  'symfony--ux-turbo-mercure--turbo-stream': Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! @symfony/ux-turbo-mercure/dist/turbo_stream_controller.js */ \"./node_modules/@symfony/ux-turbo-mercure/dist/turbo_stream_controller.js\")),
});

/***/ }),

/***/ \"./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js\":
/*!******************************************************************************************************************!*\\
  !*** ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js!./assets/controllers/tchat_controller.js ***!
  \\******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"default\": () => (/* binding */ _default)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ \"./node_modules/core-js/modules/es.parse-int.js\");
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.date.to-string.js */ \"./node_modules/core-js/modules/es.date.to-string.js\");
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.timers.js */ \"./node_modules/core-js/modules/web.timers.js\");
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ \"./node_modules/core-js/modules/es.object.define-property.js\");
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ \"./node_modules/core-js/modules/es.object.set-prototype-of.js\");
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ \"./node_modules/core-js/modules/es.object.get-prototype-of.js\");
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ \"./node_modules/core-js/modules/es.reflect.construct.js\");
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.object.create.js */ \"./node_modules/core-js/modules/es.object.create.js\");
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var stimulus__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! stimulus */ \"./node_modules/stimulus/index.js\");
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }



















function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }

function _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }



var _default = /*#__PURE__*/function (_Controller) {
  _inherits(_default, _Controller);

  var _super = _createSuper(_default);

  function _default() {
    var _this;

    _classCallCheck(this, _default);

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    _this = _super.call.apply(_super, [this].concat(args));

    _defineProperty(_assertThisInitialized(_this), \"total_popups\", 0);

    _defineProperty(_assertThisInitialized(_this), \"removeArray\", function (array, from, to) {
      var rest = array.slice((to || from) + 1 || array.length);
      array.length = from < 0 ? array.length + from : from;
      return array.push.apply(array, rest);
    });

    return _this;
  }

  _createClass(_default, [{
    key: \"initialise\",
    value: function initialise() {
      this.popupsValue = [];
      console.log(\"hello tchat\");
    }
    /** TCHAT **/
    //this function can remove a array element.

  }, {
    key: \"close_popup\",
    value: //this is used to close a popup
    function close_popup(id) {
      for (var iii = 0; iii < this.popupsValue.length; iii++) {
        if (id == this.popupsValue[iii]) {
          this.popupsValue = removeArray(popupe, iii);
          document.getElementById(id).remove();
          this.calculate_popups();
          return;
        }
      }
    } //displays the popups. Displays based on the maximum number of popups that can be displayed on the current viewport width

  }, {
    key: \"display_popups\",
    value: function display_popups() {
      var right = 480;
      var iii = 0;

      for (iii; iii < this.popupsValue; iii++) {
        if (this.popupsValue[iii] != undefined) {
          var element = document.getElementById(this.popupsValue[iii]);
          element.style.right = right + \"px\";
          right = right + 320;
          element.style.display = \"block\";
        }
      }

      for (var jjj = iii; jjj < this.popupsValue.length; jjj++) {
        var element = document.getElementById(this.popupsValue[jjj]);
        element.style.display = \"none\";
      }
    } //creates markup for a new popup. Adds the id to popups array.

  }, {
    key: \"register_popup\",
    value: function register_popup(event) {
      var id = event.currentTarget.dataset.tchatId;
      var class_name = event.currentTarget.dataset.tchatClass;
      var name = event.currentTarget.dataset.tchatName;

      for (var iii = 0; iii < this.popupsValue.length; iii++) {
        //already registered. Bring it to front.
        if (id == this.popupsValue[iii]) {
          this.popupsValue = this.removeArray(this.popupsValue, iii);
          this.popupsValue.unshift(id);
          this.calculate_popups();
          return;
        }
      }

      var element = '<div class=\"chatbox chatbox22 popup-box chat-popup\" id=\"' + id + '\">';
      element = element + '<div class=\"chatbox__title ' + class_name + '\">';
      element = element + '<span class=\"picto\">' + name + '</span><button class=\"chatbox__title__close\" data-id=\"' + id + '\"><span>';
      element = element + '<i class=\"fas fa-times\"></i></span></button></div>';
      element = element + '<div class=\"chatbox__body\"><ul class=\"list-chat-msg\">  <li style=\"width:100%\"> <div class=\"msj-r bg-grey  macro\"><div class=\"text text-l\"><p>J\\'ai trouvé un nouveau client. MAJ ta tournée stp.</p><p class=\"chat-msg-hour\"><small>10:31</small></p></div></div> </li><li style=\"width:100%;\"> <div class=\"msj ' + class_name + ' macro\"><div class=\"text text-r\"><p>ok</p><p class=\"chat-msg-hour\"><small>10:31</small></p></div></div></li></ul></div>';
      element = element + '<div class=\"panel-footer\">';
      element = element + '<div class=\"input-group\"><input id=\"btn-input\" type=\"text\" class=\"form-control input-sm chat-send-msg\" style=\"border:0;border-right:1px solid #ced4da\" tabindex=\"0\" dir=\"ltr\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" contenteditable=\"true\"><span class=\"input-group-btn\"><button class=\"btn bt_bg\" id=\"btn-chat\" style=\"padding-top:6px; padding-bottom:6px\"><i class=\"fa fa-paper-plane-o\" aria-hidden=\"true\"></i></button></span></div></div>';
      document.getElementsByTagName(\"body\")[0].innerHTML = document.getElementsByTagName(\"body\")[0].innerHTML + element;
      this.popupsValue.unshift(id);
      this.calculate_popups();
    } //calculate the total number of popups suitable and then populate the toatal_popups variable.

  }, {
    key: \"calculate_popups\",
    value: function calculate_popups() {
      var width = window.innerWidth;

      if (width < 540) {
        this.total_popups = 0;
      } else {
        width = width - 483; //320 is width of a single popup box

        this.total_popups = parseInt(width / 320);
      }

      this.display_popups();
    } //-- No use time. It is a javaScript effect.

  }, {
    key: \"insertChat\",
    value: function insertChat(text, parent) {
      var control = \"\";
      var date = new Date();
      var dateText = date.getHours() + ':' + date.getMinutes();
      control = '<li style=\"width:100%\">' + '<div class=\"msj-r macro bg-grey\">' + '<div class=\"text text-l\">' + '<p>' + text + '</p>' + '<p><small>' + dateText + '</small></p>' + '</div>' + '</div>' + '</li>';
      setTimeout(function () {
        parent.append(control);
        parent[0].scrollTop = parent[0].scrollHeight;
      }, 0);
      \$('.chatbox__body').scrollTop = parent[0].scrollHeight;
    }
  }]);

  return _default;
}(stimulus__WEBPACK_IMPORTED_MODULE_17__.Controller);

_defineProperty(_default, \"targets\", ['count']);

_defineProperty(_default, \"values\", {
  popups: Array
});



/***/ }),

/***/ \"./assets/app.js\":
/*!***********************!*\\
  !*** ./assets/app.js ***!
  \\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _styles_app_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./styles/app.scss */ \"./assets/styles/app.scss\");
/* harmony import */ var bootstrap_js_src_alert_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bootstrap/js/src/alert.js */ \"./node_modules/bootstrap/js/src/alert.js\");
/* harmony import */ var bootstrap_js_src_collapse_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bootstrap/js/src/collapse.js */ \"./node_modules/bootstrap/js/src/collapse.js\");
/* harmony import */ var bootstrap_js_src_modal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bootstrap/js/src/modal.js */ \"./node_modules/bootstrap/js/src/modal.js\");
/* harmony import */ var bootstrap_js_src_tab_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! bootstrap/js/src/tab.js */ \"./node_modules/bootstrap/js/src/tab.js\");
/* harmony import */ var devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! devextreme/dist/js/dx.all.js */ \"./node_modules/devextreme/dist/js/dx.all.js\");
/* harmony import */ var devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(devextreme_dist_js_dx_all_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _js_main_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./js/main.js */ \"./assets/js/main.js\");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! jquery-ui/ui/widgets/autocomplete.js */ \"./node_modules/jquery-ui/ui/widgets/autocomplete.js\");
/* harmony import */ var jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_widgets_autocomplete_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! jquery-ui/ui/widgets/datepicker.js */ \"./node_modules/jquery-ui/ui/widgets/datepicker.js\");
/* harmony import */ var jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_widgets_datepicker_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! jquery-ui/ui/i18n/datepicker-fr.js */ \"./node_modules/jquery-ui/ui/i18n/datepicker-fr.js\");
/* harmony import */ var jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(jquery_ui_ui_i18n_datepicker_fr_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! jquery-mask-plugin/dist/jquery.mask.min */ \"./node_modules/jquery-mask-plugin/dist/jquery.mask.min.js\");
/* harmony import */ var jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(jquery_mask_plugin_dist_jquery_mask_min__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _js_highlight_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./js/highlight.js */ \"./assets/js/highlight.js\");
/* harmony import */ var _js_doclinks_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./js/doclinks.js */ \"./assets/js/doclinks.js\");
/* harmony import */ var _js_doclinks_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_js_doclinks_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var bootstrap_js_src_dropdown_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! bootstrap/js/src/dropdown.js */ \"./node_modules/bootstrap/js/src/dropdown.js\");
/* harmony import */ var bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle.js */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");
/* harmony import */ var bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(bootstrap_dist_js_bootstrap_bundle_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./bootstrap */ \"./assets/bootstrap.js\");
 // loads the Bootstrap jQuery plugins







 // require jQuery normally

var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"); // create global \$ and jQuery variables


__webpack_require__.g.\$ = __webpack_require__.g.jQuery = \$;



 // loads the code syntax highlighting library

 // Creates links to the Symfony documentation

 // start the Stimulus application







var bootstrap = window.bootstrap = __webpack_require__(/*! bootstrap/dist/js/bootstrap.js */ \"./node_modules/bootstrap/dist/js/bootstrap.js\");

/***/ }),

/***/ \"./assets/bootstrap.js\":
/*!*****************************!*\\
  !*** ./assets/bootstrap.js ***!
  \\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   \"app\": () => (/* binding */ app)
/* harmony export */ });
/* harmony import */ var _symfony_stimulus_bridge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @symfony/stimulus-bridge */ \"./node_modules/@symfony/stimulus-bridge/dist/index.js\");
 // Registers Stimulus controllers from controllers.json and in the controllers/ directory

var app = (0,_symfony_stimulus_bridge__WEBPACK_IMPORTED_MODULE_0__.startStimulusApp)(__webpack_require__(\"./assets/controllers sync recursive ./node_modules/@symfony/stimulus-bridge/lazy-controller-loader.js! \\\\.(j|t)sx?\$\")); // register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

/***/ }),

/***/ \"./assets/js/doclinks.js\":
/*!*******************************!*\\
  !*** ./assets/js/doclinks.js ***!
  \\*******************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

\"use strict\";
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
 // Wraps some elements in anchor tags referencing to the Symfony documentation

__webpack_require__(/*! core-js/modules/es.array.find.js */ \"./node_modules/core-js/modules/es.array.find.js\");

__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");

__webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");

__webpack_require__(/*! core-js/modules/es.string.match.js */ \"./node_modules/core-js/modules/es.string.match.js\");

\$(function () {
  var \$modal = \$('#sourceCodeModal');
  var \$controllerCode = \$modal.find('code.php');
  var \$templateCode = \$modal.find('code.twig');

  function anchor(url, content) {
    return '<a class=\"doclink\" target=\"_blank\" href=\"' + url + '\">' + content + '</a>';
  }

  ; // Wraps links to the Symfony documentation

  \$modal.find('.hljs-comment').each(function () {
    \$(this).html(\$(this).html().replace(/https:\\/\\/symfony.com\\/doc\\/[\\w/.#-]+/g, function (url) {
      return anchor(url, url);
    }));
  }); // Wraps Symfony's annotations

  var annotations = {
    '@Cache': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/cache.html',
    '@IsGranted': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#isgranted',
    '@ParamConverter': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html',
    '@Route': 'https://symfony.com/doc/current/routing.html#creating-routes-as-annotations',
    '@Security': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#security'
  };
  \$controllerCode.find('.hljs-doctag').each(function () {
    var annotation = \$(this).text();

    if (annotations[annotation]) {
      \$(this).html(anchor(annotations[annotation], annotation));
    }
  }); // Wraps Twig's tags

  \$templateCode.find('.hljs-template-tag > .hljs-name').each(function () {
    var tag = \$(this).text();

    if ('else' === tag || tag.match(/^end/)) {
      return;
    }

    var url = 'https://twig.symfony.com/doc/3.x/tags/' + tag + '.html#' + tag;
    \$(this).html(anchor(url, tag));
  }); // Wraps Twig's functions

  \$templateCode.find('.hljs-template-variable > .hljs-name').each(function () {
    var func = \$(this).text();
    var url = 'https://twig.symfony.com/doc/3.x/functions/' + func + '.html#' + func;
    \$(this).html(anchor(url, func));
  });
});

/***/ }),

/***/ \"./assets/js/highlight.js\":
/*!********************************!*\\
  !*** ./assets/js/highlight.js ***!
  \\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! highlight.js/lib/core */ \"./node_modules/highlight.js/lib/core.js\");
/* harmony import */ var highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! highlight.js/lib/languages/php */ \"./node_modules/highlight.js/lib/languages/php.js\");
/* harmony import */ var highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! highlight.js/lib/languages/twig */ \"./node_modules/highlight.js/lib/languages/twig.js\");
/* harmony import */ var highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2__);



highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().registerLanguage('php', (highlight_js_lib_languages_php__WEBPACK_IMPORTED_MODULE_1___default()));
highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().registerLanguage('twig', (highlight_js_lib_languages_twig__WEBPACK_IMPORTED_MODULE_2___default()));
highlight_js_lib_core__WEBPACK_IMPORTED_MODULE_0___default().initHighlightingOnLoad();

/***/ }),

/***/ \"./assets/js/main.js\":
/*!***************************!*\\
  !*** ./assets/js/main.js ***!
  \\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ \"./node_modules/core-js/modules/es.object.assign.js\");
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.array.index-of.js */ \"./node_modules/core-js/modules/es.array.index-of.js\");
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.timers.js */ \"./node_modules/core-js/modules/web.timers.js\");
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ \"./node_modules/core-js/modules/es.string.search.js\");
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/web.url.js */ \"./node_modules/core-js/modules/web.url.js\");
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.array.for-each.js */ \"./node_modules/core-js/modules/es.array.for-each.js\");
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.date.to-string.js */ \"./node_modules/core-js/modules/es.date.to-string.js\");
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ \"./node_modules/core-js/modules/es.array.join.js\");
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_18__);
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! core-js/modules/es.array.every.js */ \"./node_modules/core-js/modules/es.array.every.js\");
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/es.array.find.js */ \"./node_modules/core-js/modules/es.array.find.js\");
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_20__);
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_21__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_22__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_23__);
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ \"./node_modules/core-js/modules/es.parse-int.js\");
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_24__);
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ \"./node_modules/core-js/modules/es.string.includes.js\");
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_25__);
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/es.function.bind.js */ \"./node_modules/core-js/modules/es.function.bind.js\");
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_26__);
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_27__);
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_28__);
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_29__);
/* harmony import */ var devextreme_localization_messages_fr_json__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! devextreme/localization/messages/fr.json */ \"./node_modules/devextreme/localization/messages/fr.json\");
/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/popper.js\");
/* harmony import */ var _hotwired_turbo__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @hotwired/turbo */ \"./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js\");
/* harmony import */ var devextreme_ui_validator__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! devextreme/ui/validator */ \"./node_modules/devextreme/esm/ui/validator.js\");
/* harmony import */ var devextreme_ui_text_box__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! devextreme/ui/text_box */ \"./node_modules/devextreme/esm/ui/text_box.js\");
/* provided dependency */ var \$ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");
function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }


































__webpack_require__.e(/*! import() */ \"vendors-node_modules_bootstrap-select_dist_js_bootstrap-select_js\").then(__webpack_require__.t.bind(__webpack_require__, /*! bootstrap-select/dist/js/bootstrap-select.js */ \"./node_modules/bootstrap-select/dist/js/bootstrap-select.js\", 23));



var common = __webpack_require__(/*! ./common */ \"./assets/js/common.js\");

window.isDataGridRequest = false;
Object.assign(_hotwired_turbo__WEBPACK_IMPORTED_MODULE_30__.PageRenderer.prototype, {
  assignNewBody: function assignNewBody() {
    var containerApp = document.querySelector(\"#app\");
    var containerActions = document.querySelector(\"#bottom_actions\");
    var containerPopups = document.querySelector(\"#popups-list\");
    var containerJavascriptBody = document.querySelector(\"#javascript-body\");
    var newContainerApp = this.newElement.querySelector(\"#app\");
    var newContainerActions = this.newElement.querySelector(\"#bottom_actions\");
    var newContainerPopups = this.newElement.querySelector(\"#popups-list\");
    var newContainerJavascriptBody = this.newElement.querySelector(\"#javascript-body\"); //const newtest = this.newElement.querySelector('dx-header-filter-menu');

    \$(document.body).attr('class', \$(this.newElement).attr('class'));
    \$(document.body).attr('id', \$(this.newElement).attr('id'));

    if (containerActions && newContainerActions) {
      containerActions.replaceWith(newContainerActions);
    }

    if (containerPopups && newContainerPopups) {
      containerPopups.replaceWith(newContainerPopups);
    }

    if (containerJavascriptBody && newContainerJavascriptBody) {
      containerJavascriptBody.replaceWith(newContainerJavascriptBody);
    }

    if (containerApp && newContainerApp) {
      containerApp.replaceWith(newContainerApp);
    } else {
      document.body.replaceWith(this.newElement);
    }
  }
});
DevExpress.localization.locale('fr');
DevExpress.localization.loadMessages(devextreme_localization_messages_fr_json__WEBPACK_IMPORTED_MODULE_33__);

if (navigator.userAgent.indexOf(\"Edg\") !== -1) {
  document.body.classList.add(\"is-edge\");
}

\$('#filter-image').click(function () {
  \$('#filter-container').toggleClass('active');
}); //this variable represents the total number of popups can be displayed according to the viewport width

var total_popups = 0; //arrays of popups ids

var popups = [];
var methods = {
  init: function init(options) {
    methods.settings = \$.extend({}, \$.fn.flashNotification.defaults, options);
    setTimeout(function () {
      \$('.alert').show('slow').delay(methods.settings.hideDelay).hide('slow');
    }, 500);
    methods.listenIncomingMessages();
  },

  /**
   * Listen to AJAX responses and display messages if they contain some
   */
  listenIncomingMessages: function listenIncomingMessages() {
    \$(document).ajaxComplete(function (event, xhr, settings) {
      if (xhr.getResponseHeader(\"Content-Type\") == 'application/json') {
        var data = \$.parseJSON(xhr.responseText);

        if (data.messages) {
          var messages = data.messages;
          var i;

          if (messages.error) {
            for (i = 0; i < messages.error.length; i++) {
              methods.addError(messages.error[i]);
            }
          }

          if (messages.success) {
            for (i = 0; i < messages.success.length; i++) {
              methods.addSuccess(messages.success[i]);
            }
          }

          if (messages.info) {
            for (i = 0; i < messages.info.length; i++) {
              methods.addInfo(messages.info[i]);
            }
          }
        }
      }
    });
  },
  addSuccess: function addSuccess(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-success');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  addError: function addError(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-danger');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  addInfo: function addInfo(message) {
    var flashMessageElt = methods.getBasicFlash(message).addClass('alert-info');
    methods.addToList(flashMessageElt);
    methods.display(flashMessageElt);
  },
  getBasicFlash: function getBasicFlash(message) {
    var flashMessageElt = \$('<div></div>').hide().addClass('toast alert alert-dismissible fade show').css('padding', '0.3rem').css('width', 'auto').attr('role', 'alert').append(\$('<div class=\"toast-body\"></div>').html(message)) //.append(methods.getCloseButton())
    ;
    return flashMessageElt;
  },
  getCloseButton: function getCloseButton() {
    var closeButtonElt = \$('<button></button>').addClass('btn-close').attr('data-bs-dismiss', 'alert') // .html('&times')
    .css('opacity', 1);
    return closeButtonElt;
  },
  addToList: function addToList(flashMessageElt) {
    flashMessageElt.appendTo(\$('.messages'));
  },
  display: function display(flashMessageElt) {
    setTimeout(function () {
      flashMessageElt.show('slow').delay(methods.settings.hideDelay).hide('slow', function () {
        \$(this).remove();
      });
    }, 500);
  }
};
\$(window).scroll(function () {
  if (\$(this).scrollTop() > 200) {
    \$('#scroll').fadeIn();
  } else {
    \$('#scroll').fadeOut();
  }
});
\$('#scroll a').click(function () {
  \$('body,html').animate({
    scrollTop: 0
  }, 300);
  return false;
});

\$.fn.flashNotification = function (method) {
  // Method calling logic
  if (methods[method]) {
    return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
  } else if (_typeof(method) === 'object' || !method) {
    return methods.init.apply(this, arguments);
  } else {
    \$.error('Method ' + method + ' does not exist on jQuery.flashNotification');
  }
};

\$.fn.flashNotification.defaults = {
  'hideDelay': 4500,
  'autoHide': true,
  'animate': true
};
\$(document).on('ready turbo:load', function () {
  setTimeout(function () {
    \$('.alert').delay(methods.settings.hideDelay).hide('slow');
  }, 500); //on masque le column chooser lorsqu'on change de page

  \$('.dx-datagrid-column-chooser').hide(); //gestion des page avec éléments à désactiver

  var queryString = window.location.search;
  var urlParams = new URLSearchParams(queryString);
  var type_affichage = \$('#form_client_update').length != 0 ? \$('#form_client_update').data('affichage') : '';
  type_affichage = \$('#form_agent_update').length != 0 ? \$('#form_agent_update').data('affichage') : type_affichage;

  if (type_affichage != 'edit') {
    \$('[data-disable-on-view]').each(function () {
      if (\$(this)[0].localName == 'i' && \$(this).hasClass('has-info') || \$(this)[0].localName == 'button') {
        /*|| (\$(this).hasClass('my-select-multiple') && \$(this)[0].localName == 'select')) {*/
        \$(this).addClass('disabled');
      } else {
        \$(this).attr('disabled', 'disabled');
      }
    });
  }

  common.resetForm();
  common.loadPicker(); // if (typeof window.calculate_popups !== \"undefined\") {
  //     window.calculate_popups();
  // }
  // if (typeof window.loadSidebarTchat !== \"undefined\") {
  //     window.loadSidebarTchat();
  // }

  var addLink = document.querySelectorAll('a.add_item_link');
  addLink.forEach(function (e) {
    e.addEventListener(\"click\", addFormToCollection);
    if (\$(e).prev('ul').data('index') == 1) e.click();
  });
  var collections = document.querySelectorAll('ul.collection > li');
  collections.forEach(function (e) {
    if (\$(e).next('a.add_item_link').length == 1) {
      addElementFormDeleteLink(e);
    }
  });

  function addFormToCollection(e) {
    var collectionHolder = document.querySelector('#' + e.currentTarget.dataset.collectionHolderId);
    var item = document.createElement('li');
    var class_to_add = document.querySelector('#' + e.currentTarget.dataset[\"class\"]);
    item.innerHTML = \$(collectionHolder.dataset.prototype).html().replace(/__name__/g, collectionHolder.dataset.index);
    item.style.position = 'relative'; //item.classList = 'form-control-sm form-control';

    collectionHolder.appendChild(item);
    collectionHolder.dataset.index++;
    addElementFormDeleteLink(item);
  }

  function addElementFormDeleteLink(element) {
    var removeFormButton = document.createElement('a');
    removeFormButton.classList = 'add_item_link';
    removeFormButton.innerHTML = '<i class=\"fa fa-trash del-icon\" style=\"bottom: 7px;right: 8px;top:inherit;position:absolute\"></i>';
    element.append(removeFormButton);
    removeFormButton.addEventListener('click', function (e) {
      e.preventDefault();
      element.remove();
    });
  }

  window.initDevExtremeGrids = function initDevExtremeGrids(element) {
    window.isDataGridRequest = true;
    var rowClass = \$(element).data('rowclass');
    var tooltipField = \$(element).data('tooltip-field');
    var page = \$(element).data('page');
    var columns = eval(\$(element).data('columns'));
    var patch_path = \$(element).data('patchpath');
    var remoteOperations = \$(element).data('remoteoperations');
    var allowedPageSizes = \$(element).data('allowedpagesizes');
    var key = \$(element).data('key');
    var oneditorpreparing = eval(\$(element).data('oneditorpreparing'));
    var onEditorPreparingChangeItems = \$(element).data('oneditorpreparing_change_items');
    var rowDblClick = \$(element).data('rowdblclick');
    var rang_tri = \$(element).data('rang_tri');
    var column_autowidth = \$(element).data('column_autowidth');
    var source = \$(element).data('source');
    var get_path = \$(element).data('getpath');
    var create_path = \$(element).data('createpath');
    var delete_path = \$(element).data('deletepath');
    var dataSource = common.createCustomStore(page, patch_path, get_path, create_path, delete_path, key);
    var tmpGrid = common.datagrid_obj;
    var editing = \$(element).data('editing');
    var onCellHoverChanged = false;
    var searchPanel = \$(element).data('searchpanel');
    var pagination = \$(element).data('pagination');
    var toolbarInvisible = \$(element).data('toolbarinvisible');
    var disableOnlyEditing = \$(element).data('disable-only-editing');
    var disableOnlyAdding = \$(element).data('disable-only-adding');
    var searchpanelplaceholder = \$(element).data('searchpanelplaceholder');
    var exportAllText = \$(element).data('exportalltext');
    var onRowValidating = \$(element).data('on-row-validation');
    var editOnPreparing = [];
    var defautFiltre = \$(element).data('defautfiltre');
    var defautFiltreUtilisateur = \$(element).data('defautfiltreutilisateur');
    var disableonview = \$(element).data('disableonview');
    var exportFields = \$(element).data('export-fields');
    var gridClass = \$(element).data('gridclass');
    if (defautFiltreUtilisateur) defautFiltre = defautFiltreUtilisateur;
    if (\$(element).data('style') == 'tab') var obj = Object.assign({}, tmpGrid, common.datagridSimple);else var obj = Object.assign({}, tmpGrid, common.datagridFull);

    if (column_autowidth != '') {
      obj.columnAutoWidth = column_autowidth;
    }

    if (gridClass) {
      obj.elementAttr = {
        \"class\": gridClass
      };
    }

    if (exportFields) {
      obj.onExporting = function (e) {
        e.component.beginUpdate(); // e.component.columnOption('nom_client', 'visible', true);
        // e.component.columnOption('adresse_client', 'visible', true);

        exportFields.forEach(function (field) {
          e.component.columnOption(field, 'visible', true);
        });
        e.fileName = \$(e.element).data('exportname');
      };
    }

    if (exportAllText != '' && exportAllText) {
      obj[\"export\"].texts.exportAll = exportAllText;
    }

    if (searchpanelplaceholder != '') {
      obj.searchPanel.placeholder = searchpanelplaceholder;
    } else {
      obj.searchPanel.placeholder = common.defaultPlaceHolder;
    }

    if (\$(element).attr('id') === 'intervention-grid-facturation') {
      obj.onRowInserted = function (e) {
        \$(element).trigger('grid:rowInserted', [e]);
      };

      obj.onRowRemoved = function (e) {
        \$(element).trigger('grid:rowRemoved', [e]);
      };

      obj.onRowUpdated = function (e) {
        \$(element).trigger('grid:rowUpdated', [e]);
      };

      obj.onContentReady = function (e) {
        \$(element).trigger('grid:contentReady', [e]);
      };
    }

    if (columns) {
      columns.forEach(function (e) {
        if (e.lookup) {
          e.lookup.dataSource = eval(e.lookup.dataSource);
        }

        if (e.dataType === \"date\" && e.filterValue && typeof e.filterValue === \"string\") {
          e.filterValue = new Date(e.filterValue); // Conversion correcte
        }

        if (e.editorOptions && e.editorOptions.acceptCustomValue) {
          e.editorOptions.onCustomItemCreating = function (args) {
            var newItem = {};
            newItem.id = args.text;
            newItem.libelle = args.text;
            return newItem;
          };
        }

        if (e.calculateDisplayValue) {
          e.calculateDisplayValue = function (rowData) {
            var filterExpression = [],
                values = rowData[e.dataField],
                result = '';

            if (values != null && values.length > 0) {
              for (var i = 0; i < values.length; i++) {
                if (i > 0) {
                  filterExpression.push('or');
                }

                filterExpression.push(['id', values[i]]);
              }

              result = \$.map(DevExpress.data.query(oneditorpreparing[e.dataField].datas).filter(filterExpression).toArray(), function (item) {
                return item[e.fieldDisplay];
              }).join('<br />');
            }

            return result;
          };
        }

        if (e.dataField == 'pp_photo') {
          e.width = 100, e.cellTemplate = common.cellTemplatePhoto;
        }

        if (e.dataField == 'couleur') {
          e.cellTemplate = common.cellTemplateCouleur;
        }

        if (e.calculateFilterExpression) {
          e.calculateFilterExpression = function (filterValues, selectedFilterOperation) {
            return function (itemData) {
              var array1 = itemData[e.dataField];
              var array2 = filterValues;
              if (array2.length === 0) return true;
              return array1.length === array2.length && array1.every(function (value, index) {
                return value === array2[index];
              });
            };
          };
        }

        if (e.buttons) {
          if (e.buttons[0].visible) {
            eval('var visible = ' + e.buttons[0].visible);
            e.buttons[0].visible = visible;
          }

          if (e.buttons[0].onClick) {
            eval('var onclick = ' + e.buttons[0].onClick);
            e.buttons[0].onClick = onclick;
          }
        }

        if (e.type == 'list') {
          field = e.dataField;
          colCalulated = {
            dataField: field,
            calculateCellValue: function calculateCellValue(data) {
              var value = [];
              var datas = eval('data.' + field);
              datas.forEach(function (element) {
                value.push(element.libelle);
              });
              return value.join(',');
            }
          };
          Object.assign(e, colCalulated);
        }

        if (e.onEditorPrepared) {
          editOnPreparing.push(e.dataField);
          onCellHoverChanged = true;

          e.cellTemplate = function (container, options) {
            \$('<a />').text(e.onEditorPrepared).css('text-decoration', 'underline').appendTo(container);
          };
        }
      });
    }

    if (disableOnlyEditing && disableOnlyEditing.length != 0) {
      obj.onCellPrepared = function (e) {
        var isNewRow = false;

        for (var iCount = 0; iCount < disableOnlyEditing.length; iCount++) {
          if (e.row && e.row.isNewRow) isNewRow = true;

          if (e.column.dataField === disableOnlyEditing[iCount] && !isNewRow) {
            var selectBoxElement = e.cellElement.find('.dx-selectbox');
            e.cellElement.find('input').prop('readonly', true);
            if (e.cellElement.find('.dx-texteditor-buttons-container').length == 1) e.cellElement.find('.dx-texteditor-buttons-container').remove();

            if (selectBoxElement.length > 0) {
              \$(selectBoxElement[0]).dxSelectBox('instance').option('readOnly', true);
            }
          }

          isNewRow = false;
        }

        if (disableOnlyAdding && disableOnlyAdding.length != 0) {
          for (var _iCount = 0; _iCount < disableOnlyAdding.length; _iCount++) {
            if (e.row && e.row.isNewRow) isNewRow = true;

            if (e.column.dataField === disableOnlyAdding[_iCount] && isNewRow) {
              var selectBoxElement = e.cellElement.find('.dx-selectbox');
              e.cellElement.find('input').prop('disabled', true);
              if (e.cellElement.find('.dx-texteditor-buttons-container').length == 1) e.cellElement.find('.dx-texteditor-buttons-container').remove();

              if (selectBoxElement.length > 0) {
                \$(selectBoxElement[0]).dxSelectBox('instance').option('readOnly', true);
              }
            }

            isNewRow = false;
          }
        }

        if (e.rowType === \"data\" && e.column.command === \"edit\") {
          var isEditing = e.row.isEditing,
              \$links = e.cellElement.find(\".dx-link\");
          \$links.text(\"\");

          if (isEditing) {
            \$links.filter(\".dx-link-save\").dxButton({
              icon: \"save\"
            });
            \$links.filter(\".dx-link-cancel\").dxButton({
              icon: \"revert\"
            });
          } else {
            \$links.filter(\".dx-link-edit\").dxButton({
              icon: \"edit\"
            });
            \$links.filter(\".dx-link-delete\").dxButton({
              icon: \"trash\"
            });
          }
        }
      };
    }

    if (onCellHoverChanged) {
      var popup_hover = \$(\"#popup_cell\").dxPopover({
        width: 'auto',
        height: 'auto'
      }).dxPopover(\"instance\");

      obj.onCellPrepared = function (e) {
        if (e.rowType == \"data\" && editOnPreparing.includes(e.column.dataField)) e.cellElement.addClass(\"popover_cell\");
      };

      obj.onCellHoverChanged = function (e) {
        if (e.rowType === \"data\" && editOnPreparing.includes(e.column.dataField) && e.eventType === \"mouseover\") {
          popup_hover.option(\"contentTemplate\", function (contentElement) {
            \$(\"<div/>\").append(e.text).appendTo(contentElement);
          });
          popup_hover.option(\"target\", e.cellElement);
          popup_hover.show();
        }

        if (e.rowType === \"data\" && e.eventType === \"mouseout\") {
          popup_hover.hide();
        }
      };
    }

    if (onRowValidating != \"\") {
      obj.onRowValidating = function (e) {
        if (e.oldData) {
          if (e.newData.actif == false && e.newData.date_fin_application == null && !e.oldData.date_fin_application || e.newData.date_fin_application == null && e.newData.actif == undefined && e.oldData.actif == false) {
            e.isValid = false;
            e.errorText = \"Vous devez saisir une date de fin d'application lorsque le Taux est inactif\";
            var rowIndex = e.component.getRowIndexByKey(e.key);
            var cellElement = e.component.getCellElement(rowIndex, \"date_fin_application\")[0];
            var editorElement = cellElement.getElementsByClassName(\"dx-datebox\");
            \$(editorElement[0]).dxDateBox({
              validationStatus: \"invalid\"
            });
            \$(editorElement[0]).dxDateBox('instance').focus();
          }
        }
      };
    }

    if (rowClass) {
      obj.onRowPrepared = function (e) {
        if (e.rowType === 'data') {
          // Évalue la fonction rowClass qui a été passée en string
          var rowClassFunc = eval('(' + rowClass + ')');
          var cssClass = rowClassFunc(e.data);

          if (cssClass) {
            e.rowElement.addClass(cssClass);

            if (tooltipField && e.data[tooltipField]) {
              e.rowElement.attr('title', e.data[tooltipField]);
            }
          }
        }
      };
    }

    if (oneditorpreparing) {
      obj.onEditorPreparing = function (e) {
        if ((e.parentType === \"dataRow\" || e.parentType === \"filterRow\") && oneditorpreparing[e.dataField]) {
          e.editorName = \"dxTagBox\";
          e.autoExpandGroup = false;
          var storeEditor = common.createCustomStore(oneditorpreparing[e.dataField].getData);
          e.editorOptions.dataSource = storeEditor;
          e.editorOptions.showSelectionControls = true;
          e.editorOptions.displayExpr = oneditorpreparing[e.dataField].field;
          e.editorOptions.valueExpr = \"id\";
          e.editorOptions.value = e.value || [];

          e.editorOptions.onValueChanged = function (args) {
            e.setValue(args.value);
          };

          e.editorOptions.itemTemplate = function (data) {
            return \"<span title='\" + data[oneditorpreparing[e.dataField].field] + \"'>\" + data[oneditorpreparing[e.dataField].field] + \"</span>\";
          };

          e.editorOptions.onInitialized = function (args) {
            var \$tagBox = args.element.dxTagBox(\"instance\");
            var PopupInstance = null;
            \$(e.editorElement).parent().addClass('cursor-pointer'); // Gérer l'événement de clic pour ouvrir le tagBox

            \$(e.editorElement).on(\"dxclick\", function (spanClickArgs) {
              spanClickArgs.stopPropagation();
            }); //Gérer l'événement de clic sur la cellule pour ouvrir le tagBox

            \$(e.editorElement).parent().on(\"dxclick\", function (cellClickArgs) {
              cellClickArgs.stopPropagation();
              if (\$('.dx-selectbox-popup-wrapper ').length == 1) \$tagBox.option('opened', false);else \$tagBox.option('opened', true);
            });
          };
        }
      };
    }

    if (rowDblClick) {
      obj.onRowDblClick = function (e) {
        e.component.selectRows([e.key], false);
        var url = \$('#infos_list').data('showlink').split('/');
        url[url.length - 1] = e.data.id;
        window.open(url.join('/') + '?id_equipement=' + e.data[rowDblClick], \"_blank\");
      };
    }

    if (onEditorPreparingChangeItems) {
      obj.onEditorPreparing = function (e) {
        if (e.row.isNewRow) {
          if (e.parentType === 'dataRow' && e.name == onEditorPreparingChangeItems.name) {
            var codes = [];
            var items = [];

            for (var iCount = 0; iCount < e.component.getVisibleRows().length; iCount++) {
              var row = e.component.getVisibleRows()[iCount];

              if (row.rowType === 'data') {
                codes.push(row.data[onEditorPreparingChangeItems.field]);
              }
            }

            for (var i = 0; i < e.lookup.items.length; i++) {
              if (!codes.includes(e.lookup.items[i][onEditorPreparingChangeItems.field])) {
                items.push(e.lookup.items[i]);
              }
            }

            e.lookup.items = items;
          }

          e.editorOptions.dataSource = items;
        }
      };

      obj.onRowRemoved = function (e) {
        e.component.refresh();
      };
    }

    if (source) {
      obj.dataSource = source;
    } else {
      obj.dataSource = dataSource;
    }

    if (remoteOperations) {
      obj.remoteOperations = remoteOperations;
    }

    if (editing) {
      obj.editing = editing;
      obj.editing.mode = \"row\";
    }

    if (allowedPageSizes) {
      obj.pager.allowedPageSizes = allowedPageSizes;
    }

    if (searchPanel) {
      obj.searchPanel = searchPanel;
    }

    if (pagination) {
      obj.pager = pagination;
    }

    if (toolbarInvisible) {
      obj.onToolbarPreparing = function (e) {
        e.toolbarOptions.visible = false;
      };
    }

    obj.rowDragging.allowReordering = rang_tri;
    obj.columns = columns; //on gère le filtre par défaut si on en a un

    if (defautFiltre) {
      var filtre = JSON.parse(defautFiltre.filtre);
      var colonnes = JSON.parse(defautFiltre.colonnes);
      \$('#mes-filtres').remove();
      obj.filterValue = filtre; //on parse les colonnes pour que afficher celle qui étaient visible lors du filltre

      if (colonnes) {
        obj.columns.forEach(function (value, key) {
          if (colonnes[value.dataField] != undefined) {
            obj.columns[key].visibleIndex = colonnes[value.dataField];
            obj.columns[key].visible = true;
          } else {
            obj.columns[key].visible = false;
          }
        });
      }
    }

    if (disableonview && disableonview != 'edit') {
      obj.editing.allowUpdating = function (e) {
        return false;
      };

      obj.editing.allowDeleting = function (e) {
        return false;
      };
    }

    \$(element).dxDataGrid(obj);
  };

  \$(\".grid\").each(function () {
    window.initDevExtremeGrids(this);
  });

  function onCustomItemCreating(args) {
    var newItem = {};
    newItem.ID = 9999;
    newItem.Name = args.text;
    return newItem;
  } // Fonction pour ouvrir ou fermer le dxTagBox


  function toggleTagBox(tagBox) {
    tagBox.option(\"opened\", !tagBox.option(\"opened\"));
  }

  \$('input.adresse_auto').autocomplete({
    source: function source(request, response) {
      \$.ajax({
        method: \"GET\",
        url: 'https://api-adresse.data.gouv.fr/search/?q=' + request.term + '&type=housenumber&autocomplete=1&limit10&lat&lon',
        dataType: \"json\",
        success: function success(data) {
          response(\$.map(data.features, function (item) {
            var adresses = []; // Ici on est obligé d'ajouter les CP dans un array pour ne pas avoir plusieurs fois le même

            if (\$.inArray(item.properties.label, adresses) == -1 && item.properties.housenumber) {
              adresses.push(item.properties.label);
              return {
                label: item.properties.label,
                city: item.properties.city,
                postcode: item.properties.postcode,
                name: item.properties.name,
                coordinates: item.geometry.coordinates
              };
            }
          }));
        }
      });
    },
    // On remplit aussi la ville
    select: function select(event, ui) {
      var id_site = \$(this).data('idsite');
      var id_equipement = \$(this).data('idequipement');
      var prefix = \$(this).data('prefix');
      var diverror = \$(this).data('diverror');
      var element = \$(this);
      if (id_equipement) id_equipement = '-' + id_equipement;else id_equipement = '';
      \$(\"input[name='\" + prefix + \"_code_postal\" + id_equipement + \"']\").val(ui.item.postcode);
      \$(\"input[name='\" + prefix + \"_ville\" + id_equipement + \"']\").val(ui.item.city);
      \$(\"input[name='\" + prefix + \"_adresse\" + id_equipement + \"']\").val(ui.item.name);
      \$(\"input[name='\" + prefix + \"_coordinates\" + id_equipement + \"']\").val(ui.item.coordinates);

      if (id_site != '') {
        \$.ajax({
          method: \"POST\",
          url: '/secteur/compare/secteur_site/' + id_site,
          dataType: \"json\",
          data: {
            \"coordinates\": ui.item.coordinates
          },
          success: function success(data) {
            if (data.error == true) {
              \$(diverror).show();
              \$(diverror).addClass('alert alert-danger');
              \$(diverror).css('display', 'flex');
              \$(diverror).css('align-items', 'center');
              \$(diverror).html('<i class=\"fa fa-warning\"></i>' + data.message);
            } else {
              \$(diverror).removeClass('alert alert-danger');
              \$(diverror).hide();
            }
          }
        });
      }
    }
  });
});
\$(document).ready(function () {
  var \$typeSelect = \$('.js-user-form-type');
  var \$siteTarget = \$('.js-site-target'); //gestion du lien actif du menu
  // Obtenez l'URL actuelle de la page

  var currentUrl = window.location.href; // Parcourez chaque élément de menu

  \$('#submenu .nav-item').removeClass('active');
  \$('#submenu .nav-item .dropdown-menu .dropdown-item').each(function () {
    var link = \$(this).attr('href'); // Vérifiez si l'URL de la page actuelle correspond à l'URL du lien du menu

    if (currentUrl.indexOf(link) !== -1) {
      // Ajoutez la classe 'active' à l'élément parent du lien
      \$(this).addClass('active');
      \$(this).parent().parent().parent().addClass('active');
    } else {
      \$(this).removeClass('active');
    }
  });
  \$typeSelect.on('change', function (e) {
    \$.ajax({
      url: \$typeSelect.data('specific-type-url'),
      data: {
        type_utilisateur: \$typeSelect.val()
      },
      success: function success(html) {
        if (!html) {
          \$siteTarget.find('select').remove();
          \$siteTarget.addClass('d-none');
          return;
        } // Replace the current field and show


        \$siteTarget.html(html).removeClass('d-none');
      }
    });
  });
  /** TCHAT **/
  //this function can remove a array element.

  Array.remove = function (array, from, to) {
    var rest = array.slice((to || from) + 1 || array.length);
    array.length = from < 0 ? array.length + from : from;
    return array.push.apply(array, rest);
  }; //this is used to close a popup


  window.close_popup = function close_popup(id) {
    for (var iii = 0; iii < popups.length; iii++) {
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        document.getElementById(id).remove();
        calculate_popups();
        return;
      }
    }
  }; //displays the popups. Displays based on the maximum number of popups that can be displayed on the current viewport width


  function display_popups() {
    var right = 400;

    if (\$('.chat-sidebar').css('display') == 'none') {
      right = 0;
    }

    var class_bottom = 'sans-bottom-bar';

    if (\$('.fixed-bottom').length >= 1) {
      class_bottom = 'avec-bottom-bar';
    }

    var iii = 0;

    for (iii; iii < total_popups; iii++) {
      if (popups[iii] != undefined) {
        var element = document.getElementById(popups[iii]);
        element.style.right = right + \"px\";
        \$(element).removeClass('sans-bottom-bar').removeClass('avec-bottom-bar');
        \$(element).addClass(class_bottom);
        right = right + 320;
        element.style.display = \"block\";
      }
    }

    for (var jjj = iii; jjj < popups.length; jjj++) {
      var element = document.getElementById(popups[jjj]);
      element.style.display = \"none\";
    }
  } //creates markup for a new popup. Adds the id to popups array.


  window.register_popup = function register_popup(id, name, class_name) {
    for (var iii = 0; iii < popups.length; iii++) {
      //already registered. Bring it to front.
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        loadPopupTchat(id, name, class_name);
        return;
      }
    }

    loadPopupTchat(id, name, class_name);
  };

  function loadPopupTchat(id, name, class_name) {
    var read = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
    return;
    id = parseInt(id);
    \$.ajax({
      method: \"GET\",
      url: \"/tchat/load\",
      data: {
        'id': id,
        'name': name,
        'class_name': class_name,
        'read': read
      },
      dataType: \"html\",
      success: function success(result) {
        if (\$('#' + id).length == 1) {
          var body = \$(result).children('.chatbox__body').html();
          \$('#' + id).children('.chatbox__body').html(body);
        } else {
          \$('body').append(result);
        }

        \$('#' + id + ' .panel-footer .input-group input').focus();

        if (!popups.includes(id)) {
          popups.unshift(id);
        }

        calculate_popups();
        \$('#' + id + ' > .chatbox__body')[0].scrollTop = \$('#' + id + ' > .chatbox__body')[0].scrollHeight;
        loadSidebarTchat();
      },
      error: function error() {
        alert('erreur lors de lu load popup');
      },
      timeout: 5000
    });
  } // window.loadSidebarTchat = function loadSidebarTchat() {
  //     \$.ajax({
  //         method: \"GET\",
  //         url: \"/tchat/conversations\",
  //         dataType: \"html\",
  //         success: function (result) {
  //             \$('#tchat-groups').html(result);
  //             if (\$('#hidden_tchat_numbers').text() != '0') {
  //                 \$('#number_tchat_global').text(\$('#hidden_tchat_numbers').text());
  //                 //if (\$('.chat-sidebar').css('display') == 'none') {
  //                     \$('#number_tchat_global').show();
  //                     \$('.picto-tchat').addClass('bg-rouge');
  //                // }
  //             } else {
  //                 \$('#number_tchat_global').text('');
  //                 \$('.picto-tchat').removeClass('bg-rouge');
  //                 if (\$('.chat-sidebar').css('display') == 'none') {
  //                     \$('#number_tchat_global').hide();
  //
  //                 }
  //             }
  //         },
  //         error: function () {
  //         },
  //         timeout: 10000
  //     });
  // }
  //calculate the total number of popups suitable and then populate the toatal_popups variable.


  window.calculate_popups = function calculate_popups() {
    var width = window.innerWidth;

    if (width < 540) {
      total_popups = 0;
    } else {
      if (\$('.chat-sidebar').css('display') != 'none') {
        width = width - 483;
      } //320 is width of a single popup box


      total_popups = parseInt(width / 320);
    }

    display_popups();
  }; //-- No use time. It is a javaScript effect.


  function insertChat(text, parent, class_name) {
    var control = \"\";
    var date = new Date();
    var dateText = date.getHours() + ':' + date.getMinutes();
    control = '<li style=\"width:100%;flex-direction: column;\" class=\"d-flex align-items-end\">' + '<div class=\"msj-r macro ' + class_name + '\">' + '<div class=\"text text-l\">' + '<p>' + text + '</p>' + '</div>' + '</div>' + '<div><span class=\"chat-msg-hour\"><span style=\"font-size: 0.68em\">' + dateText + '&nbsp;' + '                               <span style=\"opacity:0.6\">&check;</span>' + '                               <span style=\"opacity:0.6\">&check;</span></span></span></div>' + '</li>';
    parent.append(control);
    var chatbody = \$(parent).parent();
    chatbody.animate({
      scrollTop: chatbody[0].scrollHeight
    }, 750);
  }

  window.handleNewMessage = function handleNewMessage(id, name, class_name) {
    //on test si la popup est ouverture, on la recharge
    for (var iii = 0; iii < popups.length; iii++) {
      //already registered. Bring it to front.
      if (id == popups[iii]) {
        Array.remove(popups, iii);
        \$('#' + id).removeClass('chatbox--tray');
        loadPopupTchat(id, name, class_name);
        return;
      }
    } //sinon on va mettre à jour la sidebartchat
    // loadSidebarTchat();

  }; //recalculate when window is loaded and also when window is resized.


  window.addEventListener(\"resize\", calculate_popups);

  window.sendMessage = function sendMessage(elementText, element) {
    var text = elementText.text();
    var class_name = elementText.data('class-name');

    if (text !== \"\") {
      //call ajax post tchat
      \$.ajax({
        method: \"POST\",
        url: \"/tchat/post\",
        data: {
          'id': element.parents('.chat-popup').attr('id'),
          'message': text
        },
        dataType: \"json\",
        success: function success(e) {
          //on recharge la popup
          loadPopupTchat(parseInt(element.parents('.chat-popup').attr('id')), '', class_name);
        }
      });
      elementText.text('');
    }
  };

  function show(element) {
    var popperInstance = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_34__.createPopper)(this, tooltip); // We need to tell Popper to update the tooltip position
    // after we show the tooltip, otherwise it will be incorrect

    popperInstance.update();
  }

  function hide(element) {} //pour valider les checkbox required (non géré par symphony de base)


  function deRequireCb(elClass) {
    var el = document.getElementsByClassName(elClass);
    var atLeastOneChecked = false; //at least one cb is checked

    for (i = 0; i < el.length; i++) {
      if (el[i].checked === true) {
        atLeastOneChecked = true;
      }
    }

    if (atLeastOneChecked === true) {
      for (var i = 0; i < el.length; i++) {
        el[i].required = false;
      }
    } else {
      for (var i = 0; i < el.length; i++) {
        el[i].required = true;
      }
    }
  }

  window.getHtmlFromAjax = function getHtmlFromAjax(route) {
    //call ajax post tchat
    return new Promise(function (resolve, reject) {
      \$.ajax({
        method: \"GET\",
        url: route,
        dataType: \"html\",
        success: function success(result) {
          resolve(result);
        },
        error: function error(xhr, status, _error) {
          reject(_error);
        }
      });
    });
  };

  \$('body').on('click', '.btn-save', function (e) {
    e.preventDefault();
    var rights = {},
        splitName = [],
        idRight = '',
        site = '',
        value = '';
    \$('#table-rights td input.form-check-input').each(function (e) {
      splitName = \$(this).attr('name').split('-');
      idRight = splitName[3];
      site = splitName[1];
      value = \$(this)[0].checked == true ? 1 : 0;

      if (!rights[site]) {
        rights[site] = {};
      }

      rights[site][idRight] = value;
    });
    rights = JSON.stringify(rights);
  });
  \$('body').on('click', '#submit-save-filter', function (e) {
    e.preventDefault();
    var arrayColumnsVisible = {};
    var titre = \$('#titre_filtre').val();
    var role = \$('#filtre_role').val();
    var defaut = false;
    var defaut_utilisateur = false;
    if (\$('#filtre_par_defaut')[0].checked == true) defaut = true;
    if (\$('#filtre_par_defaut_utilisateur')[0].checked == true) defaut_utilisateur = true; //if (\$('#gridContainer').length == 1) {

    var filtre = \$(\".grid\").dxDataGrid('instance').getCombinedFilter(true); //      console.log(\$('.grid').dxDataGrid('instance').getVisibleColumns());

    \$('.grid').dxDataGrid('instance').getVisibleColumns().forEach(function (e) {
      if (e.type != 'selection') {
        arrayColumnsVisible[e.dataField] = e.visibleIndex;
      }
    });
    common.resetForm(); // } else {
    //     var filtre = \$('#pivotgrid').dxPivotGrid('instance').getDataSource().state();
    // }

    if (filtre || arrayColumnsVisible) {
      \$.ajax({
        url: \"/filters/\" + \$('#infos_list').data('page-filtre'),
        type: \"POST\",
        dataType: \"json\",
        data: {
          'titre': titre,
          'filtres': filtre,
          'colonnes': arrayColumnsVisible,
          'defaut': defaut,
          'defaut_utilisateur': defaut_utilisateur,
          'role': role,
          'site': \$('#filtre_site').val()
        },
        success: function success(result) {
          if (result.status == 0) {
            \$('.alert').html(result.message).show();
          } else {
            popup_save_filter.hide();
          }
        },
        error: function error() {
          console.log('erreur lors de l\\'ajout du filtre');
        }
      });
    } else {
      \$('.alert').html('Vous devez filtrer vos données avant de pouvoir les enregistrer').show();
    }
  }); //page user

  \$('body').on('click', '.remove_user', function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Etes vous sur de vouloir supprimer cette liaison??</i>\", \"Utilisateur\");
    result.done(function (dialogResult) {
      if (dialogResult) {
        var id = \$(this).data('id');
        var parent = \$(this).parent().parent();
        \$.ajax({
          method: \"PATCH\",
          url: \"/\" + \$('#infos_list').data('page-filtre') + \"/\" + id,
          dataType: \"json\",
          data: {
            \"responsable\": null
          },
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            alert('erreur lors de la suppression');
          },
          timeout: 5000
        });
      }

      result = undefined;
    });
  });
  \$('body').on('click', '#add_subordonnee', function (e) {
    \$('#body-add-subordonnee').load('/configuration/utilisateurs/site-sub-select/' + userId, null);
    var popupAddSub = common.createDxPopup(\"popup-add-subordonnee\", \"Ajout d'une personne\", '80%');
    \$('#popup-add-subordonnee').show();
    popupAddSub.show();
    \$('.alert').html('').hide();
  });
  \$('body').on('click', '.btn-close-popupadd, .btn-submit-popupadd', function (e) {
    \$('#popup-add-subordonnee').dxPopup(\"instance\").hide();
  });
  \$('body').on('click', 'button[type=submit]', function (e) {
    e.preventDefault();

    if (this.hasAttribute('form')) {
      var form = '#' + \$(this).attr('form');
    } else {
      var form = e.target.form;
    } //pour les formulaires avec checkbox, on les revalident avant le submit


    if (\$(form).find('.checkbox-required > label > input').length != 0) {
      \$(form).find('.checkbox-required > label > input:first').click().click();
    }

    if (\$(form)[0].reportValidity() != false) {
      \$(form).submit();
    }
  });
  \$('body').on('submit', 'form.form-ajax', common.handleNewFormSubmit.bind(this));
  \$('body').on('click', '[data-dxpopup]', function (e) {
    e.preventDefault();
    var idPopup = \$(this).data('popup-id');
    var width = \$(this).data('popup-width');
    var height = \$(this).data('popup-height');
    var contentTemplateAjax = \$(this).data('content-template-ajax');
    var container = \$(this).data('poppup-container');
    var position_of = \$(this).data('popup-position-of');
    var position_at = \$(this).data('popup-position-at');
    var position_my = \$(this).data('popup-position-my');
    var scrollview = \$(this).data('popup-scrollview');
    var scrollview_height = \$(this).data('scrollview-height');
    var closeOnOutsideClick = \$(this).data('popup-closeoutside');
    var offset = \$(this).data('popup-offset'); //on réinitialise seulement le formulaire de la popup

    \$('#' + idPopup + ' form').each(function () {
      \$(this)[0].reset();
    });
    var popup = common.createDxPopup(idPopup, \$(this).data('popup-title'), width, height);

    if (container) {
      popup.option(\"container\", container);
    }

    if (contentTemplateAjax) {
      // var html = window.getHtmlFromAjax(contentTemplateAjax);
      // popup.option(\"contentTemplate\", html);
      window.getHtmlFromAjax(contentTemplateAjax).then(function (data) {
        popup.option(\"contentTemplate\", data);
      })[\"catch\"](function (error) {
        console.error('Erreur :', error);
      });
    }

    if (position_of) {
      popup.option('position.of', \$(position_of));
    }

    if (offset) {
      popup.option('position.offset', offset);
    }

    if (position_at) {
      popup.option('position.at', position_at);
    }

    if (position_my) {
      popup.option('position.my', position_my);
    }

    if (closeOnOutsideClick === false) {
      popup.option(\"closeOnOutsideClick\", closeOnOutsideClick);
    }

    if (scrollview) {
      popup.option(\"onShown\", function (e) {
        \$(scrollview).dxScrollView({
          scrollByContent: true,
          scrollByThumb: true,
          useNative: true,
          width: '100%',
          height: scrollview_height
        });
        popup.repaint();
      });
    }

    \$('#' + idPopup).show();
    popup.show();
    \$('.alert').html('').hide();
  });
  \$('body').on('click', 'button.btn-close-popup', function (e) {
    e.preventDefault();
    var idPopup = \$(this).data('dxpopup-id');
    \$('#' + idPopup).dxPopup('instance').hide();
  }); //pour les evenements hide/ show sur click

  \$('body').on('change', 'input[data-change-target]', function (e) {
    var target = \$(this).data('change-target');
    \$(target).toggle();
  });
  \$(document).ready(function () {
    common.resetForm();
    \$('button[data-bs-toggle=\"tab\"]').on('show.bs.tab', function (e) {
      localStorage.setItem('activeTab', \$(e.target).attr('id'));
    });
    var activeTab = localStorage.getItem('activeTab');

    if (activeTab) {
      \$('#' + activeTab).tab('show');
    }

    \$('.input_tel:not(.not_fr)').mask('00.00.00.00.00', {
      translation: {
        '0': {
          pattern: /[0-9]/,
          recursive: false
        }
      }
    });
    \$('.input_tel.not_fr').mask('9999999999'); //  window.loadSidebarTchat();
  }); //pour les evenements hide/ show sur click

  \$(document).on('click', '.toggle-click', function (e) {
    e.preventDefault();
    var target = \$(this).data('change-target');
    \$(target).toggle();

    if (target == '.chat-sidebar') {
      window.calculate_popups();
    }
  });
  \$('body').on('click', '.tchat-group-notif', function (e) {
    \$(this).toggleClass('fa-unselected');
    var idgroupe = \$(this).data('idgroupe');
    var idutilisateur = \$(this).data('idutilisateur');
    \$.ajax({
      method: \"PATCH\",
      url: \"/tchat/patch/group_utilisateur/\" + idgroupe + \"/\" + idutilisateur,
      dataType: \"json\",
      error: function error() {
        alert('erreur lors de la mise à jour');
      },
      timeout: 2000
    });
  });
  \$('body').on('click', '.tchat-group-delete', function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Êtes vous sur de vouloir supprimer le membre?</i>\", \"Utilisateur\");
    var idgroupe = \$(this).data('idgroupe');
    var idutilisateur = \$(this).data('idutilisateur');
    var parent = \$(this).parent().parent();
    result.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: \"/tchat/delete/group_utilisateur/\" + idgroupe + \"/\" + idutilisateur,
          dataType: \"json\",
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            alert('erreur lors de la suppression');
          },
          timeout: 2000
        });
      }
    });
  });
  \$('body').on('click input', '.checkbox-required > label > input', function (e) {
    var className = \$(this).data('class-validation');
    deRequireCb(className);
  });
  \$('body').on('mouseenter focus', '.tchat-infos,.collection-info,.popper', function (e) {
    if (\$(this).next().length != 0 || \$(this).parent()[0].localName == 'a') {
      var tooltip = \$(this).next()[0];
      var position = 'top';
      if (\$(this).data('popper-position')) position = \$(this).data('popper-position');
      if (\$(this).parent()[0].localName == 'a') tooltip = \$(this).parent().next()[0];
      tooltip.setAttribute('data-show', '');
      var popperInstance = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_34__.createPopper)(this, tooltip, {
        placement: position
      }); // We need to tell Popper to update the tooltip position
      // after we show the tooltip, otherwise it will be incorrect

      popperInstance.update();
    }
  });
  \$('body').on('mouseleave blur', '.tchat-infos,.collection-info,.popper', function (e) {
    if (\$(this).next().length != 0 || \$(this).parent()[0].localName == 'a') {
      var tooltip = \$(this).next()[0];
      if (\$(this).parent()[0].localName == 'a') tooltip = \$(this).parent().next()[0];
      tooltip.removeAttribute('data-show');
    }
  });
  \$('body').on('click', '.tchat-group-add', function (e) {
    var form = \$('#popup-tchat-groupe-add > .modal-dialog > .modal-content > .modal-body > form')[0];
    form.reset(); //on reset le select picker à la mano

    \$(\"#tchat_groupe_entity_user\").val('default');
    \$(\"#tchat_groupe_entity_user\").selectpicker(\"refresh\");
    var myModal = new bootstrap.Modal(document.getElementById('popup-tchat-groupe-add'));
    myModal.show();
  });
  \$('body').on('click', '.chat-people_first,.chat-people_name', function (e) {
    var parent = \$(this).parent();
    register_popup(\$(parent).data('id'), \$(parent).data('name'), \$(parent).data('class'));
  });
  \$('body').on('click', '.chatbox__title__close', function (e) {
    window.close_popup(\$(this).data('id'));
  });
  \$('body').on('click', '.chatbox__title', function (e) {
    \$(this).parents('.chatbox').toggleClass('chatbox--tray');
  });
  \$('body').on('keyup', \".chat-send-msg\", function (e) {
    e.preventDefault();

    if (e.which == 13) {
      window.sendMessage(\$(this), \$(this));
    }
  });
  \$('body').on('click', \".btn-chat-post\", function (e) {
    window.sendMessage(\$(this).prev('input'), \$(this));
  });
  \$('body').on('click', \".btn-tchat-lu\", function (e) {
    loadPopupTchat(\$(this).data('id'), \$(this).data('name'), \$(this).data('classname'), true);
  });
  \$('body').on('click', \".btn-groupe-delete\", function (e) {
    var result = DevExpress.ui.dialog.confirm(\"<i>Etes vous sur de vouloir supprimer le groupe?</i>\", \"Groupe\");
    var popupId = \$(this).data('dxpopup-id');
    var popup = \$('#' + popupId).dxPopup('instance');
    var url = \$(this).data('href');
    result.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: url,
          dataType: \"json\",
          success: function success(result) {
            \$('#tchat-groups').html(result.groups);
            popup.hide();
            \$('#' + popupId).hide();
          }
        });
      }

      result = undefined;
    });
  }); //confirm global

  \$('body').on('click', 'button[data-confirm=1],a[data-confirm=1]', function (e) {
    var message = \$(this).data('message');
    var ajax = \$(this).data('ajax');
    if (!message) message = 'Etes vous sur de vouloir effectuer la suppression?';
    var target_html = \$(this).data('target-html');
    var js = \$(this).data('js');
    var result = DevExpress.ui.dialog.confirm(\"<i>\" + message + \"</i>\");

    if (\$(this).data('href')) {
      var url = \$(this).data('href');
    } else {
      var url = \$(this).attr('href');
    }

    result.done(function (dialogResult) {
      if (dialogResult) {
        if (url) {
          if (ajax) {
            \$.ajax({
              method: \"GET\",
              url: url,
              timeout: 2000,
              success: function success(data, textStatus, xhr) {
                if (data.html) {
                  \$(target_html).html(data.html);
                  \$(target_html).show();
                }
              }
            });
          } else {
            document.location.href = url;
          }
        }

        if (js) {
          eval(js);
        }
      }

      result = undefined;
    });
    return false;
  });
  \$('body').on('click', '.contrat-groupe-delete', function (e) {
    window.resultContratGroupeDelete = DevExpress.ui.dialog.confirm(\"<i>Êtes vous sur de vouloir supprimer cet élément?</i>\");
    var id = \$(this).data('id');
    var parent = \$(this).parent().parent();
    return window.resultContratGroupeDelete.done(function (dialogResult) {
      if (dialogResult) {
        \$.ajax({
          method: \"DELETE\",
          url: \"/contrat/groupe/\" + id,
          dataType: \"json\",
          success: function success(result) {
            \$(parent).remove();
          },
          error: function error() {
            console.log('erreur lors de la suppression');
          },
          timeout: 2000
        });
      }
    });
  });
  \$('body').on('keyup', '#input-tchat-search', function (e) {
    var search = \$(this).val().toLowerCase();
    \$('.chat-people_name').each(function (e) {
      if (\$(this).text().toLowerCase().indexOf(search) == -1) {
        \$(this).parent().addClass('hide').removeClass('d-flex');
      } else {
        \$(this).parent().removeClass('hide').addClass('d-flex');
      }
    });
  });
  \$('body').on('click', '#nav-logout', function (e) {
    popups = [];
  });
  \$('body').on('click', 'i.disabled', function (e) {
    e.preventDefault();
    return false;
  });
});
\$('.messages').flashNotification('init');

/***/ }),

/***/ \"./assets/styles/app.scss\":
/*!********************************!*\\
  !*** ./assets/styles/app.scss ***!
  \\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

\"use strict\";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ })

},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ \"use strict\";
/******/ 
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ __webpack_require__.O(0, [\"vendors-node_modules_core-js_internals_engine-user-agent_js-node_modules_core-js_internals_ex-b41e05\",\"vendors-node_modules_jquery_dist_jquery_js\",\"vendors-node_modules_core-js_internals_add-to-unscopables_js-node_modules_core-js_internals_a-5c631b\",\"vendors-node_modules_core-js_internals_array-method-has-species-support_js-node_modules_core--4e4faa\",\"vendors-node_modules_core-js_internals_function-bind_js-node_modules_core-js_modules_es_array-1797b9\",\"vendors-node_modules_core-js_modules_es_array_filter_js-node_modules_core-js_modules_es_array-0312b5\",\"vendors-node_modules_devextreme_esm_localization_message_js-node_modules_devextreme_esm_local-2a9609\",\"vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_symfony_ux-turbo-merc-726e46\",\"assets_js_common_js\"], () => (__webpack_exec__(\"./assets/app.js\")));
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ }
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vfC9cXC4oanx0KXN4Iiwid2VicGFjazovLy8uL2Fzc2V0cy9jb250cm9sbGVycy5qc29uIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb250cm9sbGVycy90Y2hhdF9jb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvZG9jbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2hpZ2hsaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2FwcC5zY3NzIl0sIm5hbWVzIjpbImFycmF5IiwiZnJvbSIsInRvIiwicmVzdCIsInNsaWNlIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwicG9wdXBzVmFsdWUiLCJjb25zb2xlIiwibG9nIiwiaWQiLCJpaWkiLCJyZW1vdmVBcnJheSIsInBvcHVwZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmUiLCJjYWxjdWxhdGVfcG9wdXBzIiwicmlnaHQiLCJ1bmRlZmluZWQiLCJlbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwiampqIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiZGF0YXNldCIsInRjaGF0SWQiLCJjbGFzc19uYW1lIiwidGNoYXRDbGFzcyIsIm5hbWUiLCJ0Y2hhdE5hbWUiLCJ1bnNoaWZ0IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJpbm5lckhUTUwiLCJ3aWR0aCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJ0b3RhbF9wb3B1cHMiLCJwYXJzZUludCIsImRpc3BsYXlfcG9wdXBzIiwidGV4dCIsInBhcmVudCIsImNvbnRyb2wiLCJkYXRlIiwiRGF0ZSIsImRhdGVUZXh0IiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwic2V0VGltZW91dCIsImFwcGVuZCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsIiQiLCJDb250cm9sbGVyIiwicG9wdXBzIiwiQXJyYXkiLCJyZXF1aXJlIiwiZ2xvYmFsIiwialF1ZXJ5IiwiYm9vdHN0cmFwIiwiYXBwIiwic3RhcnRTdGltdWx1c0FwcCIsIiRtb2RhbCIsIiRjb250cm9sbGVyQ29kZSIsImZpbmQiLCIkdGVtcGxhdGVDb2RlIiwiYW5jaG9yIiwidXJsIiwiY29udGVudCIsImVhY2giLCJodG1sIiwicmVwbGFjZSIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbiIsInRhZyIsIm1hdGNoIiwiZnVuYyIsImhsanMiLCJwaHAiLCJ0d2lnIiwiY29tbW9uIiwiaXNEYXRhR3JpZFJlcXVlc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlUmVuZGVyZXIiLCJhc3NpZ25OZXdCb2R5IiwiY29udGFpbmVyQXBwIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lckFjdGlvbnMiLCJjb250YWluZXJQb3B1cHMiLCJjb250YWluZXJKYXZhc2NyaXB0Qm9keSIsIm5ld0NvbnRhaW5lckFwcCIsIm5ld0VsZW1lbnQiLCJuZXdDb250YWluZXJBY3Rpb25zIiwibmV3Q29udGFpbmVyUG9wdXBzIiwibmV3Q29udGFpbmVySmF2YXNjcmlwdEJvZHkiLCJib2R5IiwiYXR0ciIsInJlcGxhY2VXaXRoIiwiRGV2RXhwcmVzcyIsImxvY2FsaXphdGlvbiIsImxvY2FsZSIsImxvYWRNZXNzYWdlcyIsImZyTWVzc2FnZXMiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpbmRleE9mIiwiY2xhc3NMaXN0IiwiYWRkIiwiY2xpY2siLCJ0b2dnbGVDbGFzcyIsIm1ldGhvZHMiLCJpbml0Iiwib3B0aW9ucyIsInNldHRpbmdzIiwiZXh0ZW5kIiwiZm4iLCJmbGFzaE5vdGlmaWNhdGlvbiIsImRlZmF1bHRzIiwic2hvdyIsImRlbGF5IiwiaGlkZURlbGF5IiwiaGlkZSIsImxpc3RlbkluY29taW5nTWVzc2FnZXMiLCJhamF4Q29tcGxldGUiLCJ4aHIiLCJnZXRSZXNwb25zZUhlYWRlciIsImRhdGEiLCJwYXJzZUpTT04iLCJyZXNwb25zZVRleHQiLCJtZXNzYWdlcyIsImkiLCJlcnJvciIsImFkZEVycm9yIiwic3VjY2VzcyIsImFkZFN1Y2Nlc3MiLCJpbmZvIiwiYWRkSW5mbyIsIm1lc3NhZ2UiLCJmbGFzaE1lc3NhZ2VFbHQiLCJnZXRCYXNpY0ZsYXNoIiwiYWRkQ2xhc3MiLCJhZGRUb0xpc3QiLCJjc3MiLCJnZXRDbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uRWx0IiwiYXBwZW5kVG8iLCJzY3JvbGwiLCJmYWRlSW4iLCJmYWRlT3V0IiwiYW5pbWF0ZSIsIm1ldGhvZCIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJvbiIsInF1ZXJ5U3RyaW5nIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ0eXBlX2FmZmljaGFnZSIsImxvY2FsTmFtZSIsImhhc0NsYXNzIiwicmVzZXRGb3JtIiwibG9hZFBpY2tlciIsImFkZExpbmsiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkRm9ybVRvQ29sbGVjdGlvbiIsInByZXYiLCJjb2xsZWN0aW9ucyIsIm5leHQiLCJhZGRFbGVtZW50Rm9ybURlbGV0ZUxpbmsiLCJjb2xsZWN0aW9uSG9sZGVyIiwiY29sbGVjdGlvbkhvbGRlcklkIiwiaXRlbSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc190b19hZGQiLCJpbmRleCIsInBvc2l0aW9uIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVGb3JtQnV0dG9uIiwicHJldmVudERlZmF1bHQiLCJpbml0RGV2RXh0cmVtZUdyaWRzIiwicm93Q2xhc3MiLCJ0b29sdGlwRmllbGQiLCJwYWdlIiwiY29sdW1ucyIsImV2YWwiLCJwYXRjaF9wYXRoIiwicmVtb3RlT3BlcmF0aW9ucyIsImFsbG93ZWRQYWdlU2l6ZXMiLCJrZXkiLCJvbmVkaXRvcnByZXBhcmluZyIsIm9uRWRpdG9yUHJlcGFyaW5nQ2hhbmdlSXRlbXMiLCJyb3dEYmxDbGljayIsInJhbmdfdHJpIiwiY29sdW1uX2F1dG93aWR0aCIsInNvdXJjZSIsImdldF9wYXRoIiwiY3JlYXRlX3BhdGgiLCJkZWxldGVfcGF0aCIsImRhdGFTb3VyY2UiLCJjcmVhdGVDdXN0b21TdG9yZSIsInRtcEdyaWQiLCJkYXRhZ3JpZF9vYmoiLCJlZGl0aW5nIiwib25DZWxsSG92ZXJDaGFuZ2VkIiwic2VhcmNoUGFuZWwiLCJwYWdpbmF0aW9uIiwidG9vbGJhckludmlzaWJsZSIsImRpc2FibGVPbmx5RWRpdGluZyIsImRpc2FibGVPbmx5QWRkaW5nIiwic2VhcmNocGFuZWxwbGFjZWhvbGRlciIsImV4cG9ydEFsbFRleHQiLCJvblJvd1ZhbGlkYXRpbmciLCJlZGl0T25QcmVwYXJpbmciLCJkZWZhdXRGaWx0cmUiLCJkZWZhdXRGaWx0cmVVdGlsaXNhdGV1ciIsImRpc2FibGVvbnZpZXciLCJleHBvcnRGaWVsZHMiLCJncmlkQ2xhc3MiLCJvYmoiLCJkYXRhZ3JpZFNpbXBsZSIsImRhdGFncmlkRnVsbCIsImNvbHVtbkF1dG9XaWR0aCIsImVsZW1lbnRBdHRyIiwib25FeHBvcnRpbmciLCJjb21wb25lbnQiLCJiZWdpblVwZGF0ZSIsImZpZWxkIiwiY29sdW1uT3B0aW9uIiwiZmlsZU5hbWUiLCJ0ZXh0cyIsImV4cG9ydEFsbCIsInBsYWNlaG9sZGVyIiwiZGVmYXVsdFBsYWNlSG9sZGVyIiwib25Sb3dJbnNlcnRlZCIsInRyaWdnZXIiLCJvblJvd1JlbW92ZWQiLCJvblJvd1VwZGF0ZWQiLCJvbkNvbnRlbnRSZWFkeSIsImxvb2t1cCIsImRhdGFUeXBlIiwiZmlsdGVyVmFsdWUiLCJlZGl0b3JPcHRpb25zIiwiYWNjZXB0Q3VzdG9tVmFsdWUiLCJvbkN1c3RvbUl0ZW1DcmVhdGluZyIsImFyZ3MiLCJuZXdJdGVtIiwibGliZWxsZSIsImNhbGN1bGF0ZURpc3BsYXlWYWx1ZSIsInJvd0RhdGEiLCJmaWx0ZXJFeHByZXNzaW9uIiwidmFsdWVzIiwiZGF0YUZpZWxkIiwicmVzdWx0IiwibWFwIiwicXVlcnkiLCJkYXRhcyIsImZpbHRlciIsInRvQXJyYXkiLCJmaWVsZERpc3BsYXkiLCJqb2luIiwiY2VsbFRlbXBsYXRlIiwiY2VsbFRlbXBsYXRlUGhvdG8iLCJjZWxsVGVtcGxhdGVDb3VsZXVyIiwiY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbiIsImZpbHRlclZhbHVlcyIsInNlbGVjdGVkRmlsdGVyT3BlcmF0aW9uIiwiaXRlbURhdGEiLCJhcnJheTEiLCJhcnJheTIiLCJldmVyeSIsInZhbHVlIiwiYnV0dG9ucyIsInZpc2libGUiLCJvbkNsaWNrIiwib25jbGljayIsInR5cGUiLCJjb2xDYWx1bGF0ZWQiLCJjYWxjdWxhdGVDZWxsVmFsdWUiLCJvbkVkaXRvclByZXBhcmVkIiwiY29udGFpbmVyIiwib25DZWxsUHJlcGFyZWQiLCJpc05ld1JvdyIsImlDb3VudCIsInJvdyIsImNvbHVtbiIsInNlbGVjdEJveEVsZW1lbnQiLCJjZWxsRWxlbWVudCIsInByb3AiLCJkeFNlbGVjdEJveCIsIm9wdGlvbiIsInJvd1R5cGUiLCJjb21tYW5kIiwiaXNFZGl0aW5nIiwiJGxpbmtzIiwiZHhCdXR0b24iLCJpY29uIiwicG9wdXBfaG92ZXIiLCJkeFBvcG92ZXIiLCJoZWlnaHQiLCJpbmNsdWRlcyIsImV2ZW50VHlwZSIsImNvbnRlbnRFbGVtZW50Iiwib2xkRGF0YSIsIm5ld0RhdGEiLCJhY3RpZiIsImRhdGVfZmluX2FwcGxpY2F0aW9uIiwiaXNWYWxpZCIsImVycm9yVGV4dCIsInJvd0luZGV4IiwiZ2V0Um93SW5kZXhCeUtleSIsImdldENlbGxFbGVtZW50IiwiZWRpdG9yRWxlbWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJkeERhdGVCb3giLCJ2YWxpZGF0aW9uU3RhdHVzIiwiZm9jdXMiLCJvblJvd1ByZXBhcmVkIiwicm93Q2xhc3NGdW5jIiwiY3NzQ2xhc3MiLCJyb3dFbGVtZW50Iiwib25FZGl0b3JQcmVwYXJpbmciLCJwYXJlbnRUeXBlIiwiZWRpdG9yTmFtZSIsImF1dG9FeHBhbmRHcm91cCIsInN0b3JlRWRpdG9yIiwiZ2V0RGF0YSIsInNob3dTZWxlY3Rpb25Db250cm9scyIsImRpc3BsYXlFeHByIiwidmFsdWVFeHByIiwib25WYWx1ZUNoYW5nZWQiLCJzZXRWYWx1ZSIsIml0ZW1UZW1wbGF0ZSIsIm9uSW5pdGlhbGl6ZWQiLCIkdGFnQm94IiwiZHhUYWdCb3giLCJQb3B1cEluc3RhbmNlIiwic3BhbkNsaWNrQXJncyIsInN0b3BQcm9wYWdhdGlvbiIsImNlbGxDbGlja0FyZ3MiLCJvblJvd0RibENsaWNrIiwic2VsZWN0Um93cyIsInNwbGl0Iiwib3BlbiIsImNvZGVzIiwiaXRlbXMiLCJnZXRWaXNpYmxlUm93cyIsInJlZnJlc2giLCJtb2RlIiwicGFnZXIiLCJvblRvb2xiYXJQcmVwYXJpbmciLCJ0b29sYmFyT3B0aW9ucyIsInJvd0RyYWdnaW5nIiwiYWxsb3dSZW9yZGVyaW5nIiwiZmlsdHJlIiwiSlNPTiIsInBhcnNlIiwiY29sb25uZXMiLCJ2aXNpYmxlSW5kZXgiLCJhbGxvd1VwZGF0aW5nIiwiYWxsb3dEZWxldGluZyIsImR4RGF0YUdyaWQiLCJJRCIsIk5hbWUiLCJ0b2dnbGVUYWdCb3giLCJ0YWdCb3giLCJhdXRvY29tcGxldGUiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJhamF4IiwidGVybSIsImZlYXR1cmVzIiwiYWRyZXNzZXMiLCJpbkFycmF5IiwicHJvcGVydGllcyIsImxhYmVsIiwiaG91c2VudW1iZXIiLCJjaXR5IiwicG9zdGNvZGUiLCJjb29yZGluYXRlcyIsImdlb21ldHJ5Iiwic2VsZWN0IiwidWkiLCJpZF9zaXRlIiwiaWRfZXF1aXBlbWVudCIsInByZWZpeCIsImRpdmVycm9yIiwidmFsIiwicmVtb3ZlQ2xhc3MiLCJyZWFkeSIsIiR0eXBlU2VsZWN0IiwiJHNpdGVUYXJnZXQiLCJjdXJyZW50VXJsIiwiaHJlZiIsImxpbmsiLCJ0eXBlX3V0aWxpc2F0ZXVyIiwiY2xvc2VfcG9wdXAiLCJjbGFzc19ib3R0b20iLCJyZWdpc3Rlcl9wb3B1cCIsImxvYWRQb3B1cFRjaGF0IiwicmVhZCIsImNoaWxkcmVuIiwibG9hZFNpZGViYXJUY2hhdCIsImFsZXJ0IiwidGltZW91dCIsImluc2VydENoYXQiLCJjaGF0Ym9keSIsImhhbmRsZU5ld01lc3NhZ2UiLCJzZW5kTWVzc2FnZSIsImVsZW1lbnRUZXh0IiwicGFyZW50cyIsInBvcHBlckluc3RhbmNlIiwiY3JlYXRlUG9wcGVyIiwidG9vbHRpcCIsInVwZGF0ZSIsImRlUmVxdWlyZUNiIiwiZWxDbGFzcyIsImVsIiwiYXRMZWFzdE9uZUNoZWNrZWQiLCJjaGVja2VkIiwicmVxdWlyZWQiLCJnZXRIdG1sRnJvbUFqYXgiLCJyb3V0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3RhdHVzIiwicmlnaHRzIiwic3BsaXROYW1lIiwiaWRSaWdodCIsInNpdGUiLCJzdHJpbmdpZnkiLCJhcnJheUNvbHVtbnNWaXNpYmxlIiwidGl0cmUiLCJyb2xlIiwiZGVmYXV0IiwiZGVmYXV0X3V0aWxpc2F0ZXVyIiwiZ2V0Q29tYmluZWRGaWx0ZXIiLCJnZXRWaXNpYmxlQ29sdW1ucyIsInBvcHVwX3NhdmVfZmlsdGVyIiwiZGlhbG9nIiwiY29uZmlybSIsImRvbmUiLCJkaWFsb2dSZXN1bHQiLCJsb2FkIiwidXNlcklkIiwicG9wdXBBZGRTdWIiLCJjcmVhdGVEeFBvcHVwIiwiZHhQb3B1cCIsImhhc0F0dHJpYnV0ZSIsImZvcm0iLCJ0YXJnZXQiLCJyZXBvcnRWYWxpZGl0eSIsInN1Ym1pdCIsImhhbmRsZU5ld0Zvcm1TdWJtaXQiLCJiaW5kIiwiaWRQb3B1cCIsImNvbnRlbnRUZW1wbGF0ZUFqYXgiLCJwb3NpdGlvbl9vZiIsInBvc2l0aW9uX2F0IiwicG9zaXRpb25fbXkiLCJzY3JvbGx2aWV3Iiwic2Nyb2xsdmlld19oZWlnaHQiLCJjbG9zZU9uT3V0c2lkZUNsaWNrIiwib2Zmc2V0IiwicmVzZXQiLCJwb3B1cCIsInRoZW4iLCJkeFNjcm9sbFZpZXciLCJzY3JvbGxCeUNvbnRlbnQiLCJzY3JvbGxCeVRodW1iIiwidXNlTmF0aXZlIiwicmVwYWludCIsInRvZ2dsZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJhY3RpdmVUYWIiLCJnZXRJdGVtIiwidGFiIiwibWFzayIsInRyYW5zbGF0aW9uIiwicGF0dGVybiIsInJlY3Vyc2l2ZSIsImlkZ3JvdXBlIiwiaWR1dGlsaXNhdGV1ciIsImNsYXNzTmFtZSIsInNldEF0dHJpYnV0ZSIsInBsYWNlbWVudCIsInJlbW92ZUF0dHJpYnV0ZSIsInNlbGVjdHBpY2tlciIsIm15TW9kYWwiLCJNb2RhbCIsIndoaWNoIiwicG9wdXBJZCIsImdyb3VwcyIsInRhcmdldF9odG1sIiwianMiLCJ0ZXh0U3RhdHVzIiwicmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZSIsInRvTG93ZXJDYXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBJOzs7Ozs7Ozs7Ozs7Ozs7QUN0QkEsaUVBQWU7QUFDZixtQ0FBbUMseU1BQStFO0FBQ2xILDZDQUE2Qyx1T0FBOEY7QUFDM0ksQ0FBQyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O21FQUttQixDOztrRUFTRCxVQUFTQSxLQUFULEVBQWdCQyxJQUFoQixFQUFzQkMsRUFBdEIsRUFBMEI7QUFDcEMsVUFBSUMsSUFBSSxHQUFHSCxLQUFLLENBQUNJLEtBQU4sQ0FBWSxDQUFDRixFQUFFLElBQUlELElBQVAsSUFBZSxDQUFmLElBQW9CRCxLQUFLLENBQUNLLE1BQXRDLENBQVg7QUFDQUwsV0FBSyxDQUFDSyxNQUFOLEdBQWVKLElBQUksR0FBRyxDQUFQLEdBQVdELEtBQUssQ0FBQ0ssTUFBTixHQUFlSixJQUExQixHQUFpQ0EsSUFBaEQ7QUFDQSxhQUFPRCxLQUFLLENBQUNNLElBQU4sQ0FBV0MsS0FBWCxDQUFpQlAsS0FBakIsRUFBd0JHLElBQXhCLENBQVA7QUFDSCxLOzs7Ozs7O1dBWEQsc0JBQWE7QUFDVCxXQUFLSyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0RDLGFBQU8sQ0FBQ0MsR0FBUixDQUFZLGFBQVo7QUFDRjtBQUVEO0FBQ0k7Ozs7V0FPSjtBQUNBLHlCQUFZQyxFQUFaLEVBQ0E7QUFDSSxXQUFJLElBQUlDLEdBQUcsR0FBRyxDQUFkLEVBQWlCQSxHQUFHLEdBQUcsS0FBS0osV0FBTCxDQUFpQkgsTUFBeEMsRUFBZ0RPLEdBQUcsRUFBbkQsRUFDQTtBQUNJLFlBQUdELEVBQUUsSUFBSSxLQUFLSCxXQUFMLENBQWlCSSxHQUFqQixDQUFULEVBQ0E7QUFDSSxlQUFLSixXQUFMLEdBQW1CSyxXQUFXLENBQUNDLE1BQUQsRUFBUUYsR0FBUixDQUE5QjtBQUNBRyxrQkFBUSxDQUFDQyxjQUFULENBQXdCTCxFQUF4QixFQUE0Qk0sTUFBNUI7QUFDQSxlQUFLQyxnQkFBTDtBQUVBO0FBQ0g7QUFDSjtBQUNKLEssQ0FFRDs7OztXQUNBLDBCQUNBO0FBQ0ksVUFBSUMsS0FBSyxHQUFHLEdBQVo7QUFFQSxVQUFJUCxHQUFHLEdBQUcsQ0FBVjs7QUFDQSxXQUFJQSxHQUFKLEVBQVNBLEdBQUcsR0FBRyxLQUFLSixXQUFwQixFQUFpQ0ksR0FBRyxFQUFwQyxFQUNBO0FBQ0ksWUFBRyxLQUFLSixXQUFMLENBQWlCSSxHQUFqQixLQUF5QlEsU0FBNUIsRUFDQTtBQUNJLGNBQUlDLE9BQU8sR0FBR04sUUFBUSxDQUFDQyxjQUFULENBQXdCLEtBQUtSLFdBQUwsQ0FBaUJJLEdBQWpCLENBQXhCLENBQWQ7QUFDQVMsaUJBQU8sQ0FBQ0MsS0FBUixDQUFjSCxLQUFkLEdBQXNCQSxLQUFLLEdBQUcsSUFBOUI7QUFDQUEsZUFBSyxHQUFHQSxLQUFLLEdBQUcsR0FBaEI7QUFDQUUsaUJBQU8sQ0FBQ0MsS0FBUixDQUFjQyxPQUFkLEdBQXdCLE9BQXhCO0FBQ0g7QUFDSjs7QUFFRCxXQUFJLElBQUlDLEdBQUcsR0FBR1osR0FBZCxFQUFtQlksR0FBRyxHQUFHLEtBQUtoQixXQUFMLENBQWlCSCxNQUExQyxFQUFrRG1CLEdBQUcsRUFBckQsRUFDQTtBQUNJLFlBQUlILE9BQU8sR0FBR04sUUFBUSxDQUFDQyxjQUFULENBQXdCLEtBQUtSLFdBQUwsQ0FBaUJnQixHQUFqQixDQUF4QixDQUFkO0FBQ0FILGVBQU8sQ0FBQ0MsS0FBUixDQUFjQyxPQUFkLEdBQXdCLE1BQXhCO0FBQ0g7QUFDSixLLENBRUQ7Ozs7V0FDQSx3QkFBZUUsS0FBZixFQUNBO0FBQ0UsVUFBSWQsRUFBRSxHQUFHYyxLQUFLLENBQUNDLGFBQU4sQ0FBb0JDLE9BQXBCLENBQTRCQyxPQUFyQztBQUNBLFVBQUlDLFVBQVUsR0FBSUosS0FBSyxDQUFDQyxhQUFOLENBQW9CQyxPQUFwQixDQUE0QkcsVUFBOUM7QUFDQSxVQUFJQyxJQUFJLEdBQUlOLEtBQUssQ0FBQ0MsYUFBTixDQUFvQkMsT0FBcEIsQ0FBNEJLLFNBQXhDOztBQUVFLFdBQUksSUFBSXBCLEdBQUcsR0FBRyxDQUFkLEVBQWlCQSxHQUFHLEdBQUcsS0FBS0osV0FBTCxDQUFpQkgsTUFBeEMsRUFBZ0RPLEdBQUcsRUFBbkQsRUFDQTtBQUNJO0FBQ0EsWUFBR0QsRUFBRSxJQUFJLEtBQUtILFdBQUwsQ0FBaUJJLEdBQWpCLENBQVQsRUFDQTtBQUNJLGVBQUtKLFdBQUwsR0FBbUIsS0FBS0ssV0FBTCxDQUFpQixLQUFLTCxXQUF0QixFQUFtQ0ksR0FBbkMsQ0FBbkI7QUFDQSxlQUFLSixXQUFMLENBQWlCeUIsT0FBakIsQ0FBeUJ0QixFQUF6QjtBQUNBLGVBQUtPLGdCQUFMO0FBRUE7QUFDSDtBQUNKOztBQUNELFVBQUlHLE9BQU8sR0FBRyw2REFBNERWLEVBQTVELEdBQWdFLElBQTlFO0FBQ0FVLGFBQU8sR0FBR0EsT0FBTyxHQUFJLDZCQUFYLEdBQTBDUSxVQUExQyxHQUFzRCxJQUFoRTtBQUNBUixhQUFPLEdBQUdBLE9BQU8sR0FBRyxzQkFBVixHQUFpQ1UsSUFBakMsR0FBc0Msd0RBQXRDLEdBQWdHcEIsRUFBaEcsR0FBb0csVUFBOUc7QUFDQVUsYUFBTyxHQUFHQSxPQUFPLEdBQUcsb0RBQXBCO0FBQ0FBLGFBQU8sR0FBR0EsT0FBTyxHQUFHLGtUQUFWLEdBQThUUSxVQUE5VCxHQUEwVSx5SEFBcFY7QUFDQVIsYUFBTyxHQUFHQSxPQUFPLEdBQUcsNEJBQXBCO0FBQ0FBLGFBQU8sR0FBR0EsT0FBTyxHQUFHLHlkQUFwQjtBQUVBTixjQUFRLENBQUNtQixvQkFBVCxDQUE4QixNQUE5QixFQUFzQyxDQUF0QyxFQUF5Q0MsU0FBekMsR0FBcURwQixRQUFRLENBQUNtQixvQkFBVCxDQUE4QixNQUE5QixFQUFzQyxDQUF0QyxFQUF5Q0MsU0FBekMsR0FBcURkLE9BQTFHO0FBQ0EsV0FBS2IsV0FBTCxDQUFpQnlCLE9BQWpCLENBQXlCdEIsRUFBekI7QUFDQSxXQUFLTyxnQkFBTDtBQUNILEssQ0FFRDs7OztXQUNBLDRCQUNBO0FBQ0ksVUFBSWtCLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxVQUFuQjs7QUFDQSxVQUFHRixLQUFLLEdBQUcsR0FBWCxFQUNBO0FBQ0ksYUFBS0csWUFBTCxHQUFvQixDQUFwQjtBQUNILE9BSEQsTUFLQTtBQUNJSCxhQUFLLEdBQUdBLEtBQUssR0FBRyxHQUFoQixDQURKLENBRUk7O0FBQ0EsYUFBS0csWUFBTCxHQUFvQkMsUUFBUSxDQUFDSixLQUFLLEdBQUMsR0FBUCxDQUE1QjtBQUNIOztBQUVELFdBQUtLLGNBQUw7QUFFSCxLLENBRUQ7Ozs7V0FDQSxvQkFBV0MsSUFBWCxFQUFpQkMsTUFBakIsRUFBd0I7QUFDcEIsVUFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQSxVQUFJQyxJQUFJLEdBQUksSUFBSUMsSUFBSixFQUFaO0FBQ0EsVUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLFFBQUwsS0FBa0IsR0FBbEIsR0FBd0JILElBQUksQ0FBQ0ksVUFBTCxFQUF2QztBQUVBTCxhQUFPLEdBQUcsNEJBQ04sbUNBRE0sR0FFTiwyQkFGTSxHQUdOLEtBSE0sR0FHQ0YsSUFIRCxHQUdPLE1BSFAsR0FJTixZQUpNLEdBSU9LLFFBSlAsR0FJZ0IsY0FKaEIsR0FLTixRQUxNLEdBTU4sUUFOTSxHQU9OLE9BUEo7QUFRQUcsZ0JBQVUsQ0FDTixZQUFVO0FBQ05QLGNBQU0sQ0FBQ1EsTUFBUCxDQUFjUCxPQUFkO0FBQ0FELGNBQU0sQ0FBQyxDQUFELENBQU4sQ0FBVVMsU0FBVixHQUFzQlQsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVVSxZQUFoQztBQUNILE9BSkssRUFJSCxDQUpHLENBQVY7QUFNQUMsT0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0JGLFNBQXBCLEdBQWdDVCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVVLFlBQTFDO0FBQ0g7Ozs7RUFsSXdCRSxpRDs7cUNBQ1IsQ0FBQyxPQUFELEM7O29DQUNEO0FBQUVDLFFBQU0sRUFBRUM7QUFBVixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0NGcEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNDO0NBR0Q7O0FBQ0EsSUFBTUgsQ0FBQyxHQUFHSSxtQkFBTyxDQUFDLG9EQUFELENBQWpCLEMsQ0FFQTs7O0FBQ0FDLHFCQUFNLENBQUNMLENBQVAsR0FBV0sscUJBQU0sQ0FBQ0MsTUFBUCxHQUFnQk4sQ0FBM0I7QUFFQTtBQUNBO0FBQ0E7Q0FJQTs7Q0FHQTs7Q0FHQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBLElBQU1PLFNBQVMsR0FBR3hCLE1BQU0sQ0FBQ3dCLFNBQVAsR0FBbUJILG1CQUFPLENBQUMscUZBQUQsQ0FBNUMsQzs7Ozs7Ozs7Ozs7Ozs7OztDQ3BDQTs7QUFDTyxJQUFNSSxHQUFHLEdBQUdDLDBFQUFnQixDQUFDTCwwSUFBRCxDQUE1QixDLENBTVA7QUFDQSxnRTs7Ozs7Ozs7Ozs7O0NDUkE7Ozs7Ozs7Ozs7QUFDQUosQ0FBQyxDQUFDLFlBQVc7QUFDVCxNQUFJVSxNQUFNLEdBQUdWLENBQUMsQ0FBQyxrQkFBRCxDQUFkO0FBQ0EsTUFBSVcsZUFBZSxHQUFHRCxNQUFNLENBQUNFLElBQVAsQ0FBWSxVQUFaLENBQXRCO0FBQ0EsTUFBSUMsYUFBYSxHQUFHSCxNQUFNLENBQUNFLElBQVAsQ0FBWSxXQUFaLENBQXBCOztBQUVBLFdBQVNFLE1BQVQsQ0FBZ0JDLEdBQWhCLEVBQXFCQyxPQUFyQixFQUE4QjtBQUMxQixXQUFPLDhDQUE4Q0QsR0FBOUMsR0FBb0QsSUFBcEQsR0FBMkRDLE9BQTNELEdBQXFFLE1BQTVFO0FBQ0g7O0FBQUEsR0FQUSxDQVNUOztBQUNBTixRQUFNLENBQUNFLElBQVAsQ0FBWSxlQUFaLEVBQTZCSyxJQUE3QixDQUFrQyxZQUFXO0FBQ3pDakIsS0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixDQUFhbEIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixHQUFlQyxPQUFmLENBQXVCLHdDQUF2QixFQUFpRSxVQUFTSixHQUFULEVBQWM7QUFDeEYsYUFBT0QsTUFBTSxDQUFDQyxHQUFELEVBQU1BLEdBQU4sQ0FBYjtBQUNILEtBRlksQ0FBYjtBQUdILEdBSkQsRUFWUyxDQWdCVDs7QUFDQSxNQUFJSyxXQUFXLEdBQUc7QUFDZCxjQUFVLDJGQURJO0FBRWQsa0JBQWMsd0dBRkE7QUFHZCx1QkFBbUIsZ0dBSEw7QUFJZCxjQUFVLDZFQUpJO0FBS2QsaUJBQWE7QUFMQyxHQUFsQjtBQVFBVCxpQkFBZSxDQUFDQyxJQUFoQixDQUFxQixjQUFyQixFQUFxQ0ssSUFBckMsQ0FBMEMsWUFBVztBQUNqRCxRQUFJSSxVQUFVLEdBQUdyQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBakI7O0FBRUEsUUFBSWdDLFdBQVcsQ0FBQ0MsVUFBRCxDQUFmLEVBQTZCO0FBQ3pCckIsT0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0IsSUFBUixDQUFhSixNQUFNLENBQUNNLFdBQVcsQ0FBQ0MsVUFBRCxDQUFaLEVBQTBCQSxVQUExQixDQUFuQjtBQUNIO0FBQ0osR0FORCxFQXpCUyxDQWlDVDs7QUFDQVIsZUFBYSxDQUFDRCxJQUFkLENBQW1CLGlDQUFuQixFQUFzREssSUFBdEQsQ0FBMkQsWUFBVztBQUNsRSxRQUFJSyxHQUFHLEdBQUd0QixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBVjs7QUFFQSxRQUFJLFdBQVdrQyxHQUFYLElBQWtCQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxNQUFWLENBQXRCLEVBQXlDO0FBQ3JDO0FBQ0g7O0FBRUQsUUFBSVIsR0FBRyxHQUFHLDJDQUEyQ08sR0FBM0MsR0FBaUQsUUFBakQsR0FBNERBLEdBQXRFO0FBRUF0QixLQUFDLENBQUMsSUFBRCxDQUFELENBQVFrQixJQUFSLENBQWFKLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNTyxHQUFOLENBQW5CO0FBQ0gsR0FWRCxFQWxDUyxDQThDVDs7QUFDQVQsZUFBYSxDQUFDRCxJQUFkLENBQW1CLHNDQUFuQixFQUEyREssSUFBM0QsQ0FBZ0UsWUFBVztBQUN2RSxRQUFJTyxJQUFJLEdBQUd4QixDQUFDLENBQUMsSUFBRCxDQUFELENBQVFaLElBQVIsRUFBWDtBQUVBLFFBQUkyQixHQUFHLEdBQUcsZ0RBQWdEUyxJQUFoRCxHQUF1RCxRQUF2RCxHQUFrRUEsSUFBNUU7QUFFQXhCLEtBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWtCLElBQVIsQ0FBYUosTUFBTSxDQUFDQyxHQUFELEVBQU1TLElBQU4sQ0FBbkI7QUFDSCxHQU5EO0FBT0gsQ0F0REEsQ0FBRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIQTtBQUNBO0FBQ0E7QUFFQUMsNkVBQUEsQ0FBc0IsS0FBdEIsRUFBNkJDLHVFQUE3QjtBQUNBRCw2RUFBQSxDQUFzQixNQUF0QixFQUE4QkUsd0VBQTlCO0FBRUFGLG1GQUFBLEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUEE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUlHLE1BQU0sR0FBR3hCLG1CQUFPLENBQUMsdUNBQUQsQ0FBcEI7O0FBQ0FyQixNQUFNLENBQUM4QyxpQkFBUCxHQUEyQixLQUEzQjtBQUVBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0Msb0VBQWQsRUFBc0M7QUFDbENDLGVBRGtDLDJCQUNsQjtBQUNaLFFBQU1DLFlBQVksR0FBR3pFLFFBQVEsQ0FBQzBFLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBckI7QUFDQSxRQUFNQyxnQkFBZ0IsR0FBRzNFLFFBQVEsQ0FBQzBFLGFBQVQsQ0FBdUIsaUJBQXZCLENBQXpCO0FBQ0EsUUFBTUUsZUFBZSxHQUFHNUUsUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixjQUF2QixDQUF4QjtBQUNBLFFBQU1HLHVCQUF1QixHQUFHN0UsUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixrQkFBdkIsQ0FBaEM7QUFFQSxRQUFNSSxlQUFlLEdBQUcsS0FBS0MsVUFBTCxDQUFnQkwsYUFBaEIsQ0FBOEIsTUFBOUIsQ0FBeEI7QUFDQSxRQUFNTSxtQkFBbUIsR0FBRyxLQUFLRCxVQUFMLENBQWdCTCxhQUFoQixDQUE4QixpQkFBOUIsQ0FBNUI7QUFDQSxRQUFNTyxrQkFBa0IsR0FBRyxLQUFLRixVQUFMLENBQWdCTCxhQUFoQixDQUE4QixjQUE5QixDQUEzQjtBQUNBLFFBQU1RLDBCQUEwQixHQUFHLEtBQUtILFVBQUwsQ0FBZ0JMLGFBQWhCLENBQThCLGtCQUE5QixDQUFuQyxDQVRZLENBVVo7O0FBRUFuQyxLQUFDLENBQUN2QyxRQUFRLENBQUNtRixJQUFWLENBQUQsQ0FBaUJDLElBQWpCLENBQXNCLE9BQXRCLEVBQThCN0MsQ0FBQyxDQUFDLEtBQUt3QyxVQUFOLENBQUQsQ0FBbUJLLElBQW5CLENBQXdCLE9BQXhCLENBQTlCO0FBQ0E3QyxLQUFDLENBQUN2QyxRQUFRLENBQUNtRixJQUFWLENBQUQsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLEVBQTJCN0MsQ0FBQyxDQUFDLEtBQUt3QyxVQUFOLENBQUQsQ0FBbUJLLElBQW5CLENBQXdCLElBQXhCLENBQTNCOztBQUNBLFFBQUlULGdCQUFnQixJQUFJSyxtQkFBeEIsRUFBNkM7QUFDekNMLHNCQUFnQixDQUFDVSxXQUFqQixDQUE2QkwsbUJBQTdCO0FBQ0g7O0FBQ0QsUUFBSUosZUFBZSxJQUFJSyxrQkFBdkIsRUFBMkM7QUFDdkNMLHFCQUFlLENBQUNTLFdBQWhCLENBQTRCSixrQkFBNUI7QUFDSDs7QUFDRCxRQUFJSix1QkFBdUIsSUFBSUssMEJBQS9CLEVBQTJEO0FBQ3ZETCw2QkFBdUIsQ0FBQ1EsV0FBeEIsQ0FBb0NILDBCQUFwQztBQUNIOztBQUNELFFBQUlULFlBQVksSUFBSUssZUFBcEIsRUFBcUM7QUFDakNMLGtCQUFZLENBQUNZLFdBQWIsQ0FBeUJQLGVBQXpCO0FBQ0gsS0FGRCxNQUVPO0FBQ0g5RSxjQUFRLENBQUNtRixJQUFULENBQWNFLFdBQWQsQ0FBMEIsS0FBS04sVUFBL0I7QUFDSDtBQUNKO0FBN0JpQyxDQUF0QztBQWdDQU8sVUFBVSxDQUFDQyxZQUFYLENBQXdCQyxNQUF4QixDQUErQixJQUEvQjtBQUNBRixVQUFVLENBQUNDLFlBQVgsQ0FBd0JFLFlBQXhCLENBQXFDQyxzRUFBckM7O0FBRUEsSUFBSUMsU0FBUyxDQUFDQyxTQUFWLENBQW9CQyxPQUFwQixDQUE0QixLQUE1QixNQUF1QyxDQUFDLENBQTVDLEVBQStDO0FBQzNDN0YsVUFBUSxDQUFDbUYsSUFBVCxDQUFjVyxTQUFkLENBQXdCQyxHQUF4QixDQUE0QixTQUE1QjtBQUNIOztBQUVEeEQsQ0FBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQnlELEtBQW5CLENBQXlCLFlBQVc7QUFDaEN6RCxHQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QjBELFdBQXZCLENBQW1DLFFBQW5DO0FBQ0gsQ0FGRCxFLENBTUE7O0FBQ0EsSUFBSXpFLFlBQVksR0FBRyxDQUFuQixDLENBRUE7O0FBQ0EsSUFBSWlCLE1BQU0sR0FBRyxFQUFiO0FBRUEsSUFBSXlELE9BQU8sR0FBRztBQUNWQyxNQUFJLEVBQUUsY0FBU0MsT0FBVCxFQUFrQjtBQUNwQkYsV0FBTyxDQUFDRyxRQUFSLEdBQW1COUQsQ0FBQyxDQUFDK0QsTUFBRixDQUFTLEVBQVQsRUFBYS9ELENBQUMsQ0FBQ2dFLEVBQUYsQ0FBS0MsaUJBQUwsQ0FBdUJDLFFBQXBDLEVBQThDTCxPQUE5QyxDQUFuQjtBQUNBakUsY0FBVSxDQUNOLFlBQVc7QUFDUEksT0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUNLbUUsSUFETCxDQUNVLE1BRFYsRUFFS0MsS0FGTCxDQUVXVCxPQUFPLENBQUNHLFFBQVIsQ0FBaUJPLFNBRjVCLEVBR0tDLElBSEwsQ0FHVSxNQUhWO0FBS0gsS0FQSyxFQVFOLEdBUk0sQ0FBVjtBQVVBWCxXQUFPLENBQUNZLHNCQUFSO0FBQ0gsR0FkUzs7QUFpQlY7QUFDSjtBQUNBO0FBQ0lBLHdCQUFzQixFQUFFLGtDQUFXO0FBQy9CdkUsS0FBQyxDQUFDdkMsUUFBRCxDQUFELENBQVkrRyxZQUFaLENBQXlCLFVBQVNyRyxLQUFULEVBQWdCc0csR0FBaEIsRUFBcUJYLFFBQXJCLEVBQStCO0FBQ3BELFVBQUlXLEdBQUcsQ0FBQ0MsaUJBQUosQ0FBc0IsY0FBdEIsS0FBeUMsa0JBQTdDLEVBQWlFO0FBQzdELFlBQUlDLElBQUksR0FBRzNFLENBQUMsQ0FBQzRFLFNBQUYsQ0FBWUgsR0FBRyxDQUFDSSxZQUFoQixDQUFYOztBQUNBLFlBQUlGLElBQUksQ0FBQ0csUUFBVCxFQUFtQjtBQUNmLGNBQUlBLFFBQVEsR0FBR0gsSUFBSSxDQUFDRyxRQUFwQjtBQUNBLGNBQUlDLENBQUo7O0FBRUEsY0FBSUQsUUFBUSxDQUFDRSxLQUFiLEVBQW9CO0FBQ2hCLGlCQUFLRCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ0UsS0FBVCxDQUFlakksTUFBL0IsRUFBdUNnSSxDQUFDLEVBQXhDLEVBQTRDO0FBQ3hDcEIscUJBQU8sQ0FBQ3NCLFFBQVIsQ0FBaUJILFFBQVEsQ0FBQ0UsS0FBVCxDQUFlRCxDQUFmLENBQWpCO0FBQ0g7QUFDSjs7QUFFRCxjQUFJRCxRQUFRLENBQUNJLE9BQWIsRUFBc0I7QUFDbEIsaUJBQUtILENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR0QsUUFBUSxDQUFDSSxPQUFULENBQWlCbkksTUFBakMsRUFBeUNnSSxDQUFDLEVBQTFDLEVBQThDO0FBQzFDcEIscUJBQU8sQ0FBQ3dCLFVBQVIsQ0FBbUJMLFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQkgsQ0FBakIsQ0FBbkI7QUFDSDtBQUNKOztBQUVELGNBQUlELFFBQVEsQ0FBQ00sSUFBYixFQUFtQjtBQUNmLGlCQUFLTCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdELFFBQVEsQ0FBQ00sSUFBVCxDQUFjckksTUFBOUIsRUFBc0NnSSxDQUFDLEVBQXZDLEVBQTJDO0FBQ3ZDcEIscUJBQU8sQ0FBQzBCLE9BQVIsQ0FBZ0JQLFFBQVEsQ0FBQ00sSUFBVCxDQUFjTCxDQUFkLENBQWhCO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7QUFDSixLQTFCRDtBQTJCSCxHQWhEUztBQWtEVkksWUFBVSxFQUFFLG9CQUFTRyxPQUFULEVBQWtCO0FBQzFCLFFBQUlDLGVBQWUsR0FBRzVCLE9BQU8sQ0FBQzZCLGFBQVIsQ0FBc0JGLE9BQXRCLEVBQStCRyxRQUEvQixDQUF3QyxlQUF4QyxDQUF0QjtBQUNBOUIsV0FBTyxDQUFDK0IsU0FBUixDQUFrQkgsZUFBbEI7QUFDQTVCLFdBQU8sQ0FBQzFGLE9BQVIsQ0FBZ0JzSCxlQUFoQjtBQUNILEdBdERTO0FBd0RWTixVQUFRLEVBQUUsa0JBQVNLLE9BQVQsRUFBa0I7QUFDeEIsUUFBSUMsZUFBZSxHQUFHNUIsT0FBTyxDQUFDNkIsYUFBUixDQUFzQkYsT0FBdEIsRUFBK0JHLFFBQS9CLENBQXdDLGNBQXhDLENBQXRCO0FBRUE5QixXQUFPLENBQUMrQixTQUFSLENBQWtCSCxlQUFsQjtBQUNBNUIsV0FBTyxDQUFDMUYsT0FBUixDQUFnQnNILGVBQWhCO0FBQ0gsR0E3RFM7QUErRFZGLFNBQU8sRUFBRSxpQkFBU0MsT0FBVCxFQUFrQjtBQUN2QixRQUFJQyxlQUFlLEdBQUc1QixPQUFPLENBQUM2QixhQUFSLENBQXNCRixPQUF0QixFQUErQkcsUUFBL0IsQ0FBd0MsWUFBeEMsQ0FBdEI7QUFFQTlCLFdBQU8sQ0FBQytCLFNBQVIsQ0FBa0JILGVBQWxCO0FBQ0E1QixXQUFPLENBQUMxRixPQUFSLENBQWdCc0gsZUFBaEI7QUFDSCxHQXBFUztBQXNFVkMsZUFBYSxFQUFFLHVCQUFTRixPQUFULEVBQWtCO0FBQzdCLFFBQUlDLGVBQWUsR0FBR3ZGLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FDakJzRSxJQURpQixHQUVqQm1CLFFBRmlCLENBRVIseUNBRlEsRUFHakJFLEdBSGlCLENBR2IsU0FIYSxFQUdILFFBSEcsRUFHT0EsR0FIUCxDQUdXLE9BSFgsRUFHbUIsTUFIbkIsRUFJakI5QyxJQUppQixDQUlaLE1BSlksRUFJSixPQUpJLEVBS2pCaEQsTUFMaUIsQ0FLVkcsQ0FBQyxDQUFDLGdDQUFELENBQUQsQ0FBb0NrQixJQUFwQyxDQUF5Q29FLE9BQXpDLENBTFUsQ0FBdEIsQ0FNSTtBQU5KO0FBU0EsV0FBT0MsZUFBUDtBQUNILEdBakZTO0FBbUZWSyxnQkFBYyxFQUFFLDBCQUFXO0FBQ3ZCLFFBQUlDLGNBQWMsR0FBRzdGLENBQUMsQ0FBQyxtQkFBRCxDQUFELENBQ2hCeUYsUUFEZ0IsQ0FDUCxXQURPLEVBRWhCNUMsSUFGZ0IsQ0FFWCxpQkFGVyxFQUVRLE9BRlIsRUFHbEI7QUFIa0IsS0FJaEI4QyxHQUpnQixDQUlaLFNBSlksRUFJRCxDQUpDLENBQXJCO0FBT0EsV0FBT0UsY0FBUDtBQUNILEdBNUZTO0FBOEZWSCxXQUFTLEVBQUUsbUJBQVNILGVBQVQsRUFBMEI7QUFDakNBLG1CQUFlLENBQUNPLFFBQWhCLENBQXlCOUYsQ0FBQyxDQUFDLFdBQUQsQ0FBMUI7QUFDSCxHQWhHUztBQWtHVi9CLFNBQU8sRUFBRSxpQkFBU3NILGVBQVQsRUFBMEI7QUFDL0IzRixjQUFVLENBQ04sWUFBVztBQUNQMkYscUJBQWUsQ0FDVnBCLElBREwsQ0FDVSxNQURWLEVBRUtDLEtBRkwsQ0FFV1QsT0FBTyxDQUFDRyxRQUFSLENBQWlCTyxTQUY1QixFQUdLQyxJQUhMLENBR1UsTUFIVixFQUdrQixZQUFXO0FBQUV0RSxTQUFDLENBQUMsSUFBRCxDQUFELENBQVFyQyxNQUFSO0FBQW1CLE9BSGxEO0FBS0gsS0FQSyxFQVFOLEdBUk0sQ0FBVjtBQVVIO0FBN0dTLENBQWQ7QUErR0FxQyxDQUFDLENBQUNqQixNQUFELENBQUQsQ0FBVWdILE1BQVYsQ0FBaUIsWUFBVTtBQUN2QixNQUFJL0YsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRRixTQUFSLEtBQXNCLEdBQTFCLEVBQThCO0FBQzFCRSxLQUFDLENBQUMsU0FBRCxDQUFELENBQWFnRyxNQUFiO0FBQ0gsR0FGRCxNQUVLO0FBQ0RoRyxLQUFDLENBQUMsU0FBRCxDQUFELENBQWFpRyxPQUFiO0FBQ0g7QUFDSixDQU5EO0FBT0FqRyxDQUFDLENBQUMsV0FBRCxDQUFELENBQWV5RCxLQUFmLENBQXFCLFlBQVU7QUFDM0J6RCxHQUFDLENBQUMsV0FBRCxDQUFELENBQWVrRyxPQUFmLENBQXVCO0FBQ25CcEcsYUFBUyxFQUFFO0FBRFEsR0FBdkIsRUFFRyxHQUZIO0FBR0EsU0FBTyxLQUFQO0FBQ0gsQ0FMRDs7QUFPQUUsQ0FBQyxDQUFDZ0UsRUFBRixDQUFLQyxpQkFBTCxHQUF5QixVQUFTa0MsTUFBVCxFQUFpQjtBQUN0QztBQUNBLE1BQUl4QyxPQUFPLENBQUN3QyxNQUFELENBQVgsRUFBcUI7QUFDakIsV0FBT3hDLE9BQU8sQ0FBRXdDLE1BQUYsQ0FBUCxDQUFrQmxKLEtBQWxCLENBQXdCLElBQXhCLEVBQThCa0QsS0FBSyxDQUFDaUcsU0FBTixDQUFnQnRKLEtBQWhCLENBQXNCdUosSUFBdEIsQ0FBMkJDLFNBQTNCLEVBQXNDLENBQXRDLENBQTlCLENBQVA7QUFDSCxHQUZELE1BRU8sSUFBSSxRQUFPSCxNQUFQLE1BQWtCLFFBQWxCLElBQThCLENBQUVBLE1BQXBDLEVBQTRDO0FBQy9DLFdBQU94QyxPQUFPLENBQUNDLElBQVIsQ0FBYTNHLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUJxSixTQUF6QixDQUFQO0FBQ0gsR0FGTSxNQUVBO0FBQ0h0RyxLQUFDLENBQUNnRixLQUFGLENBQVEsWUFBYW1CLE1BQWIsR0FBc0IsNkNBQTlCO0FBQ0g7QUFDSixDQVREOztBQVdBbkcsQ0FBQyxDQUFDZ0UsRUFBRixDQUFLQyxpQkFBTCxDQUF1QkMsUUFBdkIsR0FBa0M7QUFDOUIsZUFBc0IsSUFEUTtBQUU5QixjQUFzQixJQUZRO0FBRzlCLGFBQXNCO0FBSFEsQ0FBbEM7QUFNQ2xFLENBQUMsQ0FBQ3ZDLFFBQUQsQ0FBRCxDQUFZOEksRUFBWixDQUFlLGtCQUFmLEVBQW1DLFlBQVc7QUFDMUMzRyxZQUFVLENBQ04sWUFBVztBQUNQSSxLQUFDLENBQUMsUUFBRCxDQUFELENBQ0tvRSxLQURMLENBQ1dULE9BQU8sQ0FBQ0csUUFBUixDQUFpQk8sU0FENUIsRUFFS0MsSUFGTCxDQUVVLE1BRlY7QUFJSCxHQU5LLEVBT04sR0FQTSxDQUFWLENBRDBDLENBVzFDOztBQUNBdEUsR0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUNzRSxJQUFqQyxHQVowQyxDQWMxQzs7QUFDQSxNQUFNa0MsV0FBVyxHQUFHekgsTUFBTSxDQUFDMEgsUUFBUCxDQUFnQkMsTUFBcEM7QUFDQSxNQUFNQyxTQUFTLEdBQUcsSUFBSUMsZUFBSixDQUFvQkosV0FBcEIsQ0FBbEI7QUFDQSxNQUFJSyxjQUFjLEdBQUk3RyxDQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QmpELE1BQXpCLElBQW1DLENBQXBDLEdBQXlDaUQsQ0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUIyRSxJQUF6QixDQUE4QixXQUE5QixDQUF6QyxHQUFzRixFQUEzRztBQUNBa0MsZ0JBQWMsR0FBSTdHLENBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCakQsTUFBeEIsSUFBa0MsQ0FBbkMsR0FBd0NpRCxDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QjJFLElBQXhCLENBQTZCLFdBQTdCLENBQXhDLEdBQW9Ga0MsY0FBckc7O0FBQ0EsTUFBSUEsY0FBYyxJQUFJLE1BQXRCLEVBQThCO0FBQzFCN0csS0FBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJpQixJQUE1QixDQUFpQyxZQUFXO0FBQ3pDLFVBQUtqQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXOEcsU0FBWCxJQUF3QixHQUF4QixJQUErQjlHLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUStHLFFBQVIsQ0FBaUIsVUFBakIsQ0FBaEMsSUFBaUUvRyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXOEcsU0FBWCxJQUF3QixRQUE3RixFQUFzRztBQUFFO0FBQ3BHOUcsU0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFReUYsUUFBUixDQUFpQixVQUFqQjtBQUVILE9BSEQsTUFHTztBQUNIekYsU0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRNkMsSUFBUixDQUFhLFVBQWIsRUFBeUIsVUFBekI7QUFDSDtBQUVILEtBUkQ7QUFTSDs7QUFFRGpCLFFBQU0sQ0FBQ29GLFNBQVA7QUFDQXBGLFFBQU0sQ0FBQ3FGLFVBQVAsR0FoQzBDLENBaUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHekosUUFBUSxDQUFDMEosZ0JBQVQsQ0FBMEIsaUJBQTFCLENBQWhCO0FBQ0FELFNBQU8sQ0FBQ0UsT0FBUixDQUFnQixVQUFVQyxDQUFWLEVBQWE7QUFDekJBLEtBQUMsQ0FBQ0MsZ0JBQUYsQ0FBbUIsT0FBbkIsRUFBNEJDLG1CQUE1QjtBQUNBLFFBQUl2SCxDQUFDLENBQUNxSCxDQUFELENBQUQsQ0FBS0csSUFBTCxDQUFVLElBQVYsRUFBZ0I3QyxJQUFoQixDQUFxQixPQUFyQixLQUFpQyxDQUFyQyxFQUF3QzBDLENBQUMsQ0FBQzVELEtBQUY7QUFDM0MsR0FIRDtBQUtBLE1BQU1nRSxXQUFXLEdBQUdoSyxRQUFRLENBQUMwSixnQkFBVCxDQUEwQixvQkFBMUIsQ0FBcEI7QUFDQU0sYUFBVyxDQUFDTCxPQUFaLENBQW9CLFVBQVVDLENBQVYsRUFBYTtBQUM3QixRQUFJckgsQ0FBQyxDQUFDcUgsQ0FBRCxDQUFELENBQUtLLElBQUwsQ0FBVSxpQkFBVixFQUE2QjNLLE1BQTdCLElBQXVDLENBQTNDLEVBQThDO0FBQzFDNEssOEJBQXdCLENBQUNOLENBQUQsQ0FBeEI7QUFDSDtBQUNKLEdBSkQ7O0FBTUEsV0FBU0UsbUJBQVQsQ0FBNkJGLENBQTdCLEVBQWdDO0FBQzVCLFFBQU1PLGdCQUFnQixHQUFHbkssUUFBUSxDQUFDMEUsYUFBVCxDQUF1QixNQUFNa0YsQ0FBQyxDQUFDakosYUFBRixDQUFnQkMsT0FBaEIsQ0FBd0J3SixrQkFBckQsQ0FBekI7QUFDQSxRQUFNQyxJQUFJLEdBQUdySyxRQUFRLENBQUNzSyxhQUFULENBQXVCLElBQXZCLENBQWI7QUFDQSxRQUFNQyxZQUFZLEdBQUd2SyxRQUFRLENBQUMwRSxhQUFULENBQXVCLE1BQU1rRixDQUFDLENBQUNqSixhQUFGLENBQWdCQyxPQUFoQixTQUE3QixDQUFyQjtBQUNBeUosUUFBSSxDQUFDakosU0FBTCxHQUFpQm1CLENBQUMsQ0FBQzRILGdCQUFnQixDQUFDdkosT0FBakIsQ0FBeUIrSCxTQUExQixDQUFELENBQXNDbEYsSUFBdEMsR0FBNkNDLE9BQTdDLENBQ2IsV0FEYSxFQUVieUcsZ0JBQWdCLENBQUN2SixPQUFqQixDQUF5QjRKLEtBRlosQ0FBakI7QUFJQUgsUUFBSSxDQUFDOUosS0FBTCxDQUFXa0ssUUFBWCxHQUFzQixVQUF0QixDQVI0QixDQVM1Qjs7QUFFQU4sb0JBQWdCLENBQUNPLFdBQWpCLENBQTZCTCxJQUE3QjtBQUNBRixvQkFBZ0IsQ0FBQ3ZKLE9BQWpCLENBQXlCNEosS0FBekI7QUFDQU4sNEJBQXdCLENBQUNHLElBQUQsQ0FBeEI7QUFDSDs7QUFFRCxXQUFTSCx3QkFBVCxDQUFrQzVKLE9BQWxDLEVBQTJDO0FBQ3ZDLFFBQU1xSyxnQkFBZ0IsR0FBRzNLLFFBQVEsQ0FBQ3NLLGFBQVQsQ0FBdUIsR0FBdkIsQ0FBekI7QUFDQUssb0JBQWdCLENBQUM3RSxTQUFqQixHQUE2QixlQUE3QjtBQUNBNkUsb0JBQWdCLENBQUN2SixTQUFqQixHQUE2QixtR0FBN0I7QUFFQWQsV0FBTyxDQUFDOEIsTUFBUixDQUFldUksZ0JBQWY7QUFFQUEsb0JBQWdCLENBQUNkLGdCQUFqQixDQUFrQyxPQUFsQyxFQUEyQyxVQUFVRCxDQUFWLEVBQWE7QUFDcERBLE9BQUMsQ0FBQ2dCLGNBQUY7QUFDQXRLLGFBQU8sQ0FBQ0osTUFBUjtBQUNILEtBSEQ7QUFJSDs7QUFDRG9CLFFBQU0sQ0FBQ3VKLG1CQUFQLEdBQTZCLFNBQVNBLG1CQUFULENBQTZCdkssT0FBN0IsRUFBc0M7QUFDL0RnQixVQUFNLENBQUM4QyxpQkFBUCxHQUEyQixJQUEzQjtBQUNBLFFBQUkwRyxRQUFRLEdBQUd2SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsVUFBaEIsQ0FBZjtBQUNBLFFBQUk2RCxZQUFZLEdBQUd4SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsZUFBaEIsQ0FBbkI7QUFDQSxRQUFJOEQsSUFBSSxHQUFHekksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLE1BQWhCLENBQVg7QUFDQSxRQUFJK0QsT0FBTyxHQUFHQyxJQUFJLENBQUMzSSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsU0FBaEIsQ0FBRCxDQUFsQjtBQUNBLFFBQUlpRSxVQUFVLEdBQUc1SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsV0FBaEIsQ0FBakI7QUFDQSxRQUFJa0UsZ0JBQWdCLEdBQUc3SSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSW1FLGdCQUFnQixHQUFHOUksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGtCQUFoQixDQUF2QjtBQUNBLFFBQUlvRSxHQUFHLEdBQUcvSSxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsS0FBaEIsQ0FBVjtBQUNBLFFBQUlxRSxpQkFBaUIsR0FBR0wsSUFBSSxDQUFDM0ksQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLG1CQUFoQixDQUFELENBQTVCO0FBQ0EsUUFBSXNFLDRCQUE0QixHQUFHakosQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGdDQUFoQixDQUFuQztBQUNBLFFBQUl1RSxXQUFXLEdBQUdsSixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsYUFBaEIsQ0FBbEI7QUFDQSxRQUFJd0UsUUFBUSxHQUFHbkosQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLFVBQWhCLENBQWY7QUFDQSxRQUFJeUUsZ0JBQWdCLEdBQUdwSixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSTBFLE1BQU0sR0FBR3JKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixRQUFoQixDQUFiO0FBQ0EsUUFBSTJFLFFBQVEsR0FBR3RKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixTQUFoQixDQUFmO0FBQ0EsUUFBSTRFLFdBQVcsR0FBR3ZKLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixZQUFoQixDQUFsQjtBQUNBLFFBQUk2RSxXQUFXLEdBQUd4SixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsWUFBaEIsQ0FBbEI7QUFDQSxRQUFJOEUsVUFBVSxHQUFHN0gsTUFBTSxDQUFDOEgsaUJBQVAsQ0FBeUJqQixJQUF6QixFQUErQkcsVUFBL0IsRUFBMkNVLFFBQTNDLEVBQXFEQyxXQUFyRCxFQUFrRUMsV0FBbEUsRUFBK0VULEdBQS9FLENBQWpCO0FBQ0EsUUFBSVksT0FBTyxHQUFHL0gsTUFBTSxDQUFDZ0ksWUFBckI7QUFDQSxRQUFJQyxPQUFPLEdBQUc3SixDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsU0FBaEIsQ0FBZDtBQUNBLFFBQUltRixrQkFBa0IsR0FBRyxLQUF6QjtBQUNBLFFBQUlDLFdBQVcsR0FBRy9KLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixhQUFoQixDQUFsQjtBQUNBLFFBQUlxRixVQUFVLEdBQUdoSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsWUFBaEIsQ0FBakI7QUFDQSxRQUFJc0YsZ0JBQWdCLEdBQUdqSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isa0JBQWhCLENBQXZCO0FBQ0EsUUFBSXVGLGtCQUFrQixHQUFHbEssQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLHNCQUFoQixDQUF6QjtBQUNBLFFBQUl3RixpQkFBaUIsR0FBR25LLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixxQkFBaEIsQ0FBeEI7QUFDQSxRQUFJeUYsc0JBQXNCLEdBQUdwSyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0Isd0JBQWhCLENBQTdCO0FBQ0EsUUFBSTBGLGFBQWEsR0FBR3JLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixlQUFoQixDQUFwQjtBQUNBLFFBQUkyRixlQUFlLEdBQUd0SyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsbUJBQWhCLENBQXRCO0FBQ0EsUUFBSTRGLGVBQWUsR0FBRyxFQUF0QjtBQUNBLFFBQUlDLFlBQVksR0FBR3hLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixjQUFoQixDQUFuQjtBQUNBLFFBQUk4Rix1QkFBdUIsR0FBR3pLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQix5QkFBaEIsQ0FBOUI7QUFDQSxRQUFJK0YsYUFBYSxHQUFHMUssQ0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc0RyxJQUFYLENBQWdCLGVBQWhCLENBQXBCO0FBQ0EsUUFBSWdHLFlBQVksR0FBRzNLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixlQUFoQixDQUFuQjtBQUNBLFFBQUlpRyxTQUFTLEdBQUc1SyxDQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzRHLElBQVgsQ0FBZ0IsV0FBaEIsQ0FBaEI7QUFFQSxRQUFJOEYsdUJBQUosRUFBNkJELFlBQVksR0FBR0MsdUJBQWY7QUFFN0IsUUFBSXpLLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNEcsSUFBWCxDQUFnQixPQUFoQixLQUE0QixLQUFoQyxFQUNJLElBQUlrRyxHQUFHLEdBQUcvSSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCNEgsT0FBbEIsRUFBMkIvSCxNQUFNLENBQUNrSixjQUFsQyxDQUFWLENBREosS0FHSSxJQUFJRCxHQUFHLEdBQUcvSSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCNEgsT0FBbEIsRUFBMkIvSCxNQUFNLENBQUNtSixZQUFsQyxDQUFWOztBQUVKLFFBQUkzQixnQkFBZ0IsSUFBSSxFQUF4QixFQUE0QjtBQUN4QnlCLFNBQUcsQ0FBQ0csZUFBSixHQUFzQjVCLGdCQUF0QjtBQUNIOztBQUNELFFBQUl3QixTQUFKLEVBQWM7QUFDVkMsU0FBRyxDQUFDSSxXQUFKLEdBQWtCO0FBQUUsaUJBQU9MO0FBQVQsT0FBbEI7QUFDSDs7QUFFRCxRQUFJRCxZQUFKLEVBQWtCO0FBQ2RFLFNBQUcsQ0FBQ0ssV0FBSixHQUFrQixVQUFTN0QsQ0FBVCxFQUFZO0FBQzFCQSxTQUFDLENBQUM4RCxTQUFGLENBQVlDLFdBQVosR0FEMEIsQ0FFMUI7QUFDQTs7QUFDQVQsb0JBQVksQ0FBQ3ZELE9BQWIsQ0FBcUIsVUFBU2lFLEtBQVQsRUFBZ0I7QUFDakNoRSxXQUFDLENBQUM4RCxTQUFGLENBQVlHLFlBQVosQ0FBeUJELEtBQXpCLEVBQWdDLFNBQWhDLEVBQTJDLElBQTNDO0FBQ0gsU0FGRDtBQUdBaEUsU0FBQyxDQUFDa0UsUUFBRixHQUFhdkwsQ0FBQyxDQUFDcUgsQ0FBQyxDQUFDdEosT0FBSCxDQUFELENBQWE0RyxJQUFiLENBQWtCLFlBQWxCLENBQWI7QUFDSCxPQVJEO0FBU0g7O0FBQ0QsUUFBSTBGLGFBQWEsSUFBSSxFQUFqQixJQUF1QkEsYUFBM0IsRUFBMEM7QUFDdENRLFNBQUcsVUFBSCxDQUFXVyxLQUFYLENBQWlCQyxTQUFqQixHQUE2QnBCLGFBQTdCO0FBQ0g7O0FBQ0QsUUFBSUQsc0JBQXNCLElBQUksRUFBOUIsRUFBa0M7QUFDOUJTLFNBQUcsQ0FBQ2QsV0FBSixDQUFnQjJCLFdBQWhCLEdBQThCdEIsc0JBQTlCO0FBQ0gsS0FGRCxNQUVPO0FBQ0hTLFNBQUcsQ0FBQ2QsV0FBSixDQUFnQjJCLFdBQWhCLEdBQThCOUosTUFBTSxDQUFDK0osa0JBQXJDO0FBQ0g7O0FBQ0QsUUFBSTNMLENBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOEUsSUFBWCxDQUFnQixJQUFoQixNQUEwQiwrQkFBOUIsRUFBK0Q7QUFDM0RnSSxTQUFHLENBQUNlLGFBQUosR0FBb0IsVUFBU3ZFLENBQVQsRUFBWTtBQUM1QnJILFNBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOE4sT0FBWCxDQUFtQixrQkFBbkIsRUFBdUMsQ0FBQ3hFLENBQUQsQ0FBdkM7QUFDSCxPQUZEOztBQUlBd0QsU0FBRyxDQUFDaUIsWUFBSixHQUFtQixVQUFTekUsQ0FBVCxFQUFZO0FBQzNCckgsU0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVc4TixPQUFYLENBQW1CLGlCQUFuQixFQUFzQyxDQUFDeEUsQ0FBRCxDQUF0QztBQUNILE9BRkQ7O0FBSUF3RCxTQUFHLENBQUNrQixZQUFKLEdBQW1CLFVBQVMxRSxDQUFULEVBQVk7QUFDM0JySCxTQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzhOLE9BQVgsQ0FBbUIsaUJBQW5CLEVBQXNDLENBQUN4RSxDQUFELENBQXRDO0FBQ0gsT0FGRDs7QUFJQXdELFNBQUcsQ0FBQ21CLGNBQUosR0FBcUIsVUFBUzNFLENBQVQsRUFBWTtBQUM3QnJILFNBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXOE4sT0FBWCxDQUFtQixtQkFBbkIsRUFBd0MsQ0FBQ3hFLENBQUQsQ0FBeEM7QUFDSCxPQUZEO0FBR0g7O0FBR0QsUUFBSXFCLE9BQUosRUFBYTtBQUNUQSxhQUFPLENBQUN0QixPQUFSLENBQWdCLFVBQVVDLENBQVYsRUFBYTtBQUN6QixZQUFJQSxDQUFDLENBQUM0RSxNQUFOLEVBQWM7QUFDVjVFLFdBQUMsQ0FBQzRFLE1BQUYsQ0FBU3hDLFVBQVQsR0FBc0JkLElBQUksQ0FBQ3RCLENBQUMsQ0FBQzRFLE1BQUYsQ0FBU3hDLFVBQVYsQ0FBMUI7QUFDSDs7QUFDRCxZQUFJcEMsQ0FBQyxDQUFDNkUsUUFBRixLQUFlLE1BQWYsSUFBeUI3RSxDQUFDLENBQUM4RSxXQUEzQixJQUEwQyxPQUFPOUUsQ0FBQyxDQUFDOEUsV0FBVCxLQUF5QixRQUF2RSxFQUFpRjtBQUM3RTlFLFdBQUMsQ0FBQzhFLFdBQUYsR0FBZ0IsSUFBSTNNLElBQUosQ0FBUzZILENBQUMsQ0FBQzhFLFdBQVgsQ0FBaEIsQ0FENkUsQ0FDcEM7QUFDNUM7O0FBRUQsWUFBSTlFLENBQUMsQ0FBQytFLGFBQUYsSUFBbUIvRSxDQUFDLENBQUMrRSxhQUFGLENBQWdCQyxpQkFBdkMsRUFBMEQ7QUFDdERoRixXQUFDLENBQUMrRSxhQUFGLENBQWdCRSxvQkFBaEIsR0FBdUMsVUFBVUMsSUFBVixFQUFnQjtBQUNuRCxnQkFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQUEsbUJBQU8sQ0FBQ25QLEVBQVIsR0FBYWtQLElBQUksQ0FBQ25OLElBQWxCO0FBQ0FvTixtQkFBTyxDQUFDQyxPQUFSLEdBQWtCRixJQUFJLENBQUNuTixJQUF2QjtBQUNBLG1CQUFPb04sT0FBUDtBQUNILFdBTEQ7QUFNSDs7QUFFRCxZQUFJbkYsQ0FBQyxDQUFDcUYscUJBQU4sRUFBNkI7QUFDekJyRixXQUFDLENBQUNxRixxQkFBRixHQUEwQixVQUFVQyxPQUFWLEVBQW1CO0FBQ3pDLGdCQUFJQyxnQkFBZ0IsR0FBRyxFQUF2QjtBQUFBLGdCQUNJQyxNQUFNLEdBQUdGLE9BQU8sQ0FBQ3RGLENBQUMsQ0FBQ3lGLFNBQUgsQ0FEcEI7QUFBQSxnQkFFSUMsTUFBTSxHQUFHLEVBRmI7O0FBR0EsZ0JBQUlGLE1BQU0sSUFBSSxJQUFWLElBQWtCQSxNQUFNLENBQUM5UCxNQUFQLEdBQWdCLENBQXRDLEVBQXlDO0FBQ3JDLG1CQUFLLElBQUlnSSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHOEgsTUFBTSxDQUFDOVAsTUFBM0IsRUFBbUNnSSxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLG9CQUFJQSxDQUFDLEdBQUcsQ0FBUixFQUFXO0FBQ1A2SCxrQ0FBZ0IsQ0FBQzVQLElBQWpCLENBQXNCLElBQXRCO0FBQ0g7O0FBQ0Q0UCxnQ0FBZ0IsQ0FBQzVQLElBQWpCLENBQXNCLENBQUMsSUFBRCxFQUFPNlAsTUFBTSxDQUFDOUgsQ0FBRCxDQUFiLENBQXRCO0FBQ0g7O0FBQ0RnSSxvQkFBTSxHQUFHL00sQ0FBQyxDQUFDZ04sR0FBRixDQUFNakssVUFBVSxDQUFDNEIsSUFBWCxDQUFnQnNJLEtBQWhCLENBQXNCakUsaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCSSxLQUFyRCxFQUE0REMsTUFBNUQsQ0FBbUVQLGdCQUFuRSxFQUFxRlEsT0FBckYsRUFBTixFQUFzRyxVQUFVdEYsSUFBVixFQUFnQjtBQUMzSCx1QkFBT0EsSUFBSSxDQUFDVCxDQUFDLENBQUNnRyxZQUFILENBQVg7QUFDSCxlQUZRLEVBRU5DLElBRk0sQ0FFRCxRQUZDLENBQVQ7QUFHSDs7QUFFRCxtQkFBT1AsTUFBUDtBQUNILFdBakJEO0FBa0JIOztBQUNELFlBQUkxRixDQUFDLENBQUN5RixTQUFGLElBQWUsVUFBbkIsRUFBK0I7QUFDM0J6RixXQUFDLENBQUN2SSxLQUFGLEdBQVUsR0FBVixFQUNJdUksQ0FBQyxDQUFDa0csWUFBRixHQUFpQjNMLE1BQU0sQ0FBQzRMLGlCQUQ1QjtBQUVIOztBQUNELFlBQUluRyxDQUFDLENBQUN5RixTQUFGLElBQWUsU0FBbkIsRUFBOEI7QUFDMUJ6RixXQUFDLENBQUNrRyxZQUFGLEdBQWlCM0wsTUFBTSxDQUFDNkwsbUJBQXhCO0FBQ0g7O0FBQ0QsWUFBSXBHLENBQUMsQ0FBQ3FHLHlCQUFOLEVBQWlDO0FBQzdCckcsV0FBQyxDQUFDcUcseUJBQUYsR0FBOEIsVUFBVUMsWUFBVixFQUF3QkMsdUJBQXhCLEVBQWlEO0FBQzNFLG1CQUFPLFVBQVVDLFFBQVYsRUFBb0I7QUFDdkIsa0JBQUlDLE1BQU0sR0FBR0QsUUFBUSxDQUFDeEcsQ0FBQyxDQUFDeUYsU0FBSCxDQUFyQjtBQUNBLGtCQUFJaUIsTUFBTSxHQUFHSixZQUFiO0FBRUEsa0JBQUlJLE1BQU0sQ0FBQ2hSLE1BQVAsS0FBa0IsQ0FBdEIsRUFDSSxPQUFPLElBQVA7QUFFSixxQkFBTytRLE1BQU0sQ0FBQy9RLE1BQVAsS0FBa0JnUixNQUFNLENBQUNoUixNQUF6QixJQUFtQytRLE1BQU0sQ0FBQ0UsS0FBUCxDQUFhLFVBQVVDLEtBQVYsRUFBaUJoRyxLQUFqQixFQUF3QjtBQUMzRSx1QkFBT2dHLEtBQUssS0FBS0YsTUFBTSxDQUFDOUYsS0FBRCxDQUF2QjtBQUNILGVBRnlDLENBQTFDO0FBR0gsYUFWRDtBQVdILFdBWkQ7QUFhSDs7QUFFRCxZQUFJWixDQUFDLENBQUM2RyxPQUFOLEVBQWU7QUFDWCxjQUFJN0csQ0FBQyxDQUFDNkcsT0FBRixDQUFVLENBQVYsRUFBYUMsT0FBakIsRUFBMEI7QUFDdEJ4RixnQkFBSSxDQUFDLG1CQUFtQnRCLENBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFDLE9BQWpDLENBQUo7QUFDQTlHLGFBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFDLE9BQWIsR0FBdUJBLE9BQXZCO0FBQ0g7O0FBQ0QsY0FBSTlHLENBQUMsQ0FBQzZHLE9BQUYsQ0FBVSxDQUFWLEVBQWFFLE9BQWpCLEVBQTBCO0FBQ3RCekYsZ0JBQUksQ0FBQyxtQkFBbUJ0QixDQUFDLENBQUM2RyxPQUFGLENBQVUsQ0FBVixFQUFhRSxPQUFqQyxDQUFKO0FBQ0EvRyxhQUFDLENBQUM2RyxPQUFGLENBQVUsQ0FBVixFQUFhRSxPQUFiLEdBQXVCQyxPQUF2QjtBQUNIO0FBQ0o7O0FBRUQsWUFBSWhILENBQUMsQ0FBQ2lILElBQUYsSUFBVSxNQUFkLEVBQXNCO0FBQ2xCakQsZUFBSyxHQUFHaEUsQ0FBQyxDQUFDeUYsU0FBVjtBQUNBeUIsc0JBQVksR0FBRztBQUNYekIscUJBQVMsRUFBRXpCLEtBREE7QUFFWG1ELDhCQUFrQixFQUFFLDRCQUFVN0osSUFBVixFQUFnQjtBQUNoQyxrQkFBSXNKLEtBQUssR0FBRyxFQUFaO0FBQ0Esa0JBQUlmLEtBQUssR0FBR3ZFLElBQUksQ0FBQyxVQUFVMEMsS0FBWCxDQUFoQjtBQUNBNkIsbUJBQUssQ0FBQzlGLE9BQU4sQ0FBYyxVQUFVckosT0FBVixFQUFtQjtBQUM3QmtRLHFCQUFLLENBQUNqUixJQUFOLENBQVdlLE9BQU8sQ0FBQzBPLE9BQW5CO0FBQ0gsZUFGRDtBQUdBLHFCQUFPd0IsS0FBSyxDQUFDWCxJQUFOLENBQVcsR0FBWCxDQUFQO0FBQ0g7QUFUVSxXQUFmO0FBV0F4TCxnQkFBTSxDQUFDQyxNQUFQLENBQWNzRixDQUFkLEVBQWlCa0gsWUFBakI7QUFDSDs7QUFDRCxZQUFJbEgsQ0FBQyxDQUFDb0gsZ0JBQU4sRUFBd0I7QUFDcEJsRSx5QkFBZSxDQUFDdk4sSUFBaEIsQ0FBcUJxSyxDQUFDLENBQUN5RixTQUF2QjtBQUNBaEQsNEJBQWtCLEdBQUcsSUFBckI7O0FBQ0F6QyxXQUFDLENBQUNrRyxZQUFGLEdBQWlCLFVBQVVtQixTQUFWLEVBQXFCN0ssT0FBckIsRUFBOEI7QUFDM0M3RCxhQUFDLENBQUMsT0FBRCxDQUFELENBQVdaLElBQVgsQ0FBZ0JpSSxDQUFDLENBQUNvSCxnQkFBbEIsRUFBb0M5SSxHQUFwQyxDQUF3QyxpQkFBeEMsRUFBMkQsV0FBM0QsRUFBd0VHLFFBQXhFLENBQWlGNEksU0FBakY7QUFDSCxXQUZEO0FBR0g7QUFDSixPQTdGRDtBQThGSDs7QUFFRCxRQUFJeEUsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDbk4sTUFBbkIsSUFBNkIsQ0FBdkQsRUFBMEQ7QUFDdEQ4TixTQUFHLENBQUM4RCxjQUFKLEdBQXFCLFVBQVV0SCxDQUFWLEVBQWE7QUFDOUIsWUFBSXVILFFBQVEsR0FBRyxLQUFmOztBQUNBLGFBQUssSUFBSUMsTUFBTSxHQUFHLENBQWxCLEVBQXFCQSxNQUFNLEdBQUczRSxrQkFBa0IsQ0FBQ25OLE1BQWpELEVBQXlEOFIsTUFBTSxFQUEvRCxFQUFtRTtBQUMvRCxjQUFJeEgsQ0FBQyxDQUFDeUgsR0FBRixJQUFTekgsQ0FBQyxDQUFDeUgsR0FBRixDQUFNRixRQUFuQixFQUE2QkEsUUFBUSxHQUFHLElBQVg7O0FBQzdCLGNBQUl2SCxDQUFDLENBQUMwSCxNQUFGLENBQVNqQyxTQUFULEtBQXVCNUMsa0JBQWtCLENBQUMyRSxNQUFELENBQXpDLElBQXFELENBQUNELFFBQTFELEVBQW9FO0FBQ2hFLGdCQUFJSSxnQkFBZ0IsR0FBSTNILENBQUMsQ0FBQzRILFdBQUYsQ0FBY3JPLElBQWQsQ0FBbUIsZUFBbkIsQ0FBeEI7QUFDQXlHLGFBQUMsQ0FBQzRILFdBQUYsQ0FBY3JPLElBQWQsQ0FBbUIsT0FBbkIsRUFBNEJzTyxJQUE1QixDQUFpQyxVQUFqQyxFQUE2QyxJQUE3QztBQUNBLGdCQUFJN0gsQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixrQ0FBbkIsRUFBdUQ3RCxNQUF2RCxJQUFpRSxDQUFyRSxFQUNJc0ssQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixrQ0FBbkIsRUFBdURqRCxNQUF2RDs7QUFDSixnQkFBSXFSLGdCQUFnQixDQUFDalMsTUFBakIsR0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0JpRCxlQUFDLENBQUNnUCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpCLENBQUQsQ0FBdUJHLFdBQXZCLENBQW1DLFVBQW5DLEVBQStDQyxNQUEvQyxDQUFzRCxVQUF0RCxFQUFrRSxJQUFsRTtBQUNIO0FBQ0o7O0FBQ0RSLGtCQUFRLEdBQUcsS0FBWDtBQUNIOztBQUNELFlBQUl6RSxpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNwTixNQUFsQixJQUE0QixDQUFyRCxFQUF3RDtBQUNwRCxlQUFLLElBQUk4UixPQUFNLEdBQUcsQ0FBbEIsRUFBcUJBLE9BQU0sR0FBRzFFLGlCQUFpQixDQUFDcE4sTUFBaEQsRUFBd0Q4UixPQUFNLEVBQTlELEVBQWtFO0FBQzlELGdCQUFJeEgsQ0FBQyxDQUFDeUgsR0FBRixJQUFTekgsQ0FBQyxDQUFDeUgsR0FBRixDQUFNRixRQUFuQixFQUE2QkEsUUFBUSxHQUFHLElBQVg7O0FBQzdCLGdCQUFJdkgsQ0FBQyxDQUFDMEgsTUFBRixDQUFTakMsU0FBVCxLQUF1QjNDLGlCQUFpQixDQUFDMEUsT0FBRCxDQUF4QyxJQUFvREQsUUFBeEQsRUFBa0U7QUFDOUQsa0JBQUlJLGdCQUFnQixHQUFJM0gsQ0FBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixlQUFuQixDQUF4QjtBQUNBeUcsZUFBQyxDQUFDNEgsV0FBRixDQUFjck8sSUFBZCxDQUFtQixPQUFuQixFQUE0QnNPLElBQTVCLENBQWlDLFVBQWpDLEVBQTZDLElBQTdDO0FBQ0Esa0JBQUk3SCxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLGtDQUFuQixFQUF1RDdELE1BQXZELElBQWlFLENBQXJFLEVBQ0lzSyxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLGtDQUFuQixFQUF1RGpELE1BQXZEOztBQUNKLGtCQUFJcVIsZ0JBQWdCLENBQUNqUyxNQUFqQixHQUEwQixDQUE5QixFQUFpQztBQUM3QmlELGlCQUFDLENBQUNnUCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpCLENBQUQsQ0FBdUJHLFdBQXZCLENBQW1DLFVBQW5DLEVBQStDQyxNQUEvQyxDQUFzRCxVQUF0RCxFQUFrRSxJQUFsRTtBQUNIO0FBQ0o7O0FBQ0RSLG9CQUFRLEdBQUcsS0FBWDtBQUNIO0FBQ0o7O0FBQ0QsWUFBSXZILENBQUMsQ0FBQ2dJLE9BQUYsS0FBYyxNQUFkLElBQXdCaEksQ0FBQyxDQUFDMEgsTUFBRixDQUFTTyxPQUFULEtBQXFCLE1BQWpELEVBQXlEO0FBQ3JELGNBQUlDLFNBQVMsR0FBR2xJLENBQUMsQ0FBQ3lILEdBQUYsQ0FBTVMsU0FBdEI7QUFBQSxjQUNJQyxNQUFNLEdBQUduSSxDQUFDLENBQUM0SCxXQUFGLENBQWNyTyxJQUFkLENBQW1CLFVBQW5CLENBRGI7QUFHQTRPLGdCQUFNLENBQUNwUSxJQUFQLENBQVksRUFBWjs7QUFFQSxjQUFJbVEsU0FBSixFQUFlO0FBQ1hDLGtCQUFNLENBQUNyQyxNQUFQLENBQWMsZUFBZCxFQUErQnNDLFFBQS9CLENBQXdDO0FBQ3BDQyxrQkFBSSxFQUFFO0FBRDhCLGFBQXhDO0FBR0FGLGtCQUFNLENBQUNyQyxNQUFQLENBQWMsaUJBQWQsRUFBaUNzQyxRQUFqQyxDQUEwQztBQUN0Q0Msa0JBQUksRUFBRTtBQURnQyxhQUExQztBQUdILFdBUEQsTUFPTztBQUNIRixrQkFBTSxDQUFDckMsTUFBUCxDQUFjLGVBQWQsRUFBK0JzQyxRQUEvQixDQUF3QztBQUNwQ0Msa0JBQUksRUFBRTtBQUQ4QixhQUF4QztBQUlBRixrQkFBTSxDQUFDckMsTUFBUCxDQUFjLGlCQUFkLEVBQWlDc0MsUUFBakMsQ0FBMEM7QUFDdENDLGtCQUFJLEVBQUU7QUFEZ0MsYUFBMUM7QUFHSDtBQUNKO0FBQ0osT0FyREQ7QUFzREg7O0FBRUQsUUFBSTVGLGtCQUFKLEVBQXdCO0FBQ3BCLFVBQUk2RixXQUFXLEdBQUczUCxDQUFDLENBQUMsYUFBRCxDQUFELENBQWlCNFAsU0FBakIsQ0FBMkI7QUFDekM5USxhQUFLLEVBQUUsTUFEa0M7QUFFekMrUSxjQUFNLEVBQUU7QUFGaUMsT0FBM0IsRUFHZkQsU0FIZSxDQUdMLFVBSEssQ0FBbEI7O0FBS0EvRSxTQUFHLENBQUM4RCxjQUFKLEdBQXFCLFVBQVV0SCxDQUFWLEVBQWE7QUFDOUIsWUFBSUEsQ0FBQyxDQUFDZ0ksT0FBRixJQUFhLE1BQWIsSUFBdUI5RSxlQUFlLENBQUN1RixRQUFoQixDQUF5QnpJLENBQUMsQ0FBQzBILE1BQUYsQ0FBU2pDLFNBQWxDLENBQTNCLEVBQ0l6RixDQUFDLENBQUM0SCxXQUFGLENBQWN4SixRQUFkLENBQXVCLGNBQXZCO0FBQ1AsT0FIRDs7QUFJQW9GLFNBQUcsQ0FBQ2Ysa0JBQUosR0FBeUIsVUFBVXpDLENBQVYsRUFBYTtBQUNsQyxZQUFJQSxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBZCxJQUF3QjlFLGVBQWUsQ0FBQ3VGLFFBQWhCLENBQXlCekksQ0FBQyxDQUFDMEgsTUFBRixDQUFTakMsU0FBbEMsQ0FBeEIsSUFBd0V6RixDQUFDLENBQUMwSSxTQUFGLEtBQWdCLFdBQTVGLEVBQXlHO0FBQ3JHSixxQkFBVyxDQUFDUCxNQUFaLENBQW1CLGlCQUFuQixFQUNJLFVBQVVZLGNBQVYsRUFBMEI7QUFDdEJoUSxhQUFDLENBQUMsUUFBRCxDQUFELENBQ0tILE1BREwsQ0FDWXdILENBQUMsQ0FBQ2pJLElBRGQsRUFFSzBHLFFBRkwsQ0FFY2tLLGNBRmQ7QUFHSCxXQUxMO0FBTUFMLHFCQUFXLENBQUNQLE1BQVosQ0FBbUIsUUFBbkIsRUFBNkIvSCxDQUFDLENBQUM0SCxXQUEvQjtBQUNBVSxxQkFBVyxDQUFDeEwsSUFBWjtBQUVIOztBQUNELFlBQUlrRCxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBZCxJQUF3QmhJLENBQUMsQ0FBQzBJLFNBQUYsS0FBZ0IsVUFBNUMsRUFBd0Q7QUFDcERKLHFCQUFXLENBQUNyTCxJQUFaO0FBQ0g7QUFDSixPQWZEO0FBZ0JIOztBQUNELFFBQUlnRyxlQUFlLElBQUksRUFBdkIsRUFBMkI7QUFDdkJPLFNBQUcsQ0FBQ1AsZUFBSixHQUFzQixVQUFVakQsQ0FBVixFQUFhO0FBQy9CLFlBQUlBLENBQUMsQ0FBQzRJLE9BQU4sRUFBZTtBQUNYLGNBQUs1SSxDQUFDLENBQUM2SSxPQUFGLENBQVVDLEtBQVYsSUFBbUIsS0FBbkIsSUFBNEI5SSxDQUFDLENBQUM2SSxPQUFGLENBQVVFLG9CQUFWLElBQWtDLElBQTlELElBQXNFLENBQUMvSSxDQUFDLENBQUM0SSxPQUFGLENBQVVHLG9CQUFsRixJQUNJL0ksQ0FBQyxDQUFDNkksT0FBRixDQUFVRSxvQkFBVixJQUFrQyxJQUFsQyxJQUEwQy9JLENBQUMsQ0FBQzZJLE9BQUYsQ0FBVUMsS0FBVixJQUFtQnJTLFNBQTdELElBQTBFdUosQ0FBQyxDQUFDNEksT0FBRixDQUFVRSxLQUFWLElBQW1CLEtBRHJHLEVBQzZHO0FBQ3pHOUksYUFBQyxDQUFDZ0osT0FBRixHQUFZLEtBQVo7QUFDQWhKLGFBQUMsQ0FBQ2lKLFNBQUYsR0FBYyw2RUFBZDtBQUNBLGdCQUFNQyxRQUFRLEdBQUdsSixDQUFDLENBQUM4RCxTQUFGLENBQVlxRixnQkFBWixDQUE2Qm5KLENBQUMsQ0FBQzBCLEdBQS9CLENBQWpCO0FBQ0EsZ0JBQU1rRyxXQUFXLEdBQUc1SCxDQUFDLENBQUM4RCxTQUFGLENBQVlzRixjQUFaLENBQ2hCRixRQURnQixFQUVoQixzQkFGZ0IsRUFHbEIsQ0FIa0IsQ0FBcEI7QUFJQSxnQkFBTUcsYUFBYSxHQUFHekIsV0FBVyxDQUFDMEIsc0JBQVosQ0FDbEIsWUFEa0IsQ0FBdEI7QUFHQTNRLGFBQUMsQ0FBQzBRLGFBQWEsQ0FBQyxDQUFELENBQWQsQ0FBRCxDQUFvQkUsU0FBcEIsQ0FBOEI7QUFDMUJDLDhCQUFnQixFQUFFO0FBRFEsYUFBOUI7QUFHQTdRLGFBQUMsQ0FBQzBRLGFBQWEsQ0FBQyxDQUFELENBQWQsQ0FBRCxDQUFvQkUsU0FBcEIsQ0FBOEIsVUFBOUIsRUFBMENFLEtBQTFDO0FBQ0g7QUFDSjtBQUVKLE9BckJEO0FBc0JIOztBQUVELFFBQUl2SSxRQUFKLEVBQWM7QUFDVnNDLFNBQUcsQ0FBQ2tHLGFBQUosR0FBb0IsVUFBUzFKLENBQVQsRUFBWTtBQUM1QixZQUFJQSxDQUFDLENBQUNnSSxPQUFGLEtBQWMsTUFBbEIsRUFBMEI7QUFDdEI7QUFFQSxjQUFJMkIsWUFBWSxHQUFHckksSUFBSSxDQUFDLE1BQU1KLFFBQU4sR0FBaUIsR0FBbEIsQ0FBdkI7QUFDQSxjQUFJMEksUUFBUSxHQUFHRCxZQUFZLENBQUMzSixDQUFDLENBQUMxQyxJQUFILENBQTNCOztBQUNBLGNBQUlzTSxRQUFKLEVBQWM7QUFDVjVKLGFBQUMsQ0FBQzZKLFVBQUYsQ0FBYXpMLFFBQWIsQ0FBc0J3TCxRQUF0Qjs7QUFDQSxnQkFBSXpJLFlBQVksSUFBSW5CLENBQUMsQ0FBQzFDLElBQUYsQ0FBTzZELFlBQVAsQ0FBcEIsRUFBMEM7QUFDdENuQixlQUFDLENBQUM2SixVQUFGLENBQWFyTyxJQUFiLENBQWtCLE9BQWxCLEVBQTJCd0UsQ0FBQyxDQUFDMUMsSUFBRixDQUFPNkQsWUFBUCxDQUEzQjtBQUNIO0FBQ0o7QUFDSjtBQUNKLE9BYkQ7QUFjSDs7QUFFRCxRQUFJUSxpQkFBSixFQUF1QjtBQUNuQjZCLFNBQUcsQ0FBQ3NHLGlCQUFKLEdBQXdCLFVBQVU5SixDQUFWLEVBQWE7QUFDakMsWUFBSSxDQUFDQSxDQUFDLENBQUMrSixVQUFGLEtBQWlCLFNBQWpCLElBQThCL0osQ0FBQyxDQUFDK0osVUFBRixLQUFpQixXQUFoRCxLQUFnRXBJLGlCQUFpQixDQUFDM0IsQ0FBQyxDQUFDeUYsU0FBSCxDQUFyRixFQUFvRztBQUNoR3pGLFdBQUMsQ0FBQ2dLLFVBQUYsR0FBZSxVQUFmO0FBQ0FoSyxXQUFDLENBQUNpSyxlQUFGLEdBQW9CLEtBQXBCO0FBQ0EsY0FBSUMsV0FBVyxHQUFHM1AsTUFBTSxDQUFDOEgsaUJBQVAsQ0FBeUJWLGlCQUFpQixDQUFDM0IsQ0FBQyxDQUFDeUYsU0FBSCxDQUFqQixDQUErQjBFLE9BQXhELENBQWxCO0FBQ0FuSyxXQUFDLENBQUMrRSxhQUFGLENBQWdCM0MsVUFBaEIsR0FBNkI4SCxXQUE3QjtBQUNBbEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQnFGLHFCQUFoQixHQUF3QyxJQUF4QztBQUNBcEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQnNGLFdBQWhCLEdBQThCMUksaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCekIsS0FBN0Q7QUFDQWhFLFdBQUMsQ0FBQytFLGFBQUYsQ0FBZ0J1RixTQUFoQixHQUE0QixJQUE1QjtBQUVBdEssV0FBQyxDQUFDK0UsYUFBRixDQUFnQjZCLEtBQWhCLEdBQXdCNUcsQ0FBQyxDQUFDNEcsS0FBRixJQUFXLEVBQW5DOztBQUNBNUcsV0FBQyxDQUFDK0UsYUFBRixDQUFnQndGLGNBQWhCLEdBQWlDLFVBQVVyRixJQUFWLEVBQWdCO0FBQzdDbEYsYUFBQyxDQUFDd0ssUUFBRixDQUFXdEYsSUFBSSxDQUFDMEIsS0FBaEI7QUFDSCxXQUZEOztBQUlBNUcsV0FBQyxDQUFDK0UsYUFBRixDQUFnQjBGLFlBQWhCLEdBQStCLFVBQVVuTixJQUFWLEVBQWdCO0FBQzNDLG1CQUFPLGtCQUFrQkEsSUFBSSxDQUFDcUUsaUJBQWlCLENBQUMzQixDQUFDLENBQUN5RixTQUFILENBQWpCLENBQStCekIsS0FBaEMsQ0FBdEIsR0FBK0QsSUFBL0QsR0FBc0UxRyxJQUFJLENBQUNxRSxpQkFBaUIsQ0FBQzNCLENBQUMsQ0FBQ3lGLFNBQUgsQ0FBakIsQ0FBK0J6QixLQUFoQyxDQUExRSxHQUFtSCxTQUExSDtBQUNILFdBRkQ7O0FBSUFoRSxXQUFDLENBQUMrRSxhQUFGLENBQWdCMkYsYUFBaEIsR0FBZ0MsVUFBVXhGLElBQVYsRUFBZ0I7QUFDNUMsZ0JBQUl5RixPQUFPLEdBQUd6RixJQUFJLENBQUN4TyxPQUFMLENBQWFrVSxRQUFiLENBQXNCLFVBQXRCLENBQWQ7QUFDQSxnQkFBSUMsYUFBYSxHQUFHLElBQXBCO0FBRUFsUyxhQUFDLENBQUNxSCxDQUFDLENBQUNxSixhQUFILENBQUQsQ0FBbUJyUixNQUFuQixHQUE0Qm9HLFFBQTVCLENBQXFDLGdCQUFyQyxFQUo0QyxDQUs1Qzs7QUFFQXpGLGFBQUMsQ0FBQ3FILENBQUMsQ0FBQ3FKLGFBQUgsQ0FBRCxDQUFtQm5LLEVBQW5CLENBQXNCLFNBQXRCLEVBQWlDLFVBQVU0TCxhQUFWLEVBQXlCO0FBQ3REQSwyQkFBYSxDQUFDQyxlQUFkO0FBQ0gsYUFGRCxFQVA0QyxDQVc1Qzs7QUFDQXBTLGFBQUMsQ0FBQ3FILENBQUMsQ0FBQ3FKLGFBQUgsQ0FBRCxDQUFtQnJSLE1BQW5CLEdBQTRCa0gsRUFBNUIsQ0FBK0IsU0FBL0IsRUFBMEMsVUFBVThMLGFBQVYsRUFBeUI7QUFDL0RBLDJCQUFhLENBQUNELGVBQWQ7QUFDQSxrQkFBSXBTLENBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDakQsTUFBbEMsSUFBNEMsQ0FBaEQsRUFDSWlWLE9BQU8sQ0FBQzVDLE1BQVIsQ0FBZSxRQUFmLEVBQXlCLEtBQXpCLEVBREosS0FHSTRDLE9BQU8sQ0FBQzVDLE1BQVIsQ0FBZSxRQUFmLEVBQXlCLElBQXpCO0FBQ1AsYUFORDtBQU9ILFdBbkJEO0FBb0JIO0FBQ0osT0F4Q0Q7QUF5Q0g7O0FBQ0QsUUFBSWxHLFdBQUosRUFBaUI7QUFDYjJCLFNBQUcsQ0FBQ3lILGFBQUosR0FBb0IsVUFBVWpMLENBQVYsRUFBYTtBQUM3QkEsU0FBQyxDQUFDOEQsU0FBRixDQUFZb0gsVUFBWixDQUF1QixDQUFDbEwsQ0FBQyxDQUFDMEIsR0FBSCxDQUF2QixFQUFnQyxLQUFoQztBQUNBLFlBQUloSSxHQUFHLEdBQUdmLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixVQUF0QixFQUFrQzZOLEtBQWxDLENBQXdDLEdBQXhDLENBQVY7QUFDQXpSLFdBQUcsQ0FBQ0EsR0FBRyxDQUFDaEUsTUFBSixHQUFhLENBQWQsQ0FBSCxHQUFzQnNLLENBQUMsQ0FBQzFDLElBQUYsQ0FBT3RILEVBQTdCO0FBQ0EwQixjQUFNLENBQUMwVCxJQUFQLENBQVkxUixHQUFHLENBQUN1TSxJQUFKLENBQVMsR0FBVCxJQUFnQixpQkFBaEIsR0FBb0NqRyxDQUFDLENBQUMxQyxJQUFGLENBQU91RSxXQUFQLENBQWhELEVBQXFFLFFBQXJFO0FBQ0gsT0FMRDtBQU1IOztBQUNELFFBQUlELDRCQUFKLEVBQWtDO0FBQzlCNEIsU0FBRyxDQUFDc0csaUJBQUosR0FBd0IsVUFBVTlKLENBQVYsRUFBYTtBQUNqQyxZQUFJQSxDQUFDLENBQUN5SCxHQUFGLENBQU1GLFFBQVYsRUFBb0I7QUFDaEIsY0FBSXZILENBQUMsQ0FBQytKLFVBQUYsS0FBaUIsU0FBakIsSUFBOEIvSixDQUFDLENBQUM1SSxJQUFGLElBQVV3Syw0QkFBNEIsQ0FBQ3hLLElBQXpFLEVBQStFO0FBQzNFLGdCQUFJaVUsS0FBSyxHQUFHLEVBQVo7QUFDQSxnQkFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsaUJBQUssSUFBSTlELE1BQU0sR0FBRyxDQUFsQixFQUFxQkEsTUFBTSxHQUFHeEgsQ0FBQyxDQUFDOEQsU0FBRixDQUFZeUgsY0FBWixHQUE2QjdWLE1BQTNELEVBQW1FOFIsTUFBTSxFQUF6RSxFQUE2RTtBQUN6RSxrQkFBTUMsR0FBRyxHQUFHekgsQ0FBQyxDQUFDOEQsU0FBRixDQUFZeUgsY0FBWixHQUE2Qi9ELE1BQTdCLENBQVo7O0FBQ0Esa0JBQUlDLEdBQUcsQ0FBQ08sT0FBSixLQUFnQixNQUFwQixFQUE0QjtBQUN4QnFELHFCQUFLLENBQUMxVixJQUFOLENBQVc4UixHQUFHLENBQUNuSyxJQUFKLENBQVNzRSw0QkFBNEIsQ0FBQ29DLEtBQXRDLENBQVg7QUFDSDtBQUNKOztBQUNELGlCQUFLLElBQUl0RyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHc0MsQ0FBQyxDQUFDNEUsTUFBRixDQUFTMEcsS0FBVCxDQUFlNVYsTUFBbkMsRUFBMkNnSSxDQUFDLEVBQTVDLEVBQWdEO0FBQzVDLGtCQUFJLENBQUMyTixLQUFLLENBQUM1QyxRQUFOLENBQWV6SSxDQUFDLENBQUM0RSxNQUFGLENBQVMwRyxLQUFULENBQWU1TixDQUFmLEVBQWtCa0UsNEJBQTRCLENBQUNvQyxLQUEvQyxDQUFmLENBQUwsRUFBNEU7QUFDeEVzSCxxQkFBSyxDQUFDM1YsSUFBTixDQUFXcUssQ0FBQyxDQUFDNEUsTUFBRixDQUFTMEcsS0FBVCxDQUFlNU4sQ0FBZixDQUFYO0FBQ0g7QUFDSjs7QUFDRHNDLGFBQUMsQ0FBQzRFLE1BQUYsQ0FBUzBHLEtBQVQsR0FBaUJBLEtBQWpCO0FBRUg7O0FBQ0R0TCxXQUFDLENBQUMrRSxhQUFGLENBQWdCM0MsVUFBaEIsR0FBNkJrSixLQUE3QjtBQUNIO0FBQ0osT0FyQkQ7O0FBc0JBOUgsU0FBRyxDQUFDaUIsWUFBSixHQUFtQixVQUFVekUsQ0FBVixFQUFhO0FBQzVCQSxTQUFDLENBQUM4RCxTQUFGLENBQVkwSCxPQUFaO0FBQ0gsT0FGRDtBQUdIOztBQUNELFFBQUl4SixNQUFKLEVBQVk7QUFDUndCLFNBQUcsQ0FBQ3BCLFVBQUosR0FBaUJKLE1BQWpCO0FBQ0gsS0FGRCxNQUVPO0FBQ0h3QixTQUFHLENBQUNwQixVQUFKLEdBQWlCQSxVQUFqQjtBQUNIOztBQUVELFFBQUlaLGdCQUFKLEVBQXNCO0FBQ2xCZ0MsU0FBRyxDQUFDaEMsZ0JBQUosR0FBdUJBLGdCQUF2QjtBQUNIOztBQUVELFFBQUlnQixPQUFKLEVBQWE7QUFDVGdCLFNBQUcsQ0FBQ2hCLE9BQUosR0FBY0EsT0FBZDtBQUNBZ0IsU0FBRyxDQUFDaEIsT0FBSixDQUFZaUosSUFBWixHQUFtQixLQUFuQjtBQUNIOztBQUNELFFBQUloSyxnQkFBSixFQUFzQjtBQUNsQitCLFNBQUcsQ0FBQ2tJLEtBQUosQ0FBVWpLLGdCQUFWLEdBQTZCQSxnQkFBN0I7QUFDSDs7QUFHRCxRQUFJaUIsV0FBSixFQUFpQjtBQUNiYyxTQUFHLENBQUNkLFdBQUosR0FBa0JBLFdBQWxCO0FBQ0g7O0FBRUQsUUFBSUMsVUFBSixFQUFnQjtBQUNaYSxTQUFHLENBQUNrSSxLQUFKLEdBQVkvSSxVQUFaO0FBQ0g7O0FBRUQsUUFBSUMsZ0JBQUosRUFBc0I7QUFDbEJZLFNBQUcsQ0FBQ21JLGtCQUFKLEdBQXlCLFVBQVUzTCxDQUFWLEVBQWE7QUFDbENBLFNBQUMsQ0FBQzRMLGNBQUYsQ0FBaUI5RSxPQUFqQixHQUEyQixLQUEzQjtBQUNILE9BRkQ7QUFHSDs7QUFFRHRELE9BQUcsQ0FBQ3FJLFdBQUosQ0FBZ0JDLGVBQWhCLEdBQWtDaEssUUFBbEM7QUFDQTBCLE9BQUcsQ0FBQ25DLE9BQUosR0FBY0EsT0FBZCxDQXphK0QsQ0EyYS9EOztBQUNBLFFBQUk4QixZQUFKLEVBQWtCO0FBQ2QsVUFBSTRJLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVc5SSxZQUFZLENBQUM0SSxNQUF4QixDQUFiO0FBQ0EsVUFBSUcsUUFBUSxHQUFHRixJQUFJLENBQUNDLEtBQUwsQ0FBVzlJLFlBQVksQ0FBQytJLFFBQXhCLENBQWY7QUFDQXZULE9BQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JyQyxNQUFsQjtBQUNBa04sU0FBRyxDQUFDc0IsV0FBSixHQUFrQmlILE1BQWxCLENBSmMsQ0FLZDs7QUFDQSxVQUFJRyxRQUFKLEVBQWM7QUFDVjFJLFdBQUcsQ0FBQ25DLE9BQUosQ0FBWXRCLE9BQVosQ0FBb0IsVUFBVTZHLEtBQVYsRUFBaUJsRixHQUFqQixFQUFzQjtBQUN0QyxjQUFJd0ssUUFBUSxDQUFDdEYsS0FBSyxDQUFDbkIsU0FBUCxDQUFSLElBQTZCaFAsU0FBakMsRUFBNEM7QUFDeEMrTSxlQUFHLENBQUNuQyxPQUFKLENBQVlLLEdBQVosRUFBaUJ5SyxZQUFqQixHQUFnQ0QsUUFBUSxDQUFDdEYsS0FBSyxDQUFDbkIsU0FBUCxDQUF4QztBQUNBakMsZUFBRyxDQUFDbkMsT0FBSixDQUFZSyxHQUFaLEVBQWlCb0YsT0FBakIsR0FBMkIsSUFBM0I7QUFDSCxXQUhELE1BR087QUFDSHRELGVBQUcsQ0FBQ25DLE9BQUosQ0FBWUssR0FBWixFQUFpQm9GLE9BQWpCLEdBQTJCLEtBQTNCO0FBQ0g7QUFDSixTQVBEO0FBUUg7QUFDSjs7QUFFRCxRQUFJekQsYUFBYSxJQUFJQSxhQUFhLElBQUksTUFBdEMsRUFBOEM7QUFDMUNHLFNBQUcsQ0FBQ2hCLE9BQUosQ0FBWTRKLGFBQVosR0FBNEIsVUFBVXBNLENBQVYsRUFBYTtBQUNyQyxlQUFPLEtBQVA7QUFDSCxPQUZEOztBQUdBd0QsU0FBRyxDQUFDaEIsT0FBSixDQUFZNkosYUFBWixHQUE0QixVQUFVck0sQ0FBVixFQUFhO0FBQ3JDLGVBQU8sS0FBUDtBQUNILE9BRkQ7QUFHSDs7QUFDRHJILEtBQUMsQ0FBQ2pDLE9BQUQsQ0FBRCxDQUFXNFYsVUFBWCxDQUFzQjlJLEdBQXRCO0FBQ0gsR0F2Y0Q7O0FBd2NBN0ssR0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXaUIsSUFBWCxDQUFnQixZQUFXO0FBQ3ZCbEMsVUFBTSxDQUFDdUosbUJBQVAsQ0FBMkIsSUFBM0I7QUFDSCxHQUZEOztBQUdBLFdBQVNnRSxvQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7QUFDaEMsUUFBSUMsT0FBTyxHQUFHLEVBQWQ7QUFDQUEsV0FBTyxDQUFDb0gsRUFBUixHQUFhLElBQWI7QUFDQXBILFdBQU8sQ0FBQ3FILElBQVIsR0FBZXRILElBQUksQ0FBQ25OLElBQXBCO0FBQ0EsV0FBT29OLE9BQVA7QUFDSCxHQWhpQnlDLENBa2lCMUM7OztBQUNBLFdBQVNzSCxZQUFULENBQXNCQyxNQUF0QixFQUE4QjtBQUMxQkEsVUFBTSxDQUFDM0UsTUFBUCxDQUFjLFFBQWQsRUFBd0IsQ0FBQzJFLE1BQU0sQ0FBQzNFLE1BQVAsQ0FBYyxRQUFkLENBQXpCO0FBQ0g7O0FBRURwUCxHQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QmdVLFlBQXhCLENBQXFDO0FBQ2pDM0ssVUFBTSxFQUFFLGdCQUFTNEssT0FBVCxFQUFrQkMsUUFBbEIsRUFBNEI7QUFDaENsVSxPQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGNBQU0sRUFBRSxLQURMO0FBRUhwRixXQUFHLEVBQUUsZ0RBQWdEa1QsT0FBTyxDQUFDRyxJQUF4RCxHQUErRCxrREFGakU7QUFHSGxJLGdCQUFRLEVBQUUsTUFIUDtBQUlIaEgsZUFBTyxFQUFFLGlCQUFTUCxJQUFULEVBQWM7QUFDbkJ1UCxrQkFBUSxDQUFDbFUsQ0FBQyxDQUFDZ04sR0FBRixDQUFNckksSUFBSSxDQUFDMFAsUUFBWCxFQUFxQixVQUFVdk0sSUFBVixFQUFnQjtBQUMxQyxnQkFBSXdNLFFBQVEsR0FBRyxFQUFmLENBRDBDLENBRTFDOztBQUNBLGdCQUFJdFUsQ0FBQyxDQUFDdVUsT0FBRixDQUFVek0sSUFBSSxDQUFDME0sVUFBTCxDQUFnQkMsS0FBMUIsRUFBaUNILFFBQWpDLEtBQThDLENBQUMsQ0FBL0MsSUFBb0R4TSxJQUFJLENBQUMwTSxVQUFMLENBQWdCRSxXQUF4RSxFQUFxRjtBQUNqRkosc0JBQVEsQ0FBQ3RYLElBQVQsQ0FBYzhLLElBQUksQ0FBQzBNLFVBQUwsQ0FBZ0JDLEtBQTlCO0FBQ0EscUJBQU87QUFBRUEscUJBQUssRUFBRTNNLElBQUksQ0FBQzBNLFVBQUwsQ0FBZ0JDLEtBQXpCO0FBQ0hFLG9CQUFJLEVBQUU3TSxJQUFJLENBQUMwTSxVQUFMLENBQWdCRyxJQURuQjtBQUVIQyx3QkFBUSxFQUFFOU0sSUFBSSxDQUFDME0sVUFBTCxDQUFnQkksUUFGdkI7QUFHSG5XLG9CQUFJLEVBQUVxSixJQUFJLENBQUMwTSxVQUFMLENBQWdCL1YsSUFIbkI7QUFJSG9XLDJCQUFXLEVBQUUvTSxJQUFJLENBQUNnTixRQUFMLENBQWNEO0FBSnhCLGVBQVA7QUFNSDtBQUNKLFdBWlEsQ0FBRCxDQUFSO0FBYUg7QUFsQkUsT0FBUDtBQW9CSCxLQXRCZ0M7QUF1QmpDO0FBQ0FFLFVBQU0sRUFBRSxnQkFBUzVXLEtBQVQsRUFBZ0I2VyxFQUFoQixFQUFvQjtBQUN4QixVQUFJQyxPQUFPLEdBQUdqVixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsUUFBYixDQUFkO0FBQ0EsVUFBSXVRLGFBQWEsR0FBR2xWLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxjQUFiLENBQXBCO0FBQ0EsVUFBSXdRLE1BQU0sR0FBR25WLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxRQUFiLENBQWI7QUFDQSxVQUFJeVEsUUFBUSxHQUFHcFYsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZjtBQUNBLFVBQUk1RyxPQUFPLEdBQUdpQyxDQUFDLENBQUMsSUFBRCxDQUFmO0FBQ0EsVUFBSWtWLGFBQUosRUFBbUJBLGFBQWEsR0FBRyxNQUFNQSxhQUF0QixDQUFuQixLQUNLQSxhQUFhLEdBQUcsRUFBaEI7QUFFTGxWLE9BQUMsQ0FBQyxpQkFBZW1WLE1BQWYsR0FBc0IsY0FBdEIsR0FBc0NELGFBQXRDLEdBQW9ELElBQXJELENBQUQsQ0FBNERHLEdBQTVELENBQWdFTCxFQUFFLENBQUNsTixJQUFILENBQVE4TSxRQUF4RTtBQUNBNVUsT0FBQyxDQUFDLGlCQUFlbVYsTUFBZixHQUFzQixRQUF0QixHQUFnQ0QsYUFBaEMsR0FBOEMsSUFBL0MsQ0FBRCxDQUFzREcsR0FBdEQsQ0FBMERMLEVBQUUsQ0FBQ2xOLElBQUgsQ0FBUTZNLElBQWxFO0FBQ0EzVSxPQUFDLENBQUMsaUJBQWVtVixNQUFmLEdBQXNCLFVBQXRCLEdBQWtDRCxhQUFsQyxHQUFnRCxJQUFqRCxDQUFELENBQXdERyxHQUF4RCxDQUE0REwsRUFBRSxDQUFDbE4sSUFBSCxDQUFRckosSUFBcEU7QUFDQXVCLE9BQUMsQ0FBQyxpQkFBZW1WLE1BQWYsR0FBc0IsY0FBdEIsR0FBc0NELGFBQXRDLEdBQW9ELElBQXJELENBQUQsQ0FBNERHLEdBQTVELENBQWdFTCxFQUFFLENBQUNsTixJQUFILENBQVErTSxXQUF4RTs7QUFDQSxVQUFJSSxPQUFPLElBQUksRUFBZixFQUFtQjtBQUNmalYsU0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxnQkFBTSxFQUFFLE1BREw7QUFFSHBGLGFBQUcsRUFBRSxtQ0FBbUNrVSxPQUZyQztBQUdIL0ksa0JBQVEsRUFBRSxNQUhQO0FBSUh2SCxjQUFJLEVBQUU7QUFBQywyQkFBZXFRLEVBQUUsQ0FBQ2xOLElBQUgsQ0FBUStNO0FBQXhCLFdBSkg7QUFLSDNQLGlCQUFPLEVBQUUsaUJBQVVQLElBQVYsRUFBZ0I7QUFDckIsZ0JBQUlBLElBQUksQ0FBQ0ssS0FBTCxJQUFjLElBQWxCLEVBQXdCO0FBQ3BCaEYsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVlqUixJQUFaO0FBQ0FuRSxlQUFDLENBQUNvVixRQUFELENBQUQsQ0FBWTNQLFFBQVosQ0FBcUIsb0JBQXJCO0FBQ0F6RixlQUFDLENBQUNvVixRQUFELENBQUQsQ0FBWXpQLEdBQVosQ0FBZ0IsU0FBaEIsRUFBMkIsTUFBM0I7QUFDQTNGLGVBQUMsQ0FBQ29WLFFBQUQsQ0FBRCxDQUFZelAsR0FBWixDQUFnQixhQUFoQixFQUErQixRQUEvQjtBQUNBM0YsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVlsVSxJQUFaLENBQWlCLGtDQUFpQ3lELElBQUksQ0FBQ1csT0FBdkQ7QUFDSCxhQU5ELE1BTU87QUFDSHRGLGVBQUMsQ0FBQ29WLFFBQUQsQ0FBRCxDQUFZRSxXQUFaLENBQXdCLG9CQUF4QjtBQUNBdFYsZUFBQyxDQUFDb1YsUUFBRCxDQUFELENBQVk5USxJQUFaO0FBQ0g7QUFDSjtBQWhCRSxTQUFQO0FBa0JIO0FBQ0o7QUF6RGdDLEdBQXJDO0FBNERILENBbm1CRDtBQXNtQkR0RSxDQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThYLEtBQVosQ0FBa0IsWUFBVztBQUN6QixNQUFJQyxXQUFXLEdBQUd4VixDQUFDLENBQUMsb0JBQUQsQ0FBbkI7QUFDQSxNQUFJeVYsV0FBVyxHQUFHelYsQ0FBQyxDQUFDLGlCQUFELENBQW5CLENBRnlCLENBSXpCO0FBQ0E7O0FBQ0EsTUFBSTBWLFVBQVUsR0FBRzNXLE1BQU0sQ0FBQzBILFFBQVAsQ0FBZ0JrUCxJQUFqQyxDQU55QixDQU96Qjs7QUFDQTNWLEdBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCc1YsV0FBeEIsQ0FBb0MsUUFBcEM7QUFDQXRWLEdBQUMsQ0FBQyxrREFBRCxDQUFELENBQXNEaUIsSUFBdEQsQ0FBMkQsWUFBVztBQUNsRSxRQUFJMlUsSUFBSSxHQUFHNVYsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRNkMsSUFBUixDQUFhLE1BQWIsQ0FBWCxDQURrRSxDQUdsRTs7QUFDQSxRQUFJNlMsVUFBVSxDQUFDcFMsT0FBWCxDQUFtQnNTLElBQW5CLE1BQTZCLENBQUMsQ0FBbEMsRUFBcUM7QUFDakM7QUFDQTVWLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXlGLFFBQVIsQ0FBaUIsUUFBakI7QUFDQXpGLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsR0FBMEJBLE1BQTFCLEdBQW1Db0csUUFBbkMsQ0FBNEMsUUFBNUM7QUFDSCxLQUpELE1BSU87QUFDSHpGLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXNWLFdBQVIsQ0FBb0IsUUFBcEI7QUFDSDtBQUNKLEdBWEQ7QUFhQUUsYUFBVyxDQUFDalAsRUFBWixDQUFlLFFBQWYsRUFBeUIsVUFBVWMsQ0FBVixFQUFhO0FBQ2xDckgsS0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hwVCxTQUFHLEVBQUV5VSxXQUFXLENBQUM3USxJQUFaLENBQWlCLG1CQUFqQixDQURGO0FBRUhBLFVBQUksRUFBRTtBQUNGa1Isd0JBQWdCLEVBQUVMLFdBQVcsQ0FBQ0gsR0FBWjtBQURoQixPQUZIO0FBS0huUSxhQUFPLEVBQUUsaUJBQVVoRSxJQUFWLEVBQWdCO0FBQ3JCLFlBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1B1VSxxQkFBVyxDQUFDN1UsSUFBWixDQUFpQixRQUFqQixFQUEyQmpELE1BQTNCO0FBQ0E4WCxxQkFBVyxDQUFDaFEsUUFBWixDQUFxQixRQUFyQjtBQUNBO0FBQ0gsU0FMb0IsQ0FNckI7OztBQUNBZ1EsbUJBQVcsQ0FDTnZVLElBREwsQ0FDVUEsSUFEVixFQUVLb1UsV0FGTCxDQUVpQixRQUZqQjtBQUdIO0FBZkUsS0FBUDtBQWlCSCxHQWxCRDtBQW9CQTtBQUNBOztBQUNBblYsT0FBSyxDQUFDeEMsTUFBTixHQUFlLFVBQVVqQixLQUFWLEVBQWlCQyxJQUFqQixFQUF1QkMsRUFBdkIsRUFBMkI7QUFDdEMsUUFBSUMsSUFBSSxHQUFHSCxLQUFLLENBQUNJLEtBQU4sQ0FBWSxDQUFDRixFQUFFLElBQUlELElBQVAsSUFBZSxDQUFmLElBQW9CRCxLQUFLLENBQUNLLE1BQXRDLENBQVg7QUFDQUwsU0FBSyxDQUFDSyxNQUFOLEdBQWVKLElBQUksR0FBRyxDQUFQLEdBQVdELEtBQUssQ0FBQ0ssTUFBTixHQUFlSixJQUExQixHQUFpQ0EsSUFBaEQ7QUFDQSxXQUFPRCxLQUFLLENBQUNNLElBQU4sQ0FBV0MsS0FBWCxDQUFpQlAsS0FBakIsRUFBd0JHLElBQXhCLENBQVA7QUFDSCxHQUpELENBNUN5QixDQW1EekI7OztBQUNBa0MsUUFBTSxDQUFDK1csV0FBUCxHQUFxQixTQUFTQSxXQUFULENBQXFCelksRUFBckIsRUFBeUI7QUFDMUMsU0FBSyxJQUFJQyxHQUFHLEdBQUcsQ0FBZixFQUFrQkEsR0FBRyxHQUFHNEMsTUFBTSxDQUFDbkQsTUFBL0IsRUFBdUNPLEdBQUcsRUFBMUMsRUFBOEM7QUFDMUMsVUFBSUQsRUFBRSxJQUFJNkMsTUFBTSxDQUFDNUMsR0FBRCxDQUFoQixFQUF1QjtBQUNuQjZDLGFBQUssQ0FBQ3hDLE1BQU4sQ0FBYXVDLE1BQWIsRUFBcUI1QyxHQUFyQjtBQUNBRyxnQkFBUSxDQUFDQyxjQUFULENBQXdCTCxFQUF4QixFQUE0Qk0sTUFBNUI7QUFDQUMsd0JBQWdCO0FBRWhCO0FBQ0g7QUFDSjtBQUNKLEdBVkQsQ0FwRHlCLENBZ0V6Qjs7O0FBQ0EsV0FBU3VCLGNBQVQsR0FBMEI7QUFDdEIsUUFBSXRCLEtBQUssR0FBRyxHQUFaOztBQUNBLFFBQUltQyxDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CMkYsR0FBbkIsQ0FBdUIsU0FBdkIsS0FBcUMsTUFBekMsRUFBaUQ7QUFDN0M5SCxXQUFLLEdBQUcsQ0FBUjtBQUNIOztBQUVELFFBQUlrWSxZQUFZLEdBQUcsaUJBQW5COztBQUNBLFFBQUkvVixDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CakQsTUFBbkIsSUFBNkIsQ0FBakMsRUFBb0M7QUFDaENnWixrQkFBWSxHQUFHLGlCQUFmO0FBQ0g7O0FBRUQsUUFBSXpZLEdBQUcsR0FBRyxDQUFWOztBQUNBLFNBQUtBLEdBQUwsRUFBVUEsR0FBRyxHQUFHMkIsWUFBaEIsRUFBOEIzQixHQUFHLEVBQWpDLEVBQXFDO0FBQ2pDLFVBQUk0QyxNQUFNLENBQUM1QyxHQUFELENBQU4sSUFBZVEsU0FBbkIsRUFBOEI7QUFDMUIsWUFBSUMsT0FBTyxHQUFHTixRQUFRLENBQUNDLGNBQVQsQ0FBd0J3QyxNQUFNLENBQUM1QyxHQUFELENBQTlCLENBQWQ7QUFDQVMsZUFBTyxDQUFDQyxLQUFSLENBQWNILEtBQWQsR0FBc0JBLEtBQUssR0FBRyxJQUE5QjtBQUNBbUMsU0FBQyxDQUFDakMsT0FBRCxDQUFELENBQVd1WCxXQUFYLENBQXVCLGlCQUF2QixFQUEwQ0EsV0FBMUMsQ0FBc0QsaUJBQXREO0FBQ0F0VixTQUFDLENBQUNqQyxPQUFELENBQUQsQ0FBVzBILFFBQVgsQ0FBb0JzUSxZQUFwQjtBQUNBbFksYUFBSyxHQUFHQSxLQUFLLEdBQUcsR0FBaEI7QUFDQUUsZUFBTyxDQUFDQyxLQUFSLENBQWNDLE9BQWQsR0FBd0IsT0FBeEI7QUFDSDtBQUNKOztBQUVELFNBQUssSUFBSUMsR0FBRyxHQUFHWixHQUFmLEVBQW9CWSxHQUFHLEdBQUdnQyxNQUFNLENBQUNuRCxNQUFqQyxFQUF5Q21CLEdBQUcsRUFBNUMsRUFBZ0Q7QUFDNUMsVUFBSUgsT0FBTyxHQUFHTixRQUFRLENBQUNDLGNBQVQsQ0FBd0J3QyxNQUFNLENBQUNoQyxHQUFELENBQTlCLENBQWQ7QUFDQUgsYUFBTyxDQUFDQyxLQUFSLENBQWNDLE9BQWQsR0FBd0IsTUFBeEI7QUFDSDtBQUNKLEdBNUZ3QixDQThGekI7OztBQUNBYyxRQUFNLENBQUNpWCxjQUFQLEdBQXdCLFNBQVNBLGNBQVQsQ0FBd0IzWSxFQUF4QixFQUE0Qm9CLElBQTVCLEVBQWtDRixVQUFsQyxFQUE4QztBQUNsRSxTQUFLLElBQUlqQixHQUFHLEdBQUcsQ0FBZixFQUFrQkEsR0FBRyxHQUFHNEMsTUFBTSxDQUFDbkQsTUFBL0IsRUFBdUNPLEdBQUcsRUFBMUMsRUFBOEM7QUFDMUM7QUFDQSxVQUFJRCxFQUFFLElBQUk2QyxNQUFNLENBQUM1QyxHQUFELENBQWhCLEVBQXVCO0FBQ25CNkMsYUFBSyxDQUFDeEMsTUFBTixDQUFhdUMsTUFBYixFQUFxQjVDLEdBQXJCO0FBRUEyWSxzQkFBYyxDQUFDNVksRUFBRCxFQUFLb0IsSUFBTCxFQUFXRixVQUFYLENBQWQ7QUFFQTtBQUNIO0FBQ0o7O0FBQ0QwWCxrQkFBYyxDQUFDNVksRUFBRCxFQUFLb0IsSUFBTCxFQUFXRixVQUFYLENBQWQ7QUFDSCxHQVpEOztBQWNBLFdBQVMwWCxjQUFULENBQXdCNVksRUFBeEIsRUFBNEJvQixJQUE1QixFQUFrQ0YsVUFBbEMsRUFBNEQ7QUFBQSxRQUFkMlgsSUFBYyx1RUFBUCxLQUFPO0FBQ3hEO0FBQ0E3WSxNQUFFLEdBQUk2QixRQUFRLENBQUM3QixFQUFELENBQWQ7QUFDQTJDLEtBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sWUFBTSxFQUFFLEtBREw7QUFFSHBGLFNBQUcsRUFBRSxhQUZGO0FBR0g0RCxVQUFJLEVBQUU7QUFBQyxjQUFNdEgsRUFBUDtBQUFXLGdCQUFRb0IsSUFBbkI7QUFBeUIsc0JBQWNGLFVBQXZDO0FBQW1ELGdCQUFRMlg7QUFBM0QsT0FISDtBQUlIaEssY0FBUSxFQUFFLE1BSlA7QUFLSGhILGFBQU8sRUFBRSxpQkFBVTZILE1BQVYsRUFBa0I7QUFDdkIsWUFBSS9NLENBQUMsQ0FBQyxNQUFNM0MsRUFBUCxDQUFELENBQVlOLE1BQVosSUFBc0IsQ0FBMUIsRUFBNkI7QUFDekIsY0FBSTZGLElBQUksR0FBRzVDLENBQUMsQ0FBQytNLE1BQUQsQ0FBRCxDQUFVb0osUUFBVixDQUFtQixnQkFBbkIsRUFBcUNqVixJQUFyQyxFQUFYO0FBQ0FsQixXQUFDLENBQUMsTUFBTTNDLEVBQVAsQ0FBRCxDQUFZOFksUUFBWixDQUFxQixnQkFBckIsRUFBdUNqVixJQUF2QyxDQUE0QzBCLElBQTVDO0FBQ0gsU0FIRCxNQUdPO0FBQ0g1QyxXQUFDLENBQUMsTUFBRCxDQUFELENBQVVILE1BQVYsQ0FBaUJrTixNQUFqQjtBQUNIOztBQUNEL00sU0FBQyxDQUFDLE1BQUszQyxFQUFMLEdBQVMsbUNBQVYsQ0FBRCxDQUFnRHlULEtBQWhEOztBQUVBLFlBQUksQ0FBQzVRLE1BQU0sQ0FBQzRQLFFBQVAsQ0FBZ0J6UyxFQUFoQixDQUFMLEVBQTBCO0FBQ3RCNkMsZ0JBQU0sQ0FBQ3ZCLE9BQVAsQ0FBZXRCLEVBQWY7QUFDSDs7QUFDRE8sd0JBQWdCO0FBQ2hCb0MsU0FBQyxDQUFDLE1BQU0zQyxFQUFOLEdBQVcsbUJBQVosQ0FBRCxDQUFrQyxDQUFsQyxFQUFxQ3lDLFNBQXJDLEdBQWlERSxDQUFDLENBQUMsTUFBTTNDLEVBQU4sR0FBVSxtQkFBWCxDQUFELENBQWlDLENBQWpDLEVBQW9DMEMsWUFBckY7QUFDQXFXLHdCQUFnQjtBQUNuQixPQXBCRTtBQXFCSHBSLFdBQUssRUFBRSxpQkFBWTtBQUNmcVIsYUFBSyxDQUFDLDhCQUFELENBQUw7QUFDSCxPQXZCRTtBQXdCSEMsYUFBTyxFQUFFO0FBeEJOLEtBQVA7QUEwQkgsR0ExSXdCLENBNEl6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBQ0F2WCxRQUFNLENBQUNuQixnQkFBUCxHQUEwQixTQUFTQSxnQkFBVCxHQUE0QjtBQUNsRCxRQUFJa0IsS0FBSyxHQUFHQyxNQUFNLENBQUNDLFVBQW5COztBQUNBLFFBQUlGLEtBQUssR0FBRyxHQUFaLEVBQWlCO0FBQ2JHLGtCQUFZLEdBQUcsQ0FBZjtBQUNILEtBRkQsTUFHSztBQUNELFVBQUllLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUIyRixHQUFuQixDQUF1QixTQUF2QixLQUFxQyxNQUF6QyxFQUFpRDtBQUM3QzdHLGFBQUssR0FBR0EsS0FBSyxHQUFHLEdBQWhCO0FBQ0gsT0FIQSxDQUtEOzs7QUFDQUcsa0JBQVksR0FBR0MsUUFBUSxDQUFDSixLQUFLLEdBQUcsR0FBVCxDQUF2QjtBQUNIOztBQUVESyxrQkFBYztBQUVqQixHQWhCRCxDQXpLeUIsQ0EyTHpCOzs7QUFDQSxXQUFTb1gsVUFBVCxDQUFvQm5YLElBQXBCLEVBQTBCQyxNQUExQixFQUFrQ2QsVUFBbEMsRUFBOEM7QUFDMUMsUUFBSWUsT0FBTyxHQUFHLEVBQWQ7QUFDQSxRQUFJQyxJQUFJLEdBQUcsSUFBSUMsSUFBSixFQUFYO0FBQ0EsUUFBSUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLFFBQUwsS0FBa0IsR0FBbEIsR0FBd0JILElBQUksQ0FBQ0ksVUFBTCxFQUF2QztBQUVBTCxXQUFPLEdBQUcsbUZBQ04sMEJBRE0sR0FDdUJmLFVBRHZCLEdBQ29DLElBRHBDLEdBRU4sMkJBRk0sR0FHTixLQUhNLEdBR0VhLElBSEYsR0FHUyxNQUhULEdBSU4sUUFKTSxHQUtOLFFBTE0sR0FNTixtRUFOTSxHQU1nRUssUUFOaEUsR0FNMkUsUUFOM0UsR0FPTix5RUFQTSxHQVFOLDZGQVJNLEdBU04sT0FUSjtBQVdBSixVQUFNLENBQUNRLE1BQVAsQ0FBY1AsT0FBZDtBQUVBLFFBQUlrWCxRQUFRLEdBQUd4VyxDQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVQSxNQUFWLEVBQWY7QUFDQW1YLFlBQVEsQ0FBQ3RRLE9BQVQsQ0FBaUI7QUFBQ3BHLGVBQVMsRUFBRTBXLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWXpXO0FBQXhCLEtBQWpCLEVBQXdELEdBQXhEO0FBQ0g7O0FBRURoQixRQUFNLENBQUMwWCxnQkFBUCxHQUEwQixTQUFTQSxnQkFBVCxDQUEwQnBaLEVBQTFCLEVBQThCb0IsSUFBOUIsRUFBb0NGLFVBQXBDLEVBQWdEO0FBQ3RFO0FBQ0EsU0FBSyxJQUFJakIsR0FBRyxHQUFHLENBQWYsRUFBa0JBLEdBQUcsR0FBRzRDLE1BQU0sQ0FBQ25ELE1BQS9CLEVBQXVDTyxHQUFHLEVBQTFDLEVBQThDO0FBQzFDO0FBQ0EsVUFBSUQsRUFBRSxJQUFJNkMsTUFBTSxDQUFDNUMsR0FBRCxDQUFoQixFQUF1QjtBQUNuQjZDLGFBQUssQ0FBQ3hDLE1BQU4sQ0FBYXVDLE1BQWIsRUFBcUI1QyxHQUFyQjtBQUNBMEMsU0FBQyxDQUFDLE1BQU0zQyxFQUFQLENBQUQsQ0FBWWlZLFdBQVosQ0FBd0IsZUFBeEI7QUFDQVcsc0JBQWMsQ0FBQzVZLEVBQUQsRUFBS29CLElBQUwsRUFBV0YsVUFBWCxDQUFkO0FBRUE7QUFDSDtBQUNKLEtBWHFFLENBWXRFO0FBQ0Q7O0FBQ0YsR0FkRCxDQWxOeUIsQ0FrT3pCOzs7QUFDQVEsUUFBTSxDQUFDdUksZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MxSixnQkFBbEM7O0FBRUFtQixRQUFNLENBQUMyWCxXQUFQLEdBQXFCLFNBQVNBLFdBQVQsQ0FBcUJDLFdBQXJCLEVBQWtDNVksT0FBbEMsRUFBMkM7QUFDNUQsUUFBSXFCLElBQUksR0FBR3VYLFdBQVcsQ0FBQ3ZYLElBQVosRUFBWDtBQUNBLFFBQUliLFVBQVUsR0FBR29ZLFdBQVcsQ0FBQ2hTLElBQVosQ0FBaUIsWUFBakIsQ0FBakI7O0FBQ0EsUUFBSXZGLElBQUksS0FBSyxFQUFiLEVBQWlCO0FBQ2I7QUFDQVksT0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxjQUFNLEVBQUUsTUFETDtBQUVIcEYsV0FBRyxFQUFFLGFBRkY7QUFHSDRELFlBQUksRUFBRTtBQUFDLGdCQUFNNUcsT0FBTyxDQUFDNlksT0FBUixDQUFnQixhQUFoQixFQUErQi9ULElBQS9CLENBQW9DLElBQXBDLENBQVA7QUFBa0QscUJBQVd6RDtBQUE3RCxTQUhIO0FBSUg4TSxnQkFBUSxFQUFFLE1BSlA7QUFLSGhILGVBQU8sRUFBRSxpQkFBU21DLENBQVQsRUFBWTtBQUNqQjtBQUNBNE8sd0JBQWMsQ0FBQy9XLFFBQVEsQ0FBQ25CLE9BQU8sQ0FBQzZZLE9BQVIsQ0FBZ0IsYUFBaEIsRUFBK0IvVCxJQUEvQixDQUFvQyxJQUFwQyxDQUFELENBQVQsRUFBc0QsRUFBdEQsRUFBMER0RSxVQUExRCxDQUFkO0FBQ0g7QUFSRSxPQUFQO0FBV0FvWSxpQkFBVyxDQUFDdlgsSUFBWixDQUFpQixFQUFqQjtBQUNIO0FBQ0osR0FsQkQ7O0FBb0JBLFdBQVMrRSxJQUFULENBQWNwRyxPQUFkLEVBQXVCO0FBQ25CLFFBQU04WSxjQUFjLEdBQUdDLDZEQUFZLENBQUMsSUFBRCxFQUFPQyxPQUFQLENBQW5DLENBRG1CLENBRW5CO0FBQ0E7O0FBQ0FGLGtCQUFjLENBQUNHLE1BQWY7QUFDSDs7QUFFRCxXQUFTMVMsSUFBVCxDQUFjdkcsT0FBZCxFQUF1QixDQUV0QixDQWxRd0IsQ0FvUXpCOzs7QUFDQSxXQUFTa1osV0FBVCxDQUFxQkMsT0FBckIsRUFBOEI7QUFDMUIsUUFBSUMsRUFBRSxHQUFHMVosUUFBUSxDQUFDa1Qsc0JBQVQsQ0FBZ0N1RyxPQUFoQyxDQUFUO0FBQ0EsUUFBSUUsaUJBQWlCLEdBQUcsS0FBeEIsQ0FGMEIsQ0FFSTs7QUFDOUIsU0FBS3JTLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQW5CLEVBQTJCZ0ksQ0FBQyxFQUE1QixFQUFnQztBQUM1QixVQUFJb1MsRUFBRSxDQUFDcFMsQ0FBRCxDQUFGLENBQU1zUyxPQUFOLEtBQWtCLElBQXRCLEVBQTRCO0FBQ3hCRCx5QkFBaUIsR0FBRyxJQUFwQjtBQUNIO0FBQ0o7O0FBRUQsUUFBSUEsaUJBQWlCLEtBQUssSUFBMUIsRUFBZ0M7QUFDNUIsV0FBSyxJQUFJclMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQXZCLEVBQStCZ0ksQ0FBQyxFQUFoQyxFQUFvQztBQUNoQ29TLFVBQUUsQ0FBQ3BTLENBQUQsQ0FBRixDQUFNdVMsUUFBTixHQUFpQixLQUFqQjtBQUNIO0FBQ0osS0FKRCxNQUlPO0FBQ0gsV0FBSyxJQUFJdlMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29TLEVBQUUsQ0FBQ3BhLE1BQXZCLEVBQStCZ0ksQ0FBQyxFQUFoQyxFQUFvQztBQUNoQ29TLFVBQUUsQ0FBQ3BTLENBQUQsQ0FBRixDQUFNdVMsUUFBTixHQUFpQixJQUFqQjtBQUNIO0FBQ0o7QUFDSjs7QUFHRHZZLFFBQU0sQ0FBQ3dZLGVBQVAsR0FBeUIsU0FBU0EsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0M7QUFDckQ7QUFDQSxXQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFVQyxPQUFWLEVBQW1CQyxNQUFuQixFQUEyQjtBQUMxQzNYLE9BQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sY0FBTSxFQUFFLEtBREw7QUFFSHBGLFdBQUcsRUFBRXlXLEtBRkY7QUFHSHRMLGdCQUFRLEVBQUUsTUFIUDtBQUlIaEgsZUFBTyxFQUFFLGlCQUFVNkgsTUFBVixFQUFrQjtBQUN2QjJLLGlCQUFPLENBQUMzSyxNQUFELENBQVA7QUFDSCxTQU5FO0FBT0gvSCxhQUFLLEVBQUUsZUFBVVAsR0FBVixFQUFlbVQsTUFBZixFQUF1QjVTLE1BQXZCLEVBQThCO0FBQ2pDMlMsZ0JBQU0sQ0FBQzNTLE1BQUQsQ0FBTjtBQUNIO0FBVEUsT0FBUDtBQVdILEtBWk0sQ0FBUDtBQWFILEdBZkQ7O0FBa0JBaEYsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBcUIsV0FBckIsRUFBa0MsVUFBVWMsQ0FBVixFQUFhO0FBQzNDQSxLQUFDLENBQUNnQixjQUFGO0FBQ0EsUUFBSXdQLE1BQU0sR0FBRyxFQUFiO0FBQUEsUUFBaUJDLFNBQVMsR0FBRyxFQUE3QjtBQUFBLFFBQWlDQyxPQUFPLEdBQUcsRUFBM0M7QUFBQSxRQUErQ0MsSUFBSSxHQUFHLEVBQXREO0FBQUEsUUFBMEQvSixLQUFLLEdBQUcsRUFBbEU7QUFFQWpPLEtBQUMsQ0FBQyx5Q0FBRCxDQUFELENBQTZDaUIsSUFBN0MsQ0FBa0QsVUFBVW9HLENBQVYsRUFBYTtBQUMzRHlRLGVBQVMsR0FBRzlYLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTZDLElBQVIsQ0FBYSxNQUFiLEVBQXFCMlAsS0FBckIsQ0FBMkIsR0FBM0IsQ0FBWjtBQUNBdUYsYUFBTyxHQUFHRCxTQUFTLENBQUMsQ0FBRCxDQUFuQjtBQUNBRSxVQUFJLEdBQUdGLFNBQVMsQ0FBQyxDQUFELENBQWhCO0FBRUE3SixXQUFLLEdBQUtqTyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXcVgsT0FBWCxJQUFzQixJQUF2QixHQUErQixDQUEvQixHQUFtQyxDQUE1Qzs7QUFDQSxVQUFJLENBQUNRLE1BQU0sQ0FBQ0csSUFBRCxDQUFYLEVBQW1CO0FBQ2ZILGNBQU0sQ0FBQ0csSUFBRCxDQUFOLEdBQWUsRUFBZjtBQUNIOztBQUNESCxZQUFNLENBQUNHLElBQUQsQ0FBTixDQUFhRCxPQUFiLElBQXdCOUosS0FBeEI7QUFDSCxLQVZEO0FBV0E0SixVQUFNLEdBQUd4RSxJQUFJLENBQUM0RSxTQUFMLENBQWVKLE1BQWYsQ0FBVDtBQUVILEdBakJEO0FBbUJBN1gsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0REEsS0FBQyxDQUFDZ0IsY0FBRjtBQUNBLFFBQUk2UCxtQkFBbUIsR0FBRyxFQUExQjtBQUNBLFFBQUlDLEtBQUssR0FBR25ZLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJxVixHQUFuQixFQUFaO0FBQ0EsUUFBSStDLElBQUksR0FBR3BZLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JxVixHQUFsQixFQUFYO0FBQ0EsUUFBSWdELE1BQU0sR0FBSSxLQUFkO0FBQ0EsUUFBSUMsa0JBQWtCLEdBQUcsS0FBekI7QUFFQSxRQUFJdFksQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0IsQ0FBeEIsRUFBMkJxWCxPQUEzQixJQUFzQyxJQUExQyxFQUFnRGdCLE1BQU0sR0FBRyxJQUFUO0FBQ2hELFFBQUlyWSxDQUFDLENBQUMsZ0NBQUQsQ0FBRCxDQUFvQyxDQUFwQyxFQUF1Q3FYLE9BQXZDLElBQWtELElBQXRELEVBQTREaUIsa0JBQWtCLEdBQUcsSUFBckIsQ0FUTixDQVV0RDs7QUFDSSxRQUFJbEYsTUFBTSxHQUFHcFQsQ0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXMlQsVUFBWCxDQUFzQixVQUF0QixFQUFrQzRFLGlCQUFsQyxDQUFvRCxJQUFwRCxDQUFiLENBWGtELENBWXhEOztBQUNFdlksS0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXMlQsVUFBWCxDQUFzQixVQUF0QixFQUFrQzZFLGlCQUFsQyxHQUFzRHBSLE9BQXRELENBQThELFVBQVNDLENBQVQsRUFBWTtBQUN0RSxVQUFJQSxDQUFDLENBQUNpSCxJQUFGLElBQVUsV0FBZCxFQUEyQjtBQUN2QjRKLDJCQUFtQixDQUFDN1EsQ0FBQyxDQUFDeUYsU0FBSCxDQUFuQixHQUFtQ3pGLENBQUMsQ0FBQ21NLFlBQXJDO0FBQ0g7QUFDSixLQUpEO0FBS0E1UixVQUFNLENBQUNvRixTQUFQLEdBbEJzRCxDQW1CdEQ7QUFDQTtBQUNBOztBQUNBLFFBQUlvTSxNQUFNLElBQUk4RSxtQkFBZCxFQUFtQztBQUMvQmxZLE9BQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIcFQsV0FBRyxFQUFFLGNBQWNmLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixhQUF0QixDQURoQjtBQUVIMkosWUFBSSxFQUFFLE1BRkg7QUFHSHBDLGdCQUFRLEVBQUUsTUFIUDtBQUlIdkgsWUFBSSxFQUFFO0FBQUMsbUJBQVN3VCxLQUFWO0FBQWlCLHFCQUFXL0UsTUFBNUI7QUFBb0Msc0JBQVk4RSxtQkFBaEQ7QUFBcUUsb0JBQVVHLE1BQS9FO0FBQXNGLGdDQUFzQkMsa0JBQTVHO0FBQWdJLGtCQUFRRixJQUF4STtBQUE4SSxrQkFBUXBZLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JxVixHQUFsQjtBQUF0SixTQUpIO0FBS0huUSxlQUFPLEVBQUUsaUJBQVU2SCxNQUFWLEVBQWtCO0FBQ3ZCLGNBQUlBLE1BQU0sQ0FBQzZLLE1BQVAsSUFBaUIsQ0FBckIsRUFBd0I7QUFDcEI1WCxhQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCNkwsTUFBTSxDQUFDekgsT0FBeEIsRUFBaUNuQixJQUFqQztBQUNILFdBRkQsTUFFTztBQUNIc1UsNkJBQWlCLENBQUNuVSxJQUFsQjtBQUNIO0FBQ0osU0FYRTtBQVlIVSxhQUFLLEVBQUUsaUJBQVk7QUFDZjdILGlCQUFPLENBQUNDLEdBQVIsQ0FBWSxtQ0FBWjtBQUNIO0FBZEUsT0FBUDtBQWdCSCxLQWpCRCxNQWlCTztBQUNINEMsT0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUFZa0IsSUFBWixDQUFpQixpRUFBakIsRUFBb0ZpRCxJQUFwRjtBQUNIO0FBRUosR0EzQ0QsRUEvVHlCLENBNFd6Qjs7QUFDQW5FLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGNBQXRCLEVBQXNDLFVBQVVjLENBQVYsRUFBYTtBQUMvQyxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsMkRBQTdCLEVBQTBGLGFBQTFGLENBQWI7QUFDQTVMLFVBQU0sQ0FBQzZMLElBQVAsQ0FBWSxVQUFVQyxZQUFWLEVBQXdCO0FBQ2hDLFVBQUlBLFlBQUosRUFBa0I7QUFDZCxZQUFJeGIsRUFBRSxHQUFHMkMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLElBQWIsQ0FBVDtBQUNBLFlBQUl0RixNQUFNLEdBQUdXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsRUFBYjtBQUNBVyxTQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGdCQUFNLEVBQUUsT0FETDtBQUVIcEYsYUFBRyxFQUFFLE1BQU1mLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUIyRSxJQUFqQixDQUFzQixhQUF0QixDQUFOLEdBQTZDLEdBQTdDLEdBQW1EdEgsRUFGckQ7QUFHSDZPLGtCQUFRLEVBQUUsTUFIUDtBQUlIdkgsY0FBSSxFQUFFO0FBQUMsMkJBQWU7QUFBaEIsV0FKSDtBQUtITyxpQkFBTyxFQUFFLGlCQUFVNkgsTUFBVixFQUFrQjtBQUN2Qi9NLGFBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVUxQixNQUFWO0FBQ0gsV0FQRTtBQVFIcUgsZUFBSyxFQUFFLGlCQUFZO0FBQ2ZxUixpQkFBSyxDQUFDLCtCQUFELENBQUw7QUFDSCxXQVZFO0FBV0hDLGlCQUFPLEVBQUU7QUFYTixTQUFQO0FBYUg7O0FBQ0R2SixZQUFNLEdBQUdqUCxTQUFUO0FBQ0gsS0FuQkQ7QUFvQkgsR0F0QkQ7QUF1QkFrQyxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixrQkFBdEIsRUFBMEMsVUFBVWMsQ0FBVixFQUFhO0FBQ25EckgsS0FBQyxDQUFDLHVCQUFELENBQUQsQ0FBMkI4WSxJQUEzQixDQUFnQyxpREFBaURDLE1BQWpGLEVBQXlGLElBQXpGO0FBQ0EsUUFBSUMsV0FBVyxHQUFHcFgsTUFBTSxDQUFDcVgsYUFBUCxDQUFxQix1QkFBckIsRUFBOEMsc0JBQTlDLEVBQXNFLEtBQXRFLENBQWxCO0FBQ0FqWixLQUFDLENBQUMsd0JBQUQsQ0FBRCxDQUE0Qm1FLElBQTVCO0FBQ0E2VSxlQUFXLENBQUM3VSxJQUFaO0FBQ0FuRSxLQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCLEVBQWpCLEVBQXFCb0QsSUFBckI7QUFDSCxHQU5EO0FBT0F0RSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQiwyQ0FBdEIsRUFBbUUsVUFBVWMsQ0FBVixFQUFhO0FBQzVFckgsS0FBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJrWixPQUE1QixDQUFvQyxVQUFwQyxFQUFnRDVVLElBQWhEO0FBQ0gsR0FGRDtBQUdBdEUsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0REEsS0FBQyxDQUFDZ0IsY0FBRjs7QUFDQSxRQUFJLEtBQUs4USxZQUFMLENBQWtCLE1BQWxCLENBQUosRUFBK0I7QUFDM0IsVUFBSUMsSUFBSSxHQUFHLE1BQU1wWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVE2QyxJQUFSLENBQWEsTUFBYixDQUFqQjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUl1VyxJQUFJLEdBQUcvUixDQUFDLENBQUNnUyxNQUFGLENBQVNELElBQXBCO0FBQ0gsS0FOcUQsQ0FRdEQ7OztBQUNBLFFBQUlwWixDQUFDLENBQUNvWixJQUFELENBQUQsQ0FBUXhZLElBQVIsQ0FBYSxvQ0FBYixFQUFtRDdELE1BQW5ELElBQTZELENBQWpFLEVBQW9FO0FBQ2hFaUQsT0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVF4WSxJQUFSLENBQWEsMENBQWIsRUFBeUQ2QyxLQUF6RCxHQUFpRUEsS0FBakU7QUFDSDs7QUFDRCxRQUFJekQsQ0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVEsQ0FBUixFQUFXRSxjQUFYLE1BQStCLEtBQW5DLEVBQTBDO0FBQ3RDdFosT0FBQyxDQUFDb1osSUFBRCxDQUFELENBQVFHLE1BQVI7QUFDSDtBQUNKLEdBZkQ7QUFnQkF2WixHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsUUFBYixFQUF1QixnQkFBdkIsRUFBeUMzRSxNQUFNLENBQUM0WCxtQkFBUCxDQUEyQkMsSUFBM0IsQ0FBZ0MsSUFBaEMsQ0FBekM7QUFFQXpaLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGdCQUF0QixFQUF3QyxVQUFVYyxDQUFWLEVBQWE7QUFDakRBLEtBQUMsQ0FBQ2dCLGNBQUY7QUFDQSxRQUFJcVIsT0FBTyxHQUFHMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZDtBQUNBLFFBQUk3RixLQUFLLEdBQUdrQixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsYUFBYixDQUFaO0FBQ0EsUUFBSWtMLE1BQU0sR0FBRzdQLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxjQUFiLENBQWI7QUFDQSxRQUFJZ1YsbUJBQW1CLEdBQUczWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsdUJBQWIsQ0FBMUI7QUFDQSxRQUFJK0osU0FBUyxHQUFHMU8sQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGtCQUFiLENBQWhCO0FBQ0EsUUFBSWlWLFdBQVcsR0FBRzVaLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxtQkFBYixDQUFsQjtBQUNBLFFBQUlrVixXQUFXLEdBQUc3WixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsbUJBQWIsQ0FBbEI7QUFDQSxRQUFJbVYsV0FBVyxHQUFHOVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLG1CQUFiLENBQWxCO0FBQ0EsUUFBSW9WLFVBQVUsR0FBRy9aLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxrQkFBYixDQUFqQjtBQUNBLFFBQUlxVixpQkFBaUIsR0FBR2hhLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxtQkFBYixDQUF4QjtBQUNBLFFBQUlzVixtQkFBbUIsR0FBR2phLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxvQkFBYixDQUExQjtBQUNBLFFBQUl1VixNQUFNLEdBQUlsYSxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsY0FBYixDQUFkLENBYmlELENBZWpEOztBQUNBM0UsS0FBQyxDQUFDLE1BQUkwWixPQUFKLEdBQWMsT0FBZixDQUFELENBQXlCelksSUFBekIsQ0FBOEIsWUFBVztBQUNoQ2pCLE9BQUMsQ0FBQyxJQUFELENBQUQsQ0FBUSxDQUFSLEVBQVdtYSxLQUFYO0FBQ1IsS0FGRDtBQUdBLFFBQUlDLEtBQUssR0FBR3hZLE1BQU0sQ0FBQ3FYLGFBQVAsQ0FBcUJTLE9BQXJCLEVBQThCMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGFBQWIsQ0FBOUIsRUFBMkQ3RixLQUEzRCxFQUFrRStRLE1BQWxFLENBQVo7O0FBQ0EsUUFBSW5CLFNBQUosRUFBZTtBQUNYMEwsV0FBSyxDQUFDaEwsTUFBTixDQUFhLFdBQWIsRUFBMEJWLFNBQTFCO0FBQ0g7O0FBQ0QsUUFBSWlMLG1CQUFKLEVBQXlCO0FBQ3JCO0FBQ0E7QUFDQTVhLFlBQU0sQ0FBQ3dZLGVBQVAsQ0FBdUJvQyxtQkFBdkIsRUFDS1UsSUFETCxDQUNVLFVBQVUxVixJQUFWLEVBQWdCO0FBQ2xCeVYsYUFBSyxDQUFDaEwsTUFBTixDQUFhLGlCQUFiLEVBQWdDekssSUFBaEM7QUFDSCxPQUhMLFdBSVcsVUFBVUssS0FBVixFQUFpQjtBQUNwQjdILGVBQU8sQ0FBQzZILEtBQVIsQ0FBYyxVQUFkLEVBQTBCQSxLQUExQjtBQUNILE9BTkw7QUFPSDs7QUFDRCxRQUFJNFUsV0FBSixFQUFpQjtBQUNiUSxXQUFLLENBQUNoTCxNQUFOLENBQWEsYUFBYixFQUE0QnBQLENBQUMsQ0FBQzRaLFdBQUQsQ0FBN0I7QUFDSDs7QUFDRCxRQUFJTSxNQUFKLEVBQVk7QUFDUkUsV0FBSyxDQUFDaEwsTUFBTixDQUFhLGlCQUFiLEVBQWdDOEssTUFBaEM7QUFDSDs7QUFDRCxRQUFJTCxXQUFKLEVBQWlCO0FBQ2JPLFdBQUssQ0FBQ2hMLE1BQU4sQ0FBYSxhQUFiLEVBQTRCeUssV0FBNUI7QUFDSDs7QUFDRCxRQUFJQyxXQUFKLEVBQWlCO0FBQ2JNLFdBQUssQ0FBQ2hMLE1BQU4sQ0FBYSxhQUFiLEVBQTRCMEssV0FBNUI7QUFDSDs7QUFDRCxRQUFJRyxtQkFBbUIsS0FBSyxLQUE1QixFQUFtQztBQUMvQkcsV0FBSyxDQUFDaEwsTUFBTixDQUFhLHFCQUFiLEVBQW9DNkssbUJBQXBDO0FBQ0g7O0FBQ0QsUUFBSUYsVUFBSixFQUFnQjtBQUNaSyxXQUFLLENBQUNoTCxNQUFOLENBQWEsU0FBYixFQUF3QixVQUFTL0gsQ0FBVCxFQUFZO0FBQ2hDckgsU0FBQyxDQUFDK1osVUFBRCxDQUFELENBQWNPLFlBQWQsQ0FBMkI7QUFDdkJDLHlCQUFlLEVBQUUsSUFETTtBQUV2QkMsdUJBQWEsRUFBRSxJQUZRO0FBR3ZCQyxtQkFBUyxFQUFFLElBSFk7QUFJdkIzYixlQUFLLEVBQUUsTUFKZ0I7QUFLdkIrUSxnQkFBTSxFQUFFbUs7QUFMZSxTQUEzQjtBQU9BSSxhQUFLLENBQUNNLE9BQU47QUFDSCxPQVREO0FBVUg7O0FBRUQxYSxLQUFDLENBQUMsTUFBTTBaLE9BQVAsQ0FBRCxDQUFpQnZWLElBQWpCO0FBRUFpVyxTQUFLLENBQUNqVyxJQUFOO0FBQ0FuRSxLQUFDLENBQUMsUUFBRCxDQUFELENBQVlrQixJQUFaLENBQWlCLEVBQWpCLEVBQXFCb0QsSUFBckI7QUFDSCxHQWxFRDtBQW9FQXRFLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHdCQUF0QixFQUFnRCxVQUFVYyxDQUFWLEVBQWE7QUFDekRBLEtBQUMsQ0FBQ2dCLGNBQUY7QUFDQSxRQUFJcVIsT0FBTyxHQUFHMVosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFlBQWIsQ0FBZDtBQUNBM0UsS0FBQyxDQUFDLE1BQU0wWixPQUFQLENBQUQsQ0FBaUJSLE9BQWpCLENBQXlCLFVBQXpCLEVBQXFDNVUsSUFBckM7QUFDSCxHQUpELEVBcGV5QixDQTBlekI7O0FBQ0F0RSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsUUFBYixFQUF1QiwyQkFBdkIsRUFBb0QsVUFBVWMsQ0FBVixFQUFhO0FBQzdELFFBQUlnUyxNQUFNLEdBQUdyWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFiO0FBQ0EzRSxLQUFDLENBQUNxWixNQUFELENBQUQsQ0FBVXNCLE1BQVY7QUFDSCxHQUhEO0FBS0EzYSxHQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThYLEtBQVosQ0FBa0IsWUFBWTtBQUMxQjNULFVBQU0sQ0FBQ29GLFNBQVA7QUFDQWhILEtBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDdUcsRUFBbEMsQ0FBcUMsYUFBckMsRUFBb0QsVUFBVWMsQ0FBVixFQUFhO0FBQzdEdVQsa0JBQVksQ0FBQ0MsT0FBYixDQUFxQixXQUFyQixFQUFrQzdhLENBQUMsQ0FBQ3FILENBQUMsQ0FBQ2dTLE1BQUgsQ0FBRCxDQUFZeFcsSUFBWixDQUFpQixJQUFqQixDQUFsQztBQUNILEtBRkQ7QUFHQSxRQUFJaVksU0FBUyxHQUFHRixZQUFZLENBQUNHLE9BQWIsQ0FBcUIsV0FBckIsQ0FBaEI7O0FBQ0EsUUFBSUQsU0FBSixFQUFlO0FBQ1g5YSxPQUFDLENBQUMsTUFBTThhLFNBQVAsQ0FBRCxDQUFtQkUsR0FBbkIsQ0FBdUIsTUFBdkI7QUFDSDs7QUFDRGhiLEtBQUMsQ0FBQyx5QkFBRCxDQUFELENBQTZCaWIsSUFBN0IsQ0FBa0MsZ0JBQWxDLEVBQW1EO0FBQUNDLGlCQUFXLEVBQUc7QUFBQyxhQUFLO0FBQUNDLGlCQUFPLEVBQUUsT0FBVjtBQUFtQkMsbUJBQVMsRUFBRTtBQUE5QjtBQUFOO0FBQWYsS0FBbkQ7QUFDRHBiLEtBQUMsQ0FBQyxtQkFBRCxDQUFELENBQXVCaWIsSUFBdkIsQ0FBNEIsWUFBNUIsRUFWMkIsQ0FZNUI7QUFDRCxHQWJELEVBaGZ5QixDQStmekI7O0FBQ0FqYixHQUFDLENBQUN2QyxRQUFELENBQUQsQ0FBWThJLEVBQVosQ0FBZSxPQUFmLEVBQXdCLGVBQXhCLEVBQXlDLFVBQVVjLENBQVYsRUFBYTtBQUNsREEsS0FBQyxDQUFDZ0IsY0FBRjtBQUNBLFFBQUlnUixNQUFNLEdBQUdyWixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFiO0FBQ0EzRSxLQUFDLENBQUNxWixNQUFELENBQUQsQ0FBVXNCLE1BQVY7O0FBQ0EsUUFBSXRCLE1BQU0sSUFBSSxlQUFkLEVBQStCO0FBQzNCdGEsWUFBTSxDQUFDbkIsZ0JBQVA7QUFDSDtBQUNKLEdBUEQ7QUFTQW9DLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLG9CQUF0QixFQUE0QyxVQUFVYyxDQUFWLEVBQWE7QUFDckRySCxLQUFDLENBQUMsSUFBRCxDQUFELENBQVEwRCxXQUFSLENBQW9CLGVBQXBCO0FBQ0EsUUFBSTJYLFFBQVEsR0FBR3JiLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxVQUFiLENBQWY7QUFDQSxRQUFJMlcsYUFBYSxHQUFHdGIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGVBQWIsQ0FBcEI7QUFDQTNFLEtBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sWUFBTSxFQUFFLE9BREw7QUFFSHBGLFNBQUcsRUFBRSxvQ0FBb0NzYSxRQUFwQyxHQUErQyxHQUEvQyxHQUFxREMsYUFGdkQ7QUFHSHBQLGNBQVEsRUFBRSxNQUhQO0FBSUhsSCxXQUFLLEVBQUUsaUJBQVk7QUFDZnFSLGFBQUssQ0FBQywrQkFBRCxDQUFMO0FBQ0gsT0FORTtBQU9IQyxhQUFPLEVBQUU7QUFQTixLQUFQO0FBU0gsR0FiRDtBQWVBdFcsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDLFVBQVVjLENBQVYsRUFBYTtBQUN0RCxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsc0RBQTdCLEVBQXFGLGFBQXJGLENBQWI7QUFDQSxRQUFJMEMsUUFBUSxHQUFHcmIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFVBQWIsQ0FBZjtBQUNBLFFBQUkyVyxhQUFhLEdBQUd0YixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsZUFBYixDQUFwQjtBQUNBLFFBQUl0RixNQUFNLEdBQUdXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQkEsTUFBakIsRUFBYjtBQUNBME4sVUFBTSxDQUFDNkwsSUFBUCxDQUFZLFVBQVVDLFlBQVYsRUFBd0I7QUFDaEMsVUFBSUEsWUFBSixFQUFrQjtBQUNkN1ksU0FBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxnQkFBTSxFQUFFLFFBREw7QUFFSHBGLGFBQUcsRUFBRSxxQ0FBcUNzYSxRQUFyQyxHQUFnRCxHQUFoRCxHQUFzREMsYUFGeEQ7QUFHSHBQLGtCQUFRLEVBQUUsTUFIUDtBQUlIaEgsaUJBQU8sRUFBRSxpQkFBVTZILE1BQVYsRUFBa0I7QUFDdkIvTSxhQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVMUIsTUFBVjtBQUNILFdBTkU7QUFPSHFILGVBQUssRUFBRSxpQkFBWTtBQUNmcVIsaUJBQUssQ0FBQywrQkFBRCxDQUFMO0FBQ0gsV0FURTtBQVVIQyxpQkFBTyxFQUFFO0FBVk4sU0FBUDtBQVlIO0FBQ0osS0FmRDtBQWdCSCxHQXJCRDtBQXNCQXRXLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxhQUFiLEVBQTRCLG9DQUE1QixFQUFrRSxVQUFVYyxDQUFWLEVBQWE7QUFDM0UsUUFBSWtVLFNBQVMsR0FBR3ZiLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxrQkFBYixDQUFoQjtBQUNBc1MsZUFBVyxDQUFDc0UsU0FBRCxDQUFYO0FBQ0gsR0FIRDtBQUtBdmIsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLGtCQUFiLEVBQWlDLHVDQUFqQyxFQUEwRSxVQUFVYyxDQUFWLEVBQWE7QUFDbkYsUUFBSXJILENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTBILElBQVIsR0FBZTNLLE1BQWYsSUFBeUIsQ0FBekIsSUFBOEJpRCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFYLE1BQVIsR0FBaUIsQ0FBakIsRUFBb0J5SCxTQUFwQixJQUFpQyxHQUFuRSxFQUF3RTtBQUNwRSxVQUFJaVEsT0FBTyxHQUFHL1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMEgsSUFBUixHQUFlLENBQWYsQ0FBZDtBQUNBLFVBQUlRLFFBQVEsR0FBRyxLQUFmO0FBQ0EsVUFBSWxJLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxpQkFBYixDQUFKLEVBQXFDdUQsUUFBUSxHQUFFbEksQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGlCQUFiLENBQVY7QUFDckMsVUFBSTNFLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQixDQUFqQixFQUFvQnlILFNBQXBCLElBQWlDLEdBQXJDLEVBQTBDaVEsT0FBTyxHQUFHL1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCcUksSUFBakIsR0FBd0IsQ0FBeEIsQ0FBVjtBQUMxQ3FQLGFBQU8sQ0FBQ3lFLFlBQVIsQ0FBcUIsV0FBckIsRUFBa0MsRUFBbEM7QUFDQSxVQUFNM0UsY0FBYyxHQUFHQyw2REFBWSxDQUFDLElBQUQsRUFBT0MsT0FBUCxFQUFnQjtBQUFDMEUsaUJBQVMsRUFBRXZUO0FBQVosT0FBaEIsQ0FBbkMsQ0FOb0UsQ0FPcEU7QUFDQTs7QUFDQTJPLG9CQUFjLENBQUNHLE1BQWY7QUFDSDtBQUNKLEdBWkQ7QUFhQWhYLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxpQkFBYixFQUFnQyx1Q0FBaEMsRUFBeUUsVUFBVWMsQ0FBVixFQUFhO0FBQ2xGLFFBQUlySCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEwSCxJQUFSLEdBQWUzSyxNQUFmLElBQXlCLENBQXpCLElBQThCaUQsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCLENBQWpCLEVBQW9CeUgsU0FBcEIsSUFBaUMsR0FBbkUsRUFBd0U7QUFDcEUsVUFBSWlRLE9BQU8sR0FBRy9XLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTBILElBQVIsR0FBZSxDQUFmLENBQWQ7QUFDQSxVQUFJMUgsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCLENBQWpCLEVBQW9CeUgsU0FBcEIsSUFBaUMsR0FBckMsRUFBMENpUSxPQUFPLEdBQUcvVyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFYLE1BQVIsR0FBaUJxSSxJQUFqQixHQUF3QixDQUF4QixDQUFWO0FBQzFDcVAsYUFBTyxDQUFDMkUsZUFBUixDQUF3QixXQUF4QjtBQUNIO0FBRUosR0FQRDtBQVNBMWIsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isa0JBQXRCLEVBQTBDLFVBQVVjLENBQVYsRUFBYTtBQUNuRCxRQUFJK1IsSUFBSSxHQUFHcFosQ0FBQyxDQUFDLCtFQUFELENBQUQsQ0FBbUYsQ0FBbkYsQ0FBWDtBQUNBb1osUUFBSSxDQUFDZSxLQUFMLEdBRm1ELENBR25EOztBQUNBbmEsS0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0JxVixHQUEvQixDQUFtQyxTQUFuQztBQUNBclYsS0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0IyYixZQUEvQixDQUE0QyxTQUE1QztBQUVBLFFBQUlDLE9BQU8sR0FBRyxJQUFJcmIsU0FBUyxDQUFDc2IsS0FBZCxDQUFvQnBlLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3Qix3QkFBeEIsQ0FBcEIsQ0FBZDtBQUNBa2UsV0FBTyxDQUFDelgsSUFBUjtBQUNILEdBVEQ7QUFVQW5FLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHNDQUF0QixFQUE4RCxVQUFVYyxDQUFWLEVBQWE7QUFDdkUsUUFBSWhJLE1BQU0sR0FBR1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEVBQWI7QUFDQTJXLGtCQUFjLENBQUNoVyxDQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVc0YsSUFBVixDQUFlLElBQWYsQ0FBRCxFQUF1QjNFLENBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVVzRixJQUFWLENBQWUsTUFBZixDQUF2QixFQUErQzNFLENBQUMsQ0FBQ1gsTUFBRCxDQUFELENBQVVzRixJQUFWLENBQWUsT0FBZixDQUEvQyxDQUFkO0FBQ0gsR0FIRDtBQUlBM0UsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isd0JBQXRCLEVBQWdELFVBQVVjLENBQVYsRUFBYTtBQUN6RHRJLFVBQU0sQ0FBQytXLFdBQVAsQ0FBbUI5VixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFuQjtBQUNILEdBRkQ7QUFHQTNFLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGlCQUF0QixFQUF5QyxVQUFVYyxDQUFWLEVBQWE7QUFDbERySCxLQUFDLENBQUMsSUFBRCxDQUFELENBQVE0VyxPQUFSLENBQWdCLFVBQWhCLEVBQTRCbFQsV0FBNUIsQ0FBd0MsZUFBeEM7QUFDSCxHQUZEO0FBR0ExRCxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixnQkFBdEIsRUFBd0MsVUFBVWMsQ0FBVixFQUFhO0FBQ2pEQSxLQUFDLENBQUNnQixjQUFGOztBQUNBLFFBQUloQixDQUFDLENBQUN5VSxLQUFGLElBQVcsRUFBZixFQUFtQjtBQUNmL2MsWUFBTSxDQUFDMlgsV0FBUCxDQUFtQjFXLENBQUMsQ0FBQyxJQUFELENBQXBCLEVBQTRCQSxDQUFDLENBQUMsSUFBRCxDQUE3QjtBQUNIO0FBQ0osR0FMRDtBQU1BQSxHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixnQkFBdEIsRUFBd0MsVUFBVWMsQ0FBVixFQUFhO0FBQ2pEdEksVUFBTSxDQUFDMlgsV0FBUCxDQUFtQjFXLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUXdILElBQVIsQ0FBYSxPQUFiLENBQW5CLEVBQTBDeEgsQ0FBQyxDQUFDLElBQUQsQ0FBM0M7QUFDSCxHQUZEO0FBR0FBLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLGVBQXRCLEVBQXVDLFVBQVVjLENBQVYsRUFBYTtBQUNoRDRPLGtCQUFjLENBQUNqVyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFELEVBQXFCM0UsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBckIsRUFBMEMzRSxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsV0FBYixDQUExQyxFQUFxRSxJQUFyRSxDQUFkO0FBQ0gsR0FGRDtBQUdBM0UsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0Isb0JBQXRCLEVBQTRDLFVBQVVjLENBQVYsRUFBYTtBQUNyRCxRQUFJMEYsTUFBTSxHQUFHaEssVUFBVSxDQUFDaVMsRUFBWCxDQUFjMEQsTUFBZCxDQUFxQkMsT0FBckIsQ0FBNkIsc0RBQTdCLEVBQXFGLFFBQXJGLENBQWI7QUFDQSxRQUFJb0QsT0FBTyxHQUFHL2IsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLFlBQWIsQ0FBZDtBQUNBLFFBQUl5VixLQUFLLEdBQUdwYSxDQUFDLENBQUMsTUFBTStiLE9BQVAsQ0FBRCxDQUFpQjdDLE9BQWpCLENBQXlCLFVBQXpCLENBQVo7QUFDQSxRQUFJblksR0FBRyxHQUFHZixDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsTUFBYixDQUFWO0FBQ0FvSSxVQUFNLENBQUM2TCxJQUFQLENBQVksVUFBVUMsWUFBVixFQUF3QjtBQUNoQyxVQUFJQSxZQUFKLEVBQWtCO0FBQ2Q3WSxTQUFDLENBQUNtVSxJQUFGLENBQU87QUFDSGhPLGdCQUFNLEVBQUUsUUFETDtBQUVIcEYsYUFBRyxFQUFFQSxHQUZGO0FBR0htTCxrQkFBUSxFQUFFLE1BSFA7QUFJSGhILGlCQUFPLEVBQUUsaUJBQVU2SCxNQUFWLEVBQWtCO0FBQ3ZCL00sYUFBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQmtCLElBQW5CLENBQXdCNkwsTUFBTSxDQUFDaVAsTUFBL0I7QUFDQTVCLGlCQUFLLENBQUM5VixJQUFOO0FBQ0F0RSxhQUFDLENBQUMsTUFBTStiLE9BQVAsQ0FBRCxDQUFpQnpYLElBQWpCO0FBQ0g7QUFSRSxTQUFQO0FBVUg7O0FBQ0R5SSxZQUFNLEdBQUdqUCxTQUFUO0FBQ0gsS0FkRDtBQWVILEdBcEJELEVBem1CeUIsQ0ErbkJ6Qjs7QUFDQWtDLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLDBDQUF0QixFQUFrRSxVQUFVYyxDQUFWLEVBQWE7QUFDM0UsUUFBSS9CLE9BQU8sR0FBR3RGLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxTQUFiLENBQWQ7QUFDQSxRQUFJd1AsSUFBSSxHQUFHblUsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBWDtBQUNBLFFBQUksQ0FBQ1csT0FBTCxFQUFjQSxPQUFPLEdBQUksb0RBQVg7QUFDZCxRQUFJMlcsV0FBVyxHQUFHamMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLGFBQWIsQ0FBbEI7QUFDQSxRQUFJdVgsRUFBRSxHQUFHbGMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLElBQWIsQ0FBVDtBQUNBLFFBQUlvSSxNQUFNLEdBQUdoSyxVQUFVLENBQUNpUyxFQUFYLENBQWMwRCxNQUFkLENBQXFCQyxPQUFyQixDQUE2QixRQUFNclQsT0FBTixHQUFjLE1BQTNDLENBQWI7O0FBRUEsUUFBSXRGLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTJFLElBQVIsQ0FBYSxNQUFiLENBQUosRUFBMEI7QUFDdEIsVUFBSTVELEdBQUcsR0FBR2YsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRMkUsSUFBUixDQUFhLE1BQWIsQ0FBVjtBQUNILEtBRkQsTUFFTztBQUNILFVBQUk1RCxHQUFHLEdBQUdmLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUTZDLElBQVIsQ0FBYSxNQUFiLENBQVY7QUFDSDs7QUFFRGtLLFVBQU0sQ0FBQzZMLElBQVAsQ0FBWSxVQUFVQyxZQUFWLEVBQXdCO0FBQ2hDLFVBQUlBLFlBQUosRUFBa0I7QUFDZCxZQUFJOVgsR0FBSixFQUFTO0FBQ0wsY0FBSW9ULElBQUosRUFBVTtBQUNOblUsYUFBQyxDQUFDbVUsSUFBRixDQUFPO0FBQ0hoTyxvQkFBTSxFQUFFLEtBREw7QUFFSHBGLGlCQUFHLEVBQUVBLEdBRkY7QUFHSHVWLHFCQUFPLEVBQUUsSUFITjtBQUlIcFIscUJBQU8sRUFBRSxpQkFBVVAsSUFBVixFQUFnQndYLFVBQWhCLEVBQTRCMVgsR0FBNUIsRUFBaUM7QUFDdEMsb0JBQUlFLElBQUksQ0FBQ3pELElBQVQsRUFBZTtBQUNYbEIsbUJBQUMsQ0FBQ2ljLFdBQUQsQ0FBRCxDQUFlL2EsSUFBZixDQUFvQnlELElBQUksQ0FBQ3pELElBQXpCO0FBQ0FsQixtQkFBQyxDQUFDaWMsV0FBRCxDQUFELENBQWU5WCxJQUFmO0FBQ0g7QUFDSjtBQVRFLGFBQVA7QUFXSCxXQVpELE1BWU87QUFDSDFHLG9CQUFRLENBQUNnSixRQUFULENBQWtCa1AsSUFBbEIsR0FBeUI1VSxHQUF6QjtBQUNIO0FBQ0o7O0FBQ0QsWUFBSW1iLEVBQUosRUFBUTtBQUNKdlQsY0FBSSxDQUFDdVQsRUFBRCxDQUFKO0FBQ0g7QUFDSjs7QUFDRG5QLFlBQU0sR0FBR2pQLFNBQVQ7QUFDSCxLQXhCRDtBQXlCQSxXQUFPLEtBQVA7QUFDSCxHQXhDRDtBQTJDQWtDLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHdCQUF0QixFQUFnRCxVQUFVYyxDQUFWLEVBQWE7QUFDekR0SSxVQUFNLENBQUNxZCx5QkFBUCxHQUFtQ3JaLFVBQVUsQ0FBQ2lTLEVBQVgsQ0FBYzBELE1BQWQsQ0FBcUJDLE9BQXJCLENBQTZCLHdEQUE3QixDQUFuQztBQUNBLFFBQUl0YixFQUFFLEdBQUcyQyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVEyRSxJQUFSLENBQWEsSUFBYixDQUFUO0FBQ0EsUUFBSXRGLE1BQU0sR0FBR1csQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRWCxNQUFSLEdBQWlCQSxNQUFqQixFQUFiO0FBQ0EsV0FBT04sTUFBTSxDQUFDcWQseUJBQVAsQ0FBaUN4RCxJQUFqQyxDQUFzQyxVQUFVQyxZQUFWLEVBQXdCO0FBQ2pFLFVBQUlBLFlBQUosRUFBa0I7QUFDZDdZLFNBQUMsQ0FBQ21VLElBQUYsQ0FBTztBQUNIaE8sZ0JBQU0sRUFBRSxRQURMO0FBRUhwRixhQUFHLEVBQUUscUJBQXFCMUQsRUFGdkI7QUFHSDZPLGtCQUFRLEVBQUUsTUFIUDtBQUlIaEgsaUJBQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCNkgsTUFBakIsRUFBeUI7QUFDOUIvTSxhQUFDLENBQUNYLE1BQUQsQ0FBRCxDQUFVMUIsTUFBVjtBQUNILFdBTkU7QUFPSHFILGVBQUssRUFBRSxTQUFTQSxLQUFULEdBQWlCO0FBQ3BCN0gsbUJBQU8sQ0FBQ0MsR0FBUixDQUFZLCtCQUFaO0FBQ0gsV0FURTtBQVVIa1osaUJBQU8sRUFBRTtBQVZOLFNBQVA7QUFZSDtBQUNKLEtBZk0sQ0FBUDtBQWdCSCxHQXBCRDtBQXVCQXRXLEdBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVXVHLEVBQVYsQ0FBYSxPQUFiLEVBQXNCLHFCQUF0QixFQUE2QyxVQUFVYyxDQUFWLEVBQWE7QUFDdEQsUUFBSVgsTUFBTSxHQUFHMUcsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRcVYsR0FBUixHQUFjZ0gsV0FBZCxFQUFiO0FBQ0FyYyxLQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QmlCLElBQXZCLENBQTRCLFVBQVVvRyxDQUFWLEVBQWE7QUFDckMsVUFBSXJILENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVosSUFBUixHQUFlaWQsV0FBZixHQUE2Qi9ZLE9BQTdCLENBQXFDb0QsTUFBckMsS0FBZ0QsQ0FBQyxDQUFyRCxFQUF3RDtBQUNwRDFHLFNBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQm9HLFFBQWpCLENBQTBCLE1BQTFCLEVBQWtDNlAsV0FBbEMsQ0FBOEMsUUFBOUM7QUFDSCxPQUZELE1BRU87QUFDSHRWLFNBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUVgsTUFBUixHQUFpQmlXLFdBQWpCLENBQTZCLE1BQTdCLEVBQXFDN1AsUUFBckMsQ0FBOEMsUUFBOUM7QUFDSDtBQUNKLEtBTkQ7QUFPSCxHQVREO0FBV0F6RixHQUFDLENBQUMsTUFBRCxDQUFELENBQVV1RyxFQUFWLENBQWEsT0FBYixFQUFzQixhQUF0QixFQUFxQyxVQUFTYyxDQUFULEVBQVk7QUFDN0NuSCxVQUFNLEdBQUcsRUFBVDtBQUNILEdBRkQ7QUFHQUYsR0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVdUcsRUFBVixDQUFhLE9BQWIsRUFBc0IsWUFBdEIsRUFBb0MsVUFBU2MsQ0FBVCxFQUFZO0FBQzVDQSxLQUFDLENBQUNnQixjQUFGO0FBQ0EsV0FBTyxLQUFQO0FBQ0gsR0FIRDtBQUlILENBcHRCRDtBQXV0QkFySSxDQUFDLENBQUMsV0FBRCxDQUFELENBQWVpRSxpQkFBZixDQUFpQyxNQUFqQyxFOzs7Ozs7Ozs7Ozs7QUN6Z0RBIiwiZmlsZSI6ImFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtYXAgPSB7XG5cdFwiLi90Y2hhdF9jb250cm9sbGVyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvQHN5bWZvbnkvc3RpbXVsdXMtYnJpZGdlL2xhenktY29udHJvbGxlci1sb2FkZXIuanMhLi9hc3NldHMvY29udHJvbGxlcnMvdGNoYXRfY29udHJvbGxlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuL2Fzc2V0cy9jb250cm9sbGVycyBzeW5jIHJlY3Vyc2l2ZSAuL25vZGVfbW9kdWxlcy9Ac3ltZm9ueS9zdGltdWx1cy1icmlkZ2UvbGF6eS1jb250cm9sbGVyLWxvYWRlci5qcyEgXFxcXC4oanx0KXN4PyRcIjsiLCJleHBvcnQgZGVmYXVsdCB7XG4gICdzeW1mb255LS11eC10dXJiby0tdHVyYm8tY29yZSc6IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovICdAc3ltZm9ueS91eC10dXJiby9kaXN0L3R1cmJvX2NvbnRyb2xsZXIuanMnKSxcbiAgJ3N5bWZvbnktLXV4LXR1cmJvLW1lcmN1cmUtLXR1cmJvLXN0cmVhbSc6IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovICdAc3ltZm9ueS91eC10dXJiby1tZXJjdXJlL2Rpc3QvdHVyYm9fc3RyZWFtX2NvbnRyb2xsZXIuanMnKSxcbn07IiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ3N0aW11bHVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgdGFyZ2V0cyA9IFsnY291bnQnXTtcbiAgICBzdGF0aWMgdmFsdWVzID0geyBwb3B1cHM6IEFycmF5fTtcbiAgICB0b3RhbF9wb3B1cHMgPSAwO1xuXG4gICAgaW5pdGlhbGlzZSgpIHtcbiAgICAgICAgdGhpcy5wb3B1cHNWYWx1ZSA9IFtdO1xuICAgICAgIGNvbnNvbGUubG9nKFwiaGVsbG8gdGNoYXRcIik7XG4gICAgfVxuXG4gICAgLyoqIFRDSEFUICoqL1xuICAgICAgICAvL3RoaXMgZnVuY3Rpb24gY2FuIHJlbW92ZSBhIGFycmF5IGVsZW1lbnQuXG4gICAgcmVtb3ZlQXJyYXkgPSBmdW5jdGlvbihhcnJheSwgZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHJlc3QgPSBhcnJheS5zbGljZSgodG8gfHwgZnJvbSkgKyAxIHx8IGFycmF5Lmxlbmd0aCk7XG4gICAgICAgIGFycmF5Lmxlbmd0aCA9IGZyb20gPCAwID8gYXJyYXkubGVuZ3RoICsgZnJvbSA6IGZyb207XG4gICAgICAgIHJldHVybiBhcnJheS5wdXNoLmFwcGx5KGFycmF5LCByZXN0KTtcbiAgICB9O1xuXG4gICAgLy90aGlzIGlzIHVzZWQgdG8gY2xvc2UgYSBwb3B1cFxuICAgIGNsb3NlX3BvcHVwKGlkKVxuICAgIHtcbiAgICAgICAgZm9yKHZhciBpaWkgPSAwOyBpaWkgPCB0aGlzLnBvcHVwc1ZhbHVlLmxlbmd0aDsgaWlpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGlkID09IHRoaXMucG9wdXBzVmFsdWVbaWlpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwc1ZhbHVlID0gcmVtb3ZlQXJyYXkocG9wdXBlLGlpaSlcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVfcG9wdXBzKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2Rpc3BsYXlzIHRoZSBwb3B1cHMuIERpc3BsYXlzIGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3B1cHMgdGhhdCBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0IHdpZHRoXG4gICAgZGlzcGxheV9wb3B1cHMoKVxuICAgIHtcbiAgICAgICAgdmFyIHJpZ2h0ID0gNDgwO1xuXG4gICAgICAgIHZhciBpaWkgPSAwO1xuICAgICAgICBmb3IoaWlpOyBpaWkgPCB0aGlzLnBvcHVwc1ZhbHVlOyBpaWkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodGhpcy5wb3B1cHNWYWx1ZVtpaWldICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucG9wdXBzVmFsdWVbaWlpXSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9IHJpZ2h0ICsgXCJweFwiO1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQgKyAzMjA7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKHZhciBqamogPSBpaWk7IGpqaiA8IHRoaXMucG9wdXBzVmFsdWUubGVuZ3RoOyBqamorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBvcHVwc1ZhbHVlW2pqal0pO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2NyZWF0ZXMgbWFya3VwIGZvciBhIG5ldyBwb3B1cC4gQWRkcyB0aGUgaWQgdG8gcG9wdXBzIGFycmF5LlxuICAgIHJlZ2lzdGVyX3BvcHVwKGV2ZW50KVxuICAgIHtcbiAgICAgIHZhciBpZCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC50Y2hhdElkO1xuICAgICAgdmFyIGNsYXNzX25hbWUgPSAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LnRjaGF0Q2xhc3M7XG4gICAgICB2YXIgbmFtZSA9ICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQudGNoYXROYW1lO1xuXG4gICAgICAgIGZvcih2YXIgaWlpID0gMDsgaWlpIDwgdGhpcy5wb3B1cHNWYWx1ZS5sZW5ndGg7IGlpaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL2FscmVhZHkgcmVnaXN0ZXJlZC4gQnJpbmcgaXQgdG8gZnJvbnQuXG4gICAgICAgICAgICBpZihpZCA9PSB0aGlzLnBvcHVwc1ZhbHVlW2lpaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cHNWYWx1ZSA9IHRoaXMucmVtb3ZlQXJyYXkodGhpcy5wb3B1cHNWYWx1ZSwgaWlpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwc1ZhbHVlLnVuc2hpZnQoaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlX3BvcHVwcygpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBlbGVtZW50ID0gJzxkaXYgY2xhc3M9XCJjaGF0Ym94IGNoYXRib3gyMiBwb3B1cC1ib3ggY2hhdC1wb3B1cFwiIGlkPVwiJysgaWQgKydcIj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICAnPGRpdiBjbGFzcz1cImNoYXRib3hfX3RpdGxlICcrIGNsYXNzX25hbWUgKydcIj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8c3BhbiBjbGFzcz1cInBpY3RvXCI+JytuYW1lKyc8L3NwYW4+PGJ1dHRvbiBjbGFzcz1cImNoYXRib3hfX3RpdGxlX19jbG9zZVwiIGRhdGEtaWQ9XCInKyBpZCArJ1wiPjxzcGFuPic7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50ICsgJzxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPjwvc3Bhbj48L2J1dHRvbj48L2Rpdj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8ZGl2IGNsYXNzPVwiY2hhdGJveF9fYm9keVwiPjx1bCBjbGFzcz1cImxpc3QtY2hhdC1tc2dcIj4gIDxsaSBzdHlsZT1cIndpZHRoOjEwMCVcIj4gPGRpdiBjbGFzcz1cIm1zai1yIGJnLWdyZXkgIG1hY3JvXCI+PGRpdiBjbGFzcz1cInRleHQgdGV4dC1sXCI+PHA+SlxcJ2FpIHRyb3V2w6kgdW4gbm91dmVhdSBjbGllbnQuIE1BSiB0YSB0b3VybsOpZSBzdHAuPC9wPjxwIGNsYXNzPVwiY2hhdC1tc2ctaG91clwiPjxzbWFsbD4xMDozMTwvc21hbGw+PC9wPjwvZGl2PjwvZGl2PiA8L2xpPjxsaSBzdHlsZT1cIndpZHRoOjEwMCU7XCI+IDxkaXYgY2xhc3M9XCJtc2ogJysgY2xhc3NfbmFtZSArJyBtYWNyb1wiPjxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtclwiPjxwPm9rPC9wPjxwIGNsYXNzPVwiY2hhdC1tc2ctaG91clwiPjxzbWFsbD4xMDozMTwvc21hbGw+PC9wPjwvZGl2PjwvZGl2PjwvbGk+PC91bD48L2Rpdj4nO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudCArICc8ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyXCI+JztcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQgKyAnPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+PGlucHV0IGlkPVwiYnRuLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbSBjaGF0LXNlbmQtbXNnXCIgc3R5bGU9XCJib3JkZXI6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjZWQ0ZGFcIiB0YWJpbmRleD1cIjBcIiBkaXI9XCJsdHJcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRfYmdcIiBpZD1cImJ0bi1jaGF0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDo2cHg7IHBhZGRpbmctYm90dG9tOjZweFwiPjxpIGNsYXNzPVwiZmEgZmEtcGFwZXItcGxhbmUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj48L3NwYW4+PC9kaXY+PC9kaXY+JztcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0uaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdLmlubmVySFRNTCArIGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucG9wdXBzVmFsdWUudW5zaGlmdChpZCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlX3BvcHVwcygpO1xuICAgIH1cblxuICAgIC8vY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIHN1aXRhYmxlIGFuZCB0aGVuIHBvcHVsYXRlIHRoZSB0b2F0YWxfcG9wdXBzIHZhcmlhYmxlLlxuICAgIGNhbGN1bGF0ZV9wb3B1cHMoKVxuICAgIHtcbiAgICAgICAgdmFyIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmKHdpZHRoIDwgNTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRvdGFsX3BvcHVwcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHdpZHRoIC0gNDgzO1xuICAgICAgICAgICAgLy8zMjAgaXMgd2lkdGggb2YgYSBzaW5nbGUgcG9wdXAgYm94XG4gICAgICAgICAgICB0aGlzLnRvdGFsX3BvcHVwcyA9IHBhcnNlSW50KHdpZHRoLzMyMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BsYXlfcG9wdXBzKCk7XG5cbiAgICB9XG5cbiAgICAvLy0tIE5vIHVzZSB0aW1lLiBJdCBpcyBhIGphdmFTY3JpcHQgZWZmZWN0LlxuICAgIGluc2VydENoYXQodGV4dCwgcGFyZW50KXtcbiAgICAgICAgdmFyIGNvbnRyb2wgPSBcIlwiO1xuICAgICAgICB2YXIgZGF0ZSA9ICBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgZGF0ZVRleHQgPSBkYXRlLmdldEhvdXJzKCkgKyAnOicgKyBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgICAgICBjb250cm9sID0gJzxsaSBzdHlsZT1cIndpZHRoOjEwMCVcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibXNqLXIgbWFjcm8gYmctZ3JleVwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtbFwiPicgK1xuICAgICAgICAgICAgJzxwPicrIHRleHQgKyc8L3A+JyArXG4gICAgICAgICAgICAnPHA+PHNtYWxsPicrZGF0ZVRleHQrJzwvc21hbGw+PC9wPicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvbGk+JztcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRbMF0uc2Nyb2xsVG9wID0gcGFyZW50WzBdLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICQoJy5jaGF0Ym94X19ib2R5Jykuc2Nyb2xsVG9wID0gcGFyZW50WzBdLnNjcm9sbEhlaWdodDtcbiAgICB9XG59IiwiaW1wb3J0ICcuL3N0eWxlcy9hcHAuc2Nzcyc7XHJcblxyXG4vLyBsb2FkcyB0aGUgQm9vdHN0cmFwIGpRdWVyeSBwbHVnaW5zXHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9hbGVydC5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9jb2xsYXBzZS5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy9tb2RhbC5qcyc7XHJcbmltcG9ydCAnYm9vdHN0cmFwL2pzL3NyYy90YWIuanMnO1xyXG5cclxuaW1wb3J0ICdkZXZleHRyZW1lL2Rpc3QvanMvZHguYWxsLmpzJztcclxuIGltcG9ydCAnLi9qcy9tYWluLmpzJztcclxuaW1wb3J0ICdqcXVlcnknXHJcblxyXG4vLyByZXF1aXJlIGpRdWVyeSBub3JtYWxseVxyXG5jb25zdCAkID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XHJcblxyXG4vLyBjcmVhdGUgZ2xvYmFsICQgYW5kIGpRdWVyeSB2YXJpYWJsZXNcclxuZ2xvYmFsLiQgPSBnbG9iYWwualF1ZXJ5ID0gJDtcclxuXHJcbmltcG9ydCAnanF1ZXJ5LXVpL3VpL3dpZGdldHMvYXV0b2NvbXBsZXRlLmpzJztcclxuaW1wb3J0ICdqcXVlcnktdWkvdWkvd2lkZ2V0cy9kYXRlcGlja2VyLmpzJztcclxuaW1wb3J0ICdqcXVlcnktdWkvdWkvaTE4bi9kYXRlcGlja2VyLWZyLmpzJztcclxuaW1wb3J0ICdqcXVlcnktbWFzay1wbHVnaW4vZGlzdC9qcXVlcnkubWFzay5taW4nO1xyXG5cclxuXHJcbi8vIGxvYWRzIHRoZSBjb2RlIHN5bnRheCBoaWdobGlnaHRpbmcgbGlicmFyeVxyXG5pbXBvcnQgJy4vanMvaGlnaGxpZ2h0LmpzJztcclxuXHJcbi8vIENyZWF0ZXMgbGlua3MgdG8gdGhlIFN5bWZvbnkgZG9jdW1lbnRhdGlvblxyXG5pbXBvcnQgJy4vanMvZG9jbGlua3MuanMnO1xyXG5cclxuLy8gc3RhcnQgdGhlIFN0aW11bHVzIGFwcGxpY2F0aW9uXHJcbmltcG9ydCAnQHBvcHBlcmpzL2NvcmUvZGlzdC91bWQvcG9wcGVyLmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvanMvc3JjL2FsZXJ0LmpzJztcclxuaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLmpzJztcclxuaW1wb3J0ICcuL2Jvb3RzdHJhcCc7XHJcblxyXG5cclxuY29uc3QgYm9vdHN0cmFwID0gd2luZG93LmJvb3RzdHJhcCA9IHJlcXVpcmUoJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcycpO1xyXG4iLCJpbXBvcnQgeyBzdGFydFN0aW11bHVzQXBwIH0gZnJvbSAnQHN5bWZvbnkvc3RpbXVsdXMtYnJpZGdlJztcclxuXHJcbi8vIFJlZ2lzdGVycyBTdGltdWx1cyBjb250cm9sbGVycyBmcm9tIGNvbnRyb2xsZXJzLmpzb24gYW5kIGluIHRoZSBjb250cm9sbGVycy8gZGlyZWN0b3J5XHJcbmV4cG9ydCBjb25zdCBhcHAgPSBzdGFydFN0aW11bHVzQXBwKHJlcXVpcmUuY29udGV4dChcclxuICAgICdAc3ltZm9ueS9zdGltdWx1cy1icmlkZ2UvbGF6eS1jb250cm9sbGVyLWxvYWRlciEuL2NvbnRyb2xsZXJzJyxcclxuICAgIHRydWUsXHJcbiAgICAvXFwuKGp8dClzeD8kL1xyXG4pKTtcclxuXHJcbi8vIHJlZ2lzdGVyIGFueSBjdXN0b20sIDNyZCBwYXJ0eSBjb250cm9sbGVycyBoZXJlXHJcbi8vIGFwcC5yZWdpc3Rlcignc29tZV9jb250cm9sbGVyX25hbWUnLCBTb21lSW1wb3J0ZWRDb250cm9sbGVyKTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy8gV3JhcHMgc29tZSBlbGVtZW50cyBpbiBhbmNob3IgdGFncyByZWZlcmVuY2luZyB0byB0aGUgU3ltZm9ueSBkb2N1bWVudGF0aW9uXHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgJG1vZGFsID0gJCgnI3NvdXJjZUNvZGVNb2RhbCcpO1xyXG4gICAgdmFyICRjb250cm9sbGVyQ29kZSA9ICRtb2RhbC5maW5kKCdjb2RlLnBocCcpO1xyXG4gICAgdmFyICR0ZW1wbGF0ZUNvZGUgPSAkbW9kYWwuZmluZCgnY29kZS50d2lnJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gYW5jaG9yKHVybCwgY29udGVudCkge1xyXG4gICAgICAgIHJldHVybiAnPGEgY2xhc3M9XCJkb2NsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIicgKyB1cmwgKyAnXCI+JyArIGNvbnRlbnQgKyAnPC9hPic7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFdyYXBzIGxpbmtzIHRvIHRoZSBTeW1mb255IGRvY3VtZW50YXRpb25cclxuICAgICRtb2RhbC5maW5kKCcuaGxqcy1jb21tZW50JykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmh0bWwoJCh0aGlzKS5odG1sKCkucmVwbGFjZSgvaHR0cHM6XFwvXFwvc3ltZm9ueS5jb21cXC9kb2NcXC9bXFx3Ly4jLV0rL2csIGZ1bmN0aW9uKHVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYW5jaG9yKHVybCwgdXJsKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXcmFwcyBTeW1mb255J3MgYW5ub3RhdGlvbnNcclxuICAgIHZhciBhbm5vdGF0aW9ucyA9IHtcclxuICAgICAgICAnQENhY2hlJzogJ2h0dHBzOi8vc3ltZm9ueS5jb20vZG9jL2N1cnJlbnQvYnVuZGxlcy9TZW5zaW9GcmFtZXdvcmtFeHRyYUJ1bmRsZS9hbm5vdGF0aW9ucy9jYWNoZS5odG1sJyxcclxuICAgICAgICAnQElzR3JhbnRlZCc6ICdodHRwczovL3N5bWZvbnkuY29tL2RvYy9jdXJyZW50L2J1bmRsZXMvU2Vuc2lvRnJhbWV3b3JrRXh0cmFCdW5kbGUvYW5ub3RhdGlvbnMvc2VjdXJpdHkuaHRtbCNpc2dyYW50ZWQnLFxyXG4gICAgICAgICdAUGFyYW1Db252ZXJ0ZXInOiAnaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9idW5kbGVzL1NlbnNpb0ZyYW1ld29ya0V4dHJhQnVuZGxlL2Fubm90YXRpb25zL2NvbnZlcnRlcnMuaHRtbCcsXHJcbiAgICAgICAgJ0BSb3V0ZSc6ICdodHRwczovL3N5bWZvbnkuY29tL2RvYy9jdXJyZW50L3JvdXRpbmcuaHRtbCNjcmVhdGluZy1yb3V0ZXMtYXMtYW5ub3RhdGlvbnMnLFxyXG4gICAgICAgICdAU2VjdXJpdHknOiAnaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9idW5kbGVzL1NlbnNpb0ZyYW1ld29ya0V4dHJhQnVuZGxlL2Fubm90YXRpb25zL3NlY3VyaXR5Lmh0bWwjc2VjdXJpdHknXHJcbiAgICB9O1xyXG5cclxuICAgICRjb250cm9sbGVyQ29kZS5maW5kKCcuaGxqcy1kb2N0YWcnKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9uID0gJCh0aGlzKS50ZXh0KCk7XHJcblxyXG4gICAgICAgIGlmIChhbm5vdGF0aW9uc1thbm5vdGF0aW9uXSkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmh0bWwoYW5jaG9yKGFubm90YXRpb25zW2Fubm90YXRpb25dLCBhbm5vdGF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV3JhcHMgVHdpZydzIHRhZ3NcclxuICAgICR0ZW1wbGF0ZUNvZGUuZmluZCgnLmhsanMtdGVtcGxhdGUtdGFnID4gLmhsanMtbmFtZScpLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRhZyA9ICQodGhpcykudGV4dCgpO1xyXG5cclxuICAgICAgICBpZiAoJ2Vsc2UnID09PSB0YWcgfHwgdGFnLm1hdGNoKC9eZW5kLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHVybCA9ICdodHRwczovL3R3aWcuc3ltZm9ueS5jb20vZG9jLzMueC90YWdzLycgKyB0YWcgKyAnLmh0bWwjJyArIHRhZztcclxuXHJcbiAgICAgICAgJCh0aGlzKS5odG1sKGFuY2hvcih1cmwsIHRhZykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV3JhcHMgVHdpZydzIGZ1bmN0aW9uc1xyXG4gICAgJHRlbXBsYXRlQ29kZS5maW5kKCcuaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSA+IC5obGpzLW5hbWUnKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBmdW5jID0gJCh0aGlzKS50ZXh0KCk7XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSAnaHR0cHM6Ly90d2lnLnN5bWZvbnkuY29tL2RvYy8zLngvZnVuY3Rpb25zLycgKyBmdW5jICsgJy5odG1sIycgKyBmdW5jO1xyXG5cclxuICAgICAgICAkKHRoaXMpLmh0bWwoYW5jaG9yKHVybCwgZnVuYykpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgaGxqcyBmcm9tICdoaWdobGlnaHQuanMvbGliL2NvcmUnO1xyXG5pbXBvcnQgcGhwIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocCc7XHJcbmltcG9ydCB0d2lnIGZyb20gJ2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R3aWcnO1xyXG5cclxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAnLCBwaHApO1xyXG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R3aWcnLCB0d2lnKTtcclxuXHJcbmhsanMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpO1xyXG4iLCJpbXBvcnQgZnJNZXNzYWdlcyBmcm9tIFwiZGV2ZXh0cmVtZS9sb2NhbGl6YXRpb24vbWVzc2FnZXMvZnIuanNvblwiO1xyXG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBQYWdlUmVuZGVyZXIgfSBmcm9tIFwiQGhvdHdpcmVkL3R1cmJvXCI7XHJcbmltcG9ydCgnYm9vdHN0cmFwLXNlbGVjdC9kaXN0L2pzL2Jvb3RzdHJhcC1zZWxlY3QuanMnKTtcclxuaW1wb3J0IFZhbGlkYXRvciBmcm9tICdkZXZleHRyZW1lL3VpL3ZhbGlkYXRvcic7XHJcbmltcG9ydCBUZXh0Qm94IGZyb20gXCJkZXZleHRyZW1lL3VpL3RleHRfYm94XCI7XHJcblxyXG5sZXQgY29tbW9uID0gcmVxdWlyZShcIi4vY29tbW9uXCIpO1xyXG53aW5kb3cuaXNEYXRhR3JpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcbk9iamVjdC5hc3NpZ24oUGFnZVJlbmRlcmVyLnByb3RvdHlwZSwge1xyXG4gICAgYXNzaWduTmV3Qm9keSgpIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXJBcHAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcFwiKTtcclxuICAgICAgICBjb25zdCBjb250YWluZXJBY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNib3R0b21fYWN0aW9uc1wiKTtcclxuICAgICAgICBjb25zdCBjb250YWluZXJQb3B1cHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BvcHVwcy1saXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckphdmFzY3JpcHRCb2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNqYXZhc2NyaXB0LWJvZHlcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lckFwcCA9IHRoaXMubmV3RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcFwiKTtcclxuICAgICAgICBjb25zdCBuZXdDb250YWluZXJBY3Rpb25zID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYm90dG9tX2FjdGlvbnNcIik7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyUG9wdXBzID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcG9wdXBzLWxpc3RcIik7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGFpbmVySmF2YXNjcmlwdEJvZHkgPSB0aGlzLm5ld0VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNqYXZhc2NyaXB0LWJvZHlcIik7XHJcbiAgICAgICAgLy9jb25zdCBuZXd0ZXN0ID0gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2R4LWhlYWRlci1maWx0ZXItbWVudScpO1xyXG5cclxuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmF0dHIoJ2NsYXNzJywkKHRoaXMubmV3RWxlbWVudCkuYXR0cignY2xhc3MnKSk7XHJcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5hdHRyKCdpZCcsJCh0aGlzLm5ld0VsZW1lbnQpLmF0dHIoJ2lkJykpO1xyXG4gICAgICAgIGlmIChjb250YWluZXJBY3Rpb25zICYmIG5ld0NvbnRhaW5lckFjdGlvbnMpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyQWN0aW9ucy5yZXBsYWNlV2l0aChuZXdDb250YWluZXJBY3Rpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lclBvcHVwcyAmJiBuZXdDb250YWluZXJQb3B1cHMpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyUG9wdXBzLnJlcGxhY2VXaXRoKG5ld0NvbnRhaW5lclBvcHVwcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250YWluZXJKYXZhc2NyaXB0Qm9keSAmJiBuZXdDb250YWluZXJKYXZhc2NyaXB0Qm9keSkge1xyXG4gICAgICAgICAgICBjb250YWluZXJKYXZhc2NyaXB0Qm9keS5yZXBsYWNlV2l0aChuZXdDb250YWluZXJKYXZhc2NyaXB0Qm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250YWluZXJBcHAgJiYgbmV3Q29udGFpbmVyQXBwKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lckFwcC5yZXBsYWNlV2l0aChuZXdDb250YWluZXJBcHApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVwbGFjZVdpdGgodGhpcy5uZXdFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pXHJcblxyXG5EZXZFeHByZXNzLmxvY2FsaXphdGlvbi5sb2NhbGUoJ2ZyJyk7XHJcbkRldkV4cHJlc3MubG9jYWxpemF0aW9uLmxvYWRNZXNzYWdlcyhmck1lc3NhZ2VzKTtcclxuXHJcbmlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJFZGdcIikgIT09IC0xKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJpcy1lZGdlXCIpO1xyXG59XHJcblxyXG4kKCcjZmlsdGVyLWltYWdlJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAkKCcjZmlsdGVyLWNvbnRhaW5lcicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcclxufSk7XHJcblxyXG5cclxuXHJcbi8vdGhpcyB2YXJpYWJsZSByZXByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIGNhbiBiZSBkaXNwbGF5ZWQgYWNjb3JkaW5nIHRvIHRoZSB2aWV3cG9ydCB3aWR0aFxyXG52YXIgdG90YWxfcG9wdXBzID0gMDtcclxuXHJcbi8vYXJyYXlzIG9mIHBvcHVwcyBpZHNcclxudmFyIHBvcHVwcyA9IFtdO1xyXG5cclxudmFyIG1ldGhvZHMgPSB7XHJcbiAgICBpbml0OiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbWV0aG9kcy5zZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmZsYXNoTm90aWZpY2F0aW9uLmRlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICQoJy5hbGVydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNob3coJ3Nsb3cnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheShtZXRob2RzLnNldHRpbmdzLmhpZGVEZWxheSlcclxuICAgICAgICAgICAgICAgICAgICAuaGlkZSgnc2xvdycpXHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDUwMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWV0aG9kcy5saXN0ZW5JbmNvbWluZ01lc3NhZ2VzKCk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RlbiB0byBBSkFYIHJlc3BvbnNlcyBhbmQgZGlzcGxheSBtZXNzYWdlcyBpZiB0aGV5IGNvbnRhaW4gc29tZVxyXG4gICAgICovXHJcbiAgICBsaXN0ZW5JbmNvbWluZ01lc3NhZ2VzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAkKGRvY3VtZW50KS5hamF4Q29tcGxldGUoZnVuY3Rpb24oZXZlbnQsIHhociwgc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSA9PSAnYXBwbGljYXRpb24vanNvbicpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IGRhdGEubWVzc2FnZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuZXJyb3IubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuYWRkRXJyb3IobWVzc2FnZXMuZXJyb3JbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuc3VjY2Vzcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5hZGRTdWNjZXNzKG1lc3NhZ2VzLnN1Y2Nlc3NbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMuaW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWVzc2FnZXMuaW5mby5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5hZGRJbmZvKG1lc3NhZ2VzLmluZm9baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZFN1Y2Nlc3M6IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZmxhc2hNZXNzYWdlRWx0ID0gbWV0aG9kcy5nZXRCYXNpY0ZsYXNoKG1lc3NhZ2UpLmFkZENsYXNzKCdhbGVydC1zdWNjZXNzJyk7XHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZmxhc2hNZXNzYWdlRWx0ID0gbWV0aG9kcy5nZXRCYXNpY0ZsYXNoKG1lc3NhZ2UpLmFkZENsYXNzKCdhbGVydC1kYW5nZXInKTtcclxuXHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkSW5mbzogZnVuY3Rpb24obWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBmbGFzaE1lc3NhZ2VFbHQgPSBtZXRob2RzLmdldEJhc2ljRmxhc2gobWVzc2FnZSkuYWRkQ2xhc3MoJ2FsZXJ0LWluZm8nKTtcclxuXHJcbiAgICAgICAgbWV0aG9kcy5hZGRUb0xpc3QoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgICAgICBtZXRob2RzLmRpc3BsYXkoZmxhc2hNZXNzYWdlRWx0KTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QmFzaWNGbGFzaDogZnVuY3Rpb24obWVzc2FnZSkge1xyXG4gICAgICAgIHZhciBmbGFzaE1lc3NhZ2VFbHQgPSAkKCc8ZGl2PjwvZGl2PicpXHJcbiAgICAgICAgICAgIC5oaWRlKClcclxuICAgICAgICAgICAgLmFkZENsYXNzKCd0b2FzdCBhbGVydCBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3cnKVxyXG4gICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywnMC4zcmVtJykuY3NzKCd3aWR0aCcsJ2F1dG8nKVxyXG4gICAgICAgICAgICAuYXR0cigncm9sZScsICdhbGVydCcpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJCgnPGRpdiBjbGFzcz1cInRvYXN0LWJvZHlcIj48L2Rpdj4nKS5odG1sKG1lc3NhZ2UpKVxyXG4gICAgICAgICAgICAvLy5hcHBlbmQobWV0aG9kcy5nZXRDbG9zZUJ1dHRvbigpKVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZsYXNoTWVzc2FnZUVsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2xvc2VCdXR0b246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjbG9zZUJ1dHRvbkVsdCA9ICQoJzxidXR0b24+PC9idXR0b24+JylcclxuICAgICAgICAgICAgLmFkZENsYXNzKCdidG4tY2xvc2UnKVxyXG4gICAgICAgICAgICAuYXR0cignZGF0YS1icy1kaXNtaXNzJywgJ2FsZXJ0JylcclxuICAgICAgICAgICAvLyAuaHRtbCgnJnRpbWVzJylcclxuICAgICAgICAgICAgLmNzcygnb3BhY2l0eScsIDEpXHJcbiAgICAgICAgO1xyXG5cclxuICAgICAgICByZXR1cm4gY2xvc2VCdXR0b25FbHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZFRvTGlzdDogZnVuY3Rpb24oZmxhc2hNZXNzYWdlRWx0KSB7XHJcbiAgICAgICAgZmxhc2hNZXNzYWdlRWx0LmFwcGVuZFRvKCQoJy5tZXNzYWdlcycpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzcGxheTogZnVuY3Rpb24oZmxhc2hNZXNzYWdlRWx0KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFzaE1lc3NhZ2VFbHRcclxuICAgICAgICAgICAgICAgICAgICAuc2hvdygnc2xvdycpXHJcbiAgICAgICAgICAgICAgICAgICAgLmRlbGF5KG1ldGhvZHMuc2V0dGluZ3MuaGlkZURlbGF5KVxyXG4gICAgICAgICAgICAgICAgICAgIC5oaWRlKCdzbG93JywgZnVuY3Rpb24oKSB7ICQodGhpcykucmVtb3ZlKCk7IH0gKVxyXG4gICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICA1MDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG4kKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCl7XHJcbiAgICBpZiAoJCh0aGlzKS5zY3JvbGxUb3AoKSA+IDIwMCl7XHJcbiAgICAgICAgJCgnI3Njcm9sbCcpLmZhZGVJbigpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgJCgnI3Njcm9sbCcpLmZhZGVPdXQoKTtcclxuICAgIH1cclxufSk7XHJcbiQoJyNzY3JvbGwgYScpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtcclxuICAgICAgICBzY3JvbGxUb3A6IDBcclxuICAgIH0sIDMwMCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0pO1xyXG5cclxuJC5mbi5mbGFzaE5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uKG1ldGhvZCkge1xyXG4gICAgLy8gTWV0aG9kIGNhbGxpbmcgbG9naWNcclxuICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHtcclxuICAgICAgICByZXR1cm4gbWV0aG9kc1sgbWV0aG9kIF0uYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdvYmplY3QnIHx8ICEgbWV0aG9kKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkLmVycm9yKCdNZXRob2QgJyArICBtZXRob2QgKyAnIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5mbGFzaE5vdGlmaWNhdGlvbicpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuJC5mbi5mbGFzaE5vdGlmaWNhdGlvbi5kZWZhdWx0cyA9IHtcclxuICAgICdoaWRlRGVsYXknICAgICAgICAgOiA0NTAwLFxyXG4gICAgJ2F1dG9IaWRlJyAgICAgICAgICA6IHRydWUsXHJcbiAgICAnYW5pbWF0ZScgICAgICAgICAgIDogdHJ1ZVxyXG59O1xyXG5cclxuICQoZG9jdW1lbnQpLm9uKCdyZWFkeSB0dXJibzpsb2FkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAkKCcuYWxlcnQnKVxyXG4gICAgICAgICAgICAgICAgIC5kZWxheShtZXRob2RzLnNldHRpbmdzLmhpZGVEZWxheSlcclxuICAgICAgICAgICAgICAgICAuaGlkZSgnc2xvdycpXHJcbiAgICAgICAgICAgICA7XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIDUwMFxyXG4gICAgICk7XHJcblxyXG4gICAgIC8vb24gbWFzcXVlIGxlIGNvbHVtbiBjaG9vc2VyIGxvcnNxdSdvbiBjaGFuZ2UgZGUgcGFnZVxyXG4gICAgICQoJy5keC1kYXRhZ3JpZC1jb2x1bW4tY2hvb3NlcicpLmhpZGUoKTtcclxuXHJcbiAgICAgLy9nZXN0aW9uIGRlcyBwYWdlIGF2ZWMgw6lsw6ltZW50cyDDoCBkw6lzYWN0aXZlclxyXG4gICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcclxuICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICB2YXIgdHlwZV9hZmZpY2hhZ2UgPSAoJCgnI2Zvcm1fY2xpZW50X3VwZGF0ZScpLmxlbmd0aCAhPSAwKSA/ICQoJyNmb3JtX2NsaWVudF91cGRhdGUnKS5kYXRhKCdhZmZpY2hhZ2UnKSA6ICcnO1xyXG4gICAgIHR5cGVfYWZmaWNoYWdlID0gKCQoJyNmb3JtX2FnZW50X3VwZGF0ZScpLmxlbmd0aCAhPSAwKSA/ICQoJyNmb3JtX2FnZW50X3VwZGF0ZScpLmRhdGEoJ2FmZmljaGFnZScpIDogdHlwZV9hZmZpY2hhZ2U7XHJcbiAgICAgaWYgKHR5cGVfYWZmaWNoYWdlICE9ICdlZGl0Jykge1xyXG4gICAgICAgICAkKCdbZGF0YS1kaXNhYmxlLW9uLXZpZXddJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCgkKHRoaXMpWzBdLmxvY2FsTmFtZSA9PSAnaScgJiYgJCh0aGlzKS5oYXNDbGFzcygnaGFzLWluZm8nKSkgfHwgJCh0aGlzKVswXS5sb2NhbE5hbWUgPT0gJ2J1dHRvbicpeyAvKnx8ICgkKHRoaXMpLmhhc0NsYXNzKCdteS1zZWxlY3QtbXVsdGlwbGUnKSAmJiAkKHRoaXMpWzBdLmxvY2FsTmFtZSA9PSAnc2VsZWN0JykpIHsqL1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIH0pO1xyXG4gICAgIH1cclxuXHJcbiAgICAgY29tbW9uLnJlc2V0Rm9ybSgpO1xyXG4gICAgIGNvbW1vbi5sb2FkUGlja2VyKCk7XHJcbiAgICAgLy8gaWYgKHR5cGVvZiB3aW5kb3cuY2FsY3VsYXRlX3BvcHVwcyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgIC8vICAgICB3aW5kb3cuY2FsY3VsYXRlX3BvcHVwcygpO1xyXG4gICAgIC8vIH1cclxuICAgICAvLyBpZiAodHlwZW9mIHdpbmRvdy5sb2FkU2lkZWJhclRjaGF0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgLy8gICAgIHdpbmRvdy5sb2FkU2lkZWJhclRjaGF0KCk7XHJcbiAgICAgLy8gfVxyXG4gICAgIGNvbnN0IGFkZExpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLmFkZF9pdGVtX2xpbmsnKTtcclxuICAgICBhZGRMaW5rLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYWRkRm9ybVRvQ29sbGVjdGlvbik7XHJcbiAgICAgICAgIGlmICgkKGUpLnByZXYoJ3VsJykuZGF0YSgnaW5kZXgnKSA9PSAxKSBlLmNsaWNrKCk7XHJcbiAgICAgfSk7XHJcblxyXG4gICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndWwuY29sbGVjdGlvbiA+IGxpJyk7XHJcbiAgICAgY29sbGVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICBpZiAoJChlKS5uZXh0KCdhLmFkZF9pdGVtX2xpbmsnKS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGUpO1xyXG4gICAgICAgICB9XHJcbiAgICAgfSk7XHJcblxyXG4gICAgIGZ1bmN0aW9uIGFkZEZvcm1Ub0NvbGxlY3Rpb24oZSkge1xyXG4gICAgICAgICBjb25zdCBjb2xsZWN0aW9uSG9sZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jb2xsZWN0aW9uSG9sZGVySWQpO1xyXG4gICAgICAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcclxuICAgICAgICAgY29uc3QgY2xhc3NfdG9fYWRkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jbGFzcyk7XHJcbiAgICAgICAgIGl0ZW0uaW5uZXJIVE1MID0gJChjb2xsZWN0aW9uSG9sZGVyLmRhdGFzZXQucHJvdG90eXBlKS5odG1sKCkucmVwbGFjZShcclxuICAgICAgICAgICAgIC9fX25hbWVfXy9nLFxyXG4gICAgICAgICAgICAgY29sbGVjdGlvbkhvbGRlci5kYXRhc2V0LmluZGV4XHJcbiAgICAgICAgIClcclxuICAgICAgICAgaXRlbS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICAgICAgIC8vaXRlbS5jbGFzc0xpc3QgPSAnZm9ybS1jb250cm9sLXNtIGZvcm0tY29udHJvbCc7XHJcblxyXG4gICAgICAgICBjb2xsZWN0aW9uSG9sZGVyLmFwcGVuZENoaWxkKGl0ZW0pO1xyXG4gICAgICAgICBjb2xsZWN0aW9uSG9sZGVyLmRhdGFzZXQuaW5kZXgrKztcclxuICAgICAgICAgYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGl0ZW0pO1xyXG4gICAgIH1cclxuXHJcbiAgICAgZnVuY3Rpb24gYWRkRWxlbWVudEZvcm1EZWxldGVMaW5rKGVsZW1lbnQpIHtcclxuICAgICAgICAgY29uc3QgcmVtb3ZlRm9ybUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgcmVtb3ZlRm9ybUJ1dHRvbi5jbGFzc0xpc3QgPSAnYWRkX2l0ZW1fbGluayc7XHJcbiAgICAgICAgIHJlbW92ZUZvcm1CdXR0b24uaW5uZXJIVE1MID0gJzxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsLWljb25cIiBzdHlsZT1cImJvdHRvbTogN3B4O3JpZ2h0OiA4cHg7dG9wOmluaGVyaXQ7cG9zaXRpb246YWJzb2x1dGVcIj48L2k+JztcclxuXHJcbiAgICAgICAgIGVsZW1lbnQuYXBwZW5kKHJlbW92ZUZvcm1CdXR0b24pO1xyXG5cclxuICAgICAgICAgcmVtb3ZlRm9ybUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9XHJcbiAgICAgd2luZG93LmluaXREZXZFeHRyZW1lR3JpZHMgPSBmdW5jdGlvbiBpbml0RGV2RXh0cmVtZUdyaWRzKGVsZW1lbnQpIHtcclxuICAgICAgICAgd2luZG93LmlzRGF0YUdyaWRSZXF1ZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgdmFyIHJvd0NsYXNzID0gJChlbGVtZW50KS5kYXRhKCdyb3djbGFzcycpO1xyXG4gICAgICAgICB2YXIgdG9vbHRpcEZpZWxkID0gJChlbGVtZW50KS5kYXRhKCd0b29sdGlwLWZpZWxkJyk7XHJcbiAgICAgICAgIHZhciBwYWdlID0gJChlbGVtZW50KS5kYXRhKCdwYWdlJyk7XHJcbiAgICAgICAgIHZhciBjb2x1bW5zID0gZXZhbCgkKGVsZW1lbnQpLmRhdGEoJ2NvbHVtbnMnKSk7XHJcbiAgICAgICAgIHZhciBwYXRjaF9wYXRoID0gJChlbGVtZW50KS5kYXRhKCdwYXRjaHBhdGgnKTtcclxuICAgICAgICAgdmFyIHJlbW90ZU9wZXJhdGlvbnMgPSAkKGVsZW1lbnQpLmRhdGEoJ3JlbW90ZW9wZXJhdGlvbnMnKTtcclxuICAgICAgICAgdmFyIGFsbG93ZWRQYWdlU2l6ZXMgPSAkKGVsZW1lbnQpLmRhdGEoJ2FsbG93ZWRwYWdlc2l6ZXMnKVxyXG4gICAgICAgICB2YXIga2V5ID0gJChlbGVtZW50KS5kYXRhKCdrZXknKTtcclxuICAgICAgICAgdmFyIG9uZWRpdG9ycHJlcGFyaW5nID0gZXZhbCgkKGVsZW1lbnQpLmRhdGEoJ29uZWRpdG9ycHJlcGFyaW5nJykpO1xyXG4gICAgICAgICB2YXIgb25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcyA9ICQoZWxlbWVudCkuZGF0YSgnb25lZGl0b3JwcmVwYXJpbmdfY2hhbmdlX2l0ZW1zJyk7XHJcbiAgICAgICAgIHZhciByb3dEYmxDbGljayA9ICQoZWxlbWVudCkuZGF0YSgncm93ZGJsY2xpY2snKTtcclxuICAgICAgICAgdmFyIHJhbmdfdHJpID0gJChlbGVtZW50KS5kYXRhKCdyYW5nX3RyaScpO1xyXG4gICAgICAgICB2YXIgY29sdW1uX2F1dG93aWR0aCA9ICQoZWxlbWVudCkuZGF0YSgnY29sdW1uX2F1dG93aWR0aCcpO1xyXG4gICAgICAgICB2YXIgc291cmNlID0gJChlbGVtZW50KS5kYXRhKCdzb3VyY2UnKTtcclxuICAgICAgICAgdmFyIGdldF9wYXRoID0gJChlbGVtZW50KS5kYXRhKCdnZXRwYXRoJyk7XHJcbiAgICAgICAgIHZhciBjcmVhdGVfcGF0aCA9ICQoZWxlbWVudCkuZGF0YSgnY3JlYXRlcGF0aCcpO1xyXG4gICAgICAgICB2YXIgZGVsZXRlX3BhdGggPSAkKGVsZW1lbnQpLmRhdGEoJ2RlbGV0ZXBhdGgnKTtcclxuICAgICAgICAgdmFyIGRhdGFTb3VyY2UgPSBjb21tb24uY3JlYXRlQ3VzdG9tU3RvcmUocGFnZSwgcGF0Y2hfcGF0aCwgZ2V0X3BhdGgsIGNyZWF0ZV9wYXRoLCBkZWxldGVfcGF0aCwga2V5KTtcclxuICAgICAgICAgdmFyIHRtcEdyaWQgPSBjb21tb24uZGF0YWdyaWRfb2JqO1xyXG4gICAgICAgICB2YXIgZWRpdGluZyA9ICQoZWxlbWVudCkuZGF0YSgnZWRpdGluZycpO1xyXG4gICAgICAgICB2YXIgb25DZWxsSG92ZXJDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgIHZhciBzZWFyY2hQYW5lbCA9ICQoZWxlbWVudCkuZGF0YSgnc2VhcmNocGFuZWwnKTtcclxuICAgICAgICAgdmFyIHBhZ2luYXRpb24gPSAkKGVsZW1lbnQpLmRhdGEoJ3BhZ2luYXRpb24nKTtcclxuICAgICAgICAgdmFyIHRvb2xiYXJJbnZpc2libGUgPSAkKGVsZW1lbnQpLmRhdGEoJ3Rvb2xiYXJpbnZpc2libGUnKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVPbmx5RWRpdGluZyA9ICQoZWxlbWVudCkuZGF0YSgnZGlzYWJsZS1vbmx5LWVkaXRpbmcnKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVPbmx5QWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdkaXNhYmxlLW9ubHktYWRkaW5nJyk7XHJcbiAgICAgICAgIHZhciBzZWFyY2hwYW5lbHBsYWNlaG9sZGVyID0gJChlbGVtZW50KS5kYXRhKCdzZWFyY2hwYW5lbHBsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgIHZhciBleHBvcnRBbGxUZXh0ID0gJChlbGVtZW50KS5kYXRhKCdleHBvcnRhbGx0ZXh0Jyk7XHJcbiAgICAgICAgIHZhciBvblJvd1ZhbGlkYXRpbmcgPSAkKGVsZW1lbnQpLmRhdGEoJ29uLXJvdy12YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgIHZhciBlZGl0T25QcmVwYXJpbmcgPSBbXTtcclxuICAgICAgICAgdmFyIGRlZmF1dEZpbHRyZSA9ICQoZWxlbWVudCkuZGF0YSgnZGVmYXV0ZmlsdHJlJyk7XHJcbiAgICAgICAgIHZhciBkZWZhdXRGaWx0cmVVdGlsaXNhdGV1ciA9ICQoZWxlbWVudCkuZGF0YSgnZGVmYXV0ZmlsdHJldXRpbGlzYXRldXInKTtcclxuICAgICAgICAgdmFyIGRpc2FibGVvbnZpZXcgPSAkKGVsZW1lbnQpLmRhdGEoJ2Rpc2FibGVvbnZpZXcnKTtcclxuICAgICAgICAgdmFyIGV4cG9ydEZpZWxkcyA9ICQoZWxlbWVudCkuZGF0YSgnZXhwb3J0LWZpZWxkcycpO1xyXG4gICAgICAgICB2YXIgZ3JpZENsYXNzID0gJChlbGVtZW50KS5kYXRhKCdncmlkY2xhc3MnKTtcclxuXHJcbiAgICAgICAgIGlmIChkZWZhdXRGaWx0cmVVdGlsaXNhdGV1cikgZGVmYXV0RmlsdHJlID0gZGVmYXV0RmlsdHJlVXRpbGlzYXRldXI7XHJcblxyXG4gICAgICAgICBpZiAoJChlbGVtZW50KS5kYXRhKCdzdHlsZScpID09ICd0YWInKVxyXG4gICAgICAgICAgICAgdmFyIG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRtcEdyaWQsIGNvbW1vbi5kYXRhZ3JpZFNpbXBsZSk7XHJcbiAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgIHZhciBvYmogPSBPYmplY3QuYXNzaWduKHt9LCB0bXBHcmlkLCBjb21tb24uZGF0YWdyaWRGdWxsKTtcclxuXHJcbiAgICAgICAgIGlmIChjb2x1bW5fYXV0b3dpZHRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICBvYmouY29sdW1uQXV0b1dpZHRoID0gY29sdW1uX2F1dG93aWR0aDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoZ3JpZENsYXNzKXtcclxuICAgICAgICAgICAgIG9iai5lbGVtZW50QXR0ciA9IHsgY2xhc3M6IGdyaWRDbGFzcyB9O1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAoZXhwb3J0RmllbGRzKSB7XHJcbiAgICAgICAgICAgICBvYmoub25FeHBvcnRpbmcgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgZS5jb21wb25lbnQuYmVnaW5VcGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAvLyBlLmNvbXBvbmVudC5jb2x1bW5PcHRpb24oJ25vbV9jbGllbnQnLCAndmlzaWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgIC8vIGUuY29tcG9uZW50LmNvbHVtbk9wdGlvbignYWRyZXNzZV9jbGllbnQnLCAndmlzaWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgIGV4cG9ydEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmNvbHVtbk9wdGlvbihmaWVsZCwgJ3Zpc2libGUnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICBlLmZpbGVOYW1lID0gJChlLmVsZW1lbnQpLmRhdGEoJ2V4cG9ydG5hbWUnKSA7XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmIChleHBvcnRBbGxUZXh0ICE9ICcnICYmIGV4cG9ydEFsbFRleHQpIHtcclxuICAgICAgICAgICAgIG9iai5leHBvcnQudGV4dHMuZXhwb3J0QWxsID0gZXhwb3J0QWxsVGV4dDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoc2VhcmNocGFuZWxwbGFjZWhvbGRlciAhPSAnJykge1xyXG4gICAgICAgICAgICAgb2JqLnNlYXJjaFBhbmVsLnBsYWNlaG9sZGVyID0gc2VhcmNocGFuZWxwbGFjZWhvbGRlcjtcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIG9iai5zZWFyY2hQYW5lbC5wbGFjZWhvbGRlciA9IGNvbW1vbi5kZWZhdWx0UGxhY2VIb2xkZXI7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cignaWQnKSA9PT0gJ2ludGVydmVudGlvbi1ncmlkLWZhY3R1cmF0aW9uJykge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93SW5zZXJ0ZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOnJvd0luc2VydGVkJywgW2VdKTtcclxuICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgb2JqLm9uUm93UmVtb3ZlZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoJ2dyaWQ6cm93UmVtb3ZlZCcsIFtlXSk7XHJcbiAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgIG9iai5vblJvd1VwZGF0ZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOnJvd1VwZGF0ZWQnLCBbZV0pO1xyXG4gICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICBvYmoub25Db250ZW50UmVhZHkgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKCdncmlkOmNvbnRlbnRSZWFkeScsIFtlXSk7XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgaWYgKGNvbHVtbnMpIHtcclxuICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIGlmIChlLmxvb2t1cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmxvb2t1cC5kYXRhU291cmNlID0gZXZhbChlLmxvb2t1cC5kYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09IFwiZGF0ZVwiICYmIGUuZmlsdGVyVmFsdWUgJiYgdHlwZW9mIGUuZmlsdGVyVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZS5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKGUuZmlsdGVyVmFsdWUpOyAvLyBDb252ZXJzaW9uIGNvcnJlY3RlXHJcbiAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICBpZiAoZS5lZGl0b3JPcHRpb25zICYmIGUuZWRpdG9yT3B0aW9ucy5hY2NlcHRDdXN0b21WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmVkaXRvck9wdGlvbnMub25DdXN0b21JdGVtQ3JlYXRpbmcgPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0uaWQgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLmxpYmVsbGUgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuY2FsY3VsYXRlRGlzcGxheVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuY2FsY3VsYXRlRGlzcGxheVZhbHVlID0gZnVuY3Rpb24gKHJvd0RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJFeHByZXNzaW9uID0gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gcm93RGF0YVtlLmRhdGFGaWVsZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzICE9IG51bGwgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHVzaCgnb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnB1c2goWydpZCcsIHZhbHVlc1tpXV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAkLm1hcChEZXZFeHByZXNzLmRhdGEucXVlcnkob25lZGl0b3JwcmVwYXJpbmdbZS5kYXRhRmllbGRdLmRhdGFzKS5maWx0ZXIoZmlsdGVyRXhwcmVzc2lvbikudG9BcnJheSgpLCBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtlLmZpZWxkRGlzcGxheV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignPGJyIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhRmllbGQgPT0gJ3BwX3Bob3RvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLndpZHRoID0gMTAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBjb21tb24uY2VsbFRlbXBsYXRlUGhvdG87XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIGlmIChlLmRhdGFGaWVsZCA9PSAnY291bGV1cicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBjb21tb24uY2VsbFRlbXBsYXRlQ291bGV1cjtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuY2FsY3VsYXRlRmlsdGVyRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICBlLmNhbGN1bGF0ZUZpbHRlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZmlsdGVyVmFsdWVzLCBzZWxlY3RlZEZpbHRlck9wZXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdGVtRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheTEgPSBpdGVtRGF0YVtlLmRhdGFGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5MiA9IGZpbHRlclZhbHVlcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5Mi5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IGFycmF5MltpbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUuYnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5idXR0b25zWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciB2aXNpYmxlID0gJyArIGUuYnV0dG9uc1swXS52aXNpYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUuYnV0dG9uc1swXS52aXNpYmxlID0gdmlzaWJsZTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5idXR0b25zWzBdLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBvbmNsaWNrID0gJyArIGUuYnV0dG9uc1swXS5vbkNsaWNrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUuYnV0dG9uc1swXS5vbkNsaWNrID0gb25jbGljaztcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgaWYgKGUudHlwZSA9PSAnbGlzdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBlLmRhdGFGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgY29sQ2FsdWxhdGVkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZUNlbGxWYWx1ZTogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YXMgPSBldmFsKCdkYXRhLicgKyBmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGVsZW1lbnQubGliZWxsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlLCBjb2xDYWx1bGF0ZWQpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5vbkVkaXRvclByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVkaXRPblByZXBhcmluZy5wdXNoKGUuZGF0YUZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgb25DZWxsSG92ZXJDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsVGVtcGxhdGUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YSAvPicpLnRleHQoZS5vbkVkaXRvclByZXBhcmVkKS5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICd1bmRlcmxpbmUnKS5hcHBlbmRUbyhjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChkaXNhYmxlT25seUVkaXRpbmcgJiYgZGlzYWJsZU9ubHlFZGl0aW5nLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICBvYmoub25DZWxsUHJlcGFyZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIHZhciBpc05ld1JvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgIGZvciAobGV0IGlDb3VudCA9IDA7IGlDb3VudCA8IGRpc2FibGVPbmx5RWRpdGluZy5sZW5ndGg7IGlDb3VudCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChlLnJvdyAmJiBlLnJvdy5pc05ld1JvdykgaXNOZXdSb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBkaXNhYmxlT25seUVkaXRpbmdbaUNvdW50XSAmJiAhaXNOZXdSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RCb3hFbGVtZW50ID0gKGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXNlbGVjdGJveCcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCdpbnB1dCcpLnByb3AoJ3JlYWRvbmx5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtdGV4dGVkaXRvci1idXR0b25zLWNvbnRhaW5lcicpLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXRleHRlZGl0b3ItYnV0dG9ucy1jb250YWluZXInKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RCb3hFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHNlbGVjdEJveEVsZW1lbnRbMF0pLmR4U2VsZWN0Qm94KCdpbnN0YW5jZScpLm9wdGlvbigncmVhZE9ubHknLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICBpc05ld1JvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZU9ubHlBZGRpbmcgJiYgZGlzYWJsZU9ubHlBZGRpbmcubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaUNvdW50ID0gMDsgaUNvdW50IDwgZGlzYWJsZU9ubHlBZGRpbmcubGVuZ3RoOyBpQ291bnQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUucm93ICYmIGUucm93LmlzTmV3Um93KSBpc05ld1JvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBkaXNhYmxlT25seUFkZGluZ1tpQ291bnRdICYmIGlzTmV3Um93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdEJveEVsZW1lbnQgPSAoZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtc2VsZWN0Ym94JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCdpbnB1dCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2VsbEVsZW1lbnQuZmluZCgnLmR4LXRleHRlZGl0b3ItYnV0dG9ucy1jb250YWluZXInKS5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5maW5kKCcuZHgtdGV4dGVkaXRvci1idXR0b25zLWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RCb3hFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChzZWxlY3RCb3hFbGVtZW50WzBdKS5keFNlbGVjdEJveCgnaW5zdGFuY2UnKS5vcHRpb24oJ3JlYWRPbmx5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXdSb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlLmNvbHVtbi5jb21tYW5kID09PSBcImVkaXRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0aW5nID0gZS5yb3cuaXNFZGl0aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtzID0gZS5jZWxsRWxlbWVudC5maW5kKFwiLmR4LWxpbmtcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAkbGlua3MudGV4dChcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rcy5maWx0ZXIoXCIuZHgtbGluay1zYXZlXCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcInNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkbGlua3MuZmlsdGVyKFwiLmR4LWxpbmstY2FuY2VsXCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcInJldmVydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rcy5maWx0ZXIoXCIuZHgtbGluay1lZGl0XCIpLmR4QnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcImVkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtzLmZpbHRlcihcIi5keC1saW5rLWRlbGV0ZVwiKS5keEJ1dHRvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJ0cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChvbkNlbGxIb3ZlckNoYW5nZWQpIHtcclxuICAgICAgICAgICAgIHZhciBwb3B1cF9ob3ZlciA9ICQoXCIjcG9wdXBfY2VsbFwiKS5keFBvcG92ZXIoe1xyXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bydcclxuICAgICAgICAgICAgIH0pLmR4UG9wb3ZlcihcImluc3RhbmNlXCIpO1xyXG5cclxuICAgICAgICAgICAgIG9iai5vbkNlbGxQcmVwYXJlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUucm93VHlwZSA9PSBcImRhdGFcIiAmJiBlZGl0T25QcmVwYXJpbmcuaW5jbHVkZXMoZS5jb2x1bW4uZGF0YUZpZWxkKSlcclxuICAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5hZGRDbGFzcyhcInBvcG92ZXJfY2VsbFwiKTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICBvYmoub25DZWxsSG92ZXJDaGFuZ2VkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlZGl0T25QcmVwYXJpbmcuaW5jbHVkZXMoZS5jb2x1bW4uZGF0YUZpZWxkKSAmJiBlLmV2ZW50VHlwZSA9PT0gXCJtb3VzZW92ZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICBwb3B1cF9ob3Zlci5vcHRpb24oXCJjb250ZW50VGVtcGxhdGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChjb250ZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCI8ZGl2Lz5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChlLnRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhjb250ZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgcG9wdXBfaG92ZXIub3B0aW9uKFwidGFyZ2V0XCIsIGUuY2VsbEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICBwb3B1cF9ob3Zlci5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3dUeXBlID09PSBcImRhdGFcIiAmJiBlLmV2ZW50VHlwZSA9PT0gXCJtb3VzZW91dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHBvcHVwX2hvdmVyLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmIChvblJvd1ZhbGlkYXRpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93VmFsaWRhdGluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUub2xkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAoKGUubmV3RGF0YS5hY3RpZiA9PSBmYWxzZSAmJiBlLm5ld0RhdGEuZGF0ZV9maW5fYXBwbGljYXRpb24gPT0gbnVsbCAmJiAhZS5vbGREYXRhLmRhdGVfZmluX2FwcGxpY2F0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGUubmV3RGF0YS5kYXRlX2Zpbl9hcHBsaWNhdGlvbiA9PSBudWxsICYmIGUubmV3RGF0YS5hY3RpZiA9PSB1bmRlZmluZWQgJiYgZS5vbGREYXRhLmFjdGlmID09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBlLmVycm9yVGV4dCA9IFwiVm91cyBkZXZleiBzYWlzaXIgdW5lIGRhdGUgZGUgZmluIGQnYXBwbGljYXRpb24gbG9yc3F1ZSBsZSBUYXV4IGVzdCBpbmFjdGlmXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IGUuY29tcG9uZW50LmdldFJvd0luZGV4QnlLZXkoZS5rZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSBlLmNvbXBvbmVudC5nZXRDZWxsRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGVfZmluX2FwcGxpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gY2VsbEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImR4LWRhdGVib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICQoZWRpdG9yRWxlbWVudFswXSkuZHhEYXRlQm94KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uU3RhdHVzOiBcImludmFsaWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJChlZGl0b3JFbGVtZW50WzBdKS5keERhdGVCb3goJ2luc3RhbmNlJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChyb3dDbGFzcykge1xyXG4gICAgICAgICAgICAgb2JqLm9uUm93UHJlcGFyZWQgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIC8vIMOJdmFsdWUgbGEgZm9uY3Rpb24gcm93Q2xhc3MgcXVpIGEgw6l0w6kgcGFzc8OpZSBlbiBzdHJpbmdcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIHZhciByb3dDbGFzc0Z1bmMgPSBldmFsKCcoJyArIHJvd0NsYXNzICsgJyknKTtcclxuICAgICAgICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gcm93Q2xhc3NGdW5jKGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmIChjc3NDbGFzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZS5yb3dFbGVtZW50LmFkZENsYXNzKGNzc0NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b29sdGlwRmllbGQgJiYgZS5kYXRhW3Rvb2x0aXBGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnJvd0VsZW1lbnQuYXR0cigndGl0bGUnLCBlLmRhdGFbdG9vbHRpcEZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAob25lZGl0b3JwcmVwYXJpbmcpIHtcclxuICAgICAgICAgICAgIG9iai5vbkVkaXRvclByZXBhcmluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgaWYgKChlLnBhcmVudFR5cGUgPT09IFwiZGF0YVJvd1wiIHx8IGUucGFyZW50VHlwZSA9PT0gXCJmaWx0ZXJSb3dcIikgJiYgb25lZGl0b3JwcmVwYXJpbmdbZS5kYXRhRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yTmFtZSA9IFwiZHhUYWdCb3hcIjtcclxuICAgICAgICAgICAgICAgICAgICAgZS5hdXRvRXhwYW5kR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlRWRpdG9yID0gY29tbW9uLmNyZWF0ZUN1c3RvbVN0b3JlKG9uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5nZXREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLmRhdGFTb3VyY2UgPSBzdG9yZUVkaXRvcjtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLnNob3dTZWxlY3Rpb25Db250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5kaXNwbGF5RXhwciA9IG9uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLnZhbHVlRXhwciA9IFwiaWRcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy52YWx1ZSA9IGUudmFsdWUgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5vblZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBlLnNldFZhbHVlKGFyZ3MudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgZS5lZGl0b3JPcHRpb25zLml0ZW1UZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiB0aXRsZT0nXCIgKyBkYXRhW29uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZF0gKyBcIic+XCIgKyBkYXRhW29uZWRpdG9ycHJlcGFyaW5nW2UuZGF0YUZpZWxkXS5maWVsZF0gKyBcIjwvc3Bhbj5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5vbkluaXRpYWxpemVkID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkdGFnQm94ID0gYXJncy5lbGVtZW50LmR4VGFnQm94KFwiaW5zdGFuY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUG9wdXBJbnN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgJChlLmVkaXRvckVsZW1lbnQpLnBhcmVudCgpLmFkZENsYXNzKCdjdXJzb3ItcG9pbnRlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gR8OpcmVyIGwnw6l2w6luZW1lbnQgZGUgY2xpYyBwb3VyIG91dnJpciBsZSB0YWdCb3hcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAkKGUuZWRpdG9yRWxlbWVudCkub24oXCJkeGNsaWNrXCIsIGZ1bmN0aW9uIChzcGFuQ2xpY2tBcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkNsaWNrQXJncy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIC8vR8OpcmVyIGwnw6l2w6luZW1lbnQgZGUgY2xpYyBzdXIgbGEgY2VsbHVsZSBwb3VyIG91dnJpciBsZSB0YWdCb3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICQoZS5lZGl0b3JFbGVtZW50KS5wYXJlbnQoKS5vbihcImR4Y2xpY2tcIiwgZnVuY3Rpb24gKGNlbGxDbGlja0FyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ2xpY2tBcmdzLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKCcuZHgtc2VsZWN0Ym94LXBvcHVwLXdyYXBwZXIgJykubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWdCb3gub3B0aW9uKCdvcGVuZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFnQm94Lm9wdGlvbignb3BlbmVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAocm93RGJsQ2xpY2spIHtcclxuICAgICAgICAgICAgIG9iai5vblJvd0RibENsaWNrID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBlLmNvbXBvbmVudC5zZWxlY3RSb3dzKFtlLmtleV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgnI2luZm9zX2xpc3QnKS5kYXRhKCdzaG93bGluaycpLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgdXJsW3VybC5sZW5ndGggLSAxXSA9IGUuZGF0YS5pZDtcclxuICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmwuam9pbignLycpICsgJz9pZF9lcXVpcGVtZW50PScgKyBlLmRhdGFbcm93RGJsQ2xpY2tdLCBcIl9ibGFua1wiKTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAob25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcykge1xyXG4gICAgICAgICAgICAgb2JqLm9uRWRpdG9yUHJlcGFyaW5nID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBpZiAoZS5yb3cuaXNOZXdSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgaWYgKGUucGFyZW50VHlwZSA9PT0gJ2RhdGFSb3cnICYmIGUubmFtZSA9PSBvbkVkaXRvclByZXBhcmluZ0NoYW5nZUl0ZW1zLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpQ291bnQgPSAwOyBpQ291bnQgPCBlLmNvbXBvbmVudC5nZXRWaXNpYmxlUm93cygpLmxlbmd0aDsgaUNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBlLmNvbXBvbmVudC5nZXRWaXNpYmxlUm93cygpW2lDb3VudF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5yb3dUeXBlID09PSAnZGF0YScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaChyb3cuZGF0YVtvbkVkaXRvclByZXBhcmluZ0NoYW5nZUl0ZW1zLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlLmxvb2t1cC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZXMuaW5jbHVkZXMoZS5sb29rdXAuaXRlbXNbaV1bb25FZGl0b3JQcmVwYXJpbmdDaGFuZ2VJdGVtcy5maWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goZS5sb29rdXAuaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIGUubG9va3VwLml0ZW1zID0gaXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIGUuZWRpdG9yT3B0aW9ucy5kYXRhU291cmNlID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIG9iai5vblJvd1JlbW92ZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgb2JqLmRhdGFTb3VyY2UgPSBzb3VyY2U7XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICBvYmouZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChyZW1vdGVPcGVyYXRpb25zKSB7XHJcbiAgICAgICAgICAgICBvYmoucmVtb3RlT3BlcmF0aW9ucyA9IHJlbW90ZU9wZXJhdGlvbnM7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmIChlZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICBvYmouZWRpdGluZyA9IGVkaXRpbmc7XHJcbiAgICAgICAgICAgICBvYmouZWRpdGluZy5tb2RlID0gXCJyb3dcIjtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAoYWxsb3dlZFBhZ2VTaXplcykge1xyXG4gICAgICAgICAgICAgb2JqLnBhZ2VyLmFsbG93ZWRQYWdlU2l6ZXMgPSBhbGxvd2VkUGFnZVNpemVzO1xyXG4gICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgaWYgKHNlYXJjaFBhbmVsKSB7XHJcbiAgICAgICAgICAgICBvYmouc2VhcmNoUGFuZWwgPSBzZWFyY2hQYW5lbDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcclxuICAgICAgICAgICAgIG9iai5wYWdlciA9IHBhZ2luYXRpb247XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIGlmICh0b29sYmFySW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICBvYmoub25Ub29sYmFyUHJlcGFyaW5nID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICBlLnRvb2xiYXJPcHRpb25zLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgb2JqLnJvd0RyYWdnaW5nLmFsbG93UmVvcmRlcmluZyA9IHJhbmdfdHJpO1xyXG4gICAgICAgICBvYmouY29sdW1ucyA9IGNvbHVtbnM7XHJcblxyXG4gICAgICAgICAvL29uIGfDqHJlIGxlIGZpbHRyZSBwYXIgZMOpZmF1dCBzaSBvbiBlbiBhIHVuXHJcbiAgICAgICAgIGlmIChkZWZhdXRGaWx0cmUpIHtcclxuICAgICAgICAgICAgIHZhciBmaWx0cmUgPSBKU09OLnBhcnNlKGRlZmF1dEZpbHRyZS5maWx0cmUpO1xyXG4gICAgICAgICAgICAgdmFyIGNvbG9ubmVzID0gSlNPTi5wYXJzZShkZWZhdXRGaWx0cmUuY29sb25uZXMpO1xyXG4gICAgICAgICAgICAgJCgnI21lcy1maWx0cmVzJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICBvYmouZmlsdGVyVmFsdWUgPSBmaWx0cmU7XHJcbiAgICAgICAgICAgICAvL29uIHBhcnNlIGxlcyBjb2xvbm5lcyBwb3VyIHF1ZSBhZmZpY2hlciBjZWxsZSBxdWkgw6l0YWllbnQgdmlzaWJsZSBsb3JzIGR1IGZpbGx0cmVcclxuICAgICAgICAgICAgIGlmIChjb2xvbm5lcykge1xyXG4gICAgICAgICAgICAgICAgIG9iai5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9ubmVzW3ZhbHVlLmRhdGFGaWVsZF0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29sdW1uc1trZXldLnZpc2libGVJbmRleCA9IGNvbG9ubmVzW3ZhbHVlLmRhdGFGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29sdW1uc1trZXldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbHVtbnNba2V5XS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICBpZiAoZGlzYWJsZW9udmlldyAmJiBkaXNhYmxlb252aWV3ICE9ICdlZGl0Jykge1xyXG4gICAgICAgICAgICAgb2JqLmVkaXRpbmcuYWxsb3dVcGRhdGluZyA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIG9iai5lZGl0aW5nLmFsbG93RGVsZXRpbmcgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgJChlbGVtZW50KS5keERhdGFHcmlkKG9iaik7XHJcbiAgICAgfVxyXG4gICAgICQoXCIuZ3JpZFwiKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICB3aW5kb3cuaW5pdERldkV4dHJlbWVHcmlkcyh0aGlzKTtcclxuICAgICB9KTtcclxuICAgICBmdW5jdGlvbiBvbkN1c3RvbUl0ZW1DcmVhdGluZyhhcmdzKSB7XHJcbiAgICAgICAgIHZhciBuZXdJdGVtID0ge307XHJcbiAgICAgICAgIG5ld0l0ZW0uSUQgPSA5OTk5O1xyXG4gICAgICAgICBuZXdJdGVtLk5hbWUgPSBhcmdzLnRleHQ7XHJcbiAgICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgIH1cclxuXHJcbiAgICAgLy8gRm9uY3Rpb24gcG91ciBvdXZyaXIgb3UgZmVybWVyIGxlIGR4VGFnQm94XHJcbiAgICAgZnVuY3Rpb24gdG9nZ2xlVGFnQm94KHRhZ0JveCkge1xyXG4gICAgICAgICB0YWdCb3gub3B0aW9uKFwib3BlbmVkXCIsICF0YWdCb3gub3B0aW9uKFwib3BlbmVkXCIpKTtcclxuICAgICB9XHJcblxyXG4gICAgICQoJ2lucHV0LmFkcmVzc2VfYXV0bycpLmF1dG9jb21wbGV0ZSh7XHJcbiAgICAgICAgIHNvdXJjZTogZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nICsgcmVxdWVzdC50ZXJtICsgJyZ0eXBlPWhvdXNlbnVtYmVyJmF1dG9jb21wbGV0ZT0xJmxpbWl0MTAmbGF0JmxvbicsXHJcbiAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICByZXNwb25zZSgkLm1hcChkYXRhLmZlYXR1cmVzLCBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkcmVzc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2kgb24gZXN0IG9ibGlnw6kgZCdham91dGVyIGxlcyBDUCBkYW5zIHVuIGFycmF5IHBvdXIgbmUgcGFzIGF2b2lyIHBsdXNpZXVycyBmb2lzIGxlIG3Dqm1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KGl0ZW0ucHJvcGVydGllcy5sYWJlbCwgYWRyZXNzZXMpID09IC0xICYmIGl0ZW0ucHJvcGVydGllcy5ob3VzZW51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkcmVzc2VzLnB1c2goaXRlbS5wcm9wZXJ0aWVzLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbDogaXRlbS5wcm9wZXJ0aWVzLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5OiBpdGVtLnByb3BlcnRpZXMuY2l0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGl0ZW0ucHJvcGVydGllcy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5wcm9wZXJ0aWVzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBpdGVtLmdlb21ldHJ5LmNvb3JkaW5hdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIC8vIE9uIHJlbXBsaXQgYXVzc2kgbGEgdmlsbGVcclxuICAgICAgICAgc2VsZWN0OiBmdW5jdGlvbihldmVudCwgdWkpIHtcclxuICAgICAgICAgICAgIHZhciBpZF9zaXRlID0gJCh0aGlzKS5kYXRhKCdpZHNpdGUnKTtcclxuICAgICAgICAgICAgIHZhciBpZF9lcXVpcGVtZW50ID0gJCh0aGlzKS5kYXRhKCdpZGVxdWlwZW1lbnQnKTtcclxuICAgICAgICAgICAgIHZhciBwcmVmaXggPSAkKHRoaXMpLmRhdGEoJ3ByZWZpeCcpO1xyXG4gICAgICAgICAgICAgdmFyIGRpdmVycm9yID0gJCh0aGlzKS5kYXRhKCdkaXZlcnJvcicpO1xyXG4gICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgaWYgKGlkX2VxdWlwZW1lbnQpIGlkX2VxdWlwZW1lbnQgPSAnLScgKyBpZF9lcXVpcGVtZW50O1xyXG4gICAgICAgICAgICAgZWxzZSBpZF9lcXVpcGVtZW50ID0gJyc7XHJcblxyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl9jb2RlX3Bvc3RhbFwiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0ucG9zdGNvZGUpO1xyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl92aWxsZVwiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0uY2l0eSk7XHJcbiAgICAgICAgICAgICAkKFwiaW5wdXRbbmFtZT0nXCIrcHJlZml4K1wiX2FkcmVzc2VcIisgaWRfZXF1aXBlbWVudCtcIiddXCIpLnZhbCh1aS5pdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgJChcImlucHV0W25hbWU9J1wiK3ByZWZpeCtcIl9jb29yZGluYXRlc1wiKyBpZF9lcXVpcGVtZW50K1wiJ11cIikudmFsKHVpLml0ZW0uY29vcmRpbmF0ZXMpO1xyXG4gICAgICAgICAgICAgaWYgKGlkX3NpdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VjdGV1ci9jb21wYXJlL3NlY3RldXJfc2l0ZS8nICsgaWRfc2l0ZSAsXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YToge1wiY29vcmRpbmF0ZXNcIjogdWkuaXRlbS5jb29yZGluYXRlc30sXHJcbiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkaXZlcnJvcikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLmFkZENsYXNzKCdhbGVydCBhbGVydC1kYW5nZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRpdmVycm9yKS5jc3MoJ2Rpc3BsYXknLCAnZmxleCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLmNzcygnYWxpZ24taXRlbXMnLCAnY2VudGVyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkaXZlcnJvcikuaHRtbCgnPGkgY2xhc3M9XCJmYSBmYS13YXJuaW5nXCI+PC9pPicgK2RhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGl2ZXJyb3IpLnJlbW92ZUNsYXNzKCdhbGVydCBhbGVydC1kYW5nZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRpdmVycm9yKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgIH0pO1xyXG5cclxuIH0pO1xyXG5cclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyICR0eXBlU2VsZWN0ID0gJCgnLmpzLXVzZXItZm9ybS10eXBlJyk7XHJcbiAgICB2YXIgJHNpdGVUYXJnZXQgPSAkKCcuanMtc2l0ZS10YXJnZXQnKTtcclxuXHJcbiAgICAvL2dlc3Rpb24gZHUgbGllbiBhY3RpZiBkdSBtZW51XHJcbiAgICAvLyBPYnRlbmV6IGwnVVJMIGFjdHVlbGxlIGRlIGxhIHBhZ2VcclxuICAgIHZhciBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAvLyBQYXJjb3VyZXogY2hhcXVlIMOpbMOpbWVudCBkZSBtZW51XHJcbiAgICAkKCcjc3VibWVudSAubmF2LWl0ZW0nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAkKCcjc3VibWVudSAubmF2LWl0ZW0gLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaW5rID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XHJcblxyXG4gICAgICAgIC8vIFbDqXJpZmlleiBzaSBsJ1VSTCBkZSBsYSBwYWdlIGFjdHVlbGxlIGNvcnJlc3BvbmQgw6AgbCdVUkwgZHUgbGllbiBkdSBtZW51XHJcbiAgICAgICAgaWYgKGN1cnJlbnRVcmwuaW5kZXhPZihsaW5rKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gQWpvdXRleiBsYSBjbGFzc2UgJ2FjdGl2ZScgw6AgbCfDqWzDqW1lbnQgcGFyZW50IGR1IGxpZW5cclxuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgICR0eXBlU2VsZWN0Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogJHR5cGVTZWxlY3QuZGF0YSgnc3BlY2lmaWMtdHlwZS11cmwnKSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgdHlwZV91dGlsaXNhdGV1cjogJHR5cGVTZWxlY3QudmFsKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzaXRlVGFyZ2V0LmZpbmQoJ3NlbGVjdCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICRzaXRlVGFyZ2V0LmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjdXJyZW50IGZpZWxkIGFuZCBzaG93XHJcbiAgICAgICAgICAgICAgICAkc2l0ZVRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgIC5odG1sKGh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdkLW5vbmUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiogVENIQVQgKiovXHJcbiAgICAvL3RoaXMgZnVuY3Rpb24gY2FuIHJlbW92ZSBhIGFycmF5IGVsZW1lbnQuXHJcbiAgICBBcnJheS5yZW1vdmUgPSBmdW5jdGlvbiAoYXJyYXksIGZyb20sIHRvKSB7XHJcbiAgICAgICAgdmFyIHJlc3QgPSBhcnJheS5zbGljZSgodG8gfHwgZnJvbSkgKyAxIHx8IGFycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgYXJyYXkubGVuZ3RoID0gZnJvbSA8IDAgPyBhcnJheS5sZW5ndGggKyBmcm9tIDogZnJvbTtcclxuICAgICAgICByZXR1cm4gYXJyYXkucHVzaC5hcHBseShhcnJheSwgcmVzdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvL3RoaXMgaXMgdXNlZCB0byBjbG9zZSBhIHBvcHVwXHJcbiAgICB3aW5kb3cuY2xvc2VfcG9wdXAgPSBmdW5jdGlvbiBjbG9zZV9wb3B1cChpZCkge1xyXG4gICAgICAgIGZvciAodmFyIGlpaSA9IDA7IGlpaSA8IHBvcHVwcy5sZW5ndGg7IGlpaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpZCA9PSBwb3B1cHNbaWlpXSkge1xyXG4gICAgICAgICAgICAgICAgQXJyYXkucmVtb3ZlKHBvcHVwcywgaWlpKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZV9wb3B1cHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9kaXNwbGF5cyB0aGUgcG9wdXBzLiBEaXNwbGF5cyBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9wdXBzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCB3aWR0aFxyXG4gICAgZnVuY3Rpb24gZGlzcGxheV9wb3B1cHMoKSB7XHJcbiAgICAgICAgdmFyIHJpZ2h0ID0gNDAwO1xyXG4gICAgICAgIGlmICgkKCcuY2hhdC1zaWRlYmFyJykuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjbGFzc19ib3R0b20gPSAnc2Fucy1ib3R0b20tYmFyJztcclxuICAgICAgICBpZiAoJCgnLmZpeGVkLWJvdHRvbScpLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIGNsYXNzX2JvdHRvbSA9ICdhdmVjLWJvdHRvbS1iYXInO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlpaSA9IDA7XHJcbiAgICAgICAgZm9yIChpaWk7IGlpaSA8IHRvdGFsX3BvcHVwczsgaWlpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvcHVwc1tpaWldICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwb3B1cHNbaWlpXSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKCdzYW5zLWJvdHRvbS1iYXInKS5yZW1vdmVDbGFzcygnYXZlYy1ib3R0b20tYmFyJyk7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmFkZENsYXNzKGNsYXNzX2JvdHRvbSk7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IHJpZ2h0ICsgMzIwO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBqamogPSBpaWk7IGpqaiA8IHBvcHVwcy5sZW5ndGg7IGpqaisrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9wdXBzW2pqal0pO1xyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9jcmVhdGVzIG1hcmt1cCBmb3IgYSBuZXcgcG9wdXAuIEFkZHMgdGhlIGlkIHRvIHBvcHVwcyBhcnJheS5cclxuICAgIHdpbmRvdy5yZWdpc3Rlcl9wb3B1cCA9IGZ1bmN0aW9uIHJlZ2lzdGVyX3BvcHVwKGlkLCBuYW1lLCBjbGFzc19uYW1lKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaWlpID0gMDsgaWlpIDwgcG9wdXBzLmxlbmd0aDsgaWlpKyspIHtcclxuICAgICAgICAgICAgLy9hbHJlYWR5IHJlZ2lzdGVyZWQuIEJyaW5nIGl0IHRvIGZyb250LlxyXG4gICAgICAgICAgICBpZiAoaWQgPT0gcG9wdXBzW2lpaV0pIHtcclxuICAgICAgICAgICAgICAgIEFycmF5LnJlbW92ZShwb3B1cHMsIGlpaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9hZFBvcHVwVGNoYXQoaWQsIG5hbWUsIGNsYXNzX25hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkUG9wdXBUY2hhdChpZCwgbmFtZSwgY2xhc3NfbmFtZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRQb3B1cFRjaGF0KGlkLCBuYW1lLCBjbGFzc19uYW1lLCByZWFkID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWQgID0gcGFyc2VJbnQoaWQpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgdXJsOiBcIi90Y2hhdC9sb2FkXCIsXHJcbiAgICAgICAgICAgIGRhdGE6IHsnaWQnOiBpZCwgJ25hbWUnOiBuYW1lLCAnY2xhc3NfbmFtZSc6IGNsYXNzX25hbWUsICdyZWFkJzogcmVhZH0sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImh0bWxcIixcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQoJyMnICsgaWQpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSAkKHJlc3VsdCkuY2hpbGRyZW4oJy5jaGF0Ym94X19ib2R5JykuaHRtbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgaWQpLmNoaWxkcmVuKCcuY2hhdGJveF9fYm9keScpLmh0bWwoYm9keSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoJyMnICtpZCArJyAucGFuZWwtZm9vdGVyIC5pbnB1dC1ncm91cCBpbnB1dCcpLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwb3B1cHMuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXBzLnVuc2hpZnQoaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlX3BvcHVwcygpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBpZCAgKycgPiAuY2hhdGJveF9fYm9keScpWzBdLnNjcm9sbFRvcCA9ICQoJyMnICsgaWQgKycgPiAuY2hhdGJveF9fYm9keScpWzBdLnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGxvYWRTaWRlYmFyVGNoYXQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsdSBsb2FkIHBvcHVwJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3aW5kb3cubG9hZFNpZGViYXJUY2hhdCA9IGZ1bmN0aW9uIGxvYWRTaWRlYmFyVGNoYXQoKSB7XHJcbiAgICAvLyAgICAgJC5hamF4KHtcclxuICAgIC8vICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgLy8gICAgICAgICB1cmw6IFwiL3RjaGF0L2NvbnZlcnNhdGlvbnNcIixcclxuICAgIC8vICAgICAgICAgZGF0YVR5cGU6IFwiaHRtbFwiLFxyXG4gICAgLy8gICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAkKCcjdGNoYXQtZ3JvdXBzJykuaHRtbChyZXN1bHQpO1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKCQoJyNoaWRkZW5fdGNoYXRfbnVtYmVycycpLnRleHQoKSAhPSAnMCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAkKCcjbnVtYmVyX3RjaGF0X2dsb2JhbCcpLnRleHQoJCgnI2hpZGRlbl90Y2hhdF9udW1iZXJzJykudGV4dCgpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAvL2lmICgkKCcuY2hhdC1zaWRlYmFyJykuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICQoJyNudW1iZXJfdGNoYXRfZ2xvYmFsJykuc2hvdygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAkKCcucGljdG8tdGNoYXQnKS5hZGRDbGFzcygnYmctcm91Z2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgJCgnI251bWJlcl90Y2hhdF9nbG9iYWwnKS50ZXh0KCcnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAkKCcucGljdG8tdGNoYXQnKS5yZW1vdmVDbGFzcygnYmctcm91Z2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoJCgnLmNoYXQtc2lkZWJhcicpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAkKCcjbnVtYmVyX3RjaGF0X2dsb2JhbCcpLmhpZGUoKTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9wdXBzIHN1aXRhYmxlIGFuZCB0aGVuIHBvcHVsYXRlIHRoZSB0b2F0YWxfcG9wdXBzIHZhcmlhYmxlLlxyXG4gICAgd2luZG93LmNhbGN1bGF0ZV9wb3B1cHMgPSBmdW5jdGlvbiBjYWxjdWxhdGVfcG9wdXBzKCkge1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGlmICh3aWR0aCA8IDU0MCkge1xyXG4gICAgICAgICAgICB0b3RhbF9wb3B1cHMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQoJy5jaGF0LXNpZGViYXInKS5jc3MoJ2Rpc3BsYXknKSAhPSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggLSA0ODM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vMzIwIGlzIHdpZHRoIG9mIGEgc2luZ2xlIHBvcHVwIGJveFxyXG4gICAgICAgICAgICB0b3RhbF9wb3B1cHMgPSBwYXJzZUludCh3aWR0aCAvIDMyMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaXNwbGF5X3BvcHVwcygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLy0tIE5vIHVzZSB0aW1lLiBJdCBpcyBhIGphdmFTY3JpcHQgZWZmZWN0LlxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0Q2hhdCh0ZXh0LCBwYXJlbnQsIGNsYXNzX25hbWUpIHtcclxuICAgICAgICB2YXIgY29udHJvbCA9IFwiXCI7XHJcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXRlVGV4dCA9IGRhdGUuZ2V0SG91cnMoKSArICc6JyArIGRhdGUuZ2V0TWludXRlcygpO1xyXG5cclxuICAgICAgICBjb250cm9sID0gJzxsaSBzdHlsZT1cIndpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmRcIj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJtc2otciBtYWNybyAnICsgY2xhc3NfbmFtZSArICdcIj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtbFwiPicgK1xyXG4gICAgICAgICAgICAnPHA+JyArIHRleHQgKyAnPC9wPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXY+PHNwYW4gY2xhc3M9XCJjaGF0LW1zZy1ob3VyXCI+PHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDAuNjhlbVwiPicgKyBkYXRlVGV4dCArICcmbmJzcDsnICtcclxuICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6MC42XCI+JmNoZWNrOzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6MC42XCI+JmNoZWNrOzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9saT4nO1xyXG5cclxuICAgICAgICBwYXJlbnQuYXBwZW5kKGNvbnRyb2wpO1xyXG5cclxuICAgICAgICB2YXIgY2hhdGJvZHkgPSAkKHBhcmVudCkucGFyZW50KCk7XHJcbiAgICAgICAgY2hhdGJvZHkuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBjaGF0Ym9keVswXS5zY3JvbGxIZWlnaHR9LCA3NTApO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5oYW5kbGVOZXdNZXNzYWdlID0gZnVuY3Rpb24gaGFuZGxlTmV3TWVzc2FnZShpZCwgbmFtZSwgY2xhc3NfbmFtZSkge1xyXG4gICAgICAgIC8vb24gdGVzdCBzaSBsYSBwb3B1cCBlc3Qgb3V2ZXJ0dXJlLCBvbiBsYSByZWNoYXJnZVxyXG4gICAgICAgIGZvciAodmFyIGlpaSA9IDA7IGlpaSA8IHBvcHVwcy5sZW5ndGg7IGlpaSsrKSB7XHJcbiAgICAgICAgICAgIC8vYWxyZWFkeSByZWdpc3RlcmVkLiBCcmluZyBpdCB0byBmcm9udC5cclxuICAgICAgICAgICAgaWYgKGlkID09IHBvcHVwc1tpaWldKSB7XHJcbiAgICAgICAgICAgICAgICBBcnJheS5yZW1vdmUocG9wdXBzLCBpaWkpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBpZCkucmVtb3ZlQ2xhc3MoJ2NoYXRib3gtLXRyYXknKTtcclxuICAgICAgICAgICAgICAgIGxvYWRQb3B1cFRjaGF0KGlkLCBuYW1lLCBjbGFzc19uYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9zaW5vbiBvbiB2YSBtZXR0cmUgw6Agam91ciBsYSBzaWRlYmFydGNoYXRcclxuICAgICAgIC8vIGxvYWRTaWRlYmFyVGNoYXQoKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9yZWNhbGN1bGF0ZSB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgYW5kIGFsc28gd2hlbiB3aW5kb3cgaXMgcmVzaXplZC5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGNhbGN1bGF0ZV9wb3B1cHMpO1xyXG5cclxuICAgIHdpbmRvdy5zZW5kTWVzc2FnZSA9IGZ1bmN0aW9uIHNlbmRNZXNzYWdlKGVsZW1lbnRUZXh0LCBlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSBlbGVtZW50VGV4dC50ZXh0KCk7XHJcbiAgICAgICAgdmFyIGNsYXNzX25hbWUgPSBlbGVtZW50VGV4dC5kYXRhKCdjbGFzcy1uYW1lJyk7XHJcbiAgICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgLy9jYWxsIGFqYXggcG9zdCB0Y2hhdFxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHVybDogXCIvdGNoYXQvcG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogeydpZCc6IGVsZW1lbnQucGFyZW50cygnLmNoYXQtcG9wdXAnKS5hdHRyKCdpZCcpLCAnbWVzc2FnZSc6IHRleHR9LFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vb24gcmVjaGFyZ2UgbGEgcG9wdXBcclxuICAgICAgICAgICAgICAgICAgICBsb2FkUG9wdXBUY2hhdChwYXJzZUludChlbGVtZW50LnBhcmVudHMoJy5jaGF0LXBvcHVwJykuYXR0cignaWQnKSksICcnLCBjbGFzc19uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50VGV4dC50ZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBjcmVhdGVQb3BwZXIodGhpcywgdG9vbHRpcCk7XHJcbiAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIFBvcHBlciB0byB1cGRhdGUgdGhlIHRvb2x0aXAgcG9zaXRpb25cclxuICAgICAgICAvLyBhZnRlciB3ZSBzaG93IHRoZSB0b29sdGlwLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpbmNvcnJlY3RcclxuICAgICAgICBwb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoaWRlKGVsZW1lbnQpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy9wb3VyIHZhbGlkZXIgbGVzIGNoZWNrYm94IHJlcXVpcmVkIChub24gZ8OpcsOpIHBhciBzeW1waG9ueSBkZSBiYXNlKVxyXG4gICAgZnVuY3Rpb24gZGVSZXF1aXJlQ2IoZWxDbGFzcykge1xyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZWxDbGFzcyk7XHJcbiAgICAgICAgdmFyIGF0TGVhc3RPbmVDaGVja2VkID0gZmFsc2U7Ly9hdCBsZWFzdCBvbmUgY2IgaXMgY2hlY2tlZFxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZWxbaV0uY2hlY2tlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgYXRMZWFzdE9uZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXRMZWFzdE9uZUNoZWNrZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZWxbaV0ucmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGVsW2ldLnJlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgd2luZG93LmdldEh0bWxGcm9tQWpheCA9IGZ1bmN0aW9uIGdldEh0bWxGcm9tQWpheChyb3V0ZSkge1xyXG4gICAgICAgIC8vY2FsbCBhamF4IHBvc3QgdGNoYXRcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiByb3V0ZSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImh0bWxcIixcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIsIHN0YXR1cywgZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCcuYnRuLXNhdmUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB2YXIgcmlnaHRzID0ge30sIHNwbGl0TmFtZSA9IFtdLCBpZFJpZ2h0ID0gJycsIHNpdGUgPSAnJywgdmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgJCgnI3RhYmxlLXJpZ2h0cyB0ZCBpbnB1dC5mb3JtLWNoZWNrLWlucHV0JykuZWFjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBzcGxpdE5hbWUgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKS5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICBpZFJpZ2h0ID0gc3BsaXROYW1lWzNdO1xyXG4gICAgICAgICAgICBzaXRlID0gc3BsaXROYW1lWzFdO1xyXG5cclxuICAgICAgICAgICAgdmFsdWUgPSAoKCQodGhpcylbMF0uY2hlY2tlZCA9PSB0cnVlKSA/IDEgOiAwKTtcclxuICAgICAgICAgICAgaWYgKCFyaWdodHNbc2l0ZV0pIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0c1tzaXRlXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJpZ2h0c1tzaXRlXVtpZFJpZ2h0XSA9IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJpZ2h0cyA9IEpTT04uc3RyaW5naWZ5KHJpZ2h0cyk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcjc3VibWl0LXNhdmUtZmlsdGVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdmFyIGFycmF5Q29sdW1uc1Zpc2libGUgPSB7fTtcclxuICAgICAgICB2YXIgdGl0cmUgPSAkKCcjdGl0cmVfZmlsdHJlJykudmFsKCk7XHJcbiAgICAgICAgdmFyIHJvbGUgPSAkKCcjZmlsdHJlX3JvbGUnKS52YWwoKTtcclxuICAgICAgICB2YXIgZGVmYXV0ICA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBkZWZhdXRfdXRpbGlzYXRldXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCQoJyNmaWx0cmVfcGFyX2RlZmF1dCcpWzBdLmNoZWNrZWQgPT0gdHJ1ZSkgZGVmYXV0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoJCgnI2ZpbHRyZV9wYXJfZGVmYXV0X3V0aWxpc2F0ZXVyJylbMF0uY2hlY2tlZCA9PSB0cnVlKSBkZWZhdXRfdXRpbGlzYXRldXIgPSB0cnVlO1xyXG4gICAgICAgIC8vaWYgKCQoJyNncmlkQ29udGFpbmVyJykubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdmFyIGZpbHRyZSA9ICQoXCIuZ3JpZFwiKS5keERhdGFHcmlkKCdpbnN0YW5jZScpLmdldENvbWJpbmVkRmlsdGVyKHRydWUpO1xyXG4gICAgICAvLyAgICAgIGNvbnNvbGUubG9nKCQoJy5ncmlkJykuZHhEYXRhR3JpZCgnaW5zdGFuY2UnKS5nZXRWaXNpYmxlQ29sdW1ucygpKTtcclxuICAgICAgICAkKCcuZ3JpZCcpLmR4RGF0YUdyaWQoJ2luc3RhbmNlJykuZ2V0VmlzaWJsZUNvbHVtbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUudHlwZSAhPSAnc2VsZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlDb2x1bW5zVmlzaWJsZVtlLmRhdGFGaWVsZF0gPSBlLnZpc2libGVJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbW1vbi5yZXNldEZvcm0oKTtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB2YXIgZmlsdHJlID0gJCgnI3Bpdm90Z3JpZCcpLmR4UGl2b3RHcmlkKCdpbnN0YW5jZScpLmdldERhdGFTb3VyY2UoKS5zdGF0ZSgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBpZiAoZmlsdHJlIHx8IGFycmF5Q29sdW1uc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogXCIvZmlsdGVycy9cIiArICQoJyNpbmZvc19saXN0JykuZGF0YSgncGFnZS1maWx0cmUnKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogeyd0aXRyZSc6IHRpdHJlLCAnZmlsdHJlcyc6IGZpbHRyZSwgJ2NvbG9ubmVzJzogYXJyYXlDb2x1bW5zVmlzaWJsZSwgJ2RlZmF1dCc6IGRlZmF1dCwnZGVmYXV0X3V0aWxpc2F0ZXVyJzogZGVmYXV0X3V0aWxpc2F0ZXVyLCAncm9sZSc6IHJvbGUsICdzaXRlJzogJCgnI2ZpbHRyZV9zaXRlJykudmFsKCl9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmFsZXJ0JykuaHRtbChyZXN1bHQubWVzc2FnZSkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwX3NhdmVfZmlsdGVyLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyZXVyIGxvcnMgZGUgbFxcJ2Fqb3V0IGR1IGZpbHRyZScpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJCgnLmFsZXJ0JykuaHRtbCgnVm91cyBkZXZleiBmaWx0cmVyIHZvcyBkb25uw6llcyBhdmFudCBkZSBwb3V2b2lyIGxlcyBlbnJlZ2lzdHJlcicpLnNob3coKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLy9wYWdlIHVzZXJcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLnJlbW92ZV91c2VyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPkV0ZXMgdm91cyBzdXIgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0dGUgbGlhaXNvbj8/PC9pPlwiLCBcIlV0aWxpc2F0ZXVyXCIpO1xyXG4gICAgICAgIHJlc3VsdC5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvXCIgKyAkKCcjaW5mb3NfbGlzdCcpLmRhdGEoJ3BhZ2UtZmlsdHJlJykgKyBcIi9cIiArIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XCJyZXNwb25zYWJsZVwiOiBudWxsfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQocGFyZW50KS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJyNhZGRfc3Vib3Jkb25uZWUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICQoJyNib2R5LWFkZC1zdWJvcmRvbm5lZScpLmxvYWQoJy9jb25maWd1cmF0aW9uL3V0aWxpc2F0ZXVycy9zaXRlLXN1Yi1zZWxlY3QvJyArIHVzZXJJZCwgbnVsbCk7XHJcbiAgICAgICAgdmFyIHBvcHVwQWRkU3ViID0gY29tbW9uLmNyZWF0ZUR4UG9wdXAoXCJwb3B1cC1hZGQtc3Vib3Jkb25uZWVcIiwgXCJBam91dCBkJ3VuZSBwZXJzb25uZVwiLCAnODAlJyk7XHJcbiAgICAgICAgJCgnI3BvcHVwLWFkZC1zdWJvcmRvbm5lZScpLnNob3coKTtcclxuICAgICAgICBwb3B1cEFkZFN1Yi5zaG93KCk7XHJcbiAgICAgICAgJCgnLmFsZXJ0JykuaHRtbCgnJykuaGlkZSgpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5idG4tY2xvc2UtcG9wdXBhZGQsIC5idG4tc3VibWl0LXBvcHVwYWRkJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAkKCcjcG9wdXAtYWRkLXN1Ym9yZG9ubmVlJykuZHhQb3B1cChcImluc3RhbmNlXCIpLmhpZGUoKTtcclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICdidXR0b25bdHlwZT1zdWJtaXRdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdmb3JtJykpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm0gPSAnIycgKyAkKHRoaXMpLmF0dHIoJ2Zvcm0nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZm9ybSA9IGUudGFyZ2V0LmZvcm07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3BvdXIgbGVzIGZvcm11bGFpcmVzIGF2ZWMgY2hlY2tib3gsIG9uIGxlcyByZXZhbGlkZW50IGF2YW50IGxlIHN1Ym1pdFxyXG4gICAgICAgIGlmICgkKGZvcm0pLmZpbmQoJy5jaGVja2JveC1yZXF1aXJlZCA+IGxhYmVsID4gaW5wdXQnKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAkKGZvcm0pLmZpbmQoJy5jaGVja2JveC1yZXF1aXJlZCA+IGxhYmVsID4gaW5wdXQ6Zmlyc3QnKS5jbGljaygpLmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkKGZvcm0pWzBdLnJlcG9ydFZhbGlkaXR5KCkgIT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgJChmb3JtKS5zdWJtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignc3VibWl0JywgJ2Zvcm0uZm9ybS1hamF4JywgY29tbW9uLmhhbmRsZU5ld0Zvcm1TdWJtaXQuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICdbZGF0YS1keHBvcHVwXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHZhciBpZFBvcHVwID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1pZCcpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9ICQodGhpcykuZGF0YSgncG9wdXAtd2lkdGgnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1oZWlnaHQnKTtcclxuICAgICAgICB2YXIgY29udGVudFRlbXBsYXRlQWpheCA9ICQodGhpcykuZGF0YSgnY29udGVudC10ZW1wbGF0ZS1hamF4Jyk7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQodGhpcykuZGF0YSgncG9wcHVwLWNvbnRhaW5lcicpO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbl9vZiA9ICQodGhpcykuZGF0YSgncG9wdXAtcG9zaXRpb24tb2YnKTtcclxuICAgICAgICB2YXIgcG9zaXRpb25fYXQgPSAkKHRoaXMpLmRhdGEoJ3BvcHVwLXBvc2l0aW9uLWF0Jyk7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uX215ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1wb3NpdGlvbi1teScpO1xyXG4gICAgICAgIHZhciBzY3JvbGx2aWV3ID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1zY3JvbGx2aWV3Jyk7XHJcbiAgICAgICAgdmFyIHNjcm9sbHZpZXdfaGVpZ2h0ID0gJCh0aGlzKS5kYXRhKCdzY3JvbGx2aWV3LWhlaWdodCcpO1xyXG4gICAgICAgIHZhciBjbG9zZU9uT3V0c2lkZUNsaWNrID0gJCh0aGlzKS5kYXRhKCdwb3B1cC1jbG9zZW91dHNpZGUnKTtcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gICQodGhpcykuZGF0YSgncG9wdXAtb2Zmc2V0Jyk7XHJcblxyXG4gICAgICAgIC8vb24gcsOpaW5pdGlhbGlzZSBzZXVsZW1lbnQgbGUgZm9ybXVsYWlyZSBkZSBsYSBwb3B1cFxyXG4gICAgICAgICQoJyMnK2lkUG9wdXAgKyAnIGZvcm0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICQodGhpcylbMF0ucmVzZXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgcG9wdXAgPSBjb21tb24uY3JlYXRlRHhQb3B1cChpZFBvcHVwLCAkKHRoaXMpLmRhdGEoJ3BvcHVwLXRpdGxlJyksIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKFwiY29udGFpbmVyXCIsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZW50VGVtcGxhdGVBamF4KSB7XHJcbiAgICAgICAgICAgIC8vIHZhciBodG1sID0gd2luZG93LmdldEh0bWxGcm9tQWpheChjb250ZW50VGVtcGxhdGVBamF4KTtcclxuICAgICAgICAgICAgLy8gcG9wdXAub3B0aW9uKFwiY29udGVudFRlbXBsYXRlXCIsIGh0bWwpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZ2V0SHRtbEZyb21BamF4KGNvbnRlbnRUZW1wbGF0ZUFqYXgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLm9wdGlvbihcImNvbnRlbnRUZW1wbGF0ZVwiLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyZXVyIDonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uX29mKSB7XHJcbiAgICAgICAgICAgIHBvcHVwLm9wdGlvbigncG9zaXRpb24ub2YnLCAkKHBvc2l0aW9uX29mKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvZmZzZXQpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKCdwb3NpdGlvbi5vZmZzZXQnLCBvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb25fYXQpIHtcclxuICAgICAgICAgICAgcG9wdXAub3B0aW9uKCdwb3NpdGlvbi5hdCcsIHBvc2l0aW9uX2F0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uX215KSB7XHJcbiAgICAgICAgICAgIHBvcHVwLm9wdGlvbigncG9zaXRpb24ubXknLCBwb3NpdGlvbl9teSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbG9zZU9uT3V0c2lkZUNsaWNrID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBwb3B1cC5vcHRpb24oXCJjbG9zZU9uT3V0c2lkZUNsaWNrXCIsIGNsb3NlT25PdXRzaWRlQ2xpY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2Nyb2xsdmlldykge1xyXG4gICAgICAgICAgICBwb3B1cC5vcHRpb24oXCJvblNob3duXCIsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICQoc2Nyb2xsdmlldykuZHhTY3JvbGxWaWV3KHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxCeUNvbnRlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQnlUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VOYXRpdmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbHZpZXdfaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwb3B1cC5yZXBhaW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCgnIycgKyBpZFBvcHVwKS5zaG93KCk7XHJcblxyXG4gICAgICAgIHBvcHVwLnNob3coKTtcclxuICAgICAgICAkKCcuYWxlcnQnKS5odG1sKCcnKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJ2J1dHRvbi5idG4tY2xvc2UtcG9wdXAnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB2YXIgaWRQb3B1cCA9ICQodGhpcykuZGF0YSgnZHhwb3B1cC1pZCcpO1xyXG4gICAgICAgICQoJyMnICsgaWRQb3B1cCkuZHhQb3B1cCgnaW5zdGFuY2UnKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL3BvdXIgbGVzIGV2ZW5lbWVudHMgaGlkZS8gc2hvdyBzdXIgY2xpY2tcclxuICAgICQoJ2JvZHknKS5vbignY2hhbmdlJywgJ2lucHV0W2RhdGEtY2hhbmdlLXRhcmdldF0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ2NoYW5nZS10YXJnZXQnKTtcclxuICAgICAgICAkKHRhcmdldCkudG9nZ2xlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29tbW9uLnJlc2V0Rm9ybSgpO1xyXG4gICAgICAgICQoJ2J1dHRvbltkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXScpLm9uKCdzaG93LmJzLnRhYicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhY3RpdmVUYWInLCAkKGUudGFyZ2V0KS5hdHRyKCdpZCcpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgYWN0aXZlVGFiID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYicpO1xyXG4gICAgICAgIGlmIChhY3RpdmVUYWIpIHtcclxuICAgICAgICAgICAgJCgnIycgKyBhY3RpdmVUYWIpLnRhYignc2hvdycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKCcuaW5wdXRfdGVsOm5vdCgubm90X2ZyKScpLm1hc2soJzAwLjAwLjAwLjAwLjAwJyx7dHJhbnNsYXRpb246ICB7JzAnOiB7cGF0dGVybjogL1swLTldLywgcmVjdXJzaXZlOiBmYWxzZX19fSk7XHJcbiAgICAgICAkKCcuaW5wdXRfdGVsLm5vdF9mcicpLm1hc2soJzk5OTk5OTk5OTknKTtcclxuXHJcbiAgICAgIC8vICB3aW5kb3cubG9hZFNpZGViYXJUY2hhdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9wb3VyIGxlcyBldmVuZW1lbnRzIGhpZGUvIHNob3cgc3VyIGNsaWNrXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLnRvZ2dsZS1jbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ2NoYW5nZS10YXJnZXQnKTtcclxuICAgICAgICAkKHRhcmdldCkudG9nZ2xlKCk7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSAnLmNoYXQtc2lkZWJhcicpIHtcclxuICAgICAgICAgICAgd2luZG93LmNhbGN1bGF0ZV9wb3B1cHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy50Y2hhdC1ncm91cC1ub3RpZicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnZmEtdW5zZWxlY3RlZCcpO1xyXG4gICAgICAgIHZhciBpZGdyb3VwZSA9ICQodGhpcykuZGF0YSgnaWRncm91cGUnKTtcclxuICAgICAgICB2YXIgaWR1dGlsaXNhdGV1ciA9ICQodGhpcykuZGF0YSgnaWR1dGlsaXNhdGV1cicpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxyXG4gICAgICAgICAgICB1cmw6IFwiL3RjaGF0L3BhdGNoL2dyb3VwX3V0aWxpc2F0ZXVyL1wiICsgaWRncm91cGUgKyBcIi9cIiArIGlkdXRpbGlzYXRldXIsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXInKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcudGNoYXQtZ3JvdXAtZGVsZXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPsOKdGVzIHZvdXMgc3VyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxlIG1lbWJyZT88L2k+XCIsIFwiVXRpbGlzYXRldXJcIik7XHJcbiAgICAgICAgdmFyIGlkZ3JvdXBlID0gJCh0aGlzKS5kYXRhKCdpZGdyb3VwZScpO1xyXG4gICAgICAgIHZhciBpZHV0aWxpc2F0ZXVyID0gJCh0aGlzKS5kYXRhKCdpZHV0aWxpc2F0ZXVyJyk7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICAgICAgcmVzdWx0LmRvbmUoZnVuY3Rpb24gKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoZGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL3RjaGF0L2RlbGV0ZS9ncm91cF91dGlsaXNhdGV1ci9cIiArIGlkZ3JvdXBlICsgXCIvXCIgKyBpZHV0aWxpc2F0ZXVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQocGFyZW50KS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljayBpbnB1dCcsICcuY2hlY2tib3gtcmVxdWlyZWQgPiBsYWJlbCA+IGlucHV0JywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lID0gJCh0aGlzKS5kYXRhKCdjbGFzcy12YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgZGVSZXF1aXJlQ2IoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ2JvZHknKS5vbignbW91c2VlbnRlciBmb2N1cycsICcudGNoYXQtaW5mb3MsLmNvbGxlY3Rpb24taW5mbywucG9wcGVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJCh0aGlzKS5uZXh0KCkubGVuZ3RoICE9IDAgfHwgJCh0aGlzKS5wYXJlbnQoKVswXS5sb2NhbE5hbWUgPT0gJ2EnKSB7XHJcbiAgICAgICAgICAgIHZhciB0b29sdGlwID0gJCh0aGlzKS5uZXh0KClbMF07XHJcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICd0b3AnO1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5kYXRhKCdwb3BwZXItcG9zaXRpb24nKSkgcG9zaXRpb24gPSQodGhpcykuZGF0YSgncG9wcGVyLXBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnBhcmVudCgpWzBdLmxvY2FsTmFtZSA9PSAnYScpIHRvb2x0aXAgPSAkKHRoaXMpLnBhcmVudCgpLm5leHQoKVswXTtcclxuICAgICAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2hvdycsICcnKTtcclxuICAgICAgICAgICAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBjcmVhdGVQb3BwZXIodGhpcywgdG9vbHRpcCwge3BsYWNlbWVudDogcG9zaXRpb259KTtcclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIFBvcHBlciB0byB1cGRhdGUgdGhlIHRvb2x0aXAgcG9zaXRpb25cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgd2Ugc2hvdyB0aGUgdG9vbHRpcCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgaW5jb3JyZWN0XHJcbiAgICAgICAgICAgIHBvcHBlckluc3RhbmNlLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdtb3VzZWxlYXZlIGJsdXInLCAnLnRjaGF0LWluZm9zLC5jb2xsZWN0aW9uLWluZm8sLnBvcHBlcicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykubmV4dCgpLmxlbmd0aCAhPSAwIHx8ICQodGhpcykucGFyZW50KClbMF0ubG9jYWxOYW1lID09ICdhJykge1xyXG4gICAgICAgICAgICB2YXIgdG9vbHRpcCA9ICQodGhpcykubmV4dCgpWzBdO1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5wYXJlbnQoKVswXS5sb2NhbE5hbWUgPT0gJ2EnKSB0b29sdGlwID0gJCh0aGlzKS5wYXJlbnQoKS5uZXh0KClbMF07XHJcbiAgICAgICAgICAgIHRvb2x0aXAucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNob3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcudGNoYXQtZ3JvdXAtYWRkJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgZm9ybSA9ICQoJyNwb3B1cC10Y2hhdC1ncm91cGUtYWRkID4gLm1vZGFsLWRpYWxvZyA+IC5tb2RhbC1jb250ZW50ID4gLm1vZGFsLWJvZHkgPiBmb3JtJylbMF07XHJcbiAgICAgICAgZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIC8vb24gcmVzZXQgbGUgc2VsZWN0IHBpY2tlciDDoCBsYSBtYW5vXHJcbiAgICAgICAgJChcIiN0Y2hhdF9ncm91cGVfZW50aXR5X3VzZXJcIikudmFsKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgJChcIiN0Y2hhdF9ncm91cGVfZW50aXR5X3VzZXJcIikuc2VsZWN0cGlja2VyKFwicmVmcmVzaFwiKTtcclxuXHJcbiAgICAgICAgdmFyIG15TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cC10Y2hhdC1ncm91cGUtYWRkJykpXHJcbiAgICAgICAgbXlNb2RhbC5zaG93KCk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLmNoYXQtcGVvcGxlX2ZpcnN0LC5jaGF0LXBlb3BsZV9uYW1lJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoKTtcclxuICAgICAgICByZWdpc3Rlcl9wb3B1cCgkKHBhcmVudCkuZGF0YSgnaWQnKSwgJChwYXJlbnQpLmRhdGEoJ25hbWUnKSwgJChwYXJlbnQpLmRhdGEoJ2NsYXNzJykpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5jaGF0Ym94X190aXRsZV9fY2xvc2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHdpbmRvdy5jbG9zZV9wb3B1cCgkKHRoaXMpLmRhdGEoJ2lkJykpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5jaGF0Ym94X190aXRsZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuY2hhdGJveCcpLnRvZ2dsZUNsYXNzKCdjaGF0Ym94LS10cmF5Jyk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbigna2V5dXAnLCBcIi5jaGF0LXNlbmQtbXNnXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmIChlLndoaWNoID09IDEzKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zZW5kTWVzc2FnZSgkKHRoaXMpLCAkKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCBcIi5idG4tY2hhdC1wb3N0XCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgd2luZG93LnNlbmRNZXNzYWdlKCQodGhpcykucHJldignaW5wdXQnKSwgJCh0aGlzKSk7XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCBcIi5idG4tdGNoYXQtbHVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBsb2FkUG9wdXBUY2hhdCgkKHRoaXMpLmRhdGEoJ2lkJyksICQodGhpcykuZGF0YSgnbmFtZScpLCQodGhpcykuZGF0YSgnY2xhc3NuYW1lJyksIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgXCIuYnRuLWdyb3VwZS1kZWxldGVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gRGV2RXhwcmVzcy51aS5kaWFsb2cuY29uZmlybShcIjxpPkV0ZXMgdm91cyBzdXIgZGUgdm91bG9pciBzdXBwcmltZXIgbGUgZ3JvdXBlPzwvaT5cIiwgXCJHcm91cGVcIik7XHJcbiAgICAgICAgdmFyIHBvcHVwSWQgPSAkKHRoaXMpLmRhdGEoJ2R4cG9wdXAtaWQnKTtcclxuICAgICAgICB2YXIgcG9wdXAgPSAkKCcjJyArIHBvcHVwSWQpLmR4UG9wdXAoJ2luc3RhbmNlJyk7XHJcbiAgICAgICAgdmFyIHVybCA9ICQodGhpcykuZGF0YSgnaHJlZicpO1xyXG4gICAgICAgIHJlc3VsdC5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3RjaGF0LWdyb3VwcycpLmh0bWwocmVzdWx0Lmdyb3Vwcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBwb3B1cElkKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vY29uZmlybSBnbG9iYWxcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnYnV0dG9uW2RhdGEtY29uZmlybT0xXSxhW2RhdGEtY29uZmlybT0xXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSAkKHRoaXMpLmRhdGEoJ21lc3NhZ2UnKTtcclxuICAgICAgICB2YXIgYWpheCA9ICQodGhpcykuZGF0YSgnYWpheCcpO1xyXG4gICAgICAgIGlmICghbWVzc2FnZSkgbWVzc2FnZSA9ICAnRXRlcyB2b3VzIHN1ciBkZSB2b3Vsb2lyIGVmZmVjdHVlciBsYSBzdXBwcmVzc2lvbj8nO1xyXG4gICAgICAgIHZhciB0YXJnZXRfaHRtbCA9ICQodGhpcykuZGF0YSgndGFyZ2V0LWh0bWwnKTtcclxuICAgICAgICB2YXIganMgPSAkKHRoaXMpLmRhdGEoJ2pzJyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IERldkV4cHJlc3MudWkuZGlhbG9nLmNvbmZpcm0oXCI8aT5cIittZXNzYWdlK1wiPC9pPlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnaHJlZicpKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSAkKHRoaXMpLmRhdGEoJ2hyZWYnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHQuZG9uZShmdW5jdGlvbiAoZGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWpheCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAyMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEsIHRleHRTdGF0dXMsIHhocikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmh0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0YXJnZXRfaHRtbCkuaHRtbChkYXRhLmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRhcmdldF9odG1sKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChqcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoanMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuY29udHJhdC1ncm91cGUtZGVsZXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB3aW5kb3cucmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZSA9IERldkV4cHJlc3MudWkuZGlhbG9nLmNvbmZpcm0oXCI8aT7DinRlcyB2b3VzIHN1ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50PzwvaT5cIik7XHJcbiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpO1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cucmVzdWx0Q29udHJhdEdyb3VwZURlbGV0ZS5kb25lKGZ1bmN0aW9uIChkaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9jb250cmF0L2dyb3VwZS9cIiArIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiBzdWNjZXNzKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHBhcmVudCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJldXIgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMjAwMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAkKCdib2R5Jykub24oJ2tleXVwJywgJyNpbnB1dC10Y2hhdC1zZWFyY2gnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHZhciBzZWFyY2ggPSAkKHRoaXMpLnZhbCgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgJCgnLmNoYXQtcGVvcGxlX25hbWUnKS5lYWNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnaGlkZScpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2hpZGUnKS5hZGRDbGFzcygnZC1mbGV4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnI25hdi1sb2dvdXQnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgcG9wdXBzID0gW107XHJcbiAgICB9KTtcclxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnaS5kaXNhYmxlZCcsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSlcclxufSk7XHJcblxyXG5cclxuJCgnLm1lc3NhZ2VzJykuZmxhc2hOb3RpZmljYXRpb24oJ2luaXQnKTtcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwic291cmNlUm9vdCI6IiJ9", "@public_path/build/app.js", "/builds/dev/refonte_sav/public/build/app.js");
    }
}
