text: /*
   * This combined file was created by the DataTables downloader builder:
   *   https://datatables.net/download
   *
   * To rebuild or modify this file with the latest versions of the included
   * software please visit:
   *   https://datatables.net/download/#bs4/dt-1.10.16/af-2.2.2/b-1.5.1/cr-1.4.1/fc-3.2.4/fh-3.1.3/kt-2.3.2/r-2.2.1/rg-1.0.2/rr-1.2.3/sc-1.4.4/sl-1.2.5
   *
   * Included libraries:
   *   DataTables 1.10.16, AutoFill 2.2.2, Buttons 1.5.1, ColReorder 1.4.1, FixedColumns 3.2.4, FixedHeader 3.1.3, KeyTable 2.3.2, Responsive 2.2.1, RowGroup 1.0.2, RowReorder 1.2.3, Scroller 1.4.4, Select 1.2.5
   */
  
  /*!
   DataTables 1.10.16
   ©2008-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (h) {
      "function" === typeof define && define.amd ? define(["jquery"], function (E) {
          return h(E, window, document)
      }) : "object" === typeof exports ? module.exports = function (E, G) {
          E || (E = window);
          G || (G = "undefined" !== typeof window ? require("jquery") : require("jquery")(E));
          return h(G, E, E.document)
      } : h(jQuery, window, document)
  })(function (h, E, G, k) {
      function X(a) {
          var b, c, d = {};
          h.each(a, function (e) {
              if ((b = e.match(/^([^A-Z]+?)([A-Z])/)) && -1 !== "a aa ai ao as b fn i m o s ".indexOf(b[1] + " ")) c = e.replace(b[0], b[2].toLowerCase()),
                  d[c] = e, "o" === b[1] && X(a[e])
          });
          a._hungarianMap = d
      }
  
      function I(a, b, c) {
          a._hungarianMap || X(a);
          var d;
          h.each(b, function (e) {
              d = a._hungarianMap[e];
              if (d !== k && (c || b[d] === k)) "o" === d.charAt(0) ? (b[d] || (b[d] = {}), h.extend(!0, b[d], b[e]), I(a[d], b[d], c)) : b[d] = b[e]
          })
      }
  
      function Ca(a) {
          var b = m.defaults.oLanguage, c = a.sZeroRecords;
          !a.sEmptyTable && (c && "No data available in table" === b.sEmptyTable) && F(a, a, "sZeroRecords", "sEmptyTable");
          !a.sLoadingRecords && (c && "Loading..." === b.sLoadingRecords) && F(a, a, "sZeroRecords", "sLoadingRecords");
          a.sInfoThousands && (a.sThousands = a.sInfoThousands);
          (a = a.sDecimal) && cb(a)
      }
  
      function db(a) {
          A(a, "ordering", "bSort");
          A(a, "orderMulti", "bSortMulti");
          A(a, "orderClasses", "bSortClasses");
          A(a, "orderCellsTop", "bSortCellsTop");
          A(a, "order", "aaSorting");
          A(a, "orderFixed", "aaSortingFixed");
          A(a, "paging", "bPaginate");
          A(a, "pagingType", "sPaginationType");
          A(a, "pageLength", "iDisplayLength");
          A(a, "searching", "bFilter");
          "boolean" === typeof a.sScrollX && (a.sScrollX = a.sScrollX ? "100%" : "");
          "boolean" === typeof a.scrollX && (a.scrollX =
              a.scrollX ? "100%" : "");
          if (a = a.aoSearchCols) for (var b = 0, c = a.length; b < c; b++) a[b] && I(m.models.oSearch, a[b])
      }
  
      function eb(a) {
          A(a, "orderable", "bSortable");
          A(a, "orderData", "aDataSort");
          A(a, "orderSequence", "asSorting");
          A(a, "orderDataType", "sortDataType");
          var b = a.aDataSort;
          "number" === typeof b && !h.isArray(b) && (a.aDataSort = [b])
      }
  
      function fb(a) {
          if (!m.__browser) {
              var b = {};
              m.__browser = b;
              var c = h("<div/>").css({
                      position: "fixed",
                      top: 0,
                      left: -1 * h(E).scrollLeft(),
                      height: 1,
                      width: 1,
                      overflow: "hidden"
                  }).append(h("<div/>").css({
                      position: "absolute",
                      top: 1, left: 1, width: 100, overflow: "scroll"
                  }).append(h("<div/>").css({width: "100%", height: 10}))).appendTo("body"), d = c.children(),
                  e = d.children();
              b.barWidth = d[0].offsetWidth - d[0].clientWidth;
              b.bScrollOversize = 100 === e[0].offsetWidth && 100 !== d[0].clientWidth;
              b.bScrollbarLeft = 1 !== Math.round(e.offset().left);
              b.bBounding = c[0].getBoundingClientRect().width ? !0 : !1;
              c.remove()
          }
          h.extend(a.oBrowser, m.__browser);
          a.oScroll.iBarWidth = m.__browser.barWidth
      }
  
      function gb(a, b, c, d, e, f) {
          var g, j = !1;
          c !== k && (g = c, j = !0);
          for (; d !==
                 e;) a.hasOwnProperty(d) && (g = j ? b(g, a[d], d, a) : a[d], j = !0, d += f);
          return g
      }
  
      function Da(a, b) {
          var c = m.defaults.column, d = a.aoColumns.length, c = h.extend({}, m.models.oColumn, c, {
              nTh: b ? b : G.createElement("th"),
              sTitle: c.sTitle ? c.sTitle : b ? b.innerHTML : "",
              aDataSort: c.aDataSort ? c.aDataSort : [d],
              mData: c.mData ? c.mData : d,
              idx: d
          });
          a.aoColumns.push(c);
          c = a.aoPreSearchCols;
          c[d] = h.extend({}, m.models.oSearch, c[d]);
          ja(a, d, h(b).data())
      }
  
      function ja(a, b, c) {
          var b = a.aoColumns[b], d = a.oClasses, e = h(b.nTh);
          if (!b.sWidthOrig) {
              b.sWidthOrig =
                  e.attr("width") || null;
              var f = (e.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/);
              f && (b.sWidthOrig = f[1])
          }
          c !== k && null !== c && (eb(c), I(m.defaults.column, c), c.mDataProp !== k && !c.mData && (c.mData = c.mDataProp), c.sType && (b._sManualType = c.sType), c.className && !c.sClass && (c.sClass = c.className), c.sClass && e.addClass(c.sClass), h.extend(b, c), F(b, c, "sWidth", "sWidthOrig"), c.iDataSort !== k && (b.aDataSort = [c.iDataSort]), F(b, c, "aDataSort"));
          var g = b.mData, j = Q(g), i = b.mRender ? Q(b.mRender) : null, c = function (a) {
              return "string" ===
                  typeof a && -1 !== a.indexOf("@")
          };
          b._bAttrSrc = h.isPlainObject(g) && (c(g.sort) || c(g.type) || c(g.filter));
          b._setter = null;
          b.fnGetData = function (a, b, c) {
              var d = j(a, b, k, c);
              return i && b ? i(d, b, a, c) : d
          };
          b.fnSetData = function (a, b, c) {
              return R(g)(a, b, c)
          };
          "number" !== typeof g && (a._rowReadObject = !0);
          a.oFeatures.bSort || (b.bSortable = !1, e.addClass(d.sSortableNone));
          a = -1 !== h.inArray("asc", b.asSorting);
          c = -1 !== h.inArray("desc", b.asSorting);
          !b.bSortable || !a && !c ? (b.sSortingClass = d.sSortableNone, b.sSortingClassJUI = "") : a && !c ? (b.sSortingClass =
              d.sSortableAsc, b.sSortingClassJUI = d.sSortJUIAscAllowed) : !a && c ? (b.sSortingClass = d.sSortableDesc, b.sSortingClassJUI = d.sSortJUIDescAllowed) : (b.sSortingClass = d.sSortable, b.sSortingClassJUI = d.sSortJUI)
      }
  
      function Y(a) {
          if (!1 !== a.oFeatures.bAutoWidth) {
              var b = a.aoColumns;
              Ea(a);
              for (var c = 0, d = b.length; c < d; c++) b[c].nTh.style.width = b[c].sWidth
          }
          b = a.oScroll;
          ("" !== b.sY || "" !== b.sX) && ka(a);
          r(a, null, "column-sizing", [a])
      }
  
      function Z(a, b) {
          var c = la(a, "bVisible");
          return "number" === typeof c[b] ? c[b] : null
      }
  
      function $(a, b) {
          var c =
              la(a, "bVisible"), c = h.inArray(b, c);
          return -1 !== c ? c : null
      }
  
      function aa(a) {
          var b = 0;
          h.each(a.aoColumns, function (a, d) {
              d.bVisible && "none" !== h(d.nTh).css("display") && b++
          });
          return b
      }
  
      function la(a, b) {
          var c = [];
          h.map(a.aoColumns, function (a, e) {
              a[b] && c.push(e)
          });
          return c
      }
  
      function Fa(a) {
          var b = a.aoColumns, c = a.aoData, d = m.ext.type.detect, e, f, g, j, i, h, l, q, t;
          e = 0;
          for (f = b.length; e < f; e++) if (l = b[e], t = [], !l.sType && l._sManualType) l.sType = l._sManualType; else if (!l.sType) {
              g = 0;
              for (j = d.length; g < j; g++) {
                  i = 0;
                  for (h = c.length; i < h; i++) {
                      t[i] ===
                      k && (t[i] = B(a, i, e, "type"));
                      q = d[g](t[i], a);
                      if (!q && g !== d.length - 1) break;
                      if ("html" === q) break
                  }
                  if (q) {
                      l.sType = q;
                      break
                  }
              }
              l.sType || (l.sType = "string")
          }
      }
  
      function hb(a, b, c, d) {
          var e, f, g, j, i, n, l = a.aoColumns;
          if (b) for (e = b.length - 1; 0 <= e; e--) {
              n = b[e];
              var q = n.targets !== k ? n.targets : n.aTargets;
              h.isArray(q) || (q = [q]);
              f = 0;
              for (g = q.length; f < g; f++) if ("number" === typeof q[f] && 0 <= q[f]) {
                  for (; l.length <= q[f];) Da(a);
                  d(q[f], n)
              } else if ("number" === typeof q[f] && 0 > q[f]) d(l.length + q[f], n); else if ("string" === typeof q[f]) {
                  j = 0;
                  for (i = l.length; j <
                  i; j++) ("_all" == q[f] || h(l[j].nTh).hasClass(q[f])) && d(j, n)
              }
          }
          if (c) {
              e = 0;
              for (a = c.length; e < a; e++) d(e, c[e])
          }
      }
  
      function M(a, b, c, d) {
          var e = a.aoData.length, f = h.extend(!0, {}, m.models.oRow, {src: c ? "dom" : "data", idx: e});
          f._aData = b;
          a.aoData.push(f);
          for (var g = a.aoColumns, j = 0, i = g.length; j < i; j++) g[j].sType = null;
          a.aiDisplayMaster.push(e);
          b = a.rowIdFn(b);
          b !== k && (a.aIds[b] = f);
          (c || !a.oFeatures.bDeferRender) && Ga(a, e, c, d);
          return e
      }
  
      function ma(a, b) {
          var c;
          b instanceof h || (b = h(b));
          return b.map(function (b, e) {
              c = Ha(a, e);
              return M(a,
                  c.data, e, c.cells)
          })
      }
  
      function B(a, b, c, d) {
          var e = a.iDraw, f = a.aoColumns[c], g = a.aoData[b]._aData, j = f.sDefaultContent,
              i = f.fnGetData(g, d, {settings: a, row: b, col: c});
          if (i === k) return a.iDrawError != e && null === j && (J(a, 0, "Requested unknown parameter " + ("function" == typeof f.mData ? "{function}" : "'" + f.mData + "'") + " for row " + b + ", column " + c, 4), a.iDrawError = e), j;
          if ((i === g || null === i) && null !== j && d !== k) i = j; else if ("function" === typeof i) return i.call(g);
          return null === i && "display" == d ? "" : i
      }
  
      function ib(a, b, c, d) {
          a.aoColumns[c].fnSetData(a.aoData[b]._aData,
              d, {settings: a, row: b, col: c})
      }
  
      function Ia(a) {
          return h.map(a.match(/(\\.|[^\.])+/g) || [""], function (a) {
              return a.replace(/\\\./g, ".")
          })
      }
  
      function Q(a) {
          if (h.isPlainObject(a)) {
              var b = {};
              h.each(a, function (a, c) {
                  c && (b[a] = Q(c))
              });
              return function (a, c, f, g) {
                  var j = b[c] || b._;
                  return j !== k ? j(a, c, f, g) : a
              }
          }
          if (null === a) return function (a) {
              return a
          };
          if ("function" === typeof a) return function (b, c, f, g) {
              return a(b, c, f, g)
          };
          if ("string" === typeof a && (-1 !== a.indexOf(".") || -1 !== a.indexOf("[") || -1 !== a.indexOf("("))) {
              var c = function (a,
                                b, f) {
                  var g, j;
                  if ("" !== f) {
                      j = Ia(f);
                      for (var i = 0, n = j.length; i < n; i++) {
                          f = j[i].match(ba);
                          g = j[i].match(U);
                          if (f) {
                              j[i] = j[i].replace(ba, "");
                              "" !== j[i] && (a = a[j[i]]);
                              g = [];
                              j.splice(0, i + 1);
                              j = j.join(".");
                              if (h.isArray(a)) {
                                  i = 0;
                                  for (n = a.length; i < n; i++) g.push(c(a[i], b, j))
                              }
                              a = f[0].substring(1, f[0].length - 1);
                              a = "" === a ? g : g.join(a);
                              break
                          } else if (g) {
                              j[i] = j[i].replace(U, "");
                              a = a[j[i]]();
                              continue
                          }
                          if (null === a || a[j[i]] === k) return k;
                          a = a[j[i]]
                      }
                  }
                  return a
              };
              return function (b, e) {
                  return c(b, e, a)
              }
          }
          return function (b) {
              return b[a]
          }
      }
  
      function R(a) {
          if (h.isPlainObject(a)) return R(a._);
          if (null === a) return function () {
          };
          if ("function" === typeof a) return function (b, d, e) {
              a(b, "set", d, e)
          };
          if ("string" === typeof a && (-1 !== a.indexOf(".") || -1 !== a.indexOf("[") || -1 !== a.indexOf("("))) {
              var b = function (a, d, e) {
                  var e = Ia(e), f;
                  f = e[e.length - 1];
                  for (var g, j, i = 0, n = e.length - 1; i < n; i++) {
                      g = e[i].match(ba);
                      j = e[i].match(U);
                      if (g) {
                          e[i] = e[i].replace(ba, "");
                          a[e[i]] = [];
                          f = e.slice();
                          f.splice(0, i + 1);
                          g = f.join(".");
                          if (h.isArray(d)) {
                              j = 0;
                              for (n = d.length; j < n; j++) f = {}, b(f, d[j], g), a[e[i]].push(f)
                          } else a[e[i]] = d;
                          return
                      }
                      j && (e[i] = e[i].replace(U,
                          ""), a = a[e[i]](d));
                      if (null === a[e[i]] || a[e[i]] === k) a[e[i]] = {};
                      a = a[e[i]]
                  }
                  if (f.match(U)) a[f.replace(U, "")](d); else a[f.replace(ba, "")] = d
              };
              return function (c, d) {
                  return b(c, d, a)
              }
          }
          return function (b, d) {
              b[a] = d
          }
      }
  
      function Ja(a) {
          return D(a.aoData, "_aData")
      }
  
      function na(a) {
          a.aoData.length = 0;
          a.aiDisplayMaster.length = 0;
          a.aiDisplay.length = 0;
          a.aIds = {}
      }
  
      function oa(a, b, c) {
          for (var d = -1, e = 0, f = a.length; e < f; e++) a[e] == b ? d = e : a[e] > b && a[e]--;
          -1 != d && c === k && a.splice(d, 1)
      }
  
      function ca(a, b, c, d) {
          var e = a.aoData[b], f, g = function (c, d) {
              for (; c.childNodes.length;) c.removeChild(c.firstChild);
              c.innerHTML = B(a, b, d, "display")
          };
          if ("dom" === c || (!c || "auto" === c) && "dom" === e.src) e._aData = Ha(a, e, d, d === k ? k : e._aData).data; else {
              var j = e.anCells;
              if (j) if (d !== k) g(j[d], d); else {
                  c = 0;
                  for (f = j.length; c < f; c++) g(j[c], c)
              }
          }
          e._aSortData = null;
          e._aFilterData = null;
          g = a.aoColumns;
          if (d !== k) g[d].sType = null; else {
              c = 0;
              for (f = g.length; c < f; c++) g[c].sType = null;
              Ka(a, e)
          }
      }
  
      function Ha(a, b, c, d) {
          var e = [], f = b.firstChild, g, j, i = 0, n, l = a.aoColumns, q = a._rowReadObject,
              d = d !== k ? d : q ? {} : [], t = function (a, b) {
                  if ("string" === typeof a) {
                      var c = a.indexOf("@");
                      -1 !== c && (c = a.substring(c + 1), R(a)(d, b.getAttribute(c)))
                  }
              }, m = function (a) {
                  if (c === k || c === i) j = l[i], n = h.trim(a.innerHTML), j && j._bAttrSrc ? (R(j.mData._)(d, n), t(j.mData.sort, a), t(j.mData.type, a), t(j.mData.filter, a)) : q ? (j._setter || (j._setter = R(j.mData)), j._setter(d, n)) : d[i] = n;
                  i++
              };
          if (f) for (; f;) {
              g = f.nodeName.toUpperCase();
              if ("TD" == g || "TH" == g) m(f), e.push(f);
              f = f.nextSibling
          } else {
              e = b.anCells;
              f = 0;
              for (g = e.length; f < g; f++) m(e[f])
          }
          if (b = b.firstChild ? b : b.nTr) (b = b.getAttribute("id")) && R(a.rowId)(d, b);
          return {data: d, cells: e}
      }
  
      function Ga(a, b, c, d) {
          var e = a.aoData[b], f = e._aData, g = [], j, i, n, l, q;
          if (null === e.nTr) {
              j = c || G.createElement("tr");
              e.nTr = j;
              e.anCells = g;
              j._DT_RowIndex = b;
              Ka(a, e);
              l = 0;
              for (q = a.aoColumns.length; l < q; l++) {
                  n = a.aoColumns[l];
                  i = c ? d[l] : G.createElement(n.sCellType);
                  i._DT_CellIndex = {row: b, column: l};
                  g.push(i);
                  if ((!c || n.mRender || n.mData !== l) && (!h.isPlainObject(n.mData) || n.mData._ !== l + ".display")) i.innerHTML = B(a, b, l, "display");
                  n.sClass && (i.className += " " + n.sClass);
                  n.bVisible && !c ? j.appendChild(i) : !n.bVisible && c && i.parentNode.removeChild(i);
                  n.fnCreatedCell && n.fnCreatedCell.call(a.oInstance, i, B(a, b, l), f, b, l)
              }
              r(a, "aoRowCreatedCallback", null, [j, f, b])
          }
          e.nTr.setAttribute("role", "row")
      }
  
      function Ka(a, b) {
          var c = b.nTr, d = b._aData;
          if (c) {
              var e = a.rowIdFn(d);
              e && (c.id = e);
              d.DT_RowClass && (e = d.DT_RowClass.split(" "), b.__rowc = b.__rowc ? qa(b.__rowc.concat(e)) : e, h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));
              d.DT_RowAttr && h(c).attr(d.DT_RowAttr);
              d.DT_RowData && h(c).data(d.DT_RowData)
          }
      }
  
      function jb(a) {
          var b, c, d, e, f, g = a.nTHead, j = a.nTFoot, i = 0 ===
              h("th, td", g).length, n = a.oClasses, l = a.aoColumns;
          i && (e = h("<tr/>").appendTo(g));
          b = 0;
          for (c = l.length; b < c; b++) f = l[b], d = h(f.nTh).addClass(f.sClass), i && d.appendTo(e), a.oFeatures.bSort && (d.addClass(f.sSortingClass), !1 !== f.bSortable && (d.attr("tabindex", a.iTabIndex).attr("aria-controls", a.sTableId), La(a, f.nTh, b))), f.sTitle != d[0].innerHTML && d.html(f.sTitle), Ma(a, "header")(a, d, f, n);
          i && da(a.aoHeader, g);
          h(g).find(">tr").attr("role", "row");
          h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);
          h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH);
          if (null !== j) {
              a = a.aoFooter[0];
              b = 0;
              for (c = a.length; b < c; b++) f = l[b], f.nTf = a[b].cell, f.sClass && h(f.nTf).addClass(f.sClass)
          }
      }
  
      function ea(a, b, c) {
          var d, e, f, g = [], j = [], i = a.aoColumns.length, n;
          if (b) {
              c === k && (c = !1);
              d = 0;
              for (e = b.length; d < e; d++) {
                  g[d] = b[d].slice();
                  g[d].nTr = b[d].nTr;
                  for (f = i - 1; 0 <= f; f--) !a.aoColumns[f].bVisible && !c && g[d].splice(f, 1);
                  j.push([])
              }
              d = 0;
              for (e = g.length; d < e; d++) {
                  if (a = g[d].nTr) for (; f = a.firstChild;) a.removeChild(f);
                  f = 0;
                  for (b = g[d].length; f < b; f++) if (n = i = 1, j[d][f] === k) {
                      a.appendChild(g[d][f].cell);
                      for (j[d][f] = 1; g[d + i] !== k && g[d][f].cell == g[d + i][f].cell;) j[d + i][f] = 1, i++;
                      for (; g[d][f + n] !== k && g[d][f].cell == g[d][f + n].cell;) {
                          for (c = 0; c < i; c++) j[d + c][f + n] = 1;
                          n++
                      }
                      h(g[d][f].cell).attr("rowspan", i).attr("colspan", n)
                  }
              }
          }
      }
  
      function N(a) {
          var b = r(a, "aoPreDrawCallback", "preDraw", [a]);
          if (-1 !== h.inArray(!1, b)) C(a, !1); else {
              var b = [], c = 0, d = a.asStripeClasses, e = d.length, f = a.oLanguage, g = a.iInitDisplayStart,
                  j = "ssp" == y(a), i = a.aiDisplay;
              a.bDrawing = !0;
              g !== k && -1 !== g && (a._iDisplayStart = j ? g : g >= a.fnRecordsDisplay() ? 0 : g, a.iInitDisplayStart =
                  -1);
              var g = a._iDisplayStart, n = a.fnDisplayEnd();
              if (a.bDeferLoading) a.bDeferLoading = !1, a.iDraw++, C(a, !1); else if (j) {
                  if (!a.bDestroying && !kb(a)) return
              } else a.iDraw++;
              if (0 !== i.length) {
                  f = j ? a.aoData.length : n;
                  for (j = j ? 0 : g; j < f; j++) {
                      var l = i[j], q = a.aoData[l];
                      null === q.nTr && Ga(a, l);
                      l = q.nTr;
                      if (0 !== e) {
                          var t = d[c % e];
                          q._sRowStripe != t && (h(l).removeClass(q._sRowStripe).addClass(t), q._sRowStripe = t)
                      }
                      r(a, "aoRowCallback", null, [l, q._aData, c, j]);
                      b.push(l);
                      c++
                  }
              } else c = f.sZeroRecords, 1 == a.iDraw && "ajax" == y(a) ? c = f.sLoadingRecords :
                  f.sEmptyTable && 0 === a.fnRecordsTotal() && (c = f.sEmptyTable), b[0] = h("<tr/>", {"class": e ? d[0] : ""}).append(h("<td />", {
                  valign: "top",
                  colSpan: aa(a),
                  "class": a.oClasses.sRowEmpty
              }).html(c))[0];
              r(a, "aoHeaderCallback", "header", [h(a.nTHead).children("tr")[0], Ja(a), g, n, i]);
              r(a, "aoFooterCallback", "footer", [h(a.nTFoot).children("tr")[0], Ja(a), g, n, i]);
              d = h(a.nTBody);
              d.children().detach();
              d.append(h(b));
              r(a, "aoDrawCallback", "draw", [a]);
              a.bSorted = !1;
              a.bFiltered = !1;
              a.bDrawing = !1
          }
      }
  
      function S(a, b) {
          var c = a.oFeatures, d = c.bFilter;
          c.bSort && lb(a);
          d ? fa(a, a.oPreviousSearch) : a.aiDisplay = a.aiDisplayMaster.slice();
          !0 !== b && (a._iDisplayStart = 0);
          a._drawHold = b;
          N(a);
          a._drawHold = !1
      }
  
      function mb(a) {
          var b = a.oClasses, c = h(a.nTable), c = h("<div/>").insertBefore(c), d = a.oFeatures,
              e = h("<div/>", {id: a.sTableId + "_wrapper", "class": b.sWrapper + (a.nTFoot ? "" : " " + b.sNoFooter)});
          a.nHolding = c[0];
          a.nTableWrapper = e[0];
          a.nTableReinsertBefore = a.nTable.nextSibling;
          for (var f = a.sDom.split(""), g, j, i, n, l, q, k = 0; k < f.length; k++) {
              g = null;
              j = f[k];
              if ("<" == j) {
                  i = h("<div/>")[0];
                  n = f[k + 1];
                  if ("'" == n || '"' == n) {
                      l = "";
                      for (q = 2; f[k + q] != n;) l += f[k + q], q++;
                      "H" == l ? l = b.sJUIHeader : "F" == l && (l = b.sJUIFooter);
                      -1 != l.indexOf(".") ? (n = l.split("."), i.id = n[0].substr(1, n[0].length - 1), i.className = n[1]) : "#" == l.charAt(0) ? i.id = l.substr(1, l.length - 1) : i.className = l;
                      k += q
                  }
                  e.append(i);
                  e = h(i)
              } else if (">" == j) e = e.parent(); else if ("l" == j && d.bPaginate && d.bLengthChange) g = nb(a); else if ("f" == j && d.bFilter) g = ob(a); else if ("r" == j && d.bProcessing) g = pb(a); else if ("t" == j) g = qb(a); else if ("i" == j && d.bInfo) g = rb(a); else if ("p" ==
                  j && d.bPaginate) g = sb(a); else if (0 !== m.ext.feature.length) {
                  i = m.ext.feature;
                  q = 0;
                  for (n = i.length; q < n; q++) if (j == i[q].cFeature) {
                      g = i[q].fnInit(a);
                      break
                  }
              }
              g && (i = a.aanFeatures, i[j] || (i[j] = []), i[j].push(g), e.append(g))
          }
          c.replaceWith(e);
          a.nHolding = null
      }
  
      function da(a, b) {
          var c = h(b).children("tr"), d, e, f, g, j, i, n, l, q, k;
          a.splice(0, a.length);
          f = 0;
          for (i = c.length; f < i; f++) a.push([]);
          f = 0;
          for (i = c.length; f < i; f++) {
              d = c[f];
              for (e = d.firstChild; e;) {
                  if ("TD" == e.nodeName.toUpperCase() || "TH" == e.nodeName.toUpperCase()) {
                      l = 1 * e.getAttribute("colspan");
                      q = 1 * e.getAttribute("rowspan");
                      l = !l || 0 === l || 1 === l ? 1 : l;
                      q = !q || 0 === q || 1 === q ? 1 : q;
                      g = 0;
                      for (j = a[f]; j[g];) g++;
                      n = g;
                      k = 1 === l ? !0 : !1;
                      for (j = 0; j < l; j++) for (g = 0; g < q; g++) a[f + g][n + j] = {
                          cell: e,
                          unique: k
                      }, a[f + g].nTr = d
                  }
                  e = e.nextSibling
              }
          }
      }
  
      function ra(a, b, c) {
          var d = [];
          c || (c = a.aoHeader, b && (c = [], da(c, b)));
          for (var b = 0, e = c.length; b < e; b++) for (var f = 0, g = c[b].length; f < g; f++) if (c[b][f].unique && (!d[f] || !a.bSortCellsTop)) d[f] = c[b][f].cell;
          return d
      }
  
      function sa(a, b, c) {
          r(a, "aoServerParams", "serverParams", [b]);
          if (b && h.isArray(b)) {
              var d = {},
                  e = /(.*?)\[\]$/;
              h.each(b, function (a, b) {
                  var c = b.name.match(e);
                  c ? (c = c[0], d[c] || (d[c] = []), d[c].push(b.value)) : d[b.name] = b.value
              });
              b = d
          }
          var f, g = a.ajax, j = a.oInstance, i = function (b) {
              r(a, null, "xhr", [a, b, a.jqXHR]);
              c(b)
          };
          if (h.isPlainObject(g) && g.data) {
              f = g.data;
              var n = h.isFunction(f) ? f(b, a) : f, b = h.isFunction(f) && n ? n : h.extend(!0, b, n);
              delete g.data
          }
          n = {
              data: b, success: function (b) {
                  var c = b.error || b.sError;
                  c && J(a, 0, c);
                  a.json = b;
                  i(b)
              }, dataType: "json", cache: !1, type: a.sServerMethod, error: function (b, c) {
                  var d = r(a, null, "xhr",
                      [a, null, a.jqXHR]);
                  -1 === h.inArray(!0, d) && ("parsererror" == c ? J(a, 0, "Invalid JSON response", 1) : 4 === b.readyState && J(a, 0, "Ajax error", 7));
                  C(a, !1)
              }
          };
          a.oAjaxData = b;
          r(a, null, "preXhr", [a, b]);
          a.fnServerData ? a.fnServerData.call(j, a.sAjaxSource, h.map(b, function (a, b) {
              return {name: b, value: a}
          }), i, a) : a.sAjaxSource || "string" === typeof g ? a.jqXHR = h.ajax(h.extend(n, {url: g || a.sAjaxSource})) : h.isFunction(g) ? a.jqXHR = g.call(j, b, i, a) : (a.jqXHR = h.ajax(h.extend(n, g)), g.data = f)
      }
  
      function kb(a) {
          return a.bAjaxDataGet ? (a.iDraw++, C(a,
              !0), sa(a, tb(a), function (b) {
              ub(a, b)
          }), !1) : !0
      }
  
      function tb(a) {
          var b = a.aoColumns, c = b.length, d = a.oFeatures, e = a.oPreviousSearch, f = a.aoPreSearchCols, g, j = [], i,
              n, l, k = V(a);
          g = a._iDisplayStart;
          i = !1 !== d.bPaginate ? a._iDisplayLength : -1;
          var t = function (a, b) {
              j.push({name: a, value: b})
          };
          t("sEcho", a.iDraw);
          t("iColumns", c);
          t("sColumns", D(b, "sName").join(","));
          t("iDisplayStart", g);
          t("iDisplayLength", i);
          var pa = {
              draw: a.iDraw,
              columns: [],
              order: [],
              start: g,
              length: i,
              search: {value: e.sSearch, regex: e.bRegex}
          };
          for (g = 0; g < c; g++) n = b[g],
              l = f[g], i = "function" == typeof n.mData ? "function" : n.mData, pa.columns.push({
              data: i,
              name: n.sName,
              searchable: n.bSearchable,
              orderable: n.bSortable,
              search: {value: l.sSearch, regex: l.bRegex}
          }), t("mDataProp_" + g, i), d.bFilter && (t("sSearch_" + g, l.sSearch), t("bRegex_" + g, l.bRegex), t("bSearchable_" + g, n.bSearchable)), d.bSort && t("bSortable_" + g, n.bSortable);
          d.bFilter && (t("sSearch", e.sSearch), t("bRegex", e.bRegex));
          d.bSort && (h.each(k, function (a, b) {
              pa.order.push({column: b.col, dir: b.dir});
              t("iSortCol_" + a, b.col);
              t("sSortDir_" +
                  a, b.dir)
          }), t("iSortingCols", k.length));
          b = m.ext.legacy.ajax;
          return null === b ? a.sAjaxSource ? j : pa : b ? j : pa
      }
  
      function ub(a, b) {
          var c = ta(a, b), d = b.sEcho !== k ? b.sEcho : b.draw,
              e = b.iTotalRecords !== k ? b.iTotalRecords : b.recordsTotal,
              f = b.iTotalDisplayRecords !== k ? b.iTotalDisplayRecords : b.recordsFiltered;
          if (d) {
              if (1 * d < a.iDraw) return;
              a.iDraw = 1 * d
          }
          na(a);
          a._iRecordsTotal = parseInt(e, 10);
          a._iRecordsDisplay = parseInt(f, 10);
          d = 0;
          for (e = c.length; d < e; d++) M(a, c[d]);
          a.aiDisplay = a.aiDisplayMaster.slice();
          a.bAjaxDataGet = !1;
          N(a);
          a._bInitComplete ||
          ua(a, b);
          a.bAjaxDataGet = !0;
          C(a, !1)
      }
  
      function ta(a, b) {
          var c = h.isPlainObject(a.ajax) && a.ajax.dataSrc !== k ? a.ajax.dataSrc : a.sAjaxDataProp;
          return "data" === c ? b.aaData || b[c] : "" !== c ? Q(c)(b) : b
      }
  
      function ob(a) {
          var b = a.oClasses, c = a.sTableId, d = a.oLanguage, e = a.oPreviousSearch, f = a.aanFeatures,
              g = '<input type="search" class="' + b.sFilterInput + '"/>', j = d.sSearch,
              j = j.match(/_INPUT_/) ? j.replace("_INPUT_", g) : j + g,
              b = h("<div/>", {id: !f.f ? c + "_filter" : null, "class": b.sFilter}).append(h("<label/>").append(j)),
              f = function () {
                  var b = !this.value ?
                      "" : this.value;
                  b != e.sSearch && (fa(a, {
                      sSearch: b,
                      bRegex: e.bRegex,
                      bSmart: e.bSmart,
                      bCaseInsensitive: e.bCaseInsensitive
                  }), a._iDisplayStart = 0, N(a))
              }, g = null !== a.searchDelay ? a.searchDelay : "ssp" === y(a) ? 400 : 0,
              i = h("input", b).val(e.sSearch).attr("placeholder", d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT", g ? Na(f, g) : f).on("keypress.DT", function (a) {
                  if (13 == a.keyCode) return !1
              }).attr("aria-controls", c);
          h(a.nTable).on("search.dt.DT", function (b, c) {
              if (a === c) try {
                  i[0] !== G.activeElement && i.val(e.sSearch)
              } catch (d) {
              }
          });
          return b[0]
      }
  
      function fa(a, b, c) {
          var d = a.oPreviousSearch, e = a.aoPreSearchCols, f = function (a) {
              d.sSearch = a.sSearch;
              d.bRegex = a.bRegex;
              d.bSmart = a.bSmart;
              d.bCaseInsensitive = a.bCaseInsensitive
          };
          Fa(a);
          if ("ssp" != y(a)) {
              vb(a, b.sSearch, c, b.bEscapeRegex !== k ? !b.bEscapeRegex : b.bRegex, b.bSmart, b.bCaseInsensitive);
              f(b);
              for (b = 0; b < e.length; b++) wb(a, e[b].sSearch, b, e[b].bEscapeRegex !== k ? !e[b].bEscapeRegex : e[b].bRegex, e[b].bSmart, e[b].bCaseInsensitive);
              xb(a)
          } else f(b);
          a.bFiltered = !0;
          r(a, null, "search", [a])
      }
  
      function xb(a) {
          for (var b =
              m.ext.search, c = a.aiDisplay, d, e, f = 0, g = b.length; f < g; f++) {
              for (var j = [], i = 0, n = c.length; i < n; i++) e = c[i], d = a.aoData[e], b[f](a, d._aFilterData, e, d._aData, i) && j.push(e);
              c.length = 0;
              h.merge(c, j)
          }
      }
  
      function wb(a, b, c, d, e, f) {
          if ("" !== b) {
              for (var g = [], j = a.aiDisplay, d = Oa(b, d, e, f), e = 0; e < j.length; e++) b = a.aoData[j[e]]._aFilterData[c], d.test(b) && g.push(j[e]);
              a.aiDisplay = g
          }
      }
  
      function vb(a, b, c, d, e, f) {
          var d = Oa(b, d, e, f), f = a.oPreviousSearch.sSearch, g = a.aiDisplayMaster, j, e = [];
          0 !== m.ext.search.length && (c = !0);
          j = yb(a);
          if (0 >= b.length) a.aiDisplay =
              g.slice(); else {
              if (j || c || f.length > b.length || 0 !== b.indexOf(f) || a.bSorted) a.aiDisplay = g.slice();
              b = a.aiDisplay;
              for (c = 0; c < b.length; c++) d.test(a.aoData[b[c]]._sFilterRow) && e.push(b[c]);
              a.aiDisplay = e
          }
      }
  
      function Oa(a, b, c, d) {
          a = b ? a : Pa(a);
          c && (a = "^(?=.*?" + h.map(a.match(/"[^"]+"|[^ ]+/g) || [""], function (a) {
              if ('"' === a.charAt(0)) var b = a.match(/^"(.*)"$/), a = b ? b[1] : a;
              return a.replace('"', "")
          }).join(")(?=.*?") + ").*$");
          return RegExp(a, d ? "i" : "")
      }
  
      function yb(a) {
          var b = a.aoColumns, c, d, e, f, g, j, i, h, l = m.ext.type.search;
          c = !1;
          d = 0;
          for (f = a.aoData.length; d < f; d++) if (h = a.aoData[d], !h._aFilterData) {
              j = [];
              e = 0;
              for (g = b.length; e < g; e++) c = b[e], c.bSearchable ? (i = B(a, d, e, "filter"), l[c.sType] && (i = l[c.sType](i)), null === i && (i = ""), "string" !== typeof i && i.toString && (i = i.toString())) : i = "", i.indexOf && -1 !== i.indexOf("&") && (va.innerHTML = i, i = Wb ? va.textContent : va.innerText), i.replace && (i = i.replace(/[\r\n]/g, "")), j.push(i);
              h._aFilterData = j;
              h._sFilterRow = j.join("  ");
              c = !0
          }
          return c
      }
  
      function zb(a) {
          return {
              search: a.sSearch, smart: a.bSmart, regex: a.bRegex,
              caseInsensitive: a.bCaseInsensitive
          }
      }
  
      function Ab(a) {
          return {sSearch: a.search, bSmart: a.smart, bRegex: a.regex, bCaseInsensitive: a.caseInsensitive}
      }
  
      function rb(a) {
          var b = a.sTableId, c = a.aanFeatures.i,
              d = h("<div/>", {"class": a.oClasses.sInfo, id: !c ? b + "_info" : null});
          c || (a.aoDrawCallback.push({
              fn: Bb,
              sName: "information"
          }), d.attr("role", "status").attr("aria-live", "polite"), h(a.nTable).attr("aria-describedby", b + "_info"));
          return d[0]
      }
  
      function Bb(a) {
          var b = a.aanFeatures.i;
          if (0 !== b.length) {
              var c = a.oLanguage, d = a._iDisplayStart +
                  1, e = a.fnDisplayEnd(), f = a.fnRecordsTotal(), g = a.fnRecordsDisplay(),
                  j = g ? c.sInfo : c.sInfoEmpty;
              g !== f && (j += " " + c.sInfoFiltered);
              j += c.sInfoPostFix;
              j = Cb(a, j);
              c = c.fnInfoCallback;
              null !== c && (j = c.call(a.oInstance, a, d, e, f, g, j));
              h(b).html(j)
          }
      }
  
      function Cb(a, b) {
          var c = a.fnFormatNumber, d = a._iDisplayStart + 1, e = a._iDisplayLength, f = a.fnRecordsDisplay(),
              g = -1 === e;
          return b.replace(/_START_/g, c.call(a, d)).replace(/_END_/g, c.call(a, a.fnDisplayEnd())).replace(/_MAX_/g, c.call(a, a.fnRecordsTotal())).replace(/_TOTAL_/g, c.call(a,
              f)).replace(/_PAGE_/g, c.call(a, g ? 1 : Math.ceil(d / e))).replace(/_PAGES_/g, c.call(a, g ? 1 : Math.ceil(f / e)))
      }
  
      function ga(a) {
          var b, c, d = a.iInitDisplayStart, e = a.aoColumns, f;
          c = a.oFeatures;
          var g = a.bDeferLoading;
          if (a.bInitialised) {
              mb(a);
              jb(a);
              ea(a, a.aoHeader);
              ea(a, a.aoFooter);
              C(a, !0);
              c.bAutoWidth && Ea(a);
              b = 0;
              for (c = e.length; b < c; b++) f = e[b], f.sWidth && (f.nTh.style.width = v(f.sWidth));
              r(a, null, "preInit", [a]);
              S(a);
              e = y(a);
              if ("ssp" != e || g) "ajax" == e ? sa(a, [], function (c) {
                  var f = ta(a, c);
                  for (b = 0; b < f.length; b++) M(a, f[b]);
                  a.iInitDisplayStart =
                      d;
                  S(a);
                  C(a, !1);
                  ua(a, c)
              }, a) : (C(a, !1), ua(a))
          } else setTimeout(function () {
              ga(a)
          }, 200)
      }
  
      function ua(a, b) {
          a._bInitComplete = !0;
          (b || a.oInit.aaData) && Y(a);
          r(a, null, "plugin-init", [a, b]);
          r(a, "aoInitComplete", "init", [a, b])
      }
  
      function Qa(a, b) {
          var c = parseInt(b, 10);
          a._iDisplayLength = c;
          Ra(a);
          r(a, null, "length", [a, c])
      }
  
      function nb(a) {
          for (var b = a.oClasses, c = a.sTableId, d = a.aLengthMenu, e = h.isArray(d[0]), f = e ? d[0] : d, d = e ? d[1] : d, e = h("<select/>", {
              name: c + "_length",
              "aria-controls": c,
              "class": b.sLengthSelect
          }), g = 0, j = f.length; g < j; g++) e[0][g] =
              new Option("number" === typeof d[g] ? a.fnFormatNumber(d[g]) : d[g], f[g]);
          var i = h("<div><label/></div>").addClass(b.sLength);
          a.aanFeatures.l || (i[0].id = c + "_length");
          i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_", e[0].outerHTML));
          h("select", i).val(a._iDisplayLength).on("change.DT", function () {
              Qa(a, h(this).val());
              N(a)
          });
          h(a.nTable).on("length.dt.DT", function (b, c, d) {
              a === c && h("select", i).val(d)
          });
          return i[0]
      }
  
      function sb(a) {
          var b = a.sPaginationType, c = m.ext.pager[b], d = "function" === typeof c, e = function (a) {
                  N(a)
              },
              b = h("<div/>").addClass(a.oClasses.sPaging + b)[0], f = a.aanFeatures;
          d || c.fnInit(a, b, e);
          f.p || (b.id = a.sTableId + "_paginate", a.aoDrawCallback.push({
              fn: function (a) {
                  if (d) {
                      var b = a._iDisplayStart, i = a._iDisplayLength, h = a.fnRecordsDisplay(), l = -1 === i,
                          b = l ? 0 : Math.ceil(b / i), i = l ? 1 : Math.ceil(h / i), h = c(b, i), k, l = 0;
                      for (k = f.p.length; l < k; l++) Ma(a, "pageButton")(a, f.p[l], l, h, b, i)
                  } else c.fnUpdate(a, e)
              }, sName: "pagination"
          }));
          return b
      }
  
      function Sa(a, b, c) {
          var d = a._iDisplayStart, e = a._iDisplayLength, f = a.fnRecordsDisplay();
          0 === f || -1 ===
          e ? d = 0 : "number" === typeof b ? (d = b * e, d > f && (d = 0)) : "first" == b ? d = 0 : "previous" == b ? (d = 0 <= e ? d - e : 0, 0 > d && (d = 0)) : "next" == b ? d + e < f && (d += e) : "last" == b ? d = Math.floor((f - 1) / e) * e : J(a, 0, "Unknown paging action: " + b, 5);
          b = a._iDisplayStart !== d;
          a._iDisplayStart = d;
          b && (r(a, null, "page", [a]), c && N(a));
          return b
      }
  
      function pb(a) {
          return h("<div/>", {
              id: !a.aanFeatures.r ? a.sTableId + "_processing" : null,
              "class": a.oClasses.sProcessing
          }).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]
      }
  
      function C(a, b) {
          a.oFeatures.bProcessing && h(a.aanFeatures.r).css("display",
              b ? "block" : "none");
          r(a, null, "processing", [a, b])
      }
  
      function qb(a) {
          var b = h(a.nTable);
          b.attr("role", "grid");
          var c = a.oScroll;
          if ("" === c.sX && "" === c.sY) return a.nTable;
          var d = c.sX, e = c.sY, f = a.oClasses, g = b.children("caption"), j = g.length ? g[0]._captionSide : null,
              i = h(b[0].cloneNode(!1)), n = h(b[0].cloneNode(!1)), l = b.children("tfoot");
          l.length || (l = null);
          i = h("<div/>", {"class": f.sScrollWrapper}).append(h("<div/>", {"class": f.sScrollHead}).css({
              overflow: "hidden",
              position: "relative",
              border: 0,
              width: d ? !d ? null : v(d) : "100%"
          }).append(h("<div/>",
              {"class": f.sScrollHeadInner}).css({
              "box-sizing": "content-box",
              width: c.sXInner || "100%"
          }).append(i.removeAttr("id").css("margin-left", 0).append("top" === j ? g : null).append(b.children("thead"))))).append(h("<div/>", {"class": f.sScrollBody}).css({
              position: "relative",
              overflow: "auto",
              width: !d ? null : v(d)
          }).append(b));
          l && i.append(h("<div/>", {"class": f.sScrollFoot}).css({
              overflow: "hidden",
              border: 0,
              width: d ? !d ? null : v(d) : "100%"
          }).append(h("<div/>", {"class": f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",
              0).append("bottom" === j ? g : null).append(b.children("tfoot")))));
          var b = i.children(), k = b[0], f = b[1], t = l ? b[2] : null;
          if (d) h(f).on("scroll.DT", function () {
              var a = this.scrollLeft;
              k.scrollLeft = a;
              l && (t.scrollLeft = a)
          });
          h(f).css(e && c.bCollapse ? "max-height" : "height", e);
          a.nScrollHead = k;
          a.nScrollBody = f;
          a.nScrollFoot = t;
          a.aoDrawCallback.push({fn: ka, sName: "scrolling"});
          return i[0]
      }
  
      function ka(a) {
          var b = a.oScroll, c = b.sX, d = b.sXInner, e = b.sY, b = b.iBarWidth, f = h(a.nScrollHead), g = f[0].style,
              j = f.children("div"), i = j[0].style, n = j.children("table"),
              j = a.nScrollBody, l = h(j), q = j.style, t = h(a.nScrollFoot).children("div"), m = t.children("table"),
              o = h(a.nTHead), p = h(a.nTable), s = p[0], r = s.style, u = a.nTFoot ? h(a.nTFoot) : null, x = a.oBrowser,
              T = x.bScrollOversize, Xb = D(a.aoColumns, "nTh"), O, K, P, w, Ta = [], y = [], z = [], A = [], B,
              C = function (a) {
                  a = a.style;
                  a.paddingTop = "0";
                  a.paddingBottom = "0";
                  a.borderTopWidth = "0";
                  a.borderBottomWidth = "0";
                  a.height = 0
              };
          K = j.scrollHeight > j.clientHeight;
          if (a.scrollBarVis !== K && a.scrollBarVis !== k) a.scrollBarVis = K, Y(a); else {
              a.scrollBarVis = K;
              p.children("thead, tfoot").remove();
              u && (P = u.clone().prependTo(p), O = u.find("tr"), P = P.find("tr"));
              w = o.clone().prependTo(p);
              o = o.find("tr");
              K = w.find("tr");
              w.find("th, td").removeAttr("tabindex");
              c || (q.width = "100%", f[0].style.width = "100%");
              h.each(ra(a, w), function (b, c) {
                  B = Z(a, b);
                  c.style.width = a.aoColumns[B].sWidth
              });
              u && H(function (a) {
                  a.style.width = ""
              }, P);
              f = p.outerWidth();
              if ("" === c) {
                  r.width = "100%";
                  if (T && (p.find("tbody").height() > j.offsetHeight || "scroll" == l.css("overflow-y"))) r.width = v(p.outerWidth() - b);
                  f = p.outerWidth()
              } else "" !== d && (r.width =
                  v(d), f = p.outerWidth());
              H(C, K);
              H(function (a) {
                  z.push(a.innerHTML);
                  Ta.push(v(h(a).css("width")))
              }, K);
              H(function (a, b) {
                  if (h.inArray(a, Xb) !== -1) a.style.width = Ta[b]
              }, o);
              h(K).height(0);
              u && (H(C, P), H(function (a) {
                  A.push(a.innerHTML);
                  y.push(v(h(a).css("width")))
              }, P), H(function (a, b) {
                  a.style.width = y[b]
              }, O), h(P).height(0));
              H(function (a, b) {
                  a.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' + z[b] + "</div>";
                  a.style.width = Ta[b]
              }, K);
              u && H(function (a, b) {
                  a.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' +
                      A[b] + "</div>";
                  a.style.width = y[b]
              }, P);
              if (p.outerWidth() < f) {
                  O = j.scrollHeight > j.offsetHeight || "scroll" == l.css("overflow-y") ? f + b : f;
                  if (T && (j.scrollHeight > j.offsetHeight || "scroll" == l.css("overflow-y"))) r.width = v(O - b);
                  ("" === c || "" !== d) && J(a, 1, "Possible column misalignment", 6)
              } else O = "100%";
              q.width = v(O);
              g.width = v(O);
              u && (a.nScrollFoot.style.width = v(O));
              !e && T && (q.height = v(s.offsetHeight + b));
              c = p.outerWidth();
              n[0].style.width = v(c);
              i.width = v(c);
              d = p.height() > j.clientHeight || "scroll" == l.css("overflow-y");
              e = "padding" +
                  (x.bScrollbarLeft ? "Left" : "Right");
              i[e] = d ? b + "px" : "0px";
              u && (m[0].style.width = v(c), t[0].style.width = v(c), t[0].style[e] = d ? b + "px" : "0px");
              p.children("colgroup").insertBefore(p.children("thead"));
              l.scroll();
              if ((a.bSorted || a.bFiltered) && !a._drawHold) j.scrollTop = 0
          }
      }
  
      function H(a, b, c) {
          for (var d = 0, e = 0, f = b.length, g, j; e < f;) {
              g = b[e].firstChild;
              for (j = c ? c[e].firstChild : null; g;) 1 === g.nodeType && (c ? a(g, j, d) : a(g, d), d++), g = g.nextSibling, j = c ? j.nextSibling : null;
              e++
          }
      }
  
      function Ea(a) {
          var b = a.nTable, c = a.aoColumns, d = a.oScroll,
              e = d.sY, f = d.sX, g = d.sXInner, j = c.length, i = la(a, "bVisible"), n = h("th", a.nTHead),
              l = b.getAttribute("width"), k = b.parentNode, t = !1, m, o, p = a.oBrowser, d = p.bScrollOversize;
          (m = b.style.width) && -1 !== m.indexOf("%") && (l = m);
          for (m = 0; m < i.length; m++) o = c[i[m]], null !== o.sWidth && (o.sWidth = Db(o.sWidthOrig, k), t = !0);
          if (d || !t && !f && !e && j == aa(a) && j == n.length) for (m = 0; m < j; m++) i = Z(a, m), null !== i && (c[i].sWidth = v(n.eq(m).width())); else {
              j = h(b).clone().css("visibility", "hidden").removeAttr("id");
              j.find("tbody tr").remove();
              var s = h("<tr/>").appendTo(j.find("tbody"));
              j.find("thead, tfoot").remove();
              j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());
              j.find("tfoot th, tfoot td").css("width", "");
              n = ra(a, j.find("thead")[0]);
              for (m = 0; m < i.length; m++) o = c[i[m]], n[m].style.width = null !== o.sWidthOrig && "" !== o.sWidthOrig ? v(o.sWidthOrig) : "", o.sWidthOrig && f && h(n[m]).append(h("<div/>").css({
                  width: o.sWidthOrig,
                  margin: 0,
                  padding: 0,
                  border: 0,
                  height: 1
              }));
              if (a.aoData.length) for (m = 0; m < i.length; m++) t = i[m], o = c[t], h(Eb(a, t)).clone(!1).append(o.sContentPadding).appendTo(s);
              h("[name]",
                  j).removeAttr("name");
              o = h("<div/>").css(f || e ? {
                  position: "absolute",
                  top: 0,
                  left: 0,
                  height: 1,
                  right: 0,
                  overflow: "hidden"
              } : {}).append(j).appendTo(k);
              f && g ? j.width(g) : f ? (j.css("width", "auto"), j.removeAttr("width"), j.width() < k.clientWidth && l && j.width(k.clientWidth)) : e ? j.width(k.clientWidth) : l && j.width(l);
              for (m = e = 0; m < i.length; m++) k = h(n[m]), g = k.outerWidth() - k.width(), k = p.bBounding ? Math.ceil(n[m].getBoundingClientRect().width) : k.outerWidth(), e += k, c[i[m]].sWidth = v(k - g);
              b.style.width = v(e);
              o.remove()
          }
          l && (b.style.width =
              v(l));
          if ((l || f) && !a._reszEvt) b = function () {
              h(E).on("resize.DT-" + a.sInstance, Na(function () {
                  Y(a)
              }))
          }, d ? setTimeout(b, 1E3) : b(), a._reszEvt = !0
      }
  
      function Db(a, b) {
          if (!a) return 0;
          var c = h("<div/>").css("width", v(a)).appendTo(b || G.body), d = c[0].offsetWidth;
          c.remove();
          return d
      }
  
      function Eb(a, b) {
          var c = Fb(a, b);
          if (0 > c) return null;
          var d = a.aoData[c];
          return !d.nTr ? h("<td/>").html(B(a, c, b, "display"))[0] : d.anCells[b]
      }
  
      function Fb(a, b) {
          for (var c, d = -1, e = -1, f = 0, g = a.aoData.length; f < g; f++) c = B(a, f, b, "display") + "", c = c.replace(Yb,
              ""), c = c.replace(/&nbsp;/g, " "), c.length > d && (d = c.length, e = f);
          return e
      }
  
      function v(a) {
          return null === a ? "0px" : "number" == typeof a ? 0 > a ? "0px" : a + "px" : a.match(/\d$/) ? a + "px" : a
      }
  
      function V(a) {
          var b, c, d = [], e = a.aoColumns, f, g, j, i;
          b = a.aaSortingFixed;
          c = h.isPlainObject(b);
          var n = [];
          f = function (a) {
              a.length && !h.isArray(a[0]) ? n.push(a) : h.merge(n, a)
          };
          h.isArray(b) && f(b);
          c && b.pre && f(b.pre);
          f(a.aaSorting);
          c && b.post && f(b.post);
          for (a = 0; a < n.length; a++) {
              i = n[a][0];
              f = e[i].aDataSort;
              b = 0;
              for (c = f.length; b < c; b++) g = f[b], j = e[g].sType ||
                  "string", n[a]._idx === k && (n[a]._idx = h.inArray(n[a][1], e[g].asSorting)), d.push({
                  src: i,
                  col: g,
                  dir: n[a][1],
                  index: n[a]._idx,
                  type: j,
                  formatter: m.ext.type.order[j + "-pre"]
              })
          }
          return d
      }
  
      function lb(a) {
          var b, c, d = [], e = m.ext.type.order, f = a.aoData, g = 0, j, i = a.aiDisplayMaster, h;
          Fa(a);
          h = V(a);
          b = 0;
          for (c = h.length; b < c; b++) j = h[b], j.formatter && g++, Gb(a, j.col);
          if ("ssp" != y(a) && 0 !== h.length) {
              b = 0;
              for (c = i.length; b < c; b++) d[i[b]] = b;
              g === h.length ? i.sort(function (a, b) {
                  var c, e, g, j, i = h.length, k = f[a]._aSortData, m = f[b]._aSortData;
                  for (g =
                           0; g < i; g++) if (j = h[g], c = k[j.col], e = m[j.col], c = c < e ? -1 : c > e ? 1 : 0, 0 !== c) return "asc" === j.dir ? c : -c;
                  c = d[a];
                  e = d[b];
                  return c < e ? -1 : c > e ? 1 : 0
              }) : i.sort(function (a, b) {
                  var c, g, j, i, k = h.length, m = f[a]._aSortData, o = f[b]._aSortData;
                  for (j = 0; j < k; j++) if (i = h[j], c = m[i.col], g = o[i.col], i = e[i.type + "-" + i.dir] || e["string-" + i.dir], c = i(c, g), 0 !== c) return c;
                  c = d[a];
                  g = d[b];
                  return c < g ? -1 : c > g ? 1 : 0
              })
          }
          a.bSorted = !0
      }
  
      function Hb(a) {
          for (var b, c, d = a.aoColumns, e = V(a), a = a.oLanguage.oAria, f = 0, g = d.length; f < g; f++) {
              c = d[f];
              var j = c.asSorting;
              b = c.sTitle.replace(/<.*?>/g,
                  "");
              var i = c.nTh;
              i.removeAttribute("aria-sort");
              c.bSortable && (0 < e.length && e[0].col == f ? (i.setAttribute("aria-sort", "asc" == e[0].dir ? "ascending" : "descending"), c = j[e[0].index + 1] || j[0]) : c = j[0], b += "asc" === c ? a.sSortAscending : a.sSortDescending);
              i.setAttribute("aria-label", b)
          }
      }
  
      function Ua(a, b, c, d) {
          var e = a.aaSorting, f = a.aoColumns[b].asSorting, g = function (a, b) {
              var c = a._idx;
              c === k && (c = h.inArray(a[1], f));
              return c + 1 < f.length ? c + 1 : b ? null : 0
          };
          "number" === typeof e[0] && (e = a.aaSorting = [e]);
          c && a.oFeatures.bSortMulti ? (c = h.inArray(b,
              D(e, "0")), -1 !== c ? (b = g(e[c], !0), null === b && 1 === e.length && (b = 0), null === b ? e.splice(c, 1) : (e[c][1] = f[b], e[c]._idx = b)) : (e.push([b, f[0], 0]), e[e.length - 1]._idx = 0)) : e.length && e[0][0] == b ? (b = g(e[0]), e.length = 1, e[0][1] = f[b], e[0]._idx = b) : (e.length = 0, e.push([b, f[0]]), e[0]._idx = 0);
          S(a);
          "function" == typeof d && d(a)
      }
  
      function La(a, b, c, d) {
          var e = a.aoColumns[c];
          Va(b, {}, function (b) {
              !1 !== e.bSortable && (a.oFeatures.bProcessing ? (C(a, !0), setTimeout(function () {
                  Ua(a, c, b.shiftKey, d);
                  "ssp" !== y(a) && C(a, !1)
              }, 0)) : Ua(a, c, b.shiftKey, d))
          })
      }
  
      function wa(a) {
          var b = a.aLastSort, c = a.oClasses.sSortColumn, d = V(a), e = a.oFeatures, f, g;
          if (e.bSort && e.bSortClasses) {
              e = 0;
              for (f = b.length; e < f; e++) g = b[e].src, h(D(a.aoData, "anCells", g)).removeClass(c + (2 > e ? e + 1 : 3));
              e = 0;
              for (f = d.length; e < f; e++) g = d[e].src, h(D(a.aoData, "anCells", g)).addClass(c + (2 > e ? e + 1 : 3))
          }
          a.aLastSort = d
      }
  
      function Gb(a, b) {
          var c = a.aoColumns[b], d = m.ext.order[c.sSortDataType], e;
          d && (e = d.call(a.oInstance, a, b, $(a, b)));
          for (var f, g = m.ext.type.order[c.sType + "-pre"], j = 0, i = a.aoData.length; j < i; j++) if (c = a.aoData[j],
          c._aSortData || (c._aSortData = []), !c._aSortData[b] || d) f = d ? e[j] : B(a, j, b, "sort"), c._aSortData[b] = g ? g(f) : f
      }
  
      function xa(a) {
          if (a.oFeatures.bStateSave && !a.bDestroying) {
              var b = {
                  time: +new Date,
                  start: a._iDisplayStart,
                  length: a._iDisplayLength,
                  order: h.extend(!0, [], a.aaSorting),
                  search: zb(a.oPreviousSearch),
                  columns: h.map(a.aoColumns, function (b, d) {
                      return {visible: b.bVisible, search: zb(a.aoPreSearchCols[d])}
                  })
              };
              r(a, "aoStateSaveParams", "stateSaveParams", [a, b]);
              a.oSavedState = b;
              a.fnStateSaveCallback.call(a.oInstance, a,
                  b)
          }
      }
  
      function Ib(a, b, c) {
          var d, e, f = a.aoColumns, b = function (b) {
              if (b && b.time) {
                  var g = r(a, "aoStateLoadParams", "stateLoadParams", [a, b]);
                  if (-1 === h.inArray(!1, g) && (g = a.iStateDuration, !(0 < g && b.time < +new Date - 1E3 * g) && !(b.columns && f.length !== b.columns.length))) {
                      a.oLoadedState = h.extend(!0, {}, b);
                      b.start !== k && (a._iDisplayStart = b.start, a.iInitDisplayStart = b.start);
                      b.length !== k && (a._iDisplayLength = b.length);
                      b.order !== k && (a.aaSorting = [], h.each(b.order, function (b, c) {
                          a.aaSorting.push(c[0] >= f.length ? [0, c[1]] : c)
                      }));
                      b.search !==
                      k && h.extend(a.oPreviousSearch, Ab(b.search));
                      if (b.columns) {
                          d = 0;
                          for (e = b.columns.length; d < e; d++) g = b.columns[d], g.visible !== k && (f[d].bVisible = g.visible), g.search !== k && h.extend(a.aoPreSearchCols[d], Ab(g.search))
                      }
                      r(a, "aoStateLoaded", "stateLoaded", [a, b])
                  }
              }
              c()
          };
          if (a.oFeatures.bStateSave) {
              var g = a.fnStateLoadCallback.call(a.oInstance, a, b);
              g !== k && b(g)
          } else c()
      }
  
      function ya(a) {
          var b = m.settings, a = h.inArray(a, D(b, "nTable"));
          return -1 !== a ? b[a] : null
      }
  
      function J(a, b, c, d) {
          c = "DataTables warning: " + (a ? "table id=" + a.sTableId +
              " - " : "") + c;
          d && (c += ". For more information about this error, please see http://datatables.net/tn/" + d);
          if (b) E.console && console.log && console.log(c); else if (b = m.ext, b = b.sErrMode || b.errMode, a && r(a, null, "error", [a, d, c]), "alert" == b) alert(c); else {
              if ("throw" == b) throw Error(c);
              "function" == typeof b && b(a, d, c)
          }
      }
  
      function F(a, b, c, d) {
          h.isArray(c) ? h.each(c, function (c, d) {
              h.isArray(d) ? F(a, b, d[0], d[1]) : F(a, b, d)
          }) : (d === k && (d = c), b[c] !== k && (a[d] = b[c]))
      }
  
      function Jb(a, b, c) {
          var d, e;
          for (e in b) b.hasOwnProperty(e) && (d = b[e],
              h.isPlainObject(d) ? (h.isPlainObject(a[e]) || (a[e] = {}), h.extend(!0, a[e], d)) : a[e] = c && "data" !== e && "aaData" !== e && h.isArray(d) ? d.slice() : d);
          return a
      }
  
      function Va(a, b, c) {
          h(a).on("click.DT", b, function (b) {
              a.blur();
              c(b)
          }).on("keypress.DT", b, function (a) {
              13 === a.which && (a.preventDefault(), c(a))
          }).on("selectstart.DT", function () {
              return !1
          })
      }
  
      function z(a, b, c, d) {
          c && a[b].push({fn: c, sName: d})
      }
  
      function r(a, b, c, d) {
          var e = [];
          b && (e = h.map(a[b].slice().reverse(), function (b) {
              return b.fn.apply(a.oInstance, d)
          }));
          null !== c && (b = h.Event(c +
              ".dt"), h(a.nTable).trigger(b, d), e.push(b.result));
          return e
      }
  
      function Ra(a) {
          var b = a._iDisplayStart, c = a.fnDisplayEnd(), d = a._iDisplayLength;
          b >= c && (b = c - d);
          b -= b % d;
          if (-1 === d || 0 > b) b = 0;
          a._iDisplayStart = b
      }
  
      function Ma(a, b) {
          var c = a.renderer, d = m.ext.renderer[b];
          return h.isPlainObject(c) && c[b] ? d[c[b]] || d._ : "string" === typeof c ? d[c] || d._ : d._
      }
  
      function y(a) {
          return a.oFeatures.bServerSide ? "ssp" : a.ajax || a.sAjaxSource ? "ajax" : "dom"
      }
  
      function ha(a, b) {
          var c = [], c = Kb.numbers_length, d = Math.floor(c / 2);
          b <= c ? c = W(0, b) : a <= d ? (c = W(0,
              c - 2), c.push("ellipsis"), c.push(b - 1)) : (a >= b - 1 - d ? c = W(b - (c - 2), b) : (c = W(a - d + 2, a + d - 1), c.push("ellipsis"), c.push(b - 1)), c.splice(0, 0, "ellipsis"), c.splice(0, 0, 0));
          c.DT_el = "span";
          return c
      }
  
      function cb(a) {
          h.each({
              num: function (b) {
                  return za(b, a)
              }, "num-fmt": function (b) {
                  return za(b, a, Wa)
              }, "html-num": function (b) {
                  return za(b, a, Aa)
              }, "html-num-fmt": function (b) {
                  return za(b, a, Aa, Wa)
              }
          }, function (b, c) {
              x.type.order[b + a + "-pre"] = c;
              b.match(/^html\-/) && (x.type.search[b + a] = x.type.search.html)
          })
      }
  
      function Lb(a) {
          return function () {
              var b =
                  [ya(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));
              return m.ext.internal[a].apply(this, b)
          }
      }
  
      var m = function (a) {
              this.$ = function (a, b) {
                  return this.api(!0).$(a, b)
              };
              this._ = function (a, b) {
                  return this.api(!0).rows(a, b).data()
              };
              this.api = function (a) {
                  return a ? new s(ya(this[x.iApiIndex])) : new s(this)
              };
              this.fnAddData = function (a, b) {
                  var c = this.api(!0),
                      d = h.isArray(a) && (h.isArray(a[0]) || h.isPlainObject(a[0])) ? c.rows.add(a) : c.row.add(a);
                  (b === k || b) && c.draw();
                  return d.flatten().toArray()
              };
              this.fnAdjustColumnSizing =
                  function (a) {
                      var b = this.api(!0).columns.adjust(), c = b.settings()[0], d = c.oScroll;
                      a === k || a ? b.draw(!1) : ("" !== d.sX || "" !== d.sY) && ka(c)
                  };
              this.fnClearTable = function (a) {
                  var b = this.api(!0).clear();
                  (a === k || a) && b.draw()
              };
              this.fnClose = function (a) {
                  this.api(!0).row(a).child.hide()
              };
              this.fnDeleteRow = function (a, b, c) {
                  var d = this.api(!0), a = d.rows(a), e = a.settings()[0], h = e.aoData[a[0][0]];
                  a.remove();
                  b && b.call(this, e, h);
                  (c === k || c) && d.draw();
                  return h
              };
              this.fnDestroy = function (a) {
                  this.api(!0).destroy(a)
              };
              this.fnDraw = function (a) {
                  this.api(!0).draw(a)
              };
              this.fnFilter = function (a, b, c, d, e, h) {
                  e = this.api(!0);
                  null === b || b === k ? e.search(a, c, d, h) : e.column(b).search(a, c, d, h);
                  e.draw()
              };
              this.fnGetData = function (a, b) {
                  var c = this.api(!0);
                  if (a !== k) {
                      var d = a.nodeName ? a.nodeName.toLowerCase() : "";
                      return b !== k || "td" == d || "th" == d ? c.cell(a, b).data() : c.row(a).data() || null
                  }
                  return c.data().toArray()
              };
              this.fnGetNodes = function (a) {
                  var b = this.api(!0);
                  return a !== k ? b.row(a).node() : b.rows().nodes().flatten().toArray()
              };
              this.fnGetPosition = function (a) {
                  var b = this.api(!0), c = a.nodeName.toUpperCase();
                  return "TR" == c ? b.row(a).index() : "TD" == c || "TH" == c ? (a = b.cell(a).index(), [a.row, a.columnVisible, a.column]) : null
              };
              this.fnIsOpen = function (a) {
                  return this.api(!0).row(a).child.isShown()
              };
              this.fnOpen = function (a, b, c) {
                  return this.api(!0).row(a).child(b, c).show().child()[0]
              };
              this.fnPageChange = function (a, b) {
                  var c = this.api(!0).page(a);
                  (b === k || b) && c.draw(!1)
              };
              this.fnSetColumnVis = function (a, b, c) {
                  a = this.api(!0).column(a).visible(b);
                  (c === k || c) && a.columns.adjust().draw()
              };
              this.fnSettings = function () {
                  return ya(this[x.iApiIndex])
              };
              this.fnSort = function (a) {
                  this.api(!0).order(a).draw()
              };
              this.fnSortListener = function (a, b, c) {
                  this.api(!0).order.listener(a, b, c)
              };
              this.fnUpdate = function (a, b, c, d, e) {
                  var h = this.api(!0);
                  c === k || null === c ? h.row(b).data(a) : h.cell(b, c).data(a);
                  (e === k || e) && h.columns.adjust();
                  (d === k || d) && h.draw();
                  return 0
              };
              this.fnVersionCheck = x.fnVersionCheck;
              var b = this, c = a === k, d = this.length;
              c && (a = {});
              this.oApi = this.internal = x.internal;
              for (var e in m.ext.internal) e && (this[e] = Lb(e));
              this.each(function () {
                  var e = {}, g = 1 < d ? Jb(e, a, !0) :
                      a, j = 0, i, e = this.getAttribute("id"), n = !1, l = m.defaults, q = h(this);
                  if ("table" != this.nodeName.toLowerCase()) J(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2); else {
                      db(l);
                      eb(l.column);
                      I(l, l, !0);
                      I(l.column, l.column, !0);
                      I(l, h.extend(g, q.data()));
                      var t = m.settings, j = 0;
                      for (i = t.length; j < i; j++) {
                          var o = t[j];
                          if (o.nTable == this || o.nTHead.parentNode == this || o.nTFoot && o.nTFoot.parentNode == this) {
                              var s = g.bRetrieve !== k ? g.bRetrieve : l.bRetrieve;
                              if (c || s) return o.oInstance;
                              if (g.bDestroy !== k ? g.bDestroy : l.bDestroy) {
                                  o.oInstance.fnDestroy();
                                  break
                              } else {
                                  J(o, 0, "Cannot reinitialise DataTable", 3);
                                  return
                              }
                          }
                          if (o.sTableId == this.id) {
                              t.splice(j, 1);
                              break
                          }
                      }
                      if (null === e || "" === e) this.id = e = "DataTables_Table_" + m.ext._unique++;
                      var p = h.extend(!0, {}, m.models.oSettings, {
                          sDestroyWidth: q[0].style.width,
                          sInstance: e,
                          sTableId: e
                      });
                      p.nTable = this;
                      p.oApi = b.internal;
                      p.oInit = g;
                      t.push(p);
                      p.oInstance = 1 === b.length ? b : q.dataTable();
                      db(g);
                      g.oLanguage && Ca(g.oLanguage);
                      g.aLengthMenu && !g.iDisplayLength && (g.iDisplayLength = h.isArray(g.aLengthMenu[0]) ? g.aLengthMenu[0][0] : g.aLengthMenu[0]);
                      g = Jb(h.extend(!0, {}, l), g);
                      F(p.oFeatures, g, "bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
                      F(p, g, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu", "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"],
                          ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"]]);
                      F(p.oScroll, g, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]);
                      F(p.oLanguage, g, "fnInfoCallback");
                      z(p, "aoDrawCallback", g.fnDrawCallback, "user");
                      z(p, "aoServerParams", g.fnServerParams, "user");
                      z(p, "aoStateSaveParams", g.fnStateSaveParams, "user");
                      z(p, "aoStateLoadParams", g.fnStateLoadParams, "user");
                      z(p, "aoStateLoaded", g.fnStateLoaded, "user");
                      z(p, "aoRowCallback",
                          g.fnRowCallback, "user");
                      z(p, "aoRowCreatedCallback", g.fnCreatedRow, "user");
                      z(p, "aoHeaderCallback", g.fnHeaderCallback, "user");
                      z(p, "aoFooterCallback", g.fnFooterCallback, "user");
                      z(p, "aoInitComplete", g.fnInitComplete, "user");
                      z(p, "aoPreDrawCallback", g.fnPreDrawCallback, "user");
                      p.rowIdFn = Q(g.rowId);
                      fb(p);
                      var u = p.oClasses;
                      h.extend(u, m.ext.classes, g.oClasses);
                      q.addClass(u.sTable);
                      p.iInitDisplayStart === k && (p.iInitDisplayStart = g.iDisplayStart, p._iDisplayStart = g.iDisplayStart);
                      null !== g.iDeferLoading && (p.bDeferLoading =
                          !0, e = h.isArray(g.iDeferLoading), p._iRecordsDisplay = e ? g.iDeferLoading[0] : g.iDeferLoading, p._iRecordsTotal = e ? g.iDeferLoading[1] : g.iDeferLoading);
                      var v = p.oLanguage;
                      h.extend(!0, v, g.oLanguage);
                      v.sUrl && (h.ajax({
                          dataType: "json", url: v.sUrl, success: function (a) {
                              Ca(a);
                              I(l.oLanguage, a);
                              h.extend(true, v, a);
                              ga(p)
                          }, error: function () {
                              ga(p)
                          }
                      }), n = !0);
                      null === g.asStripeClasses && (p.asStripeClasses = [u.sStripeOdd, u.sStripeEven]);
                      var e = p.asStripeClasses, x = q.children("tbody").find("tr").eq(0);
                      -1 !== h.inArray(!0, h.map(e, function (a) {
                          return x.hasClass(a)
                      })) &&
                      (h("tbody tr", this).removeClass(e.join(" ")), p.asDestroyStripes = e.slice());
                      e = [];
                      t = this.getElementsByTagName("thead");
                      0 !== t.length && (da(p.aoHeader, t[0]), e = ra(p));
                      if (null === g.aoColumns) {
                          t = [];
                          j = 0;
                          for (i = e.length; j < i; j++) t.push(null)
                      } else t = g.aoColumns;
                      j = 0;
                      for (i = t.length; j < i; j++) Da(p, e ? e[j] : null);
                      hb(p, g.aoColumnDefs, t, function (a, b) {
                          ja(p, a, b)
                      });
                      if (x.length) {
                          var w = function (a, b) {
                              return a.getAttribute("data-" + b) !== null ? b : null
                          };
                          h(x[0]).children("th, td").each(function (a, b) {
                              var c = p.aoColumns[a];
                              if (c.mData ===
                                  a) {
                                  var d = w(b, "sort") || w(b, "order"), e = w(b, "filter") || w(b, "search");
                                  if (d !== null || e !== null) {
                                      c.mData = {
                                          _: a + ".display",
                                          sort: d !== null ? a + ".@data-" + d : k,
                                          type: d !== null ? a + ".@data-" + d : k,
                                          filter: e !== null ? a + ".@data-" + e : k
                                      };
                                      ja(p, a)
                                  }
                              }
                          })
                      }
                      var T = p.oFeatures, e = function () {
                          if (g.aaSorting === k) {
                              var a = p.aaSorting;
                              j = 0;
                              for (i = a.length; j < i; j++) a[j][1] = p.aoColumns[j].asSorting[0]
                          }
                          wa(p);
                          T.bSort && z(p, "aoDrawCallback", function () {
                              if (p.bSorted) {
                                  var a = V(p), b = {};
                                  h.each(a, function (a, c) {
                                      b[c.src] = c.dir
                                  });
                                  r(p, null, "order", [p, a, b]);
                                  Hb(p)
                              }
                          });
                          z(p, "aoDrawCallback", function () {
                              (p.bSorted || y(p) === "ssp" || T.bDeferRender) && wa(p)
                          }, "sc");
                          var a = q.children("caption").each(function () {
                              this._captionSide = h(this).css("caption-side")
                          }), b = q.children("thead");
                          b.length === 0 && (b = h("<thead/>").appendTo(q));
                          p.nTHead = b[0];
                          b = q.children("tbody");
                          b.length === 0 && (b = h("<tbody/>").appendTo(q));
                          p.nTBody = b[0];
                          b = q.children("tfoot");
                          if (b.length === 0 && a.length > 0 && (p.oScroll.sX !== "" || p.oScroll.sY !== "")) b = h("<tfoot/>").appendTo(q);
                          if (b.length === 0 || b.children().length === 0) q.addClass(u.sNoFooter);
                          else if (b.length > 0) {
                              p.nTFoot = b[0];
                              da(p.aoFooter, p.nTFoot)
                          }
                          if (g.aaData) for (j = 0; j < g.aaData.length; j++) M(p, g.aaData[j]); else (p.bDeferLoading || y(p) == "dom") && ma(p, h(p.nTBody).children("tr"));
                          p.aiDisplay = p.aiDisplayMaster.slice();
                          p.bInitialised = true;
                          n === false && ga(p)
                      };
                      g.bStateSave ? (T.bStateSave = !0, z(p, "aoDrawCallback", xa, "state_save"), Ib(p, g, e)) : e()
                  }
              });
              b = null;
              return this
          }, x, s, o, u, Xa = {}, Mb = /[\r\n]/g, Aa = /<.*?>/g,
          Zb = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,
          $b = RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)",
              "g"), Wa = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi, L = function (a) {
              return !a || !0 === a || "-" === a ? !0 : !1
          }, Nb = function (a) {
              var b = parseInt(a, 10);
              return !isNaN(b) && isFinite(a) ? b : null
          }, Ob = function (a, b) {
              Xa[b] || (Xa[b] = RegExp(Pa(b), "g"));
              return "string" === typeof a && "." !== b ? a.replace(/\./g, "").replace(Xa[b], ".") : a
          }, Ya = function (a, b, c) {
              var d = "string" === typeof a;
              if (L(a)) return !0;
              b && d && (a = Ob(a, b));
              c && d && (a = a.replace(Wa, ""));
              return !isNaN(parseFloat(a)) && isFinite(a)
          }, Pb = function (a, b, c) {
              return L(a) ? !0 : !(L(a) || "string" ===
                  typeof a) ? null : Ya(a.replace(Aa, ""), b, c) ? !0 : null
          }, D = function (a, b, c) {
              var d = [], e = 0, f = a.length;
              if (c !== k) for (; e < f; e++) a[e] && a[e][b] && d.push(a[e][b][c]); else for (; e < f; e++) a[e] && d.push(a[e][b]);
              return d
          }, ia = function (a, b, c, d) {
              var e = [], f = 0, g = b.length;
              if (d !== k) for (; f < g; f++) a[b[f]][c] && e.push(a[b[f]][c][d]); else for (; f < g; f++) e.push(a[b[f]][c]);
              return e
          }, W = function (a, b) {
              var c = [], d;
              b === k ? (b = 0, d = a) : (d = b, b = a);
              for (var e = b; e < d; e++) c.push(e);
              return c
          }, Qb = function (a) {
              for (var b = [], c = 0, d = a.length; c < d; c++) a[c] && b.push(a[c]);
              return b
          }, qa = function (a) {
              var b;
              a:{
                  if (!(2 > a.length)) {
                      b = a.slice().sort();
                      for (var c = b[0], d = 1, e = b.length; d < e; d++) {
                          if (b[d] === c) {
                              b = !1;
                              break a
                          }
                          c = b[d]
                      }
                  }
                  b = !0
              }
              if (b) return a.slice();
              b = [];
              var e = a.length, f, g = 0, d = 0;
              a:for (; d < e; d++) {
                  c = a[d];
                  for (f = 0; f < g; f++) if (b[f] === c) continue a;
                  b.push(c);
                  g++
              }
              return b
          };
      m.util = {
          throttle: function (a, b) {
              var c = b !== k ? b : 200, d, e;
              return function () {
                  var b = this, g = +new Date, j = arguments;
                  d && g < d + c ? (clearTimeout(e), e = setTimeout(function () {
                      d = k;
                      a.apply(b, j)
                  }, c)) : (d = g, a.apply(b, j))
              }
          }, escapeRegex: function (a) {
              return a.replace($b,
                  "\\$1")
          }
      };
      var A = function (a, b, c) {
              a[b] !== k && (a[c] = a[b])
          }, ba = /\[.*?\]$/, U = /\(\)$/, Pa = m.util.escapeRegex, va = h("<div>")[0], Wb = va.textContent !== k,
          Yb = /<.*?>/g, Na = m.util.throttle, Rb = [], w = Array.prototype, ac = function (a) {
              var b, c, d = m.settings, e = h.map(d, function (a) {
                  return a.nTable
              });
              if (a) {
                  if (a.nTable && a.oApi) return [a];
                  if (a.nodeName && "table" === a.nodeName.toLowerCase()) return b = h.inArray(a, e), -1 !== b ? [d[b]] : null;
                  if (a && "function" === typeof a.settings) return a.settings().toArray();
                  "string" === typeof a ? c = h(a) : a instanceof
                      h && (c = a)
              } else return [];
              if (c) return c.map(function () {
                  b = h.inArray(this, e);
                  return -1 !== b ? d[b] : null
              }).toArray()
          };
      s = function (a, b) {
          if (!(this instanceof s)) return new s(a, b);
          var c = [], d = function (a) {
              (a = ac(a)) && (c = c.concat(a))
          };
          if (h.isArray(a)) for (var e = 0, f = a.length; e < f; e++) d(a[e]); else d(a);
          this.context = qa(c);
          b && h.merge(this, b);
          this.selector = {rows: null, cols: null, opts: null};
          s.extend(this, this, Rb)
      };
      m.Api = s;
      h.extend(s.prototype, {
          any: function () {
              return 0 !== this.count()
          }, concat: w.concat, context: [], count: function () {
              return this.flatten().length
          },
          each: function (a) {
              for (var b = 0, c = this.length; b < c; b++) a.call(this, this[b], b, this);
              return this
          }, eq: function (a) {
              var b = this.context;
              return b.length > a ? new s(b[a], this[a]) : null
          }, filter: function (a) {
              var b = [];
              if (w.filter) b = w.filter.call(this, a, this); else for (var c = 0, d = this.length; c < d; c++) a.call(this, this[c], c, this) && b.push(this[c]);
              return new s(this.context, b)
          }, flatten: function () {
              var a = [];
              return new s(this.context, a.concat.apply(a, this.toArray()))
          }, join: w.join, indexOf: w.indexOf || function (a, b) {
              for (var c = b || 0,
                       d = this.length; c < d; c++) if (this[c] === a) return c;
              return -1
          }, iterator: function (a, b, c, d) {
              var e = [], f, g, j, h, n, l = this.context, m, o, u = this.selector;
              "string" === typeof a && (d = c, c = b, b = a, a = !1);
              g = 0;
              for (j = l.length; g < j; g++) {
                  var r = new s(l[g]);
                  if ("table" === b) f = c.call(r, l[g], g), f !== k && e.push(f); else if ("columns" === b || "rows" === b) f = c.call(r, l[g], this[g], g), f !== k && e.push(f); else if ("column" === b || "column-rows" === b || "row" === b || "cell" === b) {
                      o = this[g];
                      "column-rows" === b && (m = Ba(l[g], u.opts));
                      h = 0;
                      for (n = o.length; h < n; h++) f = o[h], f =
                          "cell" === b ? c.call(r, l[g], f.row, f.column, g, h) : c.call(r, l[g], f, g, h, m), f !== k && e.push(f)
                  }
              }
              return e.length || d ? (a = new s(l, a ? e.concat.apply([], e) : e), b = a.selector, b.rows = u.rows, b.cols = u.cols, b.opts = u.opts, a) : this
          }, lastIndexOf: w.lastIndexOf || function (a, b) {
              return this.indexOf.apply(this.toArray.reverse(), arguments)
          }, length: 0, map: function (a) {
              var b = [];
              if (w.map) b = w.map.call(this, a, this); else for (var c = 0, d = this.length; c < d; c++) b.push(a.call(this, this[c], c));
              return new s(this.context, b)
          }, pluck: function (a) {
              return this.map(function (b) {
                  return b[a]
              })
          },
          pop: w.pop, push: w.push, reduce: w.reduce || function (a, b) {
              return gb(this, a, b, 0, this.length, 1)
          }, reduceRight: w.reduceRight || function (a, b) {
              return gb(this, a, b, this.length - 1, -1, -1)
          }, reverse: w.reverse, selector: null, shift: w.shift, slice: function () {
              return new s(this.context, this)
          }, sort: w.sort, splice: w.splice, toArray: function () {
              return w.slice.call(this)
          }, to$: function () {
              return h(this)
          }, toJQuery: function () {
              return h(this)
          }, unique: function () {
              return new s(this.context, qa(this))
          }, unshift: w.unshift
      });
      s.extend = function (a,
                           b, c) {
          if (c.length && b && (b instanceof s || b.__dt_wrapper)) {
              var d, e, f, g = function (a, b, c) {
                  return function () {
                      var d = b.apply(a, arguments);
                      s.extend(d, d, c.methodExt);
                      return d
                  }
              };
              d = 0;
              for (e = c.length; d < e; d++) f = c[d], b[f.name] = "function" === typeof f.val ? g(a, f.val, f) : h.isPlainObject(f.val) ? {} : f.val, b[f.name].__dt_wrapper = !0, s.extend(a, b[f.name], f.propExt)
          }
      };
      s.register = o = function (a, b) {
          if (h.isArray(a)) for (var c = 0, d = a.length; c < d; c++) s.register(a[c], b); else for (var e = a.split("."), f = Rb, g, j, c = 0, d = e.length; c < d; c++) {
              g = (j = -1 !==
                  e[c].indexOf("()")) ? e[c].replace("()", "") : e[c];
              var i;
              a:{
                  i = 0;
                  for (var n = f.length; i < n; i++) if (f[i].name === g) {
                      i = f[i];
                      break a
                  }
                  i = null
              }
              i || (i = {name: g, val: {}, methodExt: [], propExt: []}, f.push(i));
              c === d - 1 ? i.val = b : f = j ? i.methodExt : i.propExt
          }
      };
      s.registerPlural = u = function (a, b, c) {
          s.register(a, c);
          s.register(b, function () {
              var a = c.apply(this, arguments);
              return a === this ? this : a instanceof s ? a.length ? h.isArray(a[0]) ? new s(a.context, a[0]) : a[0] : k : a
          })
      };
      o("tables()", function (a) {
          var b;
          if (a) {
              b = s;
              var c = this.context;
              if ("number" ===
                  typeof a) a = [c[a]]; else var d = h.map(c, function (a) {
                  return a.nTable
              }), a = h(d).filter(a).map(function () {
                  var a = h.inArray(this, d);
                  return c[a]
              }).toArray();
              b = new b(a)
          } else b = this;
          return b
      });
      o("table()", function (a) {
          var a = this.tables(a), b = a.context;
          return b.length ? new s(b[0]) : a
      });
      u("tables().nodes()", "table().node()", function () {
          return this.iterator("table", function (a) {
              return a.nTable
          }, 1)
      });
      u("tables().body()", "table().body()", function () {
          return this.iterator("table", function (a) {
              return a.nTBody
          }, 1)
      });
      u("tables().header()",
          "table().header()", function () {
              return this.iterator("table", function (a) {
                  return a.nTHead
              }, 1)
          });
      u("tables().footer()", "table().footer()", function () {
          return this.iterator("table", function (a) {
              return a.nTFoot
          }, 1)
      });
      u("tables().containers()", "table().container()", function () {
          return this.iterator("table", function (a) {
              return a.nTableWrapper
          }, 1)
      });
      o("draw()", function (a) {
          return this.iterator("table", function (b) {
              "page" === a ? N(b) : ("string" === typeof a && (a = "full-hold" === a ? !1 : !0), S(b, !1 === a))
          })
      });
      o("page()", function (a) {
          return a ===
          k ? this.page.info().page : this.iterator("table", function (b) {
              Sa(b, a)
          })
      });
      o("page.info()", function () {
          if (0 === this.context.length) return k;
          var a = this.context[0], b = a._iDisplayStart, c = a.oFeatures.bPaginate ? a._iDisplayLength : -1,
              d = a.fnRecordsDisplay(), e = -1 === c;
          return {
              page: e ? 0 : Math.floor(b / c),
              pages: e ? 1 : Math.ceil(d / c),
              start: b,
              end: a.fnDisplayEnd(),
              length: c,
              recordsTotal: a.fnRecordsTotal(),
              recordsDisplay: d,
              serverSide: "ssp" === y(a)
          }
      });
      o("page.len()", function (a) {
          return a === k ? 0 !== this.context.length ? this.context[0]._iDisplayLength :
              k : this.iterator("table", function (b) {
              Qa(b, a)
          })
      });
      var Sb = function (a, b, c) {
          if (c) {
              var d = new s(a);
              d.one("draw", function () {
                  c(d.ajax.json())
              })
          }
          if ("ssp" == y(a)) S(a, b); else {
              C(a, !0);
              var e = a.jqXHR;
              e && 4 !== e.readyState && e.abort();
              sa(a, [], function (c) {
                  na(a);
                  for (var c = ta(a, c), d = 0, e = c.length; d < e; d++) M(a, c[d]);
                  S(a, b);
                  C(a, !1)
              })
          }
      };
      o("ajax.json()", function () {
          var a = this.context;
          if (0 < a.length) return a[0].json
      });
      o("ajax.params()", function () {
          var a = this.context;
          if (0 < a.length) return a[0].oAjaxData
      });
      o("ajax.reload()", function (a,
                                   b) {
          return this.iterator("table", function (c) {
              Sb(c, !1 === b, a)
          })
      });
      o("ajax.url()", function (a) {
          var b = this.context;
          if (a === k) {
              if (0 === b.length) return k;
              b = b[0];
              return b.ajax ? h.isPlainObject(b.ajax) ? b.ajax.url : b.ajax : b.sAjaxSource
          }
          return this.iterator("table", function (b) {
              h.isPlainObject(b.ajax) ? b.ajax.url = a : b.ajax = a
          })
      });
      o("ajax.url().load()", function (a, b) {
          return this.iterator("table", function (c) {
              Sb(c, !1 === b, a)
          })
      });
      var Za = function (a, b, c, d, e) {
          var f = [], g, j, i, n, l, m;
          i = typeof b;
          if (!b || "string" === i || "function" ===
              i || b.length === k) b = [b];
          i = 0;
          for (n = b.length; i < n; i++) {
              j = b[i] && b[i].split && !b[i].match(/[\[\(:]/) ? b[i].split(",") : [b[i]];
              l = 0;
              for (m = j.length; l < m; l++) (g = c("string" === typeof j[l] ? h.trim(j[l]) : j[l])) && g.length && (f = f.concat(g))
          }
          a = x.selector[a];
          if (a.length) {
              i = 0;
              for (n = a.length; i < n; i++) f = a[i](d, e, f)
          }
          return qa(f)
      }, $a = function (a) {
          a || (a = {});
          a.filter && a.search === k && (a.search = a.filter);
          return h.extend({search: "none", order: "current", page: "all"}, a)
      }, ab = function (a) {
          for (var b = 0, c = a.length; b < c; b++) if (0 < a[b].length) return a[0] =
              a[b], a[0].length = 1, a.length = 1, a.context = [a.context[b]], a;
          a.length = 0;
          return a
      }, Ba = function (a, b) {
          var c, d, e, f = [], g = a.aiDisplay;
          c = a.aiDisplayMaster;
          var j = b.search;
          d = b.order;
          e = b.page;
          if ("ssp" == y(a)) return "removed" === j ? [] : W(0, c.length);
          if ("current" == e) {
              c = a._iDisplayStart;
              for (d = a.fnDisplayEnd(); c < d; c++) f.push(g[c])
          } else if ("current" == d || "applied" == d) f = "none" == j ? c.slice() : "applied" == j ? g.slice() : h.map(c, function (a) {
              return -1 === h.inArray(a, g) ? a : null
          }); else if ("index" == d || "original" == d) {
              c = 0;
              for (d = a.aoData.length; c <
              d; c++) "none" == j ? f.push(c) : (e = h.inArray(c, g), (-1 === e && "removed" == j || 0 <= e && "applied" == j) && f.push(c))
          }
          return f
      };
      o("rows()", function (a, b) {
          a === k ? a = "" : h.isPlainObject(a) && (b = a, a = "");
          var b = $a(b), c = this.iterator("table", function (c) {
              var e = b, f;
              return Za("row", a, function (a) {
                  var b = Nb(a);
                  if (b !== null && !e) return [b];
                  f || (f = Ba(c, e));
                  if (b !== null && h.inArray(b, f) !== -1) return [b];
                  if (a === null || a === k || a === "") return f;
                  if (typeof a === "function") return h.map(f, function (b) {
                      var e = c.aoData[b];
                      return a(b, e._aData, e.nTr) ? b : null
                  });
                  b = Qb(ia(c.aoData, f, "nTr"));
                  if (a.nodeName) {
                      if (a._DT_RowIndex !== k) return [a._DT_RowIndex];
                      if (a._DT_CellIndex) return [a._DT_CellIndex.row];
                      b = h(a).closest("*[data-dt-row]");
                      return b.length ? [b.data("dt-row")] : []
                  }
                  if (typeof a === "string" && a.charAt(0) === "#") {
                      var i = c.aIds[a.replace(/^#/, "")];
                      if (i !== k) return [i.idx]
                  }
                  return h(b).filter(a).map(function () {
                      return this._DT_RowIndex
                  }).toArray()
              }, c, e)
          }, 1);
          c.selector.rows = a;
          c.selector.opts = b;
          return c
      });
      o("rows().nodes()", function () {
          return this.iterator("row", function (a,
                                                b) {
              return a.aoData[b].nTr || k
          }, 1)
      });
      o("rows().data()", function () {
          return this.iterator(!0, "rows", function (a, b) {
              return ia(a.aoData, b, "_aData")
          }, 1)
      });
      u("rows().cache()", "row().cache()", function (a) {
          return this.iterator("row", function (b, c) {
              var d = b.aoData[c];
              return "search" === a ? d._aFilterData : d._aSortData
          }, 1)
      });
      u("rows().invalidate()", "row().invalidate()", function (a) {
          return this.iterator("row", function (b, c) {
              ca(b, c, a)
          })
      });
      u("rows().indexes()", "row().index()", function () {
          return this.iterator("row", function (a,
                                                b) {
              return b
          }, 1)
      });
      u("rows().ids()", "row().id()", function (a) {
          for (var b = [], c = this.context, d = 0, e = c.length; d < e; d++) for (var f = 0, g = this[d].length; f < g; f++) {
              var h = c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);
              b.push((!0 === a ? "#" : "") + h)
          }
          return new s(c, b)
      });
      u("rows().remove()", "row().remove()", function () {
          var a = this;
          this.iterator("row", function (b, c, d) {
              var e = b.aoData, f = e[c], g, h, i, n, l;
              e.splice(c, 1);
              g = 0;
              for (h = e.length; g < h; g++) if (i = e[g], l = i.anCells, null !== i.nTr && (i.nTr._DT_RowIndex = g), null !== l) {
                  i = 0;
                  for (n = l.length; i <
                  n; i++) l[i]._DT_CellIndex.row = g
              }
              oa(b.aiDisplayMaster, c);
              oa(b.aiDisplay, c);
              oa(a[d], c, !1);
              0 < b._iRecordsDisplay && b._iRecordsDisplay--;
              Ra(b);
              c = b.rowIdFn(f._aData);
              c !== k && delete b.aIds[c]
          });
          this.iterator("table", function (a) {
              for (var c = 0, d = a.aoData.length; c < d; c++) a.aoData[c].idx = c
          });
          return this
      });
      o("rows.add()", function (a) {
          var b = this.iterator("table", function (b) {
              var c, f, g, h = [];
              f = 0;
              for (g = a.length; f < g; f++) c = a[f], c.nodeName && "TR" === c.nodeName.toUpperCase() ? h.push(ma(b, c)[0]) : h.push(M(b, c));
              return h
          }, 1), c = this.rows(-1);
          c.pop();
          h.merge(c, b);
          return c
      });
      o("row()", function (a, b) {
          return ab(this.rows(a, b))
      });
      o("row().data()", function (a) {
          var b = this.context;
          if (a === k) return b.length && this.length ? b[0].aoData[this[0]]._aData : k;
          b[0].aoData[this[0]]._aData = a;
          ca(b[0], this[0], "data");
          return this
      });
      o("row().node()", function () {
          var a = this.context;
          return a.length && this.length ? a[0].aoData[this[0]].nTr || null : null
      });
      o("row.add()", function (a) {
          a instanceof h && a.length && (a = a[0]);
          var b = this.iterator("table", function (b) {
              return a.nodeName &&
              "TR" === a.nodeName.toUpperCase() ? ma(b, a)[0] : M(b, a)
          });
          return this.row(b[0])
      });
      var bb = function (a, b) {
          var c = a.context;
          if (c.length && (c = c[0].aoData[b !== k ? b : a[0]]) && c._details) c._details.remove(), c._detailsShow = k, c._details = k
      }, Tb = function (a, b) {
          var c = a.context;
          if (c.length && a.length) {
              var d = c[0].aoData[a[0]];
              if (d._details) {
                  (d._detailsShow = b) ? d._details.insertAfter(d.nTr) : d._details.detach();
                  var e = c[0], f = new s(e), g = e.aoData;
                  f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");
                  0 < D(g,
                      "_details").length && (f.on("draw.dt.DT_details", function (a, b) {
                      e === b && f.rows({page: "current"}).eq(0).each(function (a) {
                          a = g[a];
                          a._detailsShow && a._details.insertAfter(a.nTr)
                      })
                  }), f.on("column-visibility.dt.DT_details", function (a, b) {
                      if (e === b) for (var c, d = aa(b), f = 0, h = g.length; f < h; f++) c = g[f], c._details && c._details.children("td[colspan]").attr("colspan", d)
                  }), f.on("destroy.dt.DT_details", function (a, b) {
                      if (e === b) for (var c = 0, d = g.length; c < d; c++) g[c]._details && bb(f, c)
                  }))
              }
          }
      };
      o("row().child()", function (a, b) {
          var c = this.context;
          if (a === k) return c.length && this.length ? c[0].aoData[this[0]]._details : k;
          if (!0 === a) this.child.show(); else if (!1 === a) bb(this); else if (c.length && this.length) {
              var d = c[0], c = c[0].aoData[this[0]], e = [], f = function (a, b) {
                  if (h.isArray(a) || a instanceof h) for (var c = 0, k = a.length; c < k; c++) f(a[c], b); else a.nodeName && "tr" === a.nodeName.toLowerCase() ? e.push(a) : (c = h("<tr><td/></tr>").addClass(b), h("td", c).addClass(b).html(a)[0].colSpan = aa(d), e.push(c[0]))
              };
              f(a, b);
              c._details && c._details.detach();
              c._details = h(e);
              c._detailsShow &&
              c._details.insertAfter(c.nTr)
          }
          return this
      });
      o(["row().child.show()", "row().child().show()"], function () {
          Tb(this, !0);
          return this
      });
      o(["row().child.hide()", "row().child().hide()"], function () {
          Tb(this, !1);
          return this
      });
      o(["row().child.remove()", "row().child().remove()"], function () {
          bb(this);
          return this
      });
      o("row().child.isShown()", function () {
          var a = this.context;
          return a.length && this.length ? a[0].aoData[this[0]]._detailsShow || !1 : !1
      });
      var bc = /^([^:]+):(name|visIdx|visible)$/, Ub = function (a, b, c, d, e) {
          for (var c =
              [], d = 0, f = e.length; d < f; d++) c.push(B(a, e[d], b));
          return c
      };
      o("columns()", function (a, b) {
          a === k ? a = "" : h.isPlainObject(a) && (b = a, a = "");
          var b = $a(b), c = this.iterator("table", function (c) {
              var e = a, f = b, g = c.aoColumns, j = D(g, "sName"), i = D(g, "nTh");
              return Za("column", e, function (a) {
                  var b = Nb(a);
                  if (a === "") return W(g.length);
                  if (b !== null) return [b >= 0 ? b : g.length + b];
                  if (typeof a === "function") {
                      var e = Ba(c, f);
                      return h.map(g, function (b, f) {
                          return a(f, Ub(c, f, 0, 0, e), i[f]) ? f : null
                      })
                  }
                  var k = typeof a === "string" ? a.match(bc) : "";
                  if (k) switch (k[2]) {
                      case "visIdx":
                      case "visible":
                          b =
                              parseInt(k[1], 10);
                          if (b < 0) {
                              var m = h.map(g, function (a, b) {
                                  return a.bVisible ? b : null
                              });
                              return [m[m.length + b]]
                          }
                          return [Z(c, b)];
                      case "name":
                          return h.map(j, function (a, b) {
                              return a === k[1] ? b : null
                          });
                      default:
                          return []
                  }
                  if (a.nodeName && a._DT_CellIndex) return [a._DT_CellIndex.column];
                  b = h(i).filter(a).map(function () {
                      return h.inArray(this, i)
                  }).toArray();
                  if (b.length || !a.nodeName) return b;
                  b = h(a).closest("*[data-dt-column]");
                  return b.length ? [b.data("dt-column")] : []
              }, c, f)
          }, 1);
          c.selector.cols = a;
          c.selector.opts = b;
          return c
      });
      u("columns().header()",
          "column().header()", function () {
              return this.iterator("column", function (a, b) {
                  return a.aoColumns[b].nTh
              }, 1)
          });
      u("columns().footer()", "column().footer()", function () {
          return this.iterator("column", function (a, b) {
              return a.aoColumns[b].nTf
          }, 1)
      });
      u("columns().data()", "column().data()", function () {
          return this.iterator("column-rows", Ub, 1)
      });
      u("columns().dataSrc()", "column().dataSrc()", function () {
          return this.iterator("column", function (a, b) {
              return a.aoColumns[b].mData
          }, 1)
      });
      u("columns().cache()", "column().cache()",
          function (a) {
              return this.iterator("column-rows", function (b, c, d, e, f) {
                  return ia(b.aoData, f, "search" === a ? "_aFilterData" : "_aSortData", c)
              }, 1)
          });
      u("columns().nodes()", "column().nodes()", function () {
          return this.iterator("column-rows", function (a, b, c, d, e) {
              return ia(a.aoData, e, "anCells", b)
          }, 1)
      });
      u("columns().visible()", "column().visible()", function (a, b) {
          var c = this.iterator("column", function (b, c) {
              if (a === k) return b.aoColumns[c].bVisible;
              var f = b.aoColumns, g = f[c], j = b.aoData, i, n, l;
              if (a !== k && g.bVisible !== a) {
                  if (a) {
                      var m =
                          h.inArray(!0, D(f, "bVisible"), c + 1);
                      i = 0;
                      for (n = j.length; i < n; i++) l = j[i].nTr, f = j[i].anCells, l && l.insertBefore(f[c], f[m] || null)
                  } else h(D(b.aoData, "anCells", c)).detach();
                  g.bVisible = a;
                  ea(b, b.aoHeader);
                  ea(b, b.aoFooter);
                  xa(b)
              }
          });
          a !== k && (this.iterator("column", function (c, e) {
              r(c, null, "column-visibility", [c, e, a, b])
          }), (b === k || b) && this.columns.adjust());
          return c
      });
      u("columns().indexes()", "column().index()", function (a) {
          return this.iterator("column", function (b, c) {
              return "visible" === a ? $(b, c) : c
          }, 1)
      });
      o("columns.adjust()",
          function () {
              return this.iterator("table", function (a) {
                  Y(a)
              }, 1)
          });
      o("column.index()", function (a, b) {
          if (0 !== this.context.length) {
              var c = this.context[0];
              if ("fromVisible" === a || "toData" === a) return Z(c, b);
              if ("fromData" === a || "toVisible" === a) return $(c, b)
          }
      });
      o("column()", function (a, b) {
          return ab(this.columns(a, b))
      });
      o("cells()", function (a, b, c) {
          h.isPlainObject(a) && (a.row === k ? (c = a, a = null) : (c = b, b = null));
          h.isPlainObject(b) && (c = b, b = null);
          if (null === b || b === k) return this.iterator("table", function (b) {
              var d = a, e = $a(c), f =
                      b.aoData, g = Ba(b, e), j = Qb(ia(f, g, "anCells")), i = h([].concat.apply([], j)), l,
                  n = b.aoColumns.length, m, o, u, s, r, v;
              return Za("cell", d, function (a) {
                  var c = typeof a === "function";
                  if (a === null || a === k || c) {
                      m = [];
                      o = 0;
                      for (u = g.length; o < u; o++) {
                          l = g[o];
                          for (s = 0; s < n; s++) {
                              r = {row: l, column: s};
                              if (c) {
                                  v = f[l];
                                  a(r, B(b, l, s), v.anCells ? v.anCells[s] : null) && m.push(r)
                              } else m.push(r)
                          }
                      }
                      return m
                  }
                  if (h.isPlainObject(a)) return [a];
                  c = i.filter(a).map(function (a, b) {
                      return {row: b._DT_CellIndex.row, column: b._DT_CellIndex.column}
                  }).toArray();
                  if (c.length ||
                      !a.nodeName) return c;
                  v = h(a).closest("*[data-dt-row]");
                  return v.length ? [{row: v.data("dt-row"), column: v.data("dt-column")}] : []
              }, b, e)
          });
          var d = this.columns(b, c), e = this.rows(a, c), f, g, j, i, n, l = this.iterator("table", function (a, b) {
              f = [];
              g = 0;
              for (j = e[b].length; g < j; g++) {
                  i = 0;
                  for (n = d[b].length; i < n; i++) f.push({row: e[b][g], column: d[b][i]})
              }
              return f
          }, 1);
          h.extend(l.selector, {cols: b, rows: a, opts: c});
          return l
      });
      u("cells().nodes()", "cell().node()", function () {
          return this.iterator("cell", function (a, b, c) {
              return (a = a.aoData[b]) &&
              a.anCells ? a.anCells[c] : k
          }, 1)
      });
      o("cells().data()", function () {
          return this.iterator("cell", function (a, b, c) {
              return B(a, b, c)
          }, 1)
      });
      u("cells().cache()", "cell().cache()", function (a) {
          a = "search" === a ? "_aFilterData" : "_aSortData";
          return this.iterator("cell", function (b, c, d) {
              return b.aoData[c][a][d]
          }, 1)
      });
      u("cells().render()", "cell().render()", function (a) {
          return this.iterator("cell", function (b, c, d) {
              return B(b, c, d, a)
          }, 1)
      });
      u("cells().indexes()", "cell().index()", function () {
          return this.iterator("cell", function (a,
                                                 b, c) {
              return {row: b, column: c, columnVisible: $(a, c)}
          }, 1)
      });
      u("cells().invalidate()", "cell().invalidate()", function (a) {
          return this.iterator("cell", function (b, c, d) {
              ca(b, c, a, d)
          })
      });
      o("cell()", function (a, b, c) {
          return ab(this.cells(a, b, c))
      });
      o("cell().data()", function (a) {
          var b = this.context, c = this[0];
          if (a === k) return b.length && c.length ? B(b[0], c[0].row, c[0].column) : k;
          ib(b[0], c[0].row, c[0].column, a);
          ca(b[0], c[0].row, "data", c[0].column);
          return this
      });
      o("order()", function (a, b) {
          var c = this.context;
          if (a === k) return 0 !==
          c.length ? c[0].aaSorting : k;
          "number" === typeof a ? a = [[a, b]] : a.length && !h.isArray(a[0]) && (a = Array.prototype.slice.call(arguments));
          return this.iterator("table", function (b) {
              b.aaSorting = a.slice()
          })
      });
      o("order.listener()", function (a, b, c) {
          return this.iterator("table", function (d) {
              La(d, a, b, c)
          })
      });
      o("order.fixed()", function (a) {
          if (!a) {
              var b = this.context, b = b.length ? b[0].aaSortingFixed : k;
              return h.isArray(b) ? {pre: b} : b
          }
          return this.iterator("table", function (b) {
              b.aaSortingFixed = h.extend(!0, {}, a)
          })
      });
      o(["columns().order()",
          "column().order()"], function (a) {
          var b = this;
          return this.iterator("table", function (c, d) {
              var e = [];
              h.each(b[d], function (b, c) {
                  e.push([c, a])
              });
              c.aaSorting = e
          })
      });
      o("search()", function (a, b, c, d) {
          var e = this.context;
          return a === k ? 0 !== e.length ? e[0].oPreviousSearch.sSearch : k : this.iterator("table", function (e) {
              e.oFeatures.bFilter && fa(e, h.extend({}, e.oPreviousSearch, {
                  sSearch: a + "",
                  bRegex: null === b ? !1 : b,
                  bSmart: null === c ? !0 : c,
                  bCaseInsensitive: null === d ? !0 : d
              }), 1)
          })
      });
      u("columns().search()", "column().search()", function (a,
                                                             b, c, d) {
          return this.iterator("column", function (e, f) {
              var g = e.aoPreSearchCols;
              if (a === k) return g[f].sSearch;
              e.oFeatures.bFilter && (h.extend(g[f], {
                  sSearch: a + "",
                  bRegex: null === b ? !1 : b,
                  bSmart: null === c ? !0 : c,
                  bCaseInsensitive: null === d ? !0 : d
              }), fa(e, e.oPreviousSearch, 1))
          })
      });
      o("state()", function () {
          return this.context.length ? this.context[0].oSavedState : null
      });
      o("state.clear()", function () {
          return this.iterator("table", function (a) {
              a.fnStateSaveCallback.call(a.oInstance, a, {})
          })
      });
      o("state.loaded()", function () {
          return this.context.length ?
              this.context[0].oLoadedState : null
      });
      o("state.save()", function () {
          return this.iterator("table", function (a) {
              xa(a)
          })
      });
      m.versionCheck = m.fnVersionCheck = function (a) {
          for (var b = m.version.split("."), a = a.split("."), c, d, e = 0, f = a.length; e < f; e++) if (c = parseInt(b[e], 10) || 0, d = parseInt(a[e], 10) || 0, c !== d) return c > d;
          return !0
      };
      m.isDataTable = m.fnIsDataTable = function (a) {
          var b = h(a).get(0), c = !1;
          if (a instanceof m.Api) return !0;
          h.each(m.settings, function (a, e) {
              var f = e.nScrollHead ? h("table", e.nScrollHead)[0] : null, g = e.nScrollFoot ?
                  h("table", e.nScrollFoot)[0] : null;
              if (e.nTable === b || f === b || g === b) c = !0
          });
          return c
      };
      m.tables = m.fnTables = function (a) {
          var b = !1;
          h.isPlainObject(a) && (b = a.api, a = a.visible);
          var c = h.map(m.settings, function (b) {
              if (!a || a && h(b.nTable).is(":visible")) return b.nTable
          });
          return b ? new s(c) : c
      };
      m.camelToHungarian = I;
      o("$()", function (a, b) {
          var c = this.rows(b).nodes(), c = h(c);
          return h([].concat(c.filter(a).toArray(), c.find(a).toArray()))
      });
      h.each(["on", "one", "off"], function (a, b) {
          o(b + "()", function () {
              var a = Array.prototype.slice.call(arguments);
              a[0] = h.map(a[0].split(/\s/), function (a) {
                  return !a.match(/\.dt\b/) ? a + ".dt" : a
              }).join(" ");
              var d = h(this.tables().nodes());
              d[b].apply(d, a);
              return this
          })
      });
      o("clear()", function () {
          return this.iterator("table", function (a) {
              na(a)
          })
      });
      o("settings()", function () {
          return new s(this.context, this.context)
      });
      o("init()", function () {
          var a = this.context;
          return a.length ? a[0].oInit : null
      });
      o("data()", function () {
          return this.iterator("table", function (a) {
              return D(a.aoData, "_aData")
          }).flatten()
      });
      o("destroy()", function (a) {
          a = a ||
              !1;
          return this.iterator("table", function (b) {
              var c = b.nTableWrapper.parentNode, d = b.oClasses, e = b.nTable, f = b.nTBody, g = b.nTHead, j = b.nTFoot,
                  i = h(e), f = h(f), k = h(b.nTableWrapper), l = h.map(b.aoData, function (a) {
                      return a.nTr
                  }), o;
              b.bDestroying = !0;
              r(b, "aoDestroyCallback", "destroy", [b]);
              a || (new s(b)).columns().visible(!0);
              k.off(".DT").find(":not(tbody *)").off(".DT");
              h(E).off(".DT-" + b.sInstance);
              e != g.parentNode && (i.children("thead").detach(), i.append(g));
              j && e != j.parentNode && (i.children("tfoot").detach(), i.append(j));
              b.aaSorting = [];
              b.aaSortingFixed = [];
              wa(b);
              h(l).removeClass(b.asStripeClasses.join(" "));
              h("th, td", g).removeClass(d.sSortable + " " + d.sSortableAsc + " " + d.sSortableDesc + " " + d.sSortableNone);
              f.children().detach();
              f.append(l);
              g = a ? "remove" : "detach";
              i[g]();
              k[g]();
              !a && c && (c.insertBefore(e, b.nTableReinsertBefore), i.css("width", b.sDestroyWidth).removeClass(d.sTable), (o = b.asDestroyStripes.length) && f.children().each(function (a) {
                  h(this).addClass(b.asDestroyStripes[a % o])
              }));
              c = h.inArray(b, m.settings);
              -1 !== c && m.settings.splice(c,
                  1)
          })
      });
      h.each(["column", "row", "cell"], function (a, b) {
          o(b + "s().every()", function (a) {
              var d = this.selector.opts, e = this;
              return this.iterator(b, function (f, g, h, i, n) {
                  a.call(e[b](g, "cell" === b ? h : d, "cell" === b ? d : k), g, h, i, n)
              })
          })
      });
      o("i18n()", function (a, b, c) {
          var d = this.context[0], a = Q(a)(d.oLanguage);
          a === k && (a = b);
          c !== k && h.isPlainObject(a) && (a = a[c] !== k ? a[c] : a._);
          return a.replace("%d", c)
      });
      m.version = "1.10.16";
      m.settings = [];
      m.models = {};
      m.models.oSearch = {bCaseInsensitive: !0, sSearch: "", bRegex: !1, bSmart: !0};
      m.models.oRow =
          {
              nTr: null,
              anCells: null,
              _aData: [],
              _aSortData: null,
              _aFilterData: null,
              _sFilterRow: null,
              _sRowStripe: "",
              src: null,
              idx: -1
          };
      m.models.oColumn = {
          idx: null,
          aDataSort: null,
          asSorting: null,
          bSearchable: null,
          bSortable: null,
          bVisible: null,
          _sManualType: null,
          _bAttrSrc: !1,
          fnCreatedCell: null,
          fnGetData: null,
          fnSetData: null,
          mData: null,
          mRender: null,
          nTh: null,
          nTf: null,
          sClass: null,
          sContentPadding: null,
          sDefaultContent: null,
          sName: null,
          sSortDataType: "std",
          sSortingClass: null,
          sSortingClassJUI: null,
          sTitle: null,
          sType: null,
          sWidth: null,
          sWidthOrig: null
      };
      m.defaults = {
          aaData: null,
          aaSorting: [[0, "asc"]],
          aaSortingFixed: [],
          ajax: null,
          aLengthMenu: [10, 25, 50, 100],
          aoColumns: null,
          aoColumnDefs: null,
          aoSearchCols: [],
          asStripeClasses: null,
          bAutoWidth: !0,
          bDeferRender: !1,
          bDestroy: !1,
          bFilter: !0,
          bInfo: !0,
          bLengthChange: !0,
          bPaginate: !0,
          bProcessing: !1,
          bRetrieve: !1,
          bScrollCollapse: !1,
          bServerSide: !1,
          bSort: !0,
          bSortMulti: !0,
          bSortCellsTop: !1,
          bSortClasses: !0,
          bStateSave: !1,
          fnCreatedRow: null,
          fnDrawCallback: null,
          fnFooterCallback: null,
          fnFormatNumber: function (a) {
              return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
                  this.oLanguage.sThousands)
          },
          fnHeaderCallback: null,
          fnInfoCallback: null,
          fnInitComplete: null,
          fnPreDrawCallback: null,
          fnRowCallback: null,
          fnServerData: null,
          fnServerParams: null,
          fnStateLoadCallback: function (a) {
              try {
                  return JSON.parse((-1 === a.iStateDuration ? sessionStorage : localStorage).getItem("DataTables_" + a.sInstance + "_" + location.pathname))
              } catch (b) {
              }
          },
          fnStateLoadParams: null,
          fnStateLoaded: null,
          fnStateSaveCallback: function (a, b) {
              try {
                  (-1 === a.iStateDuration ? sessionStorage : localStorage).setItem("DataTables_" + a.sInstance +
                      "_" + location.pathname, JSON.stringify(b))
              } catch (c) {
              }
          },
          fnStateSaveParams: null,
          iStateDuration: 7200,
          iDeferLoading: null,
          iDisplayLength: 10,
          iDisplayStart: 0,
          iTabIndex: 0,
          oClasses: {},
          oLanguage: {
              oAria: {
                  sSortAscending: ": activate to sort column ascending",
                  sSortDescending: ": activate to sort column descending"
              },
              oPaginate: {sFirst: "First", sLast: "Last", sNext: "Next", sPrevious: "Previous"},
              sEmptyTable: "No data available in table",
              sInfo: "Showing _START_ to _END_ of _TOTAL_ entries",
              sInfoEmpty: "Showing 0 to 0 of 0 entries",
              sInfoFiltered: "(filtered from _MAX_ total entries)",
              sInfoPostFix: "",
              sDecimal: "",
              sThousands: ",",
              sLengthMenu: "Show _MENU_ entries",
              sLoadingRecords: "Loading...",
              sProcessing: "Processing...",
              sSearch: "Search:",
              sSearchPlaceholder: "",
              sUrl: "",
              sZeroRecords: "No matching records found"
          },
          oSearch: h.extend({}, m.models.oSearch),
          sAjaxDataProp: "data",
          sAjaxSource: null,
          sDom: "lfrtip",
          searchDelay: null,
          sPaginationType: "simple_numbers",
          sScrollX: "",
          sScrollXInner: "",
          sScrollY: "",
          sServerMethod: "GET",
          renderer: null,
          rowId: "DT_RowId"
      };
      X(m.defaults);
      m.defaults.column = {
          aDataSort: null,
          iDataSort: -1,
          asSorting: ["asc", "desc"],
          bSearchable: !0,
          bSortable: !0,
          bVisible: !0,
          fnCreatedCell: null,
          mData: null,
          mRender: null,
          sCellType: "td",
          sClass: "",
          sContentPadding: "",
          sDefaultContent: null,
          sName: "",
          sSortDataType: "std",
          sTitle: null,
          sType: null,
          sWidth: null
      };
      X(m.defaults.column);
      m.models.oSettings = {
          oFeatures: {
              bAutoWidth: null,
              bDeferRender: null,
              bFilter: null,
              bInfo: null,
              bLengthChange: null,
              bPaginate: null,
              bProcessing: null,
              bServerSide: null,
              bSort: null,
              bSortMulti: null,
              bSortClasses: null,
              bStateSave: null
          },
          oScroll: {bCollapse: null, iBarWidth: 0, sX: null, sXInner: null, sY: null},
          oLanguage: {fnInfoCallback: null},
          oBrowser: {bScrollOversize: !1, bScrollbarLeft: !1, bBounding: !1, barWidth: 0},
          ajax: null,
          aanFeatures: [],
          aoData: [],
          aiDisplay: [],
          aiDisplayMaster: [],
          aIds: {},
          aoColumns: [],
          aoHeader: [],
          aoFooter: [],
          oPreviousSearch: {},
          aoPreSearchCols: [],
          aaSorting: null,
          aaSortingFixed: [],
          asStripeClasses: null,
          asDestroyStripes: [],
          sDestroyWidth: 0,
          aoRowCallback: [],
          aoHeaderCallback: [],
          aoFooterCallback: [],
          aoDrawCallback: [],
          aoRowCreatedCallback: [],
          aoPreDrawCallback: [],
          aoInitComplete: [],
          aoStateSaveParams: [],
          aoStateLoadParams: [],
          aoStateLoaded: [],
          sTableId: "",
          nTable: null,
          nTHead: null,
          nTFoot: null,
          nTBody: null,
          nTableWrapper: null,
          bDeferLoading: !1,
          bInitialised: !1,
          aoOpenRows: [],
          sDom: null,
          searchDelay: null,
          sPaginationType: "two_button",
          iStateDuration: 0,
          aoStateSave: [],
          aoStateLoad: [],
          oSavedState: null,
          oLoadedState: null,
          sAjaxSource: null,
          sAjaxDataProp: null,
          bAjaxDataGet: !0,
          jqXHR: null,
          json: k,
          oAjaxData: k,
          fnServerData: null,
          aoServerParams: [],
          sServerMethod: null,
          fnFormatNumber: null,
          aLengthMenu: null,
          iDraw: 0,
          bDrawing: !1,
          iDrawError: -1,
          _iDisplayLength: 10,
          _iDisplayStart: 0,
          _iRecordsTotal: 0,
          _iRecordsDisplay: 0,
          oClasses: {},
          bFiltered: !1,
          bSorted: !1,
          bSortCellsTop: null,
          oInit: null,
          aoDestroyCallback: [],
          fnRecordsTotal: function () {
              return "ssp" == y(this) ? 1 * this._iRecordsTotal : this.aiDisplayMaster.length
          },
          fnRecordsDisplay: function () {
              return "ssp" == y(this) ? 1 * this._iRecordsDisplay : this.aiDisplay.length
          },
          fnDisplayEnd: function () {
              var a = this._iDisplayLength,
                  b = this._iDisplayStart, c = b + a, d = this.aiDisplay.length, e = this.oFeatures, f = e.bPaginate;
              return e.bServerSide ? !1 === f || -1 === a ? b + d : Math.min(b + a, this._iRecordsDisplay) : !f || c > d || -1 === a ? d : c
          },
          oInstance: null,
          sInstance: null,
          iTabIndex: 0,
          nScrollHead: null,
          nScrollFoot: null,
          aLastSort: [],
          oPlugins: {},
          rowIdFn: null,
          rowId: null
      };
      m.ext = x = {
          buttons: {},
          classes: {},
          build: "bs4/dt-1.10.16/af-2.2.2/b-1.5.1/cr-1.4.1/fc-3.2.4/fh-3.1.3/kt-2.3.2/r-2.2.1/rg-1.0.2/rr-1.2.3/sc-1.4.4/sl-1.2.5",
          errMode: "alert",
          feature: [],
          search: [],
          selector: {cell: [], column: [], row: []},
          internal: {},
          legacy: {ajax: null},
          pager: {},
          renderer: {pageButton: {}, header: {}},
          order: {},
          type: {detect: [], search: {}, order: {}},
          _unique: 0,
          fnVersionCheck: m.fnVersionCheck,
          iApiIndex: 0,
          oJUIClasses: {},
          sVersion: m.version
      };
      h.extend(x, {
          afnFiltering: x.search,
          aTypes: x.type.detect,
          ofnSearch: x.type.search,
          oSort: x.type.order,
          afnSortData: x.order,
          aoFeatures: x.feature,
          oApi: x.internal,
          oStdClasses: x.classes,
          oPagination: x.pager
      });
      h.extend(m.ext.classes, {
          sTable: "dataTable",
          sNoFooter: "no-footer",
          sPageButton: "paginate_button",
          sPageButtonActive: "current",
          sPageButtonDisabled: "disabled",
          sStripeOdd: "odd",
          sStripeEven: "even",
          sRowEmpty: "dataTables_empty",
          sWrapper: "dataTables_wrapper",
          sFilter: "dataTables_filter",
          sInfo: "dataTables_info",
          sPaging: "dataTables_paginate paging_",
          sLength: "dataTables_length",
          sProcessing: "dataTables_processing",
          sSortAsc: "sorting_asc",
          sSortDesc: "sorting_desc",
          sSortable: "sorting",
          sSortableAsc: "sorting_asc_disabled",
          sSortableDesc: "sorting_desc_disabled",
          sSortableNone: "sorting_disabled",
          sSortColumn: "sorting_",
          sFilterInput: "",
          sLengthSelect: "",
          sScrollWrapper: "dataTables_scroll",
          sScrollHead: "dataTables_scrollHead",
          sScrollHeadInner: "dataTables_scrollHeadInner",
          sScrollBody: "dataTables_scrollBody",
          sScrollFoot: "dataTables_scrollFoot",
          sScrollFootInner: "dataTables_scrollFootInner",
          sHeaderTH: "",
          sFooterTH: "",
          sSortJUIAsc: "",
          sSortJUIDesc: "",
          sSortJUI: "",
          sSortJUIAscAllowed: "",
          sSortJUIDescAllowed: "",
          sSortJUIWrapper: "",
          sSortIcon: "",
          sJUIHeader: "",
          sJUIFooter: ""
      });
      var Kb = m.ext.pager;
      h.extend(Kb, {
          simple: function () {
              return ["previous", "next"]
          }, full: function () {
              return ["first", "previous", "next", "last"]
          }, numbers: function (a, b) {
              return [ha(a,
                  b)]
          }, simple_numbers: function (a, b) {
              return ["previous", ha(a, b), "next"]
          }, full_numbers: function (a, b) {
              return ["first", "previous", ha(a, b), "next", "last"]
          }, first_last_numbers: function (a, b) {
              return ["first", ha(a, b), "last"]
          }, _numbers: ha, numbers_length: 7
      });
      h.extend(!0, m.ext.renderer, {
          pageButton: {
              _: function (a, b, c, d, e, f) {
                  var g = a.oClasses, j = a.oLanguage.oPaginate, i = a.oLanguage.oAria.paginate || {}, n, l, m = 0,
                      o = function (b, d) {
                          var k, s, u, r, v = function (b) {
                              Sa(a, b.data.action, true)
                          };
                          k = 0;
                          for (s = d.length; k < s; k++) {
                              r = d[k];
                              if (h.isArray(r)) {
                                  u =
                                      h("<" + (r.DT_el || "div") + "/>").appendTo(b);
                                  o(u, r)
                              } else {
                                  n = null;
                                  l = "";
                                  switch (r) {
                                      case "ellipsis":
                                          b.append('<span class="ellipsis">&#x2026;</span>');
                                          break;
                                      case "first":
                                          n = j.sFirst;
                                          l = r + (e > 0 ? "" : " " + g.sPageButtonDisabled);
                                          break;
                                      case "previous":
                                          n = j.sPrevious;
                                          l = r + (e > 0 ? "" : " " + g.sPageButtonDisabled);
                                          break;
                                      case "next":
                                          n = j.sNext;
                                          l = r + (e < f - 1 ? "" : " " + g.sPageButtonDisabled);
                                          break;
                                      case "last":
                                          n = j.sLast;
                                          l = r + (e < f - 1 ? "" : " " + g.sPageButtonDisabled);
                                          break;
                                      default:
                                          n = r + 1;
                                          l = e === r ? g.sPageButtonActive : ""
                                  }
                                  if (n !== null) {
                                      u = h("<a>", {
                                          "class": g.sPageButton +
                                              " " + l,
                                          "aria-controls": a.sTableId,
                                          "aria-label": i[r],
                                          "data-dt-idx": m,
                                          tabindex: a.iTabIndex,
                                          id: c === 0 && typeof r === "string" ? a.sTableId + "_" + r : null
                                      }).html(n).appendTo(b);
                                      Va(u, {action: r}, v);
                                      m++
                                  }
                              }
                          }
                      }, s;
                  try {
                      s = h(b).find(G.activeElement).data("dt-idx")
                  } catch (u) {
                  }
                  o(h(b).empty(), d);
                  s !== k && h(b).find("[data-dt-idx=" + s + "]").focus()
              }
          }
      });
      h.extend(m.ext.type.detect, [function (a, b) {
          var c = b.oLanguage.sDecimal;
          return Ya(a, c) ? "num" + c : null
      }, function (a) {
          if (a && !(a instanceof Date) && !Zb.test(a)) return null;
          var b = Date.parse(a);
          return null !== b && !isNaN(b) || L(a) ? "date" : null
      }, function (a, b) {
          var c = b.oLanguage.sDecimal;
          return Ya(a, c, !0) ? "num-fmt" + c : null
      }, function (a, b) {
          var c = b.oLanguage.sDecimal;
          return Pb(a, c) ? "html-num" + c : null
      }, function (a, b) {
          var c = b.oLanguage.sDecimal;
          return Pb(a, c, !0) ? "html-num-fmt" + c : null
      }, function (a) {
          return L(a) || "string" === typeof a && -1 !== a.indexOf("<") ? "html" : null
      }]);
      h.extend(m.ext.type.search, {
          html: function (a) {
              return L(a) ? a : "string" === typeof a ? a.replace(Mb, " ").replace(Aa, "") : ""
          }, string: function (a) {
              return L(a) ?
                  a : "string" === typeof a ? a.replace(Mb, " ") : a
          }
      });
      var za = function (a, b, c, d) {
          if (0 !== a && (!a || "-" === a)) return -Infinity;
          b && (a = Ob(a, b));
          a.replace && (c && (a = a.replace(c, "")), d && (a = a.replace(d, "")));
          return 1 * a
      };
      h.extend(x.type.order, {
          "date-pre": function (a) {
              return Date.parse(a) || -Infinity
          }, "html-pre": function (a) {
              return L(a) ? "" : a.replace ? a.replace(/<.*?>/g, "").toLowerCase() : a + ""
          }, "string-pre": function (a) {
              return L(a) ? "" : "string" === typeof a ? a.toLowerCase() : !a.toString ? "" : a.toString()
          }, "string-asc": function (a, b) {
              return a <
              b ? -1 : a > b ? 1 : 0
          }, "string-desc": function (a, b) {
              return a < b ? 1 : a > b ? -1 : 0
          }
      });
      cb("");
      h.extend(!0, m.ext.renderer, {
          header: {
              _: function (a, b, c, d) {
                  h(a.nTable).on("order.dt.DT", function (e, f, g, h) {
                      if (a === f) {
                          e = c.idx;
                          b.removeClass(c.sSortingClass + " " + d.sSortAsc + " " + d.sSortDesc).addClass(h[e] == "asc" ? d.sSortAsc : h[e] == "desc" ? d.sSortDesc : c.sSortingClass)
                      }
                  })
              }, jqueryui: function (a, b, c, d) {
                  h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon + " " + c.sSortingClassJUI)).appendTo(b);
                  h(a.nTable).on("order.dt.DT", function (e, f, g, h) {
                      if (a === f) {
                          e = c.idx;
                          b.removeClass(d.sSortAsc + " " + d.sSortDesc).addClass(h[e] == "asc" ? d.sSortAsc : h[e] == "desc" ? d.sSortDesc : c.sSortingClass);
                          b.find("span." + d.sSortIcon).removeClass(d.sSortJUIAsc + " " + d.sSortJUIDesc + " " + d.sSortJUI + " " + d.sSortJUIAscAllowed + " " + d.sSortJUIDescAllowed).addClass(h[e] == "asc" ? d.sSortJUIAsc : h[e] == "desc" ? d.sSortJUIDesc : c.sSortingClassJUI)
                      }
                  })
              }
          }
      });
      var Vb = function (a) {
          return "string" === typeof a ? a.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g,
              "&quot;") : a
      };
      m.render = {
          number: function (a, b, c, d, e) {
              return {
                  display: function (f) {
                      if ("number" !== typeof f && "string" !== typeof f) return f;
                      var g = 0 > f ? "-" : "", h = parseFloat(f);
                      if (isNaN(h)) return Vb(f);
                      h = h.toFixed(c);
                      f = Math.abs(h);
                      h = parseInt(f, 10);
                      f = c ? b + (f - h).toFixed(c).substring(2) : "";
                      return g + (d || "") + h.toString().replace(/\B(?=(\d{3})+(?!\d))/g, a) + f + (e || "")
                  }
              }
          }, text: function () {
              return {display: Vb}
          }
      };
      h.extend(m.ext.internal, {
          _fnExternApiFunc: Lb,
          _fnBuildAjax: sa,
          _fnAjaxUpdate: kb,
          _fnAjaxParameters: tb,
          _fnAjaxUpdateDraw: ub,
          _fnAjaxDataSrc: ta,
          _fnAddColumn: Da,
          _fnColumnOptions: ja,
          _fnAdjustColumnSizing: Y,
          _fnVisibleToColumnIndex: Z,
          _fnColumnIndexToVisible: $,
          _fnVisbleColumns: aa,
          _fnGetColumns: la,
          _fnColumnTypes: Fa,
          _fnApplyColumnDefs: hb,
          _fnHungarianMap: X,
          _fnCamelToHungarian: I,
          _fnLanguageCompat: Ca,
          _fnBrowserDetect: fb,
          _fnAddData: M,
          _fnAddTr: ma,
          _fnNodeToDataIndex: function (a, b) {
              return b._DT_RowIndex !== k ? b._DT_RowIndex : null
          },
          _fnNodeToColumnIndex: function (a, b, c) {
              return h.inArray(c, a.aoData[b].anCells)
          },
          _fnGetCellData: B,
          _fnSetCellData: ib,
          _fnSplitObjNotation: Ia,
          _fnGetObjectDataFn: Q,
          _fnSetObjectDataFn: R,
          _fnGetDataMaster: Ja,
          _fnClearTable: na,
          _fnDeleteIndex: oa,
          _fnInvalidate: ca,
          _fnGetRowElements: Ha,
          _fnCreateTr: Ga,
          _fnBuildHead: jb,
          _fnDrawHead: ea,
          _fnDraw: N,
          _fnReDraw: S,
          _fnAddOptionsHtml: mb,
          _fnDetectHeader: da,
          _fnGetUniqueThs: ra,
          _fnFeatureHtmlFilter: ob,
          _fnFilterComplete: fa,
          _fnFilterCustom: xb,
          _fnFilterColumn: wb,
          _fnFilter: vb,
          _fnFilterCreateSearch: Oa,
          _fnEscapeRegex: Pa,
          _fnFilterData: yb,
          _fnFeatureHtmlInfo: rb,
          _fnUpdateInfo: Bb,
          _fnInfoMacros: Cb,
          _fnInitialise: ga,
          _fnInitComplete: ua,
          _fnLengthChange: Qa,
          _fnFeatureHtmlLength: nb,
          _fnFeatureHtmlPaginate: sb,
          _fnPageChange: Sa,
          _fnFeatureHtmlProcessing: pb,
          _fnProcessingDisplay: C,
          _fnFeatureHtmlTable: qb,
          _fnScrollDraw: ka,
          _fnApplyToChildren: H,
          _fnCalculateColumnWidths: Ea,
          _fnThrottle: Na,
          _fnConvertToWidth: Db,
          _fnGetWidestNode: Eb,
          _fnGetMaxLenString: Fb,
          _fnStringToCss: v,
          _fnSortFlatten: V,
          _fnSort: lb,
          _fnSortAria: Hb,
          _fnSortListener: Ua,
          _fnSortAttachListener: La,
          _fnSortingClasses: wa,
          _fnSortData: Gb,
          _fnSaveState: xa,
          _fnLoadState: Ib,
          _fnSettingsFromNode: ya,
          _fnLog: J,
          _fnMap: F,
          _fnBindAction: Va,
          _fnCallbackReg: z,
          _fnCallbackFire: r,
          _fnLengthOverflow: Ra,
          _fnRenderer: Ma,
          _fnDataSource: y,
          _fnRowAttributes: Ka,
          _fnCalculateEnd: function () {
          }
      });
      h.fn.dataTable = m;
      m.$ = h;
      h.fn.dataTableSettings = m.settings;
      h.fn.dataTableExt = m.ext;
      h.fn.DataTable = function (a) {
          return h(this).dataTable(a).api()
      };
      h.each(m, function (a, b) {
          h.fn.DataTable[a] = b
      });
      return h.fn.dataTable
  });
  
  
  /*!
   DataTables Bootstrap 3 integration
   ©2011-2015 SpryMedia Ltd - datatables.net/license
  */
  (function (b) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (a) {
          return b(a, window, document)
      }) : "object" === typeof exports ? module.exports = function (a, d) {
          a || (a = window);
          if (!d || !d.fn.dataTable) d = require("datatables.net")(a, d).$;
          return b(d, a, a.document)
      } : b(jQuery, window, document)
  })(function (b, a, d, m) {
      var f = b.fn.dataTable;
      b.extend(!0, f.defaults, {
          dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
          renderer: "bootstrap"
      });
      b.extend(f.ext.classes, {
          sWrapper: "dataTables_wrapper container-fluid dt-bootstrap4",
          sFilterInput: "form-control form-control-sm",
          sLengthSelect: "form-control form-control-sm",
          sProcessing: "dataTables_processing card",
          sPageButton: "paginate_button page-item"
      });
      f.ext.renderer.pageButton.bootstrap = function (a, h, r, s, j, n) {
          var o = new f.Api(a), t = a.oClasses, k = a.oLanguage.oPaginate, u = a.oLanguage.oAria.paginate || {}, e, g,
              p = 0, q = function (d, f) {
                  var l, h, i, c, m = function (a) {
                      a.preventDefault();
                      !b(a.currentTarget).hasClass("disabled") &&
                      o.page() != a.data.action && o.page(a.data.action).draw("page")
                  };
                  l = 0;
                  for (h = f.length; l < h; l++) if (c = f[l], b.isArray(c)) q(d, c); else {
                      g = e = "";
                      switch (c) {
                          case "ellipsis":
                              e = "&#x2026;";
                              g = "disabled";
                              break;
                          case "first":
                              e = k.sFirst;
                              g = c + (0 < j ? "" : " disabled");
                              break;
                          case "previous":
                              e = k.sPrevious;
                              g = c + (0 < j ? "" : " disabled");
                              break;
                          case "next":
                              e = k.sNext;
                              g = c + (j < n - 1 ? "" : " disabled");
                              break;
                          case "last":
                              e = k.sLast;
                              g = c + (j < n - 1 ? "" : " disabled");
                              break;
                          default:
                              e = c + 1, g = j === c ? "active" : ""
                      }
                      e && (i = b("<li>", {
                          "class": t.sPageButton + " " + g, id: 0 === r &&
                          "string" === typeof c ? a.sTableId + "_" + c : null
                      }).append(b("<a>", {
                          href: "#",
                          "aria-controls": a.sTableId,
                          "aria-label": u[c],
                          "data-dt-idx": p,
                          tabindex: a.iTabIndex,
                          "class": "page-link"
                      }).html(e)).appendTo(d), a.oApi._fnBindAction(i, {action: c}, m), p++)
                  }
              }, i;
          try {
              i = b(h).find(d.activeElement).data("dt-idx")
          } catch (v) {
          }
          q(b(h).empty().html('<ul class="pagination"/>').children("ul"), s);
          i !== m && b(h).find("[data-dt-idx=" + i + "]").focus()
      };
      return f
  });
  
  
  /*!
   AutoFill 2.2.2
   ©2008-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (e) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (l) {
          return e(l, window, document)
      }) : "object" === typeof exports ? module.exports = function (l, i) {
          l || (l = window);
          if (!i || !i.fn.dataTable) i = require("datatables.net")(l, i).$;
          return e(i, l, l.document)
      } : e(jQuery, window, document)
  })(function (e, l, i, q) {
      var k = e.fn.dataTable, p = 0, j = function (c, b) {
          if (!k.versionCheck || !k.versionCheck("1.10.8")) throw"Warning: AutoFill requires DataTables 1.10.8 or greater";
          this.c = e.extend(!0, {}, k.defaults.autoFill,
              j.defaults, b);
          this.s = {
              dt: new k.Api(c),
              namespace: ".autoFill" + p++,
              scroll: {},
              scrollInterval: null,
              handle: {height: 0, width: 0},
              enabled: !1
          };
          this.dom = {
              handle: e('<div class="dt-autofill-handle"/>'),
              select: {
                  top: e('<div class="dt-autofill-select top"/>'),
                  right: e('<div class="dt-autofill-select right"/>'),
                  bottom: e('<div class="dt-autofill-select bottom"/>'),
                  left: e('<div class="dt-autofill-select left"/>')
              },
              background: e('<div class="dt-autofill-background"/>'),
              list: e('<div class="dt-autofill-list">' + this.s.dt.i18n("autoFill.info",
                  "") + "<ul/></div>"),
              dtScroll: null,
              offsetParent: null
          };
          this._constructor()
      };
      e.extend(j.prototype, {
          enabled: function () {
              return this.s.enabled
          }, enable: function (c) {
              var b = this;
              if (!1 === c) return this.disable();
              this.s.enabled = !0;
              this._focusListener();
              this.dom.handle.on("mousedown", function (a) {
                  b._mousedown(a);
                  return !1
              });
              return this
          }, disable: function () {
              this.s.enabled = !1;
              this._focusListenerRemove();
              return this
          }, _constructor: function () {
              var c = this, b = this.s.dt, a = e("div.dataTables_scrollBody", this.s.dt.table().container());
              b.settings()[0].autoFill = this;
              a.length && (this.dom.dtScroll = a, "static" === a.css("position") && a.css("position", "relative"));
              !1 !== this.c.enable && this.enable();
              b.on("destroy.autoFill", function () {
                  c._focusListenerRemove()
              })
          }, _attach: function (c) {
              var b = this.s.dt, a = b.cell(c).index(), d = this.dom.handle, f = this.s.handle;
              if (!a || -1 === b.columns(this.c.columns).indexes().indexOf(a.column)) this._detach(); else {
                  this.dom.offsetParent || (this.dom.offsetParent = e(b.table().node()).offsetParent());
                  if (!f.height || !f.width) d.appendTo("body"),
                      f.height = d.outerHeight(), f.width = d.outerWidth();
                  b = this._getPosition(c, this.dom.offsetParent);
                  this.dom.attachedTo = c;
                  d.css({
                      top: b.top + c.offsetHeight - f.height,
                      left: b.left + c.offsetWidth - f.width
                  }).appendTo(this.dom.offsetParent)
              }
          }, _actionSelector: function (c) {
              var b = this, a = this.s.dt, d = j.actions, f = [];
              e.each(d, function (b, d) {
                  d.available(a, c) && f.push(b)
              });
              if (1 === f.length && !1 === this.c.alwaysAsk) {
                  var h = d[f[0]].execute(a, c);
                  this._update(h, c)
              } else {
                  var g = this.dom.list.children("ul").empty();
                  f.push("cancel");
                  e.each(f,
                      function (f, h) {
                          g.append(e("<li/>").append('<div class="dt-autofill-question">' + d[h].option(a, c) + "<div>").append(e('<div class="dt-autofill-button">').append(e('<button class="' + j.classes.btn + '">' + a.i18n("autoFill.button", "&gt;") + "</button>").on("click", function () {
                              var f = d[h].execute(a, c, e(this).closest("li"));
                              b._update(f, c);
                              b.dom.background.remove();
                              b.dom.list.remove()
                          }))))
                      });
                  this.dom.background.appendTo("body");
                  this.dom.list.appendTo("body");
                  this.dom.list.css("margin-top", -1 * (this.dom.list.outerHeight() /
                      2))
              }
          }, _detach: function () {
              this.dom.attachedTo = null;
              this.dom.handle.detach()
          }, _drawSelection: function (c) {
              var b = this.s.dt, a = this.s.start, d = e(this.dom.start), f = e(c),
                  h = {row: b.rows({page: "current"}).nodes().indexOf(f.parent()[0]), column: f.index()},
                  c = b.column.index("toData", h.column);
              if (b.cell(f).any() && -1 !== b.columns(this.c.columns).indexes().indexOf(c)) {
                  this.s.end = h;
                  var g, b = a.row < h.row ? d : f;
                  g = a.row < h.row ? f : d;
                  c = a.column < h.column ? d : f;
                  d = a.column < h.column ? f : d;
                  b = this._getPosition(b).top;
                  c = this._getPosition(c).left;
                  a = this._getPosition(g).top + g.outerHeight() - b;
                  d = this._getPosition(d).left + d.outerWidth() - c;
                  f = this.dom.select;
                  f.top.css({top: b, left: c, width: d});
                  f.left.css({top: b, left: c, height: a});
                  f.bottom.css({top: b + a, left: c, width: d});
                  f.right.css({top: b, left: c + d, height: a})
              }
          }, _editor: function (c) {
              var b = this.s.dt, a = this.c.editor;
              if (a) {
                  for (var d = {}, f = [], e = a.fields(), g = 0, i = c.length; g < i; g++) for (var j = 0, l = c[g].length; j < l; j++) {
                      var o = c[g][j], k = b.settings()[0].aoColumns[o.index.column], n = k.editField;
                      if (n === q) for (var k = k.mData,
                                            m = 0, p = e.length; m < p; m++) {
                          var r = a.field(e[m]);
                          if (r.dataSrc() === k) {
                              n = r.name();
                              break
                          }
                      }
                      if (!n) throw"Could not automatically determine field data. Please see https://datatables.net/tn/11";
                      d[n] || (d[n] = {});
                      k = b.row(o.index.row).id();
                      d[n][k] = o.set;
                      f.push(o.index)
                  }
                  a.bubble(f, !1).multiSet(d).submit()
              }
          }, _emitEvent: function (c, b) {
              this.s.dt.iterator("table", function (a) {
                  e(a.nTable).triggerHandler(c + ".dt", b)
              })
          }, _focusListener: function () {
              var c = this, b = this.s.dt, a = this.s.namespace,
                  d = null !== this.c.focus ? this.c.focus : b.init().keys ||
                  b.settings()[0].keytable ? "focus" : "hover";
              if ("focus" === d) b.on("key-focus.autoFill", function (b, a, d) {
                  c._attach(d.node())
              }).on("key-blur.autoFill", function () {
                  c._detach()
              }); else if ("click" === d) e(b.table().body()).on("click" + a, "td, th", function () {
                  c._attach(this)
              }), e(i.body).on("click" + a, function (a) {
                  e(a.target).parents().filter(b.table().body()).length || c._detach()
              }); else e(b.table().body()).on("mouseenter" + a, "td, th", function () {
                  c._attach(this)
              }).on("mouseleave" + a, function (b) {
                  e(b.relatedTarget).hasClass("dt-autofill-handle") ||
                  c._detach()
              })
          }, _focusListenerRemove: function () {
              var c = this.s.dt;
              c.off(".autoFill");
              e(c.table().body()).off(this.s.namespace);
              e(i.body).off(this.s.namespace)
          }, _getPosition: function (c, b) {
              var a = e(c), d, f, h = 0, g = 0;
              b || (b = e(this.s.dt.table().node()).offsetParent());
              do {
                  f = a.position();
                  d = a.offsetParent();
                  h += f.top + d.scrollTop();
                  g += f.left + d.scrollLeft();
                  if ("body" === a.get(0).nodeName.toLowerCase()) break;
                  a = d
              } while (d.get(0) !== b.get(0));
              return {top: h, left: g}
          }, _mousedown: function (c) {
              var b = this, a = this.s.dt;
              this.dom.start =
                  this.dom.attachedTo;
              this.s.start = {
                  row: a.rows({page: "current"}).nodes().indexOf(e(this.dom.start).parent()[0]),
                  column: e(this.dom.start).index()
              };
              e(i.body).on("mousemove.autoFill", function (a) {
                  b._mousemove(a)
              }).on("mouseup.autoFill", function (a) {
                  b._mouseup(a)
              });
              var d = this.dom.select, a = e(a.table().node()).offsetParent();
              d.top.appendTo(a);
              d.left.appendTo(a);
              d.right.appendTo(a);
              d.bottom.appendTo(a);
              this._drawSelection(this.dom.start, c);
              this.dom.handle.css("display", "none");
              c = this.dom.dtScroll;
              this.s.scroll =
                  {
                      windowHeight: e(l).height(),
                      windowWidth: e(l).width(),
                      dtTop: c ? c.offset().top : null,
                      dtLeft: c ? c.offset().left : null,
                      dtHeight: c ? c.outerHeight() : null,
                      dtWidth: c ? c.outerWidth() : null
                  }
          }, _mousemove: function (c) {
              var b = c.target.nodeName.toLowerCase();
              "td" !== b && "th" !== b || (this._drawSelection(c.target, c), this._shiftScroll(c))
          }, _mouseup: function () {
              e(i.body).off(".autoFill");
              var c = this.s.dt, b = this.dom.select;
              b.top.remove();
              b.left.remove();
              b.right.remove();
              b.bottom.remove();
              this.dom.handle.css("display", "block");
              var b =
                  this.s.start, a = this.s.end;
              if (!(b.row === a.row && b.column === a.column)) {
                  for (var d = this._range(b.row, a.row), b = this._range(b.column, a.column), a = [], f = c.settings()[0], h = f.aoColumns, g = 0; g < d.length; g++) a.push(e.map(b, function (a) {
                      var a = c.cell(":eq(" + d[g] + ")", a + ":visible", {page: "current"}), b = a.data(), e = a.index(),
                          i = h[e.column].editField;
                      i !== q && (b = f.oApi._fnGetObjectDataFn(i)(c.row(e.row).data()));
                      return {cell: a, data: b, label: a.data(), index: e}
                  }));
                  this._actionSelector(a);
                  clearInterval(this.s.scrollInterval);
                  this.s.scrollInterval =
                      null
              }
          }, _range: function (c, b) {
              var a = [], d;
              if (c <= b) for (d = c; d <= b; d++) a.push(d); else for (d = c; d >= b; d--) a.push(d);
              return a
          }, _shiftScroll: function (c) {
              var b = this, a = this.s.scroll, d = !1, f = c.pageY - i.body.scrollTop, e = c.pageX - i.body.scrollLeft, g,
                  j, k, l;
              65 > f ? g = -5 : f > a.windowHeight - 65 && (g = 5);
              65 > e ? j = -5 : e > a.windowWidth - 65 && (j = 5);
              null !== a.dtTop && c.pageY < a.dtTop + 65 ? k = -5 : null !== a.dtTop && c.pageY > a.dtTop + a.dtHeight - 65 && (k = 5);
              null !== a.dtLeft && c.pageX < a.dtLeft + 65 ? l = -5 : null !== a.dtLeft && c.pageX > a.dtLeft + a.dtWidth - 65 && (l = 5);
              g ||
              j || k || l ? (a.windowVert = g, a.windowHoriz = j, a.dtVert = k, a.dtHoriz = l, d = !0) : this.s.scrollInterval && (clearInterval(this.s.scrollInterval), this.s.scrollInterval = null);
              !this.s.scrollInterval && d && (this.s.scrollInterval = setInterval(function () {
                      if (a.windowVert) i.body.scrollTop = i.body.scrollTop + a.windowVert;
                      if (a.windowHoriz) i.body.scrollLeft = i.body.scrollLeft + a.windowHoriz;
                      if (a.dtVert || a.dtHoriz) {
                          var c = b.dom.dtScroll[0];
                          if (a.dtVert) c.scrollTop = c.scrollTop + a.dtVert;
                          if (a.dtHoriz) c.scrollLeft = c.scrollLeft + a.dtHoriz
                      }
                  },
                  20))
          }, _update: function (c, b) {
              if (!1 !== c) {
                  var a = this.s.dt, d;
                  this._emitEvent("preAutoFill", [a, b]);
                  this._editor(b);
                  if (null !== this.c.update ? this.c.update : !this.c.editor) {
                      for (var f = 0, e = b.length; f < e; f++) for (var g = 0, i = b[f].length; g < i; g++) d = b[f][g], d.cell.data(d.set);
                      a.draw(!1)
                  }
                  this._emitEvent("autoFill", [a, b])
              }
          }
      });
      j.actions = {
          increment: {
              available: function (c, b) {
                  return e.isNumeric(b[0][0].label)
              }, option: function (c) {
                  return c.i18n("autoFill.increment", 'Increment / decrement each cell by: <input type="number" value="1">')
              },
              execute: function (c, b, a) {
                  for (var c = 1 * b[0][0].data, a = 1 * e("input", a).val(), d = 0, f = b.length; d < f; d++) for (var h = 0, g = b[d].length; h < g; h++) b[d][h].set = c, c += a
              }
          }, fill: {
              available: function () {
                  return !0
              }, option: function (c, b) {
                  return c.i18n("autoFill.fill", "Fill all cells with <i>" + b[0][0].label + "</i>")
              }, execute: function (c, b) {
                  for (var a = b[0][0].data, d = 0, e = b.length; d < e; d++) for (var h = 0, g = b[d].length; h < g; h++) b[d][h].set = a
              }
          }, fillHorizontal: {
              available: function (c, b) {
                  return 1 < b.length && 1 < b[0].length
              }, option: function (c) {
                  return c.i18n("autoFill.fillHorizontal",
                      "Fill cells horizontally")
              }, execute: function (c, b) {
                  for (var a = 0, d = b.length; a < d; a++) for (var e = 0, h = b[a].length; e < h; e++) b[a][e].set = b[a][0].data
              }
          }, fillVertical: {
              available: function (c, b) {
                  return 1 < b.length && 1 < b[0].length
              }, option: function (c) {
                  return c.i18n("autoFill.fillVertical", "Fill cells vertically")
              }, execute: function (c, b) {
                  for (var a = 0, d = b.length; a < d; a++) for (var e = 0, h = b[a].length; e < h; e++) b[a][e].set = b[0][e].data
              }
          }, cancel: {
              available: function () {
                  return !1
              }, option: function (c) {
                  return c.i18n("autoFill.cancel",
                      "Cancel")
              }, execute: function () {
                  return !1
              }
          }
      };
      j.version = "2.2.2";
      j.defaults = {alwaysAsk: !1, focus: null, columns: "", enable: !0, update: null, editor: null};
      j.classes = {btn: "btn"};
      var m = e.fn.dataTable.Api;
      m.register("autoFill()", function () {
          return this
      });
      m.register("autoFill().enabled()", function () {
          var c = this.context[0];
          return c.autoFill ? c.autoFill.enabled() : !1
      });
      m.register("autoFill().enable()", function (c) {
          return this.iterator("table", function (b) {
              b.autoFill && b.autoFill.enable(c)
          })
      });
      m.register("autoFill().disable()",
          function () {
              return this.iterator("table", function (c) {
                  c.autoFill && c.autoFill.disable()
              })
          });
      e(i).on("preInit.dt.autofill", function (c, b) {
          if ("dt" === c.namespace) {
              var a = b.oInit.autoFill, d = k.defaults.autoFill;
              if (a || d) d = e.extend({}, a, d), !1 !== a && new j(b, d)
          }
      });
      k.AutoFill = j;
      return k.AutoFill = j
  });
  
  
  /*!
   Bootstrap integration for DataTables' AutoFill
   ©2015 SpryMedia Ltd - datatables.net/license
  */
  (function (a) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net-bs4", "datatables.net-autofill"], function (b) {
          return a(b, window, document)
      }) : "object" === typeof exports ? module.exports = function (b, c) {
          b || (b = window);
          if (!c || !c.fn.dataTable) c = require("datatables.net-bs4")(b, c).$;
          c.fn.dataTable.AutoFill || require("datatables.net-autofill")(b, c);
          return a(c, b, b.document)
      } : a(jQuery, window, document)
  })(function (a) {
      a = a.fn.dataTable;
      a.AutoFill.classes.btn = "btn btn-primary";
      return a
  });
  
  
  /*!
   Buttons for DataTables 1.5.1
   ©2016-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (d) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (o) {
          return d(o, window, document)
      }) : "object" === typeof exports ? module.exports = function (o, n) {
          o || (o = window);
          if (!n || !n.fn.dataTable) n = require("datatables.net")(o, n).$;
          return d(n, o, o.document)
      } : d(jQuery, window, document)
  })(function (d, o, n, l) {
      var i = d.fn.dataTable, x = 0, y = 0, j = i.ext.buttons, m = function (a, b) {
          "undefined" === typeof b && (b = {});
          !0 === b && (b = {});
          d.isArray(b) && (b = {buttons: b});
          this.c = d.extend(!0, {}, m.defaults, b);
          b.buttons && (this.c.buttons = b.buttons);
          this.s = {dt: new i.Api(a), buttons: [], listenKeys: "", namespace: "dtb" + x++};
          this.dom = {container: d("<" + this.c.dom.container.tag + "/>").addClass(this.c.dom.container.className)};
          this._constructor()
      };
      d.extend(m.prototype, {
          action: function (a, b) {
              var c = this._nodeToButton(a);
              if (b === l) return c.conf.action;
              c.conf.action = b;
              return this
          }, active: function (a, b) {
              var c = this._nodeToButton(a), e = this.c.dom.button.active, c = d(c.node);
              if (b === l) return c.hasClass(e);
              c.toggleClass(e, b === l ? !0 :
                  b);
              return this
          }, add: function (a, b) {
              var c = this.s.buttons;
              if ("string" === typeof b) {
                  for (var e = b.split("-"), c = this.s, d = 0, g = e.length - 1; d < g; d++) c = c.buttons[1 * e[d]];
                  c = c.buttons;
                  b = 1 * e[e.length - 1]
              }
              this._expandButton(c, a, !1, b);
              this._draw();
              return this
          }, container: function () {
              return this.dom.container
          }, disable: function (a) {
              a = this._nodeToButton(a);
              d(a.node).addClass(this.c.dom.button.disabled);
              return this
          }, destroy: function () {
              d("body").off("keyup." + this.s.namespace);
              var a = this.s.buttons.slice(), b, c;
              b = 0;
              for (c = a.length; b <
              c; b++) this.remove(a[b].node);
              this.dom.container.remove();
              a = this.s.dt.settings()[0];
              b = 0;
              for (c = a.length; b < c; b++) if (a.inst === this) {
                  a.splice(b, 1);
                  break
              }
              return this
          }, enable: function (a, b) {
              if (!1 === b) return this.disable(a);
              var c = this._nodeToButton(a);
              d(c.node).removeClass(this.c.dom.button.disabled);
              return this
          }, name: function () {
              return this.c.name
          }, node: function (a) {
              a = this._nodeToButton(a);
              return d(a.node)
          }, processing: function (a, b) {
              var c = this._nodeToButton(a);
              if (b === l) return d(c.node).hasClass("processing");
              d(c.node).toggleClass("processing", b);
              return this
          }, remove: function (a) {
              var b = this._nodeToButton(a), c = this._nodeToHost(a), e = this.s.dt;
              if (b.buttons.length) for (var h = b.buttons.length - 1; 0 <= h; h--) this.remove(b.buttons[h].node);
              b.conf.destroy && b.conf.destroy.call(e.button(a), e, d(a), b.conf);
              this._removeKey(b.conf);
              d(b.node).remove();
              a = d.inArray(b, c);
              c.splice(a, 1);
              return this
          }, text: function (a, b) {
              var c = this._nodeToButton(a), e = this.c.dom.collection.buttonLiner,
                  e = c.inCollection && e && e.tag ? e.tag : this.c.dom.buttonLiner.tag,
                  h = this.s.dt, g = d(c.node), f = function (a) {
                      return "function" === typeof a ? a(h, g, c.conf) : a
                  };
              if (b === l) return f(c.conf.text);
              c.conf.text = b;
              e ? g.children(e).html(f(b)) : g.html(f(b));
              return this
          }, _constructor: function () {
              var a = this, b = this.s.dt, c = b.settings()[0], e = this.c.buttons;
              c._buttons || (c._buttons = []);
              c._buttons.push({inst: this, name: this.c.name});
              for (var c = 0, h = e.length; c < h; c++) this.add(e[c]);
              b.on("destroy", function () {
                  a.destroy()
              });
              d("body").on("keyup." + this.s.namespace, function (b) {
                  if (!n.activeElement || n.activeElement ===
                      n.body) {
                      var c = String.fromCharCode(b.keyCode).toLowerCase();
                      a.s.listenKeys.toLowerCase().indexOf(c) !== -1 && a._keypress(c, b)
                  }
              })
          }, _addKey: function (a) {
              a.key && (this.s.listenKeys += d.isPlainObject(a.key) ? a.key.key : a.key)
          }, _draw: function (a, b) {
              a || (a = this.dom.container, b = this.s.buttons);
              a.children().detach();
              for (var c = 0, e = b.length; c < e; c++) a.append(b[c].inserter), a.append(" "), b[c].buttons && b[c].buttons.length && this._draw(b[c].collection, b[c].buttons)
          }, _expandButton: function (a, b, c, e) {
              for (var h = this.s.dt, g = 0,
                       b = !d.isArray(b) ? [b] : b, f = 0, q = b.length; f < q; f++) {
                  var k = this._resolveExtends(b[f]);
                  if (k) if (d.isArray(k)) this._expandButton(a, k, c, e); else {
                      var p = this._buildButton(k, c);
                      if (p) {
                          e !== l ? (a.splice(e, 0, p), e++) : a.push(p);
                          if (p.conf.buttons) {
                              var u = this.c.dom.collection;
                              p.collection = d("<" + u.tag + "/>").addClass(u.className).attr("role", "menu");
                              p.conf._collection = p.collection;
                              this._expandButton(p.buttons, p.conf.buttons, !0, e)
                          }
                          k.init && k.init.call(h.button(p.node), h, d(p.node), k);
                          g++
                      }
                  }
              }
          }, _buildButton: function (a, b) {
              var c =
                      this.c.dom.button, e = this.c.dom.buttonLiner, h = this.c.dom.collection, g = this.s.dt,
                  f = function (b) {
                      return "function" === typeof b ? b(g, k, a) : b
                  };
              b && h.button && (c = h.button);
              b && h.buttonLiner && (e = h.buttonLiner);
              if (a.available && !a.available(g, a)) return !1;
              var q = function (a, b, c, e) {
                      e.action.call(b.button(c), a, b, c, e);
                      d(b.table().node()).triggerHandler("buttons-action.dt", [b.button(c), b, c, e])
                  },
                  k = d("<" + c.tag + "/>").addClass(c.className).attr("tabindex", this.s.dt.settings()[0].iTabIndex).attr("aria-controls", this.s.dt.table().node().id).on("click.dtb",
                      function (b) {
                          b.preventDefault();
                          !k.hasClass(c.disabled) && a.action && q(b, g, k, a);
                          k.blur()
                      }).on("keyup.dtb", function (b) {
                      b.keyCode === 13 && !k.hasClass(c.disabled) && a.action && q(b, g, k, a)
                  });
              "a" === c.tag.toLowerCase() && k.attr("href", "#");
              e.tag ? (h = d("<" + e.tag + "/>").html(f(a.text)).addClass(e.className), "a" === e.tag.toLowerCase() && h.attr("href", "#"), k.append(h)) : k.html(f(a.text));
              !1 === a.enabled && k.addClass(c.disabled);
              a.className && k.addClass(a.className);
              a.titleAttr && k.attr("title", f(a.titleAttr));
              a.attr && k.attr(a.attr);
              a.namespace || (a.namespace = ".dt-button-" + y++);
              e = (e = this.c.dom.buttonContainer) && e.tag ? d("<" + e.tag + "/>").addClass(e.className).append(k) : k;
              this._addKey(a);
              return {conf: a, node: k.get(0), inserter: e, buttons: [], inCollection: b, collection: null}
          }, _nodeToButton: function (a, b) {
              b || (b = this.s.buttons);
              for (var c = 0, e = b.length; c < e; c++) {
                  if (b[c].node === a) return b[c];
                  if (b[c].buttons.length) {
                      var d = this._nodeToButton(a, b[c].buttons);
                      if (d) return d
                  }
              }
          }, _nodeToHost: function (a, b) {
              b || (b = this.s.buttons);
              for (var c = 0, e = b.length; c <
              e; c++) {
                  if (b[c].node === a) return b;
                  if (b[c].buttons.length) {
                      var d = this._nodeToHost(a, b[c].buttons);
                      if (d) return d
                  }
              }
          }, _keypress: function (a, b) {
              if (!b._buttonsHandled) {
                  var c = function (e) {
                      for (var h = 0, g = e.length; h < g; h++) {
                          var f = e[h].conf, q = e[h].node;
                          if (f.key) if (f.key === a) b._buttonsHandled = !0, d(q).click(); else if (d.isPlainObject(f.key) && f.key.key === a && (!f.key.shiftKey || b.shiftKey)) if (!f.key.altKey || b.altKey) if (!f.key.ctrlKey || b.ctrlKey) if (!f.key.metaKey || b.metaKey) b._buttonsHandled = !0, d(q).click();
                          e[h].buttons.length &&
                          c(e[h].buttons)
                      }
                  };
                  c(this.s.buttons)
              }
          }, _removeKey: function (a) {
              if (a.key) {
                  var b = d.isPlainObject(a.key) ? a.key.key : a.key, a = this.s.listenKeys.split(""),
                      b = d.inArray(b, a);
                  a.splice(b, 1);
                  this.s.listenKeys = a.join("")
              }
          }, _resolveExtends: function (a) {
              for (var b = this.s.dt, c, e, h = function (c) {
                  for (var e = 0; !d.isPlainObject(c) && !d.isArray(c);) {
                      if (c === l) return;
                      if ("function" === typeof c) {
                          if (c = c(b, a), !c) return !1
                      } else if ("string" === typeof c) {
                          if (!j[c]) throw"Unknown button type: " + c;
                          c = j[c]
                      }
                      e++;
                      if (30 < e) throw"Buttons: Too many iterations";
                  }
                  return d.isArray(c) ? c : d.extend({}, c)
              }, a = h(a); a && a.extend;) {
                  if (!j[a.extend]) throw"Cannot extend unknown button type: " + a.extend;
                  var g = h(j[a.extend]);
                  if (d.isArray(g)) return g;
                  if (!g) return !1;
                  c = g.className;
                  a = d.extend({}, g, a);
                  c && a.className !== c && (a.className = c + " " + a.className);
                  var f = a.postfixButtons;
                  if (f) {
                      a.buttons || (a.buttons = []);
                      c = 0;
                      for (e = f.length; c < e; c++) a.buttons.push(f[c]);
                      a.postfixButtons = null
                  }
                  if (f = a.prefixButtons) {
                      a.buttons || (a.buttons = []);
                      c = 0;
                      for (e = f.length; c < e; c++) a.buttons.splice(c, 0, f[c]);
                      a.prefixButtons = null
                  }
                  a.extend = g.extend
              }
              return a
          }
      });
      m.background = function (a, b, c) {
          c === l && (c = 400);
          a ? d("<div/>").addClass(b).css("display", "none").appendTo("body").fadeIn(c) : d("body > div." + b).fadeOut(c, function () {
              d(this).removeClass(b).remove()
          })
      };
      m.instanceSelector = function (a, b) {
          if (!a) return d.map(b, function (a) {
              return a.inst
          });
          var c = [], e = d.map(b, function (a) {
              return a.name
          }), h = function (a) {
              if (d.isArray(a)) for (var f = 0, q = a.length; f < q; f++) h(a[f]); else "string" === typeof a ? -1 !== a.indexOf(",") ? h(a.split(",")) :
                  (a = d.inArray(d.trim(a), e), -1 !== a && c.push(b[a].inst)) : "number" === typeof a && c.push(b[a].inst)
          };
          h(a);
          return c
      };
      m.buttonSelector = function (a, b) {
          for (var c = [], e = function (a, b, c) {
              for (var d, f, h = 0, g = b.length; h < g; h++) if (d = b[h]) f = c !== l ? c + h : h + "", a.push({
                  node: d.node,
                  name: d.conf.name,
                  idx: f
              }), d.buttons && e(a, d.buttons, f + "-")
          }, h = function (a, b) {
              var f, g, i = [];
              e(i, b.s.buttons);
              f = d.map(i, function (a) {
                  return a.node
              });
              if (d.isArray(a) || a instanceof d) {
                  f = 0;
                  for (g = a.length; f < g; f++) h(a[f], b)
              } else if (null === a || a === l || "*" === a) {
                  f = 0;
                  for (g = i.length; f < g; f++) c.push({inst: b, node: i[f].node})
              } else if ("number" === typeof a) c.push({
                  inst: b,
                  node: b.s.buttons[a].node
              }); else if ("string" === typeof a) if (-1 !== a.indexOf(",")) {
                  i = a.split(",");
                  f = 0;
                  for (g = i.length; f < g; f++) h(d.trim(i[f]), b)
              } else if (a.match(/^\d+(\-\d+)*$/)) f = d.map(i, function (a) {
                  return a.idx
              }), c.push({inst: b, node: i[d.inArray(a, f)].node}); else if (-1 !== a.indexOf(":name")) {
                  var j = a.replace(":name", "");
                  f = 0;
                  for (g = i.length; f < g; f++) i[f].name === j && c.push({inst: b, node: i[f].node})
              } else d(f).filter(a).each(function () {
                  c.push({
                      inst: b,
                      node: this
                  })
              }); else "object" === typeof a && a.nodeName && (i = d.inArray(a, f), -1 !== i && c.push({
                  inst: b,
                  node: f[i]
              }))
          }, g = 0, f = a.length; g < f; g++) h(b, a[g]);
          return c
      };
      m.defaults = {
          buttons: ["copy", "excel", "csv", "pdf", "print"],
          name: "main",
          tabIndex: 0,
          dom: {
              container: {tag: "div", className: "dt-buttons"},
              collection: {tag: "div", className: "dt-button-collection"},
              button: {tag: "button", className: "dt-button", active: "active", disabled: "disabled"},
              buttonLiner: {tag: "span", className: ""}
          }
      };
      m.version = "1.5.1";
      d.extend(j, {
          collection: {
              text: function (a) {
                  return a.i18n("buttons.collection",
                      "Collection")
              },
              className: "buttons-collection",
              action: function (a, b, c, e) {
                  var h = d(c).parents("div.dt-button-collection"), a = c.position(), g = d(b.table().container()),
                      f = !1, i = c;
                  h.length && (f = d(".dt-button-collection").position(), i = h, d("body").trigger("click.dtb-collection"));
                  e._collection.addClass(e.collectionLayout).css("display", "none").insertAfter(i).fadeIn(e.fade);
                  h = e._collection.css("position");
                  f && "absolute" === h ? e._collection.css({
                      top: f.top,
                      left: f.left
                  }) : "absolute" === h ? (e._collection.css({
                      top: a.top + c.outerHeight(),
                      left: a.left
                  }), f = g.offset().top + g.height(), c = a.top + c.outerHeight() + e._collection.outerHeight() - f, f = a.top - e._collection.outerHeight(), f = g.offset().top - f, c > f && e._collection.css("top", a.top - e._collection.outerHeight() - 5), c = a.left + e._collection.outerWidth(), g = g.offset().left + g.width(), c > g && e._collection.css("left", a.left - (c - g))) : (a = e._collection.height() / 2, a > d(o).height() / 2 && (a = d(o).height() / 2), e._collection.css("marginTop", -1 * a));
                  e.background && m.background(!0, e.backgroundClassName, e.fade);
                  setTimeout(function () {
                      d("div.dt-button-background").on("click.dtb-collection",
                          function () {
                          });
                      d("body").on("click.dtb-collection", function (a) {
                          var c = d.fn.addBack ? "addBack" : "andSelf";
                          if (!d(a.target).parents()[c]().filter(e._collection).length) {
                              e._collection.fadeOut(e.fade, function () {
                                  e._collection.detach()
                              });
                              d("div.dt-button-background").off("click.dtb-collection");
                              m.background(false, e.backgroundClassName, e.fade);
                              d("body").off("click.dtb-collection");
                              b.off("buttons-action.b-internal")
                          }
                      })
                  }, 10);
                  if (e.autoClose) b.on("buttons-action.b-internal", function () {
                      d("div.dt-button-background").click()
                  })
              },
              background: !0,
              collectionLayout: "",
              backgroundClassName: "dt-button-background",
              autoClose: !1,
              fade: 400,
              attr: {"aria-haspopup": !0}
          }, copy: function (a, b) {
              if (j.copyHtml5) return "copyHtml5";
              if (j.copyFlash && j.copyFlash.available(a, b)) return "copyFlash"
          }, csv: function (a, b) {
              if (j.csvHtml5 && j.csvHtml5.available(a, b)) return "csvHtml5";
              if (j.csvFlash && j.csvFlash.available(a, b)) return "csvFlash"
          }, excel: function (a, b) {
              if (j.excelHtml5 && j.excelHtml5.available(a, b)) return "excelHtml5";
              if (j.excelFlash && j.excelFlash.available(a,
                  b)) return "excelFlash"
          }, pdf: function (a, b) {
              if (j.pdfHtml5 && j.pdfHtml5.available(a, b)) return "pdfHtml5";
              if (j.pdfFlash && j.pdfFlash.available(a, b)) return "pdfFlash"
          }, pageLength: function (a) {
              var a = a.settings()[0].aLengthMenu, b = d.isArray(a[0]) ? a[0] : a, c = d.isArray(a[0]) ? a[1] : a,
                  e = function (a) {
                      return a.i18n("buttons.pageLength", {"-1": "Show all rows", _: "Show %d rows"}, a.page.len())
                  };
              return {
                  extend: "collection",
                  text: e,
                  className: "buttons-page-length",
                  autoClose: !0,
                  buttons: d.map(b, function (a, b) {
                      return {
                          text: c[b], className: "button-page-length",
                          action: function (b, c) {
                              c.page.len(a).draw()
                          }, init: function (b, c, d) {
                              var e = this, c = function () {
                                  e.active(b.page.len() === a)
                              };
                              b.on("length.dt" + d.namespace, c);
                              c()
                          }, destroy: function (a, b, c) {
                              a.off("length.dt" + c.namespace)
                          }
                      }
                  }),
                  init: function (a, b, c) {
                      var d = this;
                      a.on("length.dt" + c.namespace, function () {
                          d.text(e(a))
                      })
                  },
                  destroy: function (a, b, c) {
                      a.off("length.dt" + c.namespace)
                  }
              }
          }
      });
      i.Api.register("buttons()", function (a, b) {
          b === l && (b = a, a = l);
          this.selector.buttonGroup = a;
          var c = this.iterator(!0, "table", function (c) {
              if (c._buttons) return m.buttonSelector(m.instanceSelector(a,
                  c._buttons), b)
          }, !0);
          c._groupSelector = a;
          return c
      });
      i.Api.register("button()", function (a, b) {
          var c = this.buttons(a, b);
          1 < c.length && c.splice(1, c.length);
          return c
      });
      i.Api.registerPlural("buttons().active()", "button().active()", function (a) {
          return a === l ? this.map(function (a) {
              return a.inst.active(a.node)
          }) : this.each(function (b) {
              b.inst.active(b.node, a)
          })
      });
      i.Api.registerPlural("buttons().action()", "button().action()", function (a) {
          return a === l ? this.map(function (a) {
              return a.inst.action(a.node)
          }) : this.each(function (b) {
              b.inst.action(b.node,
                  a)
          })
      });
      i.Api.register(["buttons().enable()", "button().enable()"], function (a) {
          return this.each(function (b) {
              b.inst.enable(b.node, a)
          })
      });
      i.Api.register(["buttons().disable()", "button().disable()"], function () {
          return this.each(function (a) {
              a.inst.disable(a.node)
          })
      });
      i.Api.registerPlural("buttons().nodes()", "button().node()", function () {
          var a = d();
          d(this.each(function (b) {
              a = a.add(b.inst.node(b.node))
          }));
          return a
      });
      i.Api.registerPlural("buttons().processing()", "button().processing()", function (a) {
          return a ===
          l ? this.map(function (a) {
              return a.inst.processing(a.node)
          }) : this.each(function (b) {
              b.inst.processing(b.node, a)
          })
      });
      i.Api.registerPlural("buttons().text()", "button().text()", function (a) {
          return a === l ? this.map(function (a) {
              return a.inst.text(a.node)
          }) : this.each(function (b) {
              b.inst.text(b.node, a)
          })
      });
      i.Api.registerPlural("buttons().trigger()", "button().trigger()", function () {
          return this.each(function (a) {
              a.inst.node(a.node).trigger("click")
          })
      });
      i.Api.registerPlural("buttons().containers()", "buttons().container()",
          function () {
              var a = d(), b = this._groupSelector;
              this.iterator(!0, "table", function (c) {
                  if (c._buttons) for (var c = m.instanceSelector(b, c._buttons), d = 0, h = c.length; d < h; d++) a = a.add(c[d].container())
              });
              return a
          });
      i.Api.register("button().add()", function (a, b) {
          var c = this.context;
          c.length && (c = m.instanceSelector(this._groupSelector, c[0]._buttons), c.length && c[0].add(b, a));
          return this.button(this._groupSelector, a)
      });
      i.Api.register("buttons().destroy()", function () {
          this.pluck("inst").unique().each(function (a) {
              a.destroy()
          });
          return this
      });
      i.Api.registerPlural("buttons().remove()", "buttons().remove()", function () {
          this.each(function (a) {
              a.inst.remove(a.node)
          });
          return this
      });
      var r;
      i.Api.register("buttons.info()", function (a, b, c) {
          var e = this;
          if (!1 === a) return d("#datatables_buttons_info").fadeOut(function () {
              d(this).remove()
          }), clearTimeout(r), r = null, this;
          r && clearTimeout(r);
          d("#datatables_buttons_info").length && d("#datatables_buttons_info").remove();
          d('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a ? "<h2>" + a +
              "</h2>" : "").append(d("<div/>")["string" === typeof b ? "html" : "append"](b)).css("display", "none").appendTo("body").fadeIn();
          c !== l && 0 !== c && (r = setTimeout(function () {
              e.buttons.info(!1)
          }, c));
          return this
      });
      i.Api.register("buttons.exportData()", function (a) {
          if (this.context.length) {
              var b = new i.Api(this.context[0]), c = d.extend(!0, {}, {
                  rows: null,
                  columns: "",
                  modifier: {search: "applied", order: "applied"},
                  orthogonal: "display",
                  stripHtml: !0,
                  stripNewlines: !0,
                  decodeEntities: !0,
                  trim: !0,
                  format: {
                      header: function (a) {
                          return e(a)
                      },
                      footer: function (a) {
                          return e(a)
                      }, body: function (a) {
                          return e(a)
                      }
                  }
              }, a), e = function (a) {
                  if ("string" !== typeof a) return a;
                  a = a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
                  c.stripHtml && (a = a.replace(/<[^>]*>/g, ""));
                  c.trim && (a = a.replace(/^\s+|\s+$/g, ""));
                  c.stripNewlines && (a = a.replace(/\n/g, " "));
                  c.decodeEntities && (v.innerHTML = a, a = v.value);
                  return a
              }, a = b.columns(c.columns).indexes().map(function (a) {
                  var d = b.column(a).header();
                  return c.format.header(d.innerHTML, a, d)
              }).toArray(), h = b.table().footer() ?
                  b.columns(c.columns).indexes().map(function (a) {
                      var d = b.column(a).footer();
                      return c.format.footer(d ? d.innerHTML : "", a, d)
                  }).toArray() : null, g = d.extend({}, c.modifier);
              b.select && "function" === typeof b.select.info && g.selected === l && b.rows(c.rows, d.extend({selected: !0}, g)).any() && d.extend(g, {selected: !0});
              for (var g = b.rows(c.rows, g).indexes().toArray(), f = b.cells(g, c.columns), g = f.render(c.orthogonal).toArray(), f = f.nodes().toArray(), j = a.length, k = 0 < j ? g.length / j : 0, m = [k], o = 0, n = 0; n < k; n++) {
                  for (var r = [j], s = 0; s < j; s++) r[s] =
                      c.format.body(g[o], n, s, f[o]), o++;
                  m[n] = r
              }
              return {header: a, footer: h, body: m}
          }
      });
      i.Api.register("buttons.exportInfo()", function (a) {
          a || (a = {});
          var b;
          var c = a;
          b = "*" === c.filename && "*" !== c.title && c.title !== l && null !== c.title && "" !== c.title ? c.title : c.filename;
          "function" === typeof b && (b = b());
          b === l || null === b ? b = null : (-1 !== b.indexOf("*") && (b = d.trim(b.replace("*", d("head > title").text()))), b = b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, ""), (c = t(c.extension)) || (c = ""), b += c);
          c = t(a.title);
          c = null === c ? null : -1 !== c.indexOf("*") ?
              c.replace("*", d("head > title").text() || "Exported data") : c;
          return {
              filename: b,
              title: c,
              messageTop: w(this, a.message || a.messageTop, "top"),
              messageBottom: w(this, a.messageBottom, "bottom")
          }
      });
      var t = function (a) {
          return null === a || a === l ? null : "function" === typeof a ? a() : a
      }, w = function (a, b, c) {
          b = t(b);
          if (null === b) return null;
          a = d("caption", a.table().container()).eq(0);
          return "*" === b ? a.css("caption-side") !== c ? null : a.length ? a.text() : "" : b
      }, v = d("<textarea/>")[0];
      d.fn.dataTable.Buttons = m;
      d.fn.DataTable.Buttons = m;
      d(n).on("init.dt plugin-init.dt",
          function (a, b) {
              if ("dt" === a.namespace) {
                  var c = b.oInit.buttons || i.defaults.buttons;
                  c && !b._buttons && (new m(b, c)).container()
              }
          });
      i.ext.feature.push({
          fnInit: function (a) {
              var a = new i.Api(a), b = a.init().buttons || i.defaults.buttons;
              return (new m(a, b)).container()
          }, cFeature: "B"
      });
      return m
  });
  
  
  /*!
   Bootstrap integration for DataTables' Buttons
   ©2016 SpryMedia Ltd - datatables.net/license
  */
  (function (c) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net-bs4", "datatables.net-buttons"], function (a) {
          return c(a, window, document)
      }) : "object" === typeof exports ? module.exports = function (a, b) {
          a || (a = window);
          if (!b || !b.fn.dataTable) b = require("datatables.net-bs4")(a, b).$;
          b.fn.dataTable.Buttons || require("datatables.net-buttons")(a, b);
          return c(b, a, a.document)
      } : c(jQuery, window, document)
  })(function (c) {
      var a = c.fn.dataTable;
      c.extend(!0, a.Buttons.defaults, {
          dom: {
              container: {className: "dt-buttons btn-group"},
              button: {className: "btn btn-secondary"},
              collection: {
                  tag: "div",
                  className: "dt-button-collection dropdown-menu",
                  button: {tag: "a", className: "dt-button dropdown-item", active: "active", disabled: "disabled"}
              }
          }
      });
      a.ext.buttons.collection.className += " dropdown-toggle";
      return a.Buttons
  });
  
  
  /*!
   ColReorder 1.4.1
   ©2010-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (f) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (o) {
          return f(o, window, document)
      }) : "object" === typeof exports ? module.exports = function (o, l) {
          o || (o = window);
          if (!l || !l.fn.dataTable) l = require("datatables.net")(o, l).$;
          return f(l, o, o.document)
      } : f(jQuery, window, document)
  })(function (f, o, l, r) {
      function q(a) {
          for (var b = [], c = 0, e = a.length; c < e; c++) b[a[c]] = c;
          return b
      }
  
      function p(a, b, c) {
          b = a.splice(b, 1)[0];
          a.splice(c, 0, b)
      }
  
      function s(a, b, c) {
          for (var e = [], f = 0, d = a.childNodes.length; f <
          d; f++) 1 == a.childNodes[f].nodeType && e.push(a.childNodes[f]);
          b = e[b];
          null !== c ? a.insertBefore(b, e[c]) : a.appendChild(b)
      }
  
      var t = f.fn.dataTable;
      f.fn.dataTableExt.oApi.fnColReorder = function (a, b, c, e, g) {
          var d, h, j, m, i, l = a.aoColumns.length, k;
          i = function (a, b, d) {
              if (a[b] && "function" !== typeof a[b]) {
                  var c = a[b].split("."), e = c.shift();
                  isNaN(1 * e) || (a[b] = d[1 * e] + "." + c.join("."))
              }
          };
          if (b != c) if (0 > b || b >= l) this.oApi._fnLog(a, 1, "ColReorder 'from' index is out of bounds: " + b); else if (0 > c || c >= l) this.oApi._fnLog(a, 1, "ColReorder 'to' index is out of bounds: " +
              c); else {
              j = [];
              d = 0;
              for (h = l; d < h; d++) j[d] = d;
              p(j, b, c);
              var n = q(j);
              d = 0;
              for (h = a.aaSorting.length; d < h; d++) a.aaSorting[d][0] = n[a.aaSorting[d][0]];
              if (null !== a.aaSortingFixed) {
                  d = 0;
                  for (h = a.aaSortingFixed.length; d < h; d++) a.aaSortingFixed[d][0] = n[a.aaSortingFixed[d][0]]
              }
              d = 0;
              for (h = l; d < h; d++) {
                  k = a.aoColumns[d];
                  j = 0;
                  for (m = k.aDataSort.length; j < m; j++) k.aDataSort[j] = n[k.aDataSort[j]];
                  k.idx = n[k.idx]
              }
              f.each(a.aLastSort, function (b, c) {
                  a.aLastSort[b].src = n[c.src]
              });
              d = 0;
              for (h = l; d < h; d++) k = a.aoColumns[d], "number" == typeof k.mData ?
                  k.mData = n[k.mData] : f.isPlainObject(k.mData) && (i(k.mData, "_", n), i(k.mData, "filter", n), i(k.mData, "sort", n), i(k.mData, "type", n));
              if (a.aoColumns[b].bVisible) {
                  i = this.oApi._fnColumnIndexToVisible(a, b);
                  m = null;
                  for (d = c < b ? c : c + 1; null === m && d < l;) m = this.oApi._fnColumnIndexToVisible(a, d), d++;
                  j = a.nTHead.getElementsByTagName("tr");
                  d = 0;
                  for (h = j.length; d < h; d++) s(j[d], i, m);
                  if (null !== a.nTFoot) {
                      j = a.nTFoot.getElementsByTagName("tr");
                      d = 0;
                      for (h = j.length; d < h; d++) s(j[d], i, m)
                  }
                  d = 0;
                  for (h = a.aoData.length; d < h; d++) null !== a.aoData[d].nTr &&
                  s(a.aoData[d].nTr, i, m)
              }
              p(a.aoColumns, b, c);
              d = 0;
              for (h = l; d < h; d++) a.oApi._fnColumnOptions(a, d, {});
              p(a.aoPreSearchCols, b, c);
              d = 0;
              for (h = a.aoData.length; d < h; d++) {
                  m = a.aoData[d];
                  if (k = m.anCells) {
                      p(k, b, c);
                      j = 0;
                      for (i = k.length; j < i; j++) k[j] && k[j]._DT_CellIndex && (k[j]._DT_CellIndex.column = j)
                  }
                  "dom" !== m.src && f.isArray(m._aData) && p(m._aData, b, c)
              }
              d = 0;
              for (h = a.aoHeader.length; d < h; d++) p(a.aoHeader[d], b, c);
              if (null !== a.aoFooter) {
                  d = 0;
                  for (h = a.aoFooter.length; d < h; d++) p(a.aoFooter[d], b, c)
              }
              (g || g === r) && f.fn.dataTable.Api(a).rows().invalidate();
              d = 0;
              for (h = l; d < h; d++) f(a.aoColumns[d].nTh).off("click.DT"), this.oApi._fnSortAttachListener(a, a.aoColumns[d].nTh, d);
              f(a.oInstance).trigger("column-reorder.dt", [a, {
                  from: b,
                  to: c,
                  mapping: n,
                  drop: e,
                  iFrom: b,
                  iTo: c,
                  aiInvertMapping: n
              }])
          }
      };
      var i = function (a, b) {
          var c = (new f.fn.dataTable.Api(a)).settings()[0];
          if (c._colReorder) return c._colReorder;
          !0 === b && (b = {});
          var e = f.fn.dataTable.camelToHungarian;
          e && (e(i.defaults, i.defaults, !0), e(i.defaults, b || {}));
          this.s = {
              dt: null,
              init: f.extend(!0, {}, i.defaults, b),
              fixed: 0,
              fixedRight: 0,
              reorderCallback: null,
              mouse: {startX: -1, startY: -1, offsetX: -1, offsetY: -1, target: -1, targetIndex: -1, fromIndex: -1},
              aoTargets: []
          };
          this.dom = {drag: null, pointer: null};
          this.s.dt = c;
          this.s.dt._colReorder = this;
          this._fnConstruct();
          return this
      };
      f.extend(i.prototype, {
          fnReset: function () {
              this._fnOrderColumns(this.fnOrder());
              return this
          }, fnGetCurrentOrder: function () {
              return this.fnOrder()
          }, fnOrder: function (a, b) {
              var c = [], e, g, d = this.s.dt.aoColumns;
              if (a === r) {
                  e = 0;
                  for (g = d.length; e < g; e++) c.push(d[e]._ColReorder_iOrigCol);
                  return c
              }
              if (b) {
                  d =
                      this.fnOrder();
                  e = 0;
                  for (g = a.length; e < g; e++) c.push(f.inArray(a[e], d));
                  a = c
              }
              this._fnOrderColumns(q(a));
              return this
          }, fnTranspose: function (a, b) {
              b || (b = "toCurrent");
              var c = this.fnOrder(), e = this.s.dt.aoColumns;
              return "toCurrent" === b ? !f.isArray(a) ? f.inArray(a, c) : f.map(a, function (a) {
                  return f.inArray(a, c)
              }) : !f.isArray(a) ? e[a]._ColReorder_iOrigCol : f.map(a, function (a) {
                  return e[a]._ColReorder_iOrigCol
              })
          }, _fnConstruct: function () {
              var a = this, b = this.s.dt.aoColumns.length, c = this.s.dt.nTable, e;
              this.s.init.iFixedColumns &&
              (this.s.fixed = this.s.init.iFixedColumns);
              this.s.init.iFixedColumnsLeft && (this.s.fixed = this.s.init.iFixedColumnsLeft);
              this.s.fixedRight = this.s.init.iFixedColumnsRight ? this.s.init.iFixedColumnsRight : 0;
              this.s.init.fnReorderCallback && (this.s.reorderCallback = this.s.init.fnReorderCallback);
              for (e = 0; e < b; e++) e > this.s.fixed - 1 && e < b - this.s.fixedRight && this._fnMouseListener(e, this.s.dt.aoColumns[e].nTh), this.s.dt.aoColumns[e]._ColReorder_iOrigCol = e;
              this.s.dt.oApi._fnCallbackReg(this.s.dt, "aoStateSaveParams", function (b,
                                                                                      c) {
                  a._fnStateSave.call(a, c)
              }, "ColReorder_State");
              var g = null;
              this.s.init.aiOrder && (g = this.s.init.aiOrder.slice());
              this.s.dt.oLoadedState && ("undefined" != typeof this.s.dt.oLoadedState.ColReorder && this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length) && (g = this.s.dt.oLoadedState.ColReorder);
              if (g) if (a.s.dt._bInitComplete) b = q(g), a._fnOrderColumns.call(a, b); else {
                  var d = !1;
                  f(c).on("draw.dt.colReorder", function () {
                      if (!a.s.dt._bInitComplete && !d) {
                          d = true;
                          var b = q(g);
                          a._fnOrderColumns.call(a, b)
                      }
                  })
              } else this._fnSetColumnIndexes();
              f(c).on("destroy.dt.colReorder", function () {
                  f(c).off("destroy.dt.colReorder draw.dt.colReorder");
                  f(a.s.dt.nTHead).find("*").off(".ColReorder");
                  f.each(a.s.dt.aoColumns, function (a, b) {
                      f(b.nTh).removeAttr("data-column-index")
                  });
                  a.s.dt._colReorder = null;
                  a.s = null
              })
          }, _fnOrderColumns: function (a) {
              var b = !1;
              if (a.length != this.s.dt.aoColumns.length) this.s.dt.oInstance.oApi._fnLog(this.s.dt, 1, "ColReorder - array reorder does not match known number of columns. Skipping."); else {
                  for (var c = 0, e = a.length; c < e; c++) {
                      var g =
                          f.inArray(c, a);
                      c != g && (p(a, g, c), this.s.dt.oInstance.fnColReorder(g, c, !0, !1), b = !0)
                  }
                  f.fn.dataTable.Api(this.s.dt).rows().invalidate();
                  this._fnSetColumnIndexes();
                  b && (("" !== this.s.dt.oScroll.sX || "" !== this.s.dt.oScroll.sY) && this.s.dt.oInstance.fnAdjustColumnSizing(!1), this.s.dt.oInstance.oApi._fnSaveState(this.s.dt), null !== this.s.reorderCallback && this.s.reorderCallback.call(this))
              }
          }, _fnStateSave: function (a) {
              var b, c, e, g = this.s.dt.aoColumns;
              a.ColReorder = [];
              if (a.aaSorting) {
                  for (b = 0; b < a.aaSorting.length; b++) a.aaSorting[b][0] =
                      g[a.aaSorting[b][0]]._ColReorder_iOrigCol;
                  var d = f.extend(!0, [], a.aoSearchCols);
                  b = 0;
                  for (c = g.length; b < c; b++) e = g[b]._ColReorder_iOrigCol, a.aoSearchCols[e] = d[b], a.abVisCols[e] = g[b].bVisible, a.ColReorder.push(e)
              } else if (a.order) {
                  for (b = 0; b < a.order.length; b++) a.order[b][0] = g[a.order[b][0]]._ColReorder_iOrigCol;
                  d = f.extend(!0, [], a.columns);
                  b = 0;
                  for (c = g.length; b < c; b++) e = g[b]._ColReorder_iOrigCol, a.columns[e] = d[b], a.ColReorder.push(e)
              }
          }, _fnMouseListener: function (a, b) {
              var c = this;
              f(b).on("mousedown.ColReorder",
                  function (a) {
                      c._fnMouseDown.call(c, a, b)
                  }).on("touchstart.ColReorder", function (a) {
                  c._fnMouseDown.call(c, a, b)
              })
          }, _fnMouseDown: function (a, b) {
              var c = this, e = f(a.target).closest("th, td").offset(), g = parseInt(f(b).attr("data-column-index"), 10);
              g !== r && (this.s.mouse.startX = this._fnCursorPosition(a, "pageX"), this.s.mouse.startY = this._fnCursorPosition(a, "pageY"), this.s.mouse.offsetX = this._fnCursorPosition(a, "pageX") - e.left, this.s.mouse.offsetY = this._fnCursorPosition(a, "pageY") - e.top, this.s.mouse.target = this.s.dt.aoColumns[g].nTh,
                  this.s.mouse.targetIndex = g, this.s.mouse.fromIndex = g, this._fnRegions(), f(l).on("mousemove.ColReorder touchmove.ColReorder", function (a) {
                  c._fnMouseMove.call(c, a)
              }).on("mouseup.ColReorder touchend.ColReorder", function (a) {
                  c._fnMouseUp.call(c, a)
              }))
          }, _fnMouseMove: function (a) {
              if (null === this.dom.drag) {
                  if (5 > Math.pow(Math.pow(this._fnCursorPosition(a, "pageX") - this.s.mouse.startX, 2) + Math.pow(this._fnCursorPosition(a, "pageY") - this.s.mouse.startY, 2), 0.5)) return;
                  this._fnCreateDragNode()
              }
              this.dom.drag.css({
                  left: this._fnCursorPosition(a,
                      "pageX") - this.s.mouse.offsetX, top: this._fnCursorPosition(a, "pageY") - this.s.mouse.offsetY
              });
              for (var b = !1, c = this.s.mouse.toIndex, e = 1, f = this.s.aoTargets.length; e < f; e++) if (this._fnCursorPosition(a, "pageX") < this.s.aoTargets[e - 1].x + (this.s.aoTargets[e].x - this.s.aoTargets[e - 1].x) / 2) {
                  this.dom.pointer.css("left", this.s.aoTargets[e - 1].x);
                  this.s.mouse.toIndex = this.s.aoTargets[e - 1].to;
                  b = !0;
                  break
              }
              b || (this.dom.pointer.css("left", this.s.aoTargets[this.s.aoTargets.length - 1].x), this.s.mouse.toIndex = this.s.aoTargets[this.s.aoTargets.length -
              1].to);
              this.s.init.bRealtime && c !== this.s.mouse.toIndex && (this.s.dt.oInstance.fnColReorder(this.s.mouse.fromIndex, this.s.mouse.toIndex, !1), this.s.mouse.fromIndex = this.s.mouse.toIndex, this._fnRegions())
          }, _fnMouseUp: function () {
              f(l).off(".ColReorder");
              null !== this.dom.drag && (this.dom.drag.remove(), this.dom.pointer.remove(), this.dom.drag = null, this.dom.pointer = null, this.s.dt.oInstance.fnColReorder(this.s.mouse.fromIndex, this.s.mouse.toIndex, !0), this._fnSetColumnIndexes(), ("" !== this.s.dt.oScroll.sX || "" !==
                  this.s.dt.oScroll.sY) && this.s.dt.oInstance.fnAdjustColumnSizing(!1), this.s.dt.oInstance.oApi._fnSaveState(this.s.dt), null !== this.s.reorderCallback && this.s.reorderCallback.call(this))
          }, _fnRegions: function () {
              var a = this.s.dt.aoColumns;
              this.s.aoTargets.splice(0, this.s.aoTargets.length);
              this.s.aoTargets.push({x: f(this.s.dt.nTable).offset().left, to: 0});
              for (var b = 0, c = this.s.aoTargets[0].x, e = 0, g = a.length; e < g; e++) e != this.s.mouse.fromIndex && b++, a[e].bVisible && "none" !== a[e].nTh.style.display && (c += f(a[e].nTh).outerWidth(),
                  this.s.aoTargets.push({x: c, to: b}));
              0 !== this.s.fixedRight && this.s.aoTargets.splice(this.s.aoTargets.length - this.s.fixedRight);
              0 !== this.s.fixed && this.s.aoTargets.splice(0, this.s.fixed)
          }, _fnCreateDragNode: function () {
              var a = "" !== this.s.dt.oScroll.sX || "" !== this.s.dt.oScroll.sY,
                  b = this.s.dt.aoColumns[this.s.mouse.targetIndex].nTh, c = b.parentNode, e = c.parentNode,
                  g = e.parentNode, d = f(b).clone();
              this.dom.drag = f(g.cloneNode(!1)).addClass("DTCR_clonedTable").append(f(e.cloneNode(!1)).append(f(c.cloneNode(!1)).append(d[0]))).css({
                  position: "absolute",
                  top: 0, left: 0, width: f(b).outerWidth(), height: f(b).outerHeight()
              }).appendTo("body");
              this.dom.pointer = f("<div></div>").addClass("DTCR_pointer").css({
                  position: "absolute",
                  top: a ? f("div.dataTables_scroll", this.s.dt.nTableWrapper).offset().top : f(this.s.dt.nTable).offset().top,
                  height: a ? f("div.dataTables_scroll", this.s.dt.nTableWrapper).height() : f(this.s.dt.nTable).height()
              }).appendTo("body")
          }, _fnSetColumnIndexes: function () {
              f.each(this.s.dt.aoColumns, function (a, b) {
                  f(b.nTh).attr("data-column-index", a)
              })
          }, _fnCursorPosition: function (a,
                                          b) {
              return -1 !== a.type.indexOf("touch") ? a.originalEvent.touches[0][b] : a[b]
          }
      });
      i.defaults = {aiOrder: null, bRealtime: !0, iFixedColumnsLeft: 0, iFixedColumnsRight: 0, fnReorderCallback: null};
      i.version = "1.4.1";
      f.fn.dataTable.ColReorder = i;
      f.fn.DataTable.ColReorder = i;
      "function" == typeof f.fn.dataTable && "function" == typeof f.fn.dataTableExt.fnVersionCheck && f.fn.dataTableExt.fnVersionCheck("1.10.8") ? f.fn.dataTableExt.aoFeatures.push({
          fnInit: function (a) {
              var b = a.oInstance;
              a._colReorder ? b.oApi._fnLog(a, 1, "ColReorder attempted to initialise twice. Ignoring second") :
                  (b = a.oInit, new i(a, b.colReorder || b.oColReorder || {}));
              return null
          }, cFeature: "R", sFeature: "ColReorder"
      }) : alert("Warning: ColReorder requires DataTables 1.10.8 or greater - www.datatables.net/download");
      f(l).on("preInit.dt.colReorder", function (a, b) {
          if ("dt" === a.namespace) {
              var c = b.oInit.colReorder, e = t.defaults.colReorder;
              if (c || e) e = f.extend({}, c, e), !1 !== c && new i(b, e)
          }
      });
      f.fn.dataTable.Api.register("colReorder.reset()", function () {
          return this.iterator("table", function (a) {
              a._colReorder.fnReset()
          })
      });
      f.fn.dataTable.Api.register("colReorder.order()",
          function (a, b) {
              return a ? this.iterator("table", function (c) {
                  c._colReorder.fnOrder(a, b)
              }) : this.context.length ? this.context[0]._colReorder.fnOrder() : null
          });
      f.fn.dataTable.Api.register("colReorder.transpose()", function (a, b) {
          return this.context.length && this.context[0]._colReorder ? this.context[0]._colReorder.fnTranspose(a, b) : a
      });
      f.fn.dataTable.Api.register("colReorder.move()", function (a, b, c, e) {
          this.context.length && this.context[0]._colReorder.s.dt.oInstance.fnColReorder(a, b, c, e);
          return this
      });
      return i
  });
  
  
  /*!
   FixedColumns 3.2.4
   ©2010-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (d) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (p) {
          return d(p, window, document)
      }) : "object" === typeof exports ? module.exports = function (p, r) {
          p || (p = window);
          if (!r || !r.fn.dataTable) r = require("datatables.net")(p, r).$;
          return d(r, p, p.document)
      } : d(jQuery, window, document)
  })(function (d, p, r, t) {
      var s = d.fn.dataTable, u, m = function (a, b) {
          var c = this;
          if (this instanceof m) {
              if (b === t || !0 === b) b = {};
              var e = d.fn.dataTable.camelToHungarian;
              e && (e(m.defaults, m.defaults, !0), e(m.defaults,
                  b));
              e = (new d.fn.dataTable.Api(a)).settings()[0];
              this.s = {
                  dt: e,
                  iTableColumns: e.aoColumns.length,
                  aiOuterWidths: [],
                  aiInnerWidths: [],
                  rtl: "rtl" === d(e.nTable).css("direction")
              };
              this.dom = {
                  scroller: null,
                  header: null,
                  body: null,
                  footer: null,
                  grid: {
                      wrapper: null,
                      dt: null,
                      left: {wrapper: null, head: null, body: null, foot: null},
                      right: {wrapper: null, head: null, body: null, foot: null}
                  },
                  clone: {left: {header: null, body: null, footer: null}, right: {header: null, body: null, footer: null}}
              };
              if (e._oFixedColumns) throw"FixedColumns already initialised on this table";
              e._oFixedColumns = this;
              e._bInitComplete ? this._fnConstruct(b) : e.oApi._fnCallbackReg(e, "aoInitComplete", function () {
                  c._fnConstruct(b)
              }, "FixedColumns")
          } else alert("FixedColumns warning: FixedColumns must be initialised with the 'new' keyword.")
      };
      d.extend(m.prototype, {
          fnUpdate: function () {
              this._fnDraw(!0)
          }, fnRedrawLayout: function () {
              this._fnColCalc();
              this._fnGridLayout();
              this.fnUpdate()
          }, fnRecalculateHeight: function (a) {
              delete a._DTTC_iHeight;
              a.style.height = "auto"
          }, fnSetRowHeight: function (a, b) {
              a.style.height =
                  b + "px"
          }, fnGetPosition: function (a) {
              var b = this.s.dt.oInstance;
              if (d(a).parents(".DTFC_Cloned").length) {
                  if ("tr" === a.nodeName.toLowerCase()) return a = d(a).index(), b.fnGetPosition(d("tr", this.s.dt.nTBody)[a]);
                  var c = d(a).index(), a = d(a.parentNode).index();
                  return [b.fnGetPosition(d("tr", this.s.dt.nTBody)[a]), c, b.oApi._fnVisibleToColumnIndex(this.s.dt, c)]
              }
              return b.fnGetPosition(a)
          }, _fnConstruct: function (a) {
              var b = this;
              if ("function" != typeof this.s.dt.oInstance.fnVersionCheck || !0 !== this.s.dt.oInstance.fnVersionCheck("1.8.0")) alert("FixedColumns " +
                  m.VERSION + " required DataTables 1.8.0 or later. Please upgrade your DataTables installation"); else if ("" === this.s.dt.oScroll.sX) this.s.dt.oInstance.oApi._fnLog(this.s.dt, 1, "FixedColumns is not needed (no x-scrolling in DataTables enabled), so no action will be taken. Use 'FixedHeader' for column fixing when scrolling is not enabled"); else {
                  this.s = d.extend(!0, this.s, m.defaults, a);
                  a = this.s.dt.oClasses;
                  this.dom.grid.dt = d(this.s.dt.nTable).parents("div." + a.sScrollWrapper)[0];
                  this.dom.scroller = d("div." +
                      a.sScrollBody, this.dom.grid.dt)[0];
                  this._fnColCalc();
                  this._fnGridSetup();
                  var c, e = !1;
                  d(this.s.dt.nTableWrapper).on("mousedown.DTFC", function (a) {
                      0 === a.button && (e = !0, d(r).one("mouseup", function () {
                          e = !1
                      }))
                  });
                  d(this.dom.scroller).on("mouseover.DTFC touchstart.DTFC", function () {
                      e || (c = "main")
                  }).on("scroll.DTFC", function (a) {
                      !c && a.originalEvent && (c = "main");
                      if ("main" === c && (0 < b.s.iLeftColumns && (b.dom.grid.left.liner.scrollTop = b.dom.scroller.scrollTop), 0 < b.s.iRightColumns)) b.dom.grid.right.liner.scrollTop = b.dom.scroller.scrollTop
                  });
                  var f = "onwheel" in r.createElement("div") ? "wheel.DTFC" : "mousewheel.DTFC";
                  if (0 < b.s.iLeftColumns) d(b.dom.grid.left.liner).on("mouseover.DTFC touchstart.DTFC", function () {
                      e || (c = "left")
                  }).on("scroll.DTFC", function (a) {
                      !c && a.originalEvent && (c = "left");
                      "left" === c && (b.dom.scroller.scrollTop = b.dom.grid.left.liner.scrollTop, 0 < b.s.iRightColumns && (b.dom.grid.right.liner.scrollTop = b.dom.grid.left.liner.scrollTop))
                  }).on(f, function (a) {
                      b.dom.scroller.scrollLeft -= "wheel" === a.type ? -a.originalEvent.deltaX : a.originalEvent.wheelDeltaX
                  });
                  if (0 < b.s.iRightColumns) d(b.dom.grid.right.liner).on("mouseover.DTFC touchstart.DTFC", function () {
                      e || (c = "right")
                  }).on("scroll.DTFC", function (a) {
                      !c && a.originalEvent && (c = "right");
                      "right" === c && (b.dom.scroller.scrollTop = b.dom.grid.right.liner.scrollTop, 0 < b.s.iLeftColumns && (b.dom.grid.left.liner.scrollTop = b.dom.grid.right.liner.scrollTop))
                  }).on(f, function (a) {
                      b.dom.scroller.scrollLeft -= "wheel" === a.type ? -a.originalEvent.deltaX : a.originalEvent.wheelDeltaX
                  });
                  d(p).on("resize.DTFC", function () {
                      b._fnGridLayout.call(b)
                  });
                  var g = !0, h = d(this.s.dt.nTable);
                  h.on("draw.dt.DTFC", function () {
                      b._fnColCalc();
                      b._fnDraw.call(b, g);
                      g = !1
                  }).on("column-sizing.dt.DTFC", function () {
                      b._fnColCalc();
                      b._fnGridLayout(b)
                  }).on("column-visibility.dt.DTFC", function (a, c, d, e, f) {
                      if (f === t || f) b._fnColCalc(), b._fnGridLayout(b), b._fnDraw(!0)
                  }).on("select.dt.DTFC deselect.dt.DTFC", function (a) {
                      "dt" === a.namespace && b._fnDraw(!1)
                  }).on("destroy.dt.DTFC", function () {
                      h.off(".DTFC");
                      d(b.dom.scroller).off(".DTFC");
                      d(p).off(".DTFC");
                      d(b.s.dt.nTableWrapper).off(".DTFC");
                      d(b.dom.grid.left.liner).off(".DTFC " + f);
                      d(b.dom.grid.left.wrapper).remove();
                      d(b.dom.grid.right.liner).off(".DTFC " + f);
                      d(b.dom.grid.right.wrapper).remove()
                  });
                  this._fnGridLayout();
                  this.s.dt.oInstance.fnDraw(!1)
              }
          }, _fnColCalc: function () {
              var a = this, b = 0, c = 0;
              this.s.aiInnerWidths = [];
              this.s.aiOuterWidths = [];
              d.each(this.s.dt.aoColumns, function (e, f) {
                  var g = d(f.nTh), h;
                  if (g.filter(":visible").length) {
                      var i = g.outerWidth();
                      0 === a.s.aiOuterWidths.length && (h = d(a.s.dt.nTable).css("border-left-width"), i += "string" ===
                      typeof h && -1 === h.indexOf("px") ? 1 : parseInt(h, 10));
                      a.s.aiOuterWidths.length === a.s.dt.aoColumns.length - 1 && (h = d(a.s.dt.nTable).css("border-right-width"), i += "string" === typeof h && -1 === h.indexOf("px") ? 1 : parseInt(h, 10));
                      a.s.aiOuterWidths.push(i);
                      a.s.aiInnerWidths.push(g.width());
                      e < a.s.iLeftColumns && (b += i);
                      a.s.iTableColumns - a.s.iRightColumns <= e && (c += i)
                  } else a.s.aiInnerWidths.push(0), a.s.aiOuterWidths.push(0)
              });
              this.s.iLeftWidth = b;
              this.s.iRightWidth = c
          }, _fnGridSetup: function () {
              var a = this._fnDTOverflow(), b;
              this.dom.body =
                  this.s.dt.nTable;
              this.dom.header = this.s.dt.nTHead.parentNode;
              this.dom.header.parentNode.parentNode.style.position = "relative";
              var c = d('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;"><div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;" aria-hidden="true"><div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div><div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"><div class="DTFC_LeftBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div></div><div class="DTFC_RightWrapper" style="position:absolute; top:0; right:0;" aria-hidden="true"><div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightHeadBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div><div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"><div class="DTFC_RightBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightFootBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div></div></div>')[0],
                  e = c.childNodes[0], f = c.childNodes[1];
              this.dom.grid.dt.parentNode.insertBefore(c, this.dom.grid.dt);
              c.appendChild(this.dom.grid.dt);
              this.dom.grid.wrapper = c;
              0 < this.s.iLeftColumns && (this.dom.grid.left.wrapper = e, this.dom.grid.left.head = e.childNodes[0], this.dom.grid.left.body = e.childNodes[1], this.dom.grid.left.liner = d("div.DTFC_LeftBodyLiner", c)[0], c.appendChild(e));
              0 < this.s.iRightColumns && (this.dom.grid.right.wrapper = f, this.dom.grid.right.head = f.childNodes[0], this.dom.grid.right.body = f.childNodes[1], this.dom.grid.right.liner =
                  d("div.DTFC_RightBodyLiner", c)[0], f.style.right = a.bar + "px", b = d("div.DTFC_RightHeadBlocker", c)[0], b.style.width = a.bar + "px", b.style.right = -a.bar + "px", this.dom.grid.right.headBlock = b, b = d("div.DTFC_RightFootBlocker", c)[0], b.style.width = a.bar + "px", b.style.right = -a.bar + "px", this.dom.grid.right.footBlock = b, c.appendChild(f));
              if (this.s.dt.nTFoot && (this.dom.footer = this.s.dt.nTFoot.parentNode, 0 < this.s.iLeftColumns && (this.dom.grid.left.foot = e.childNodes[2]), 0 < this.s.iRightColumns)) this.dom.grid.right.foot = f.childNodes[2];
              this.s.rtl && d("div.DTFC_RightHeadBlocker", c).css({left: -a.bar + "px", right: ""})
          }, _fnGridLayout: function () {
              var a = this, b = this.dom.grid;
              d(b.wrapper).width();
              var c = this.s.dt.nTable.parentNode.offsetHeight, e = this.s.dt.nTable.parentNode.parentNode.offsetHeight,
                  f = this._fnDTOverflow(), g = this.s.iLeftWidth, h = this.s.iRightWidth,
                  i = "rtl" === d(this.dom.body).css("direction"), k = function (b, c) {
                      f.bar ? a._firefoxScrollError() ? 34 < d(b).height() && (b.style.width = c + f.bar + "px") : b.style.width = c + f.bar + "px" : (b.style.width = c + 20 +
                          "px", b.style.paddingRight = "20px", b.style.boxSizing = "border-box")
                  };
              f.x && (c -= f.bar);
              b.wrapper.style.height = e + "px";
              0 < this.s.iLeftColumns && (e = b.left.wrapper, e.style.width = g + "px", e.style.height = "1px", i ? (e.style.left = "", e.style.right = 0) : (e.style.left = 0, e.style.right = ""), b.left.body.style.height = c + "px", b.left.foot && (b.left.foot.style.top = (f.x ? f.bar : 0) + "px"), k(b.left.liner, g), b.left.liner.style.height = c + "px", b.left.liner.style.maxHeight = c + "px");
              0 < this.s.iRightColumns && (e = b.right.wrapper, e.style.width = h + "px",
                  e.style.height = "1px", this.s.rtl ? (e.style.left = f.y ? f.bar + "px" : 0, e.style.right = "") : (e.style.left = "", e.style.right = f.y ? f.bar + "px" : 0), b.right.body.style.height = c + "px", b.right.foot && (b.right.foot.style.top = (f.x ? f.bar : 0) + "px"), k(b.right.liner, h), b.right.liner.style.height = c + "px", b.right.liner.style.maxHeight = c + "px", b.right.headBlock.style.display = f.y ? "block" : "none", b.right.footBlock.style.display = f.y ? "block" : "none")
          }, _fnDTOverflow: function () {
              var a = this.s.dt.nTable, b = a.parentNode, c = {x: !1, y: !1, bar: this.s.dt.oScroll.iBarWidth};
              a.offsetWidth > b.clientWidth && (c.x = !0);
              a.offsetHeight > b.clientHeight && (c.y = !0);
              return c
          }, _fnDraw: function (a) {
              this._fnGridLayout();
              this._fnCloneLeft(a);
              this._fnCloneRight(a);
              null !== this.s.fnDrawCallback && this.s.fnDrawCallback.call(this, this.dom.clone.left, this.dom.clone.right);
              d(this).trigger("draw.dtfc", {leftClone: this.dom.clone.left, rightClone: this.dom.clone.right})
          }, _fnCloneRight: function (a) {
              if (!(0 >= this.s.iRightColumns)) {
                  var b, c = [];
                  for (b = this.s.iTableColumns - this.s.iRightColumns; b < this.s.iTableColumns; b++) this.s.dt.aoColumns[b].bVisible &&
                  c.push(b);
                  this._fnClone(this.dom.clone.right, this.dom.grid.right, c, a)
              }
          }, _fnCloneLeft: function (a) {
              if (!(0 >= this.s.iLeftColumns)) {
                  var b, c = [];
                  for (b = 0; b < this.s.iLeftColumns; b++) this.s.dt.aoColumns[b].bVisible && c.push(b);
                  this._fnClone(this.dom.clone.left, this.dom.grid.left, c, a)
              }
          }, _fnCopyLayout: function (a, b, c) {
              for (var e = [], f = [], g = [], h = 0, i = a.length; h < i; h++) {
                  var k = [];
                  k.nTr = d(a[h].nTr).clone(c, !1)[0];
                  for (var l = 0, o = this.s.iTableColumns; l < o; l++) if (-1 !== d.inArray(l, b)) {
                      var q = d.inArray(a[h][l].cell, g);
                      -1 === q ? (q =
                          d(a[h][l].cell).clone(c, !1)[0], f.push(q), g.push(a[h][l].cell), k.push({
                          cell: q,
                          unique: a[h][l].unique
                      })) : k.push({cell: f[q], unique: a[h][l].unique})
                  }
                  e.push(k)
              }
              return e
          }, _fnClone: function (a, b, c, e) {
              var f = this, g, h, i, k, l, o, q, n, m, j = this.s.dt;
              if (e) {
                  d(a.header).remove();
                  a.header = d(this.dom.header).clone(!0, !1)[0];
                  a.header.className += " DTFC_Cloned";
                  a.header.style.width = "100%";
                  b.head.appendChild(a.header);
                  n = this._fnCopyLayout(j.aoHeader, c, !0);
                  k = d(">thead", a.header);
                  k.empty();
                  g = 0;
                  for (h = n.length; g < h; g++) k[0].appendChild(n[g].nTr);
                  j.oApi._fnDrawHead(j, n, !0)
              } else {
                  n = this._fnCopyLayout(j.aoHeader, c, !1);
                  m = [];
                  j.oApi._fnDetectHeader(m, d(">thead", a.header)[0]);
                  g = 0;
                  for (h = n.length; g < h; g++) {
                      i = 0;
                      for (k = n[g].length; i < k; i++) m[g][i].cell.className = n[g][i].cell.className, d("span.DataTables_sort_icon", m[g][i].cell).each(function () {
                          this.className = d("span.DataTables_sort_icon", n[g][i].cell)[0].className
                      })
                  }
              }
              this._fnEqualiseHeights("thead", this.dom.header, a.header);
              "auto" == this.s.sHeightMatch && d(">tbody>tr", f.dom.body).css("height", "auto");
              null !==
              a.body && (d(a.body).remove(), a.body = null);
              a.body = d(this.dom.body).clone(!0)[0];
              a.body.className += " DTFC_Cloned";
              a.body.style.paddingBottom = j.oScroll.iBarWidth + "px";
              a.body.style.marginBottom = 2 * j.oScroll.iBarWidth + "px";
              null !== a.body.getAttribute("id") && a.body.removeAttribute("id");
              d(">thead>tr", a.body).empty();
              d(">tfoot", a.body).remove();
              var p = d("tbody", a.body)[0];
              d(p).empty();
              if (0 < j.aiDisplay.length) {
                  h = d(">thead>tr", a.body)[0];
                  for (q = 0; q < c.length; q++) l = c[q], o = d(j.aoColumns[l].nTh).clone(!0)[0], o.innerHTML =
                      "", k = o.style, k.paddingTop = "0", k.paddingBottom = "0", k.borderTopWidth = "0", k.borderBottomWidth = "0", k.height = 0, k.width = f.s.aiInnerWidths[l] + "px", h.appendChild(o);
                  d(">tbody>tr", f.dom.body).each(function (a) {
                      var a = f.s.dt.oFeatures.bServerSide === false ? f.s.dt.aiDisplay[f.s.dt._iDisplayStart + a] : a,
                          b = f.s.dt.aoData[a].anCells || d(this).children("td, th"), e = this.cloneNode(false);
                      e.removeAttribute("id");
                      e.setAttribute("data-dt-row", a);
                      for (q = 0; q < c.length; q++) {
                          l = c[q];
                          if (b.length > 0) {
                              o = d(b[l]).clone(true, true)[0];
                              o.removeAttribute("id");
                              o.setAttribute("data-dt-row", a);
                              o.setAttribute("data-dt-column", j.oApi._fnVisibleToColumnIndex(j, l));
                              e.appendChild(o)
                          }
                      }
                      p.appendChild(e)
                  })
              } else d(">tbody>tr", f.dom.body).each(function () {
                  o = this.cloneNode(true);
                  o.className = o.className + " DTFC_NoData";
                  d("td", o).html("");
                  p.appendChild(o)
              });
              a.body.style.width = "100%";
              a.body.style.margin = "0";
              a.body.style.padding = "0";
              j.oScroller !== t && (h = j.oScroller.dom.force, b.forcer ? b.forcer.style.height = h.style.height : (b.forcer = h.cloneNode(!0), b.liner.appendChild(b.forcer)));
              b.liner.appendChild(a.body);
              this._fnEqualiseHeights("tbody", f.dom.body, a.body);
              if (null !== j.nTFoot) {
                  if (e) {
                      null !== a.footer && a.footer.parentNode.removeChild(a.footer);
                      a.footer = d(this.dom.footer).clone(!0, !0)[0];
                      a.footer.className += " DTFC_Cloned";
                      a.footer.style.width = "100%";
                      b.foot.appendChild(a.footer);
                      n = this._fnCopyLayout(j.aoFooter, c, !0);
                      b = d(">tfoot", a.footer);
                      b.empty();
                      g = 0;
                      for (h = n.length; g < h; g++) b[0].appendChild(n[g].nTr);
                      j.oApi._fnDrawHead(j, n, !0)
                  } else {
                      n = this._fnCopyLayout(j.aoFooter, c, !1);
                      b = [];
                      j.oApi._fnDetectHeader(b,
                          d(">tfoot", a.footer)[0]);
                      g = 0;
                      for (h = n.length; g < h; g++) {
                          i = 0;
                          for (k = n[g].length; i < k; i++) b[g][i].cell.className = n[g][i].cell.className
                      }
                  }
                  this._fnEqualiseHeights("tfoot", this.dom.footer, a.footer)
              }
              b = j.oApi._fnGetUniqueThs(j, d(">thead", a.header)[0]);
              d(b).each(function (a) {
                  l = c[a];
                  this.style.width = f.s.aiInnerWidths[l] + "px"
              });
              null !== f.s.dt.nTFoot && (b = j.oApi._fnGetUniqueThs(j, d(">tfoot", a.footer)[0]), d(b).each(function (a) {
                  l = c[a];
                  this.style.width = f.s.aiInnerWidths[l] + "px"
              }))
          }, _fnGetTrNodes: function (a) {
              for (var b =
                  [], c = 0, d = a.childNodes.length; c < d; c++) "TR" == a.childNodes[c].nodeName.toUpperCase() && b.push(a.childNodes[c]);
              return b
          }, _fnEqualiseHeights: function (a, b, c) {
              if (!("none" == this.s.sHeightMatch && "thead" !== a && "tfoot" !== a)) {
                  var e, f, g = b.getElementsByTagName(a)[0], c = c.getElementsByTagName(a)[0],
                      a = d(">" + a + ">tr:eq(0)", b).children(":first");
                  a.outerHeight();
                  a.height();
                  for (var g = this._fnGetTrNodes(g), b = this._fnGetTrNodes(c), h = [], c = 0, a = b.length; c < a; c++) e = g[c].offsetHeight, f = b[c].offsetHeight, e = f > e ? f : e, "semiauto" == this.s.sHeightMatch &&
                  (g[c]._DTTC_iHeight = e), h.push(e);
                  c = 0;
                  for (a = b.length; c < a; c++) b[c].style.height = h[c] + "px", g[c].style.height = h[c] + "px"
              }
          }, _firefoxScrollError: function () {
              if (u === t) {
                  var a = d("<div/>").css({
                      position: "absolute",
                      top: 0,
                      left: 0,
                      height: 10,
                      width: 50,
                      overflow: "scroll"
                  }).appendTo("body");
                  u = a[0].clientWidth === a[0].offsetWidth && 0 !== this._fnDTOverflow().bar;
                  a.remove()
              }
              return u
          }
      });
      m.defaults = {iLeftColumns: 1, iRightColumns: 0, fnDrawCallback: null, sHeightMatch: "semiauto"};
      m.version = "3.2.4";
      s.Api.register("fixedColumns()", function () {
          return this
      });
      s.Api.register("fixedColumns().update()", function () {
          return this.iterator("table", function (a) {
              a._oFixedColumns && a._oFixedColumns.fnUpdate()
          })
      });
      s.Api.register("fixedColumns().relayout()", function () {
          return this.iterator("table", function (a) {
              a._oFixedColumns && a._oFixedColumns.fnRedrawLayout()
          })
      });
      s.Api.register("rows().recalcHeight()", function () {
          return this.iterator("row", function (a, b) {
              a._oFixedColumns && a._oFixedColumns.fnRecalculateHeight(this.row(b).node())
          })
      });
      s.Api.register("fixedColumns().rowIndex()",
          function (a) {
              a = d(a);
              return a.parents(".DTFC_Cloned").length ? this.rows({page: "current"}).indexes()[a.index()] : this.row(a).index()
          });
      s.Api.register("fixedColumns().cellIndex()", function (a) {
          a = d(a);
          if (a.parents(".DTFC_Cloned").length) {
              var b = a.parent().index(), b = this.rows({page: "current"}).indexes()[b],
                  a = a.parents(".DTFC_LeftWrapper").length ? a.index() : this.columns().flatten().length - this.context[0]._oFixedColumns.s.iRightColumns + a.index();
              return {row: b, column: this.column.index("toData", a), columnVisible: a}
          }
          return this.cell(a).index()
      });
      d(r).on("init.dt.fixedColumns", function (a, b) {
          if ("dt" === a.namespace) {
              var c = b.oInit.fixedColumns, e = s.defaults.fixedColumns;
              if (c || e) e = d.extend({}, c, e), !1 !== c && new m(b, e)
          }
      });
      d.fn.dataTable.FixedColumns = m;
      return d.fn.DataTable.FixedColumns = m
  });
  
  
  /*!
   FixedHeader 3.1.3
   ©2009-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (d) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (g) {
          return d(g, window, document)
      }) : "object" === typeof exports ? module.exports = function (g, h) {
          g || (g = window);
          if (!h || !h.fn.dataTable) h = require("datatables.net")(g, h).$;
          return d(h, g, g.document)
      } : d(jQuery, window, document)
  })(function (d, g, h, k) {
      var j = d.fn.dataTable, l = 0, i = function (b, a) {
          if (!(this instanceof i)) throw"FixedHeader must be initialised with the 'new' keyword.";
          !0 === a && (a = {});
          b = new j.Api(b);
          this.c = d.extend(!0,
              {}, i.defaults, a);
          this.s = {
              dt: b,
              position: {
                  theadTop: 0,
                  tbodyTop: 0,
                  tfootTop: 0,
                  tfootBottom: 0,
                  width: 0,
                  left: 0,
                  tfootHeight: 0,
                  theadHeight: 0,
                  windowHeight: d(g).height(),
                  visible: !0
              },
              headerMode: null,
              footerMode: null,
              autoWidth: b.settings()[0].oFeatures.bAutoWidth,
              namespace: ".dtfc" + l++,
              scrollLeft: {header: -1, footer: -1},
              enable: !0
          };
          this.dom = {
              floatingHeader: null,
              thead: d(b.table().header()),
              tbody: d(b.table().body()),
              tfoot: d(b.table().footer()),
              header: {host: null, floating: null, placeholder: null},
              footer: {
                  host: null, floating: null,
                  placeholder: null
              }
          };
          this.dom.header.host = this.dom.thead.parent();
          this.dom.footer.host = this.dom.tfoot.parent();
          var e = b.settings()[0];
          if (e._fixedHeader) throw"FixedHeader already initialised on table " + e.nTable.id;
          e._fixedHeader = this;
          this._constructor()
      };
      d.extend(i.prototype, {
          enable: function (b) {
              this.s.enable = b;
              this.c.header && this._modeChange("in-place", "header", !0);
              this.c.footer && this.dom.tfoot.length && this._modeChange("in-place", "footer", !0);
              this.update()
          }, headerOffset: function (b) {
              b !== k && (this.c.headerOffset =
                  b, this.update());
              return this.c.headerOffset
          }, footerOffset: function (b) {
              b !== k && (this.c.footerOffset = b, this.update());
              return this.c.footerOffset
          }, update: function () {
              this._positions();
              this._scroll(!0)
          }, _constructor: function () {
              var b = this, a = this.s.dt;
              d(g).on("scroll" + this.s.namespace, function () {
                  b._scroll()
              }).on("resize" + this.s.namespace, function () {
                  b.s.position.windowHeight = d(g).height();
                  b.update()
              });
              var e = d(".fh-fixedHeader");
              !this.c.headerOffset && e.length && (this.c.headerOffset = e.outerHeight());
              e = d(".fh-fixedFooter");
              !this.c.footerOffset && e.length && (this.c.footerOffset = e.outerHeight());
              a.on("column-reorder.dt.dtfc column-visibility.dt.dtfc draw.dt.dtfc column-sizing.dt.dtfc", function () {
                  b.update()
              });
              a.on("destroy.dtfc", function () {
                  a.off(".dtfc");
                  d(g).off(b.s.namespace)
              });
              this._positions();
              this._scroll()
          }, _clone: function (b, a) {
              var e = this.s.dt, c = this.dom[b], f = "header" === b ? this.dom.thead : this.dom.tfoot;
              !a && c.floating ? c.floating.removeClass("fixedHeader-floating fixedHeader-locked") : (c.floating && (c.placeholder.remove(),
                  this._unsize(b), c.floating.children().detach(), c.floating.remove()), c.floating = d(e.table().node().cloneNode(!1)).css("table-layout", "fixed").removeAttr("id").append(f).appendTo("body"), c.placeholder = f.clone(!1), c.placeholder.find("*[id]").removeAttr("id"), c.host.prepend(c.placeholder), this._matchWidths(c.placeholder, c.floating))
          }, _matchWidths: function (b, a) {
              var e = function (a) {
                  return d(a, b).map(function () {
                      return d(this).width()
                  }).toArray()
              }, c = function (b, c) {
                  d(b, a).each(function (a) {
                      d(this).css({
                          width: c[a],
                          minWidth: c[a]
                      })
                  })
              }, f = e("th"), e = e("td");
              c("th", f);
              c("td", e)
          }, _unsize: function (b) {
              var a = this.dom[b].floating;
              a && ("footer" === b || "header" === b && !this.s.autoWidth) ? d("th, td", a).css({
                  width: "",
                  minWidth: ""
              }) : a && "header" === b && d("th, td", a).css("min-width", "")
          }, _horizontal: function (b, a) {
              var e = this.dom[b], c = this.s.position, d = this.s.scrollLeft;
              e.floating && d[b] !== a && (e.floating.css("left", c.left - a), d[b] = a)
          }, _modeChange: function (b, a, e) {
              var c = this.dom[a], f = this.s.position, g = d.contains(this.dom["footer" === a ? "tfoot" :
                  "thead"][0], h.activeElement) ? h.activeElement : null;
              if ("in-place" === b) {
                  if (c.placeholder && (c.placeholder.remove(), c.placeholder = null), this._unsize(a), "header" === a ? c.host.prepend(this.dom.thead) : c.host.append(this.dom.tfoot), c.floating) c.floating.remove(), c.floating = null
              } else "in" === b ? (this._clone(a, e), c.floating.addClass("fixedHeader-floating").css("header" === a ? "top" : "bottom", this.c[a + "Offset"]).css("left", f.left + "px").css("width", f.width + "px"), "footer" === a && c.floating.css("top", "")) : "below" === b ? (this._clone(a,
                  e), c.floating.addClass("fixedHeader-locked").css("top", f.tfootTop - f.theadHeight).css("left", f.left + "px").css("width", f.width + "px")) : "above" === b && (this._clone(a, e), c.floating.addClass("fixedHeader-locked").css("top", f.tbodyTop).css("left", f.left + "px").css("width", f.width + "px"));
              g && g !== h.activeElement && g.focus();
              this.s.scrollLeft.header = -1;
              this.s.scrollLeft.footer = -1;
              this.s[a + "Mode"] = b
          }, _positions: function () {
              var b = this.s.dt.table(), a = this.s.position, e = this.dom, b = d(b.node()), c = b.children("thead"), f =
                  b.children("tfoot"), e = e.tbody;
              a.visible = b.is(":visible");
              a.width = b.outerWidth();
              a.left = b.offset().left;
              a.theadTop = c.offset().top;
              a.tbodyTop = e.offset().top;
              a.theadHeight = a.tbodyTop - a.theadTop;
              f.length ? (a.tfootTop = f.offset().top, a.tfootBottom = a.tfootTop + f.outerHeight(), a.tfootHeight = a.tfootBottom - a.tfootTop) : (a.tfootTop = a.tbodyTop + e.outerHeight(), a.tfootBottom = a.tfootTop, a.tfootHeight = a.tfootTop)
          }, _scroll: function (b) {
              var a = d(h).scrollTop(), e = d(h).scrollLeft(), c = this.s.position, f;
              if (this.s.enable && (this.c.header &&
              (f = !c.visible || a <= c.theadTop - this.c.headerOffset ? "in-place" : a <= c.tfootTop - c.theadHeight - this.c.headerOffset ? "in" : "below", (b || f !== this.s.headerMode) && this._modeChange(f, "header", b), this._horizontal("header", e)), this.c.footer && this.dom.tfoot.length)) a = !c.visible || a + c.windowHeight >= c.tfootBottom + this.c.footerOffset ? "in-place" : c.windowHeight + a > c.tbodyTop + c.tfootHeight + this.c.footerOffset ? "in" : "above", (b || a !== this.s.footerMode) && this._modeChange(a, "footer", b), this._horizontal("footer", e)
          }
      });
      i.version =
          "3.1.3";
      i.defaults = {header: !0, footer: !1, headerOffset: 0, footerOffset: 0};
      d.fn.dataTable.FixedHeader = i;
      d.fn.DataTable.FixedHeader = i;
      d(h).on("init.dt.dtfh", function (b, a) {
          if ("dt" === b.namespace) {
              var e = a.oInit.fixedHeader, c = j.defaults.fixedHeader;
              if ((e || c) && !a._fixedHeader) c = d.extend({}, c, e), !1 !== e && new i(a, c)
          }
      });
      j.Api.register("fixedHeader()", function () {
      });
      j.Api.register("fixedHeader.adjust()", function () {
          return this.iterator("table", function (b) {
              (b = b._fixedHeader) && b.update()
          })
      });
      j.Api.register("fixedHeader.enable()",
          function (b) {
              return this.iterator("table", function (a) {
                  a = a._fixedHeader;
                  b = b !== k ? b : !0;
                  a && b !== a.s.enable && a.enable(b)
              })
          });
      j.Api.register("fixedHeader.disable()", function () {
          return this.iterator("table", function (b) {
              (b = b._fixedHeader) && b.s.enable && b.enable(!1)
          })
      });
      d.each(["header", "footer"], function (b, a) {
          j.Api.register("fixedHeader." + a + "Offset()", function (b) {
              var c = this.context;
              return b === k ? c.length && c[0]._fixedHeader ? c[0]._fixedHeader[a + "Offset"]() : k : this.iterator("table", function (c) {
                  if (c = c._fixedHeader) c[a +
                  "Offset"](b)
              })
          })
      });
      return i
  });
  
  
  /*!
   KeyTable 2.3.2
   ©2009-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (f) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (k) {
          return f(k, window, document)
      }) : "object" === typeof exports ? module.exports = function (k, h) {
          k || (k = window);
          if (!h || !h.fn.dataTable) h = require("datatables.net")(k, h).$;
          return f(h, k, k.document)
      } : f(jQuery, window, document)
  })(function (f, k, h, o) {
      var l = f.fn.dataTable, n = function (a, b) {
          if (!l.versionCheck || !l.versionCheck("1.10.8")) throw"KeyTable requires DataTables 1.10.8 or newer";
          this.c = f.extend(!0, {}, l.defaults.keyTable,
              n.defaults, b);
          this.s = {dt: new l.Api(a), enable: !0, focusDraw: !1, waitingForDraw: !1, lastFocus: null};
          this.dom = {};
          var c = this.s.dt.settings()[0], d = c.keytable;
          if (d) return d;
          c.keytable = this;
          this._constructor()
      };
      f.extend(n.prototype, {
          blur: function () {
              this._blur()
          }, enable: function (a) {
              this.s.enable = a
          }, focus: function (a, b) {
              this._focus(this.s.dt.cell(a, b))
          }, focused: function (a) {
              if (!this.s.lastFocus) return !1;
              var b = this.s.lastFocus.cell.index();
              return a.row === b.row && a.column === b.column
          }, _constructor: function () {
              this._tabInput();
              var a = this, b = this.s.dt, c = f(b.table().node());
              "static" === c.css("position") && c.css("position", "relative");
              f(b.table().body()).on("click.keyTable", "th, td", function (c) {
                  if (!1 !== a.s.enable) {
                      var d = b.cell(this);
                      d.any() && a._focus(d, null, !1, c)
                  }
              });
              f(h).on("keydown.keyTable", function (b) {
                  a._key(b)
              });
              if (this.c.blurable) f(h).on("mousedown.keyTable", function (c) {
                  f(c.target).parents(".dataTables_filter").length && a._blur();
                  f(c.target).parents().filter(b.table().container()).length || f(c.target).parents("div.DTE").length ||
                  f(c.target).parents("div.editor-datetime").length || f(c.target).parents().filter(".DTFC_Cloned").length || a._blur()
              });
              if (this.c.editor) {
                  var d = this.c.editor;
                  d.on("open.keyTableMain", function (b, c) {
                      "inline" !== c && a.s.enable && (a.enable(!1), d.one("close.keyTable", function () {
                          a.enable(!0)
                      }))
                  });
                  if (this.c.editOnFocus) b.on("key-focus.keyTable key-refocus.keyTable", function (b, c, d, e) {
                      a._editor(null, e)
                  });
                  b.on("key.keyTable", function (b, c, d, e, f) {
                      a._editor(d, f)
                  })
              }
              if (b.settings()[0].oFeatures.bStateSave) b.on("stateSaveParams.keyTable",
                  function (b, c, d) {
                      d.keyTable = a.s.lastFocus ? a.s.lastFocus.cell.index() : null
                  });
              b.on("draw.keyTable", function (c) {
                  if (!a.s.focusDraw) {
                      var d = a.s.lastFocus;
                      if (d && d.node && f(d.node).closest("body") === h.body) {
                          var d = a.s.lastFocus.relative, e = b.page.info(), j = d.row + e.start;
                          0 !== e.recordsDisplay && (j >= e.recordsDisplay && (j = e.recordsDisplay - 1), a._focus(j, d.column, !0, c))
                      }
                  }
              });
              b.on("destroy.keyTable", function () {
                  b.off(".keyTable");
                  f(b.table().body()).off("click.keyTable", "th, td");
                  f(h.body).off("keydown.keyTable").off("click.keyTable")
              });
              var e = b.state.loaded();
              if (e && e.keyTable) b.one("init", function () {
                  var a = b.cell(e.keyTable);
                  a.any() && a.focus()
              }); else this.c.focus && b.cell(this.c.focus).focus()
          }, _blur: function () {
              if (this.s.enable && this.s.lastFocus) {
                  var a = this.s.lastFocus.cell;
                  f(a.node()).removeClass(this.c.className);
                  this.s.lastFocus = null;
                  this._updateFixedColumns(a.index().column);
                  this._emitEvent("key-blur", [this.s.dt, a])
              }
          }, _clipboardCopy: function () {
              var a = this.s.dt;
              if (this.s.lastFocus && k.getSelection && !k.getSelection().toString()) {
                  var b =
                          this.s.lastFocus.cell.render("display"),
                      c = f("<div/>").css({height: 1, width: 1, overflow: "hidden", position: "fixed", top: 0, left: 0}),
                      b = f("<textarea readonly/>").val(b).appendTo(c);
                  try {
                      c.appendTo(a.table().container()), b[0].focus(), b[0].select(), h.execCommand("copy")
                  } catch (d) {
                  }
                  c.remove()
              }
          }, _columns: function () {
              var a = this.s.dt, b = a.columns(this.c.columns).indexes(), c = [];
              a.columns(":visible").every(function (a) {
                  -1 !== b.indexOf(a) && c.push(a)
              });
              return c
          }, _editor: function (a, b) {
              var c = this, d = this.s.dt, e = this.c.editor;
              !f("div.DTE", this.s.lastFocus.cell.node()).length && 16 !== a && (b.stopPropagation(), 13 === a && b.preventDefault(), e.one("open.keyTable", function () {
                  e.off("cancelOpen.keyTable");
                  c.c.editAutoSelect && f("div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea").select();
                  d.keys.enable(c.c.editorKeys);
                  d.one("key-blur.editor", function () {
                      e.displayed() && e.submit()
                  });
                  e.one("close", function () {
                      d.keys.enable(!0);
                      d.off("key-blur.editor")
                  })
              }).one("cancelOpen.keyTable", function () {
                  e.off("open.keyTable")
              }).inline(this.s.lastFocus.cell.index()))
          },
          _emitEvent: function (a, b) {
              this.s.dt.iterator("table", function (c) {
                  f(c.nTable).triggerHandler(a, b)
              })
          }, _focus: function (a, b, c, d) {
              var e = this, m = this.s.dt, g = m.page.info(), i = this.s.lastFocus;
              d || (d = null);
              if (this.s.enable) {
                  if ("number" !== typeof a) {
                      var j = a.index(), b = j.column,
                          a = m.rows({filter: "applied", order: "applied"}).indexes().indexOf(j.row);
                      g.serverSide && (a += g.start)
                  }
                  if (-1 !== g.length && (a < g.start || a >= g.start + g.length)) this.s.focusDraw = !0, this.s.waitingForDraw = !0, m.one("draw", function () {
                      e.s.focusDraw = !1;
                      e.s.waitingForDraw =
                          !1;
                      e._focus(a, b, o, d)
                  }).page(Math.floor(a / g.length)).draw(!1); else if (-1 !== f.inArray(b, this._columns())) {
                      g.serverSide && (a -= g.start);
                      g = m.cells(null, b, {search: "applied", order: "applied"}).flatten();
                      g = m.cell(g[a]);
                      if (i) {
                          if (i.node === g.node()) {
                              this._emitEvent("key-refocus", [this.s.dt, g, d || null]);
                              return
                          }
                          this._blur()
                      }
                      i = f(g.node());
                      i.addClass(this.c.className);
                      this._updateFixedColumns(b);
                      if (c === o || !0 === c) this._scroll(f(k), f(h.body), i, "offset"), c = m.table().body().parentNode, c !== m.table().header().parentNode &&
                      (c = f(c.parentNode), this._scroll(c, c, i, "position"));
                      this.s.lastFocus = {
                          cell: g,
                          node: g.node(),
                          relative: {
                              row: m.rows({page: "current"}).indexes().indexOf(g.index().row),
                              column: g.index().column
                          }
                      };
                      this._emitEvent("key-focus", [this.s.dt, g, d || null]);
                      m.state.save()
                  }
              }
          }, _key: function (a) {
              if (this.s.waitingForDraw) a.preventDefault(); else {
                  var b = this.s.enable, c = !0 === b || "navigation-only" === b;
                  if (b) if (a.ctrlKey && 67 === a.keyCode) this._clipboardCopy(); else if (!(0 === a.keyCode || a.ctrlKey || a.metaKey || a.altKey) && this.s.lastFocus) {
                      var d =
                          this.s.dt;
                      if (!(this.c.keys && -1 === f.inArray(a.keyCode, this.c.keys))) switch (a.keyCode) {
                          case 9:
                              this._shift(a, a.shiftKey ? "left" : "right", !0);
                              break;
                          case 27:
                              this.s.blurable && !0 === b && this._blur();
                              break;
                          case 33:
                          case 34:
                              c && (a.preventDefault(), d.page(33 === a.keyCode ? "previous" : "next").draw(!1));
                              break;
                          case 35:
                          case 36:
                              c && (a.preventDefault(), b = d.cells({page: "current"}).indexes(), c = this._columns(), this._focus(d.cell(b[35 === a.keyCode ? b.length - 1 : c[0]]), null, !0, a));
                              break;
                          case 37:
                              c && this._shift(a, "left");
                              break;
                          case 38:
                              c &&
                              this._shift(a, "up");
                              break;
                          case 39:
                              c && this._shift(a, "right");
                              break;
                          case 40:
                              c && this._shift(a, "down");
                              break;
                          default:
                              !0 === b && this._emitEvent("key", [d, a.keyCode, this.s.lastFocus.cell, a])
                      }
                  }
              }
          }, _scroll: function (a, b, c, d) {
              var e = c[d](), f = c.outerHeight(), g = c.outerWidth(), i = b.scrollTop(), j = b.scrollLeft(),
                  h = a.height(), a = a.width();
              "position" === d && (e.top += parseInt(c.closest("table").css("top"), 10));
              e.top < i && b.scrollTop(e.top);
              e.left < j && b.scrollLeft(e.left);
              e.top + f > i + h && f < h && b.scrollTop(e.top + f - h);
              e.left + g > j + a && g <
              a && b.scrollLeft(e.left + g - a)
          }, _shift: function (a, b, c) {
              var d = this.s.dt, e = d.page.info(), h = e.recordsDisplay, g = this.s.lastFocus.cell, i = this._columns();
              if (g) {
                  var j = d.rows({filter: "applied", order: "applied"}).indexes().indexOf(g.index().row);
                  e.serverSide && (j += e.start);
                  d = d.columns(i).indexes().indexOf(g.index().column);
                  e = i[d];
                  "right" === b ? d >= i.length - 1 ? (j++, e = i[0]) : e = i[d + 1] : "left" === b ? 0 === d ? (j--, e = i[i.length - 1]) : e = i[d - 1] : "up" === b ? j-- : "down" === b && j++;
                  0 <= j && j < h && -1 !== f.inArray(e, i) ? (a.preventDefault(), this._focus(j,
                      e, !0, a)) : !c || !this.c.blurable ? a.preventDefault() : this._blur()
              }
          }, _tabInput: function () {
              var a = this, b = this.s.dt, c = null !== this.c.tabIndex ? this.c.tabIndex : b.settings()[0].iTabIndex;
              if (-1 != c) f('<div><input type="text" tabindex="' + c + '"/></div>').css({
                  position: "absolute",
                  height: 1,
                  width: 0,
                  overflow: "hidden"
              }).insertBefore(b.table().node()).children().on("focus", function (c) {
                  b.cell(":eq(0)", {page: "current"}).any() && a._focus(b.cell(":eq(0)", "0:visible", {page: "current"}), null, !0, c)
              })
          }, _updateFixedColumns: function (a) {
              var b =
                  this.s.dt, c = b.settings()[0];
              if (c._oFixedColumns) {
                  var d = c.aoColumns.length - c._oFixedColumns.s.iRightColumns;
                  (a < c._oFixedColumns.s.iLeftColumns || a >= d) && b.fixedColumns().update()
              }
          }
      });
      n.defaults = {
          blurable: !0,
          className: "focus",
          columns: "",
          editor: null,
          editorKeys: "navigation-only",
          editAutoSelect: !0,
          editOnFocus: !1,
          focus: null,
          keys: null,
          tabIndex: null
      };
      n.version = "2.3.2";
      f.fn.dataTable.KeyTable = n;
      f.fn.DataTable.KeyTable = n;
      l.Api.register("cell.blur()", function () {
          return this.iterator("table", function (a) {
              a.keytable &&
              a.keytable.blur()
          })
      });
      l.Api.register("cell().focus()", function () {
          return this.iterator("cell", function (a, b, c) {
              a.keytable && a.keytable.focus(b, c)
          })
      });
      l.Api.register("keys.disable()", function () {
          return this.iterator("table", function (a) {
              a.keytable && a.keytable.enable(!1)
          })
      });
      l.Api.register("keys.enable()", function (a) {
          return this.iterator("table", function (b) {
              b.keytable && b.keytable.enable(a === o ? !0 : a)
          })
      });
      l.ext.selector.cell.push(function (a, b, c) {
          var b = b.focused, a = a.keytable, d = [];
          if (!a || b === o) return c;
          for (var e =
              0, f = c.length; e < f; e++) (!0 === b && a.focused(c[e]) || !1 === b && !a.focused(c[e])) && d.push(c[e]);
          return d
      });
      f(h).on("preInit.dt.dtk", function (a, b) {
          if ("dt" === a.namespace) {
              var c = b.oInit.keys, d = l.defaults.keys;
              if (c || d) d = f.extend({}, d, c), !1 !== c && new n(b, d)
          }
      });
      return n
  });
  
  
  /*!
   Responsive 2.2.1
   2014-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (c) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (l) {
          return c(l, window, document)
      }) : "object" === typeof exports ? module.exports = function (l, k) {
          l || (l = window);
          if (!k || !k.fn.dataTable) k = require("datatables.net")(l, k).$;
          return c(k, l, l.document)
      } : c(jQuery, window, document)
  })(function (c, l, k, q) {
      function s(b, a, c) {
          var e = a + "-" + c;
          if (m[e]) return m[e];
          for (var f = [], b = b.cell(a, c).node().childNodes, a = 0, c = b.length; a < c; a++) f.push(b[a]);
          return m[e] = f
      }
  
      function r(b, a, c) {
          var e = a +
              "-" + c;
          if (m[e]) {
              for (var b = b.cell(a, c).node(), c = m[e][0].parentNode.childNodes, a = [], f = 0, g = c.length; f < g; f++) a.push(c[f]);
              c = 0;
              for (f = a.length; c < f; c++) b.appendChild(a[c]);
              m[e] = q
          }
      }
  
      var o = c.fn.dataTable, j = function (b, a) {
          if (!o.versionCheck || !o.versionCheck("1.10.10")) throw"DataTables Responsive requires DataTables 1.10.10 or newer";
          this.s = {dt: new o.Api(b), columns: [], current: []};
          this.s.dt.settings()[0].responsive || (a && "string" === typeof a.details ? a.details = {type: a.details} : a && !1 === a.details ? a.details = {type: !1} :
              a && !0 === a.details && (a.details = {type: "inline"}), this.c = c.extend(!0, {}, j.defaults, o.defaults.responsive, a), b.responsive = this, this._constructor())
      };
      c.extend(j.prototype, {
          _constructor: function () {
              var b = this, a = this.s.dt, d = a.settings()[0], e = c(l).width();
              a.settings()[0]._responsive = this;
              c(l).on("resize.dtr orientationchange.dtr", o.util.throttle(function () {
                  var a = c(l).width();
                  a !== e && (b._resize(), e = a)
              }));
              d.oApi._fnCallbackReg(d, "aoRowCreatedCallback", function (e) {
                  -1 !== c.inArray(!1, b.s.current) && c(">td, >th",
                      e).each(function (e) {
                      e = a.column.index("toData", e);
                      !1 === b.s.current[e] && c(this).css("display", "none")
                  })
              });
              a.on("destroy.dtr", function () {
                  a.off(".dtr");
                  c(a.table().body()).off(".dtr");
                  c(l).off("resize.dtr orientationchange.dtr");
                  c.each(b.s.current, function (a, c) {
                      !1 === c && b._setColumnVis(a, !0)
                  })
              });
              this.c.breakpoints.sort(function (a, b) {
                  return a.width < b.width ? 1 : a.width > b.width ? -1 : 0
              });
              this._classLogic();
              this._resizeAuto();
              d = this.c.details;
              !1 !== d.type && (b._detailsInit(), a.on("column-visibility.dtr", function (a,
                                                                                          c, e, d, h) {
                  h && (b._classLogic(), b._resizeAuto(), b._resize())
              }), a.on("draw.dtr", function () {
                  b._redrawChildren()
              }), c(a.table().node()).addClass("dtr-" + d.type));
              a.on("column-reorder.dtr", function () {
                  b._classLogic();
                  b._resizeAuto();
                  b._resize()
              });
              a.on("column-sizing.dtr", function () {
                  b._resizeAuto();
                  b._resize()
              });
              a.on("preXhr.dtr", function () {
                  var c = [];
                  a.rows().every(function () {
                      this.child.isShown() && c.push(this.id(true))
                  });
                  a.one("draw.dtr", function () {
                      b._resizeAuto();
                      b._resize();
                      a.rows(c).every(function () {
                          b._detailsDisplay(this,
                              false)
                      })
                  })
              });
              a.on("init.dtr", function () {
                  b._resizeAuto();
                  b._resize();
                  c.inArray(false, b.s.current) && a.columns.adjust()
              });
              this._resize()
          }, _columnsVisiblity: function (b) {
              var a = this.s.dt, d = this.s.columns, e, f, g = d.map(function (a, b) {
                  return {columnIdx: b, priority: a.priority}
              }).sort(function (a, b) {
                  return a.priority !== b.priority ? a.priority - b.priority : a.columnIdx - b.columnIdx
              }), i = c.map(d, function (a) {
                  return a.auto && null === a.minWidth ? !1 : !0 === a.auto ? "-" : -1 !== c.inArray(b, a.includeIn)
              }), n = 0;
              e = 0;
              for (f = i.length; e < f; e++) !0 ===
              i[e] && (n += d[e].minWidth);
              e = a.settings()[0].oScroll;
              e = e.sY || e.sX ? e.iBarWidth : 0;
              a = a.table().container().offsetWidth - e - n;
              e = 0;
              for (f = i.length; e < f; e++) d[e].control && (a -= d[e].minWidth);
              n = !1;
              e = 0;
              for (f = g.length; e < f; e++) {
                  var h = g[e].columnIdx;
                  "-" === i[h] && (!d[h].control && d[h].minWidth) && (n || 0 > a - d[h].minWidth ? (n = !0, i[h] = !1) : i[h] = !0, a -= d[h].minWidth)
              }
              g = !1;
              e = 0;
              for (f = d.length; e < f; e++) if (!d[e].control && !d[e].never && !i[e]) {
                  g = !0;
                  break
              }
              e = 0;
              for (f = d.length; e < f; e++) d[e].control && (i[e] = g);
              -1 === c.inArray(!0, i) && (i[0] = !0);
              return i
          }, _classLogic: function () {
              var b = this, a = this.c.breakpoints, d = this.s.dt, e = d.columns().eq(0).map(function (a) {
                  var b = this.column(a), e = b.header().className, a = d.settings()[0].aoColumns[a].responsivePriority;
                  a === q && (b = c(b.header()).data("priority"), a = b !== q ? 1 * b : 1E4);
                  return {
                      className: e,
                      includeIn: [],
                      auto: !1,
                      control: !1,
                      never: e.match(/\bnever\b/) ? !0 : !1,
                      priority: a
                  }
              }), f = function (a, b) {
                  var d = e[a].includeIn;
                  -1 === c.inArray(b, d) && d.push(b)
              }, g = function (c, d, h, g) {
                  if (h) if ("max-" === h) {
                      g = b._find(d).width;
                      d = 0;
                      for (h =
                               a.length; d < h; d++) a[d].width <= g && f(c, a[d].name)
                  } else if ("min-" === h) {
                      g = b._find(d).width;
                      d = 0;
                      for (h = a.length; d < h; d++) a[d].width >= g && f(c, a[d].name)
                  } else {
                      if ("not-" === h) {
                          d = 0;
                          for (h = a.length; d < h; d++) -1 === a[d].name.indexOf(g) && f(c, a[d].name)
                      }
                  } else e[c].includeIn.push(d)
              };
              e.each(function (b, e) {
                  for (var d = b.className.split(" "), f = !1, j = 0, l = d.length; j < l; j++) {
                      var k = c.trim(d[j]);
                      if ("all" === k) {
                          f = !0;
                          b.includeIn = c.map(a, function (a) {
                              return a.name
                          });
                          return
                      }
                      if ("none" === k || b.never) {
                          f = !0;
                          return
                      }
                      if ("control" === k) {
                          f = !0;
                          b.control =
                              !0;
                          return
                      }
                      c.each(a, function (a, b) {
                          var c = b.name.split("-"),
                              d = k.match(RegExp("(min\\-|max\\-|not\\-)?(" + c[0] + ")(\\-[_a-zA-Z0-9])?"));
                          d && (f = !0, d[2] === c[0] && d[3] === "-" + c[1] ? g(e, b.name, d[1], d[2] + d[3]) : d[2] === c[0] && !d[3] && g(e, b.name, d[1], d[2]))
                      })
                  }
                  f || (b.auto = !0)
              });
              this.s.columns = e
          }, _detailsDisplay: function (b, a) {
              var d = this, e = this.s.dt, f = this.c.details;
              if (f && !1 !== f.type) {
                  var g = f.display(b, a, function () {
                      return f.renderer(e, b[0], d._detailsObj(b[0]))
                  });
                  (!0 === g || !1 === g) && c(e.table().node()).triggerHandler("responsive-display.dt",
                      [e, b, g, a])
              }
          }, _detailsInit: function () {
              var b = this, a = this.s.dt, d = this.c.details;
              "inline" === d.type && (d.target = "td:first-child, th:first-child");
              a.on("draw.dtr", function () {
                  b._tabIndexes()
              });
              b._tabIndexes();
              c(a.table().body()).on("keyup.dtr", "td, th", function (a) {
                  a.keyCode === 13 && c(this).data("dtr-keyboard") && c(this).click()
              });
              var e = d.target;
              c(a.table().body()).on("click.dtr mousedown.dtr mouseup.dtr", "string" === typeof e ? e : "td, th", function (d) {
                  if (c(a.table().node()).hasClass("collapsed") && c.inArray(c(this).closest("tr").get(0),
                      a.rows().nodes().toArray()) !== -1) {
                      if (typeof e === "number") {
                          var g = e < 0 ? a.columns().eq(0).length + e : e;
                          if (a.cell(this).index().column !== g) return
                      }
                      g = a.row(c(this).closest("tr"));
                      d.type === "click" ? b._detailsDisplay(g, false) : d.type === "mousedown" ? c(this).css("outline", "none") : d.type === "mouseup" && c(this).blur().css("outline", "")
                  }
              })
          }, _detailsObj: function (b) {
              var a = this, d = this.s.dt;
              return c.map(this.s.columns, function (c, f) {
                  if (!c.never && !c.control) return {
                      title: d.settings()[0].aoColumns[f].sTitle, data: d.cell(b, f).render(a.c.orthogonal),
                      hidden: d.column(f).visible() && !a.s.current[f], columnIndex: f, rowIndex: b
                  }
              })
          }, _find: function (b) {
              for (var a = this.c.breakpoints, c = 0, e = a.length; c < e; c++) if (a[c].name === b) return a[c]
          }, _redrawChildren: function () {
              var b = this, a = this.s.dt;
              a.rows({page: "current"}).iterator("row", function (c, e) {
                  a.row(e);
                  b._detailsDisplay(a.row(e), !0)
              })
          }, _resize: function () {
              var b = this, a = this.s.dt, d = c(l).width(), e = this.c.breakpoints, f = e[0].name, g = this.s.columns, i,
                  n = this.s.current.slice();
              for (i = e.length - 1; 0 <= i; i--) if (d <= e[i].width) {
                  f =
                      e[i].name;
                  break
              }
              var h = this._columnsVisiblity(f);
              this.s.current = h;
              e = !1;
              i = 0;
              for (d = g.length; i < d; i++) if (!1 === h[i] && !g[i].never && !g[i].control) {
                  e = !0;
                  break
              }
              c(a.table().node()).toggleClass("collapsed", e);
              var j = !1, k = 0;
              a.columns().eq(0).each(function (a, c) {
                  !0 === h[c] && k++;
                  h[c] !== n[c] && (j = !0, b._setColumnVis(a, h[c]))
              });
              j && (this._redrawChildren(), c(a.table().node()).trigger("responsive-resize.dt", [a, this.s.current]), 0 === a.page.info().recordsDisplay && c("td", a.table().body()).eq(0).attr("colspan", k))
          }, _resizeAuto: function () {
              var b =
                  this.s.dt, a = this.s.columns;
              if (this.c.auto && -1 !== c.inArray(!0, c.map(a, function (a) {
                  return a.auto
              }))) {
                  c.isEmptyObject(m) || c.each(m, function (a) {
                      a = a.split("-");
                      r(b, 1 * a[0], 1 * a[1])
                  });
                  b.table().node();
                  var d = b.table().node().cloneNode(!1), e = c(b.table().header().cloneNode(!1)).appendTo(d),
                      f = c(b.table().body()).clone(!1, !1).empty().appendTo(d),
                      g = b.columns().header().filter(function (a) {
                          return b.column(a).visible()
                      }).to$().clone(!1).css("display", "table-cell").css("min-width", 0);
                  c(f).append(c(b.rows({page: "current"}).nodes()).clone(!1)).find("th, td").css("display",
                      "");
                  if (f = b.table().footer()) {
                      var f = c(f.cloneNode(!1)).appendTo(d), i = b.columns().footer().filter(function (a) {
                          return b.column(a).visible()
                      }).to$().clone(!1).css("display", "table-cell");
                      c("<tr/>").append(i).appendTo(f)
                  }
                  c("<tr/>").append(g).appendTo(e);
                  "inline" === this.c.details.type && c(d).addClass("dtr-inline collapsed");
                  c(d).find("[name]").removeAttr("name");
                  d = c("<div/>").css({width: 1, height: 1, overflow: "hidden", clear: "both"}).append(d);
                  d.insertBefore(b.table().node());
                  g.each(function (c) {
                      c = b.column.index("fromVisible",
                          c);
                      a[c].minWidth = this.offsetWidth || 0
                  });
                  d.remove()
              }
          }, _setColumnVis: function (b, a) {
              var d = this.s.dt, e = a ? "" : "none";
              c(d.column(b).header()).css("display", e);
              c(d.column(b).footer()).css("display", e);
              d.column(b).nodes().to$().css("display", e);
              c.isEmptyObject(m) || d.cells(null, b).indexes().each(function (a) {
                  r(d, a.row, a.column)
              })
          }, _tabIndexes: function () {
              var b = this.s.dt, a = b.cells({page: "current"}).nodes().to$(), d = b.settings()[0],
                  e = this.c.details.target;
              a.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
              a = "number" === typeof e ? ":eq(" + e + ")" : e;
              "td:first-child, th:first-child" === a && (a = ">td:first-child, >th:first-child");
              c(a, b.rows({page: "current"}).nodes()).attr("tabIndex", d.iTabIndex).data("dtr-keyboard", 1)
          }
      });
      j.breakpoints = [{name: "desktop", width: Infinity}, {name: "tablet-l", width: 1024}, {
          name: "tablet-p",
          width: 768
      }, {name: "mobile-l", width: 480}, {name: "mobile-p", width: 320}];
      j.display = {
          childRow: function (b, a, d) {
              if (a) {
                  if (c(b.node()).hasClass("parent")) return b.child(d(), "child").show(), !0
              } else {
                  if (b.child.isShown()) return b.child(!1),
                      c(b.node()).removeClass("parent"), !1;
                  b.child(d(), "child").show();
                  c(b.node()).addClass("parent");
                  return !0
              }
          }, childRowImmediate: function (b, a, d) {
              if (!a && b.child.isShown() || !b.responsive.hasHidden()) return b.child(!1), c(b.node()).removeClass("parent"), !1;
              b.child(d(), "child").show();
              c(b.node()).addClass("parent");
              return !0
          }, modal: function (b) {
              return function (a, d, e) {
                  if (d) c("div.dtr-modal-content").empty().append(e()); else {
                      var f = function () {
                              g.remove();
                              c(k).off("keypress.dtr")
                          },
                          g = c('<div class="dtr-modal"/>').append(c('<div class="dtr-modal-display"/>').append(c('<div class="dtr-modal-content"/>').append(e())).append(c('<div class="dtr-modal-close">&times;</div>').click(function () {
                              f()
                          }))).append(c('<div class="dtr-modal-background"/>').click(function () {
                              f()
                          })).appendTo("body");
                      c(k).on("keyup.dtr", function (a) {
                          27 === a.keyCode && (a.stopPropagation(), f())
                      })
                  }
                  b && b.header && c("div.dtr-modal-content").prepend("<h2>" + b.header(a) + "</h2>")
              }
          }
      };
      var m = {};
      j.renderer = {
          listHiddenNodes: function () {
              return function (b, a, d) {
                  var e = c('<ul data-dtr-index="' + a + '" class="dtr-details"/>'), f = !1;
                  c.each(d, function (a, d) {
                      d.hidden && (c('<li data-dtr-index="' + d.columnIndex + '" data-dt-row="' + d.rowIndex + '" data-dt-column="' + d.columnIndex + '"><span class="dtr-title">' + d.title + "</span> </li>").append(c('<span class="dtr-data"/>').append(s(b,
                          d.rowIndex, d.columnIndex))).appendTo(e), f = !0)
                  });
                  return f ? e : !1
              }
          }, listHidden: function () {
              return function (b, a, d) {
                  return (b = c.map(d, function (a) {
                      return a.hidden ? '<li data-dtr-index="' + a.columnIndex + '" data-dt-row="' + a.rowIndex + '" data-dt-column="' + a.columnIndex + '"><span class="dtr-title">' + a.title + '</span> <span class="dtr-data">' + a.data + "</span></li>" : ""
                  }).join("")) ? c('<ul data-dtr-index="' + a + '" class="dtr-details"/>').append(b) : !1
              }
          }, tableAll: function (b) {
              b = c.extend({tableClass: ""}, b);
              return function (a,
                               d, e) {
                  a = c.map(e, function (a) {
                      return '<tr data-dt-row="' + a.rowIndex + '" data-dt-column="' + a.columnIndex + '"><td>' + a.title + ":</td> <td>" + a.data + "</td></tr>"
                  }).join("");
                  return c('<table class="' + b.tableClass + ' dtr-details" width="100%"/>').append(a)
              }
          }
      };
      j.defaults = {
          breakpoints: j.breakpoints,
          auto: !0,
          details: {display: j.display.childRow, renderer: j.renderer.listHidden(), target: 0, type: "inline"},
          orthogonal: "display"
      };
      var p = c.fn.dataTable.Api;
      p.register("responsive()", function () {
          return this
      });
      p.register("responsive.index()",
          function (b) {
              b = c(b);
              return {column: b.data("dtr-index"), row: b.parent().data("dtr-index")}
          });
      p.register("responsive.rebuild()", function () {
          return this.iterator("table", function (b) {
              b._responsive && b._responsive._classLogic()
          })
      });
      p.register("responsive.recalc()", function () {
          return this.iterator("table", function (b) {
              b._responsive && (b._responsive._resizeAuto(), b._responsive._resize())
          })
      });
      p.register("responsive.hasHidden()", function () {
          var b = this.context[0];
          return b._responsive ? -1 !== c.inArray(!1, b._responsive.s.current) :
              !1
      });
      p.registerPlural("columns().responsiveHidden()", "column().responsiveHidden()", function () {
          return this.iterator("column", function (b, a) {
              return b._responsive ? b._responsive.s.current[a] : !1
          }, 1)
      });
      j.version = "2.2.1";
      c.fn.dataTable.Responsive = j;
      c.fn.DataTable.Responsive = j;
      c(k).on("preInit.dt.dtr", function (b, a) {
          if ("dt" === b.namespace && (c(a.nTable).hasClass("responsive") || c(a.nTable).hasClass("dt-responsive") || a.oInit.responsive || o.defaults.responsive)) {
              var d = a.oInit.responsive;
              !1 !== d && new j(a, c.isPlainObject(d) ?
                  d : {})
          }
      });
      return j
  });
  
  
  /*!
   Bootstrap 4 integration for DataTables' Responsive
   ©2016 SpryMedia Ltd - datatables.net/license
  */
  (function (c) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net-bs4", "datatables.net-responsive"], function (a) {
          return c(a, window, document)
      }) : "object" === typeof exports ? module.exports = function (a, b) {
          a || (a = window);
          if (!b || !b.fn.dataTable) b = require("datatables.net-bs4")(a, b).$;
          b.fn.dataTable.Responsive || require("datatables.net-responsive")(a, b);
          return c(b, a, a.document)
      } : c(jQuery, window, document)
  })(function (c) {
      var a = c.fn.dataTable, b = a.Responsive.display, g = b.modal,
          e = c('<div class="modal fade dtr-bs-modal" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"/></div></div></div>');
      b.modal = function (a) {
          return function (b, d, f) {
              if (c.fn.modal) {
                  if (!d) {
                      if (a && a.header) {
                          var d = e.find("div.modal-header"), h = d.find("button").detach();
                          d.empty().append('<h4 class="modal-title">' + a.header(b) + "</h4>").append(h)
                      }
                      e.find("div.modal-body").empty().append(f());
                      e.appendTo("body").modal()
                  }
              } else g(b, d, f)
          }
      };
      return a.Responsive
  });
  
  
  /*!
   RowGroup 1.0.2
   ©2017 SpryMedia Ltd - datatables.net/license
  */
  (function (c) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (d) {
          return c(d, window, document)
      }) : "object" === typeof exports ? module.exports = function (d, f) {
          d || (d = window);
          if (!f || !f.fn.dataTable) f = require("datatables.net")(d, f).$;
          return c(f, d, d.document)
      } : c(jQuery, window, document)
  })(function (c, d, f, i) {
      var e = c.fn.dataTable, g = function (a, b) {
          if (!e.versionCheck || !e.versionCheck("1.10.8")) throw"RowGroup requires DataTables 1.10.8 or newer";
          this.c = c.extend(!0, {}, e.defaults.rowGroup,
              g.defaults, b);
          this.s = {dt: new e.Api(a), dataFn: e.ext.oApi._fnGetObjectDataFn(this.c.dataSrc)};
          this.dom = {};
          var j = this.s.dt.settings()[0], k = j.rowGroup;
          if (k) return k;
          j.rowGroup = this;
          this._constructor()
      };
      c.extend(g.prototype, {
          dataSrc: function (a) {
              if (a === i) return this.c.dataSrc;
              var b = this.s.dt;
              this.c.dataSrc = a;
              this.s.dataFn = e.ext.oApi._fnGetObjectDataFn(this.c.dataSrc);
              c(b.table().node()).triggerHandler("rowgroup-datasrc.dt", [b, a]);
              return this
          }, disable: function () {
              this.c.enable = !1;
              return this
          }, enable: function (a) {
              if (!1 ===
                  a) return this.disable();
              this.c.enable = !0;
              return this
          }, _constructor: function () {
              var a = this, b = this.s.dt;
              b.on("draw.dtrg", function () {
                  a.c.enable && a._draw()
              });
              b.on("column-visibility.dt.dtrg responsive-resize.dt.dtrg", function () {
                  a._adjustColspan()
              });
              b.on("destroy", function () {
                  b.off(".dtrg")
              })
          }, _adjustColspan: function () {
              c("tr." + this.c.className, this.s.dt.table().body()).attr("colspan", this._colspan())
          }, _colspan: function () {
              return this.s.dt.columns().visible().reduce(function (a, b) {
                  return a + b
              }, 0)
          }, _draw: function () {
              var a =
                  this, b = this.s.dt, c = [], e, d;
              b.rows({page: "current"}).every(function () {
                  var b = this.data(), b = a.s.dataFn(b);
                  if (e === i || b !== e) c.push([]), e = b;
                  c[c.length - 1].push(this.index())
              });
              for (var g = 0, f = c.length; g < f; g++) {
                  var h = c[g], l = b.row(h[0]), m = this.s.dataFn(l.data());
                  this.c.startRender && (d = this.c.startRender.call(this, b.rows(h), m), this._rowWrap(d, this.c.startClassName).insertBefore(l.node()));
                  this.c.endRender && (d = this.c.endRender.call(this, b.rows(h), m), this._rowWrap(d, this.c.endClassName).insertAfter(b.row(h[h.length -
                  1]).node()))
              }
          }, _rowWrap: function (a, b) {
              return ("object" === typeof a && a.nodeName && "tr" === a.nodeName.toLowerCase() ? c(a) : a instanceof c && a.length && "tr" === a[0].nodeName.toLowerCase() ? a : c("<tr/>").append(c("<td/>").attr("colspan", this._colspan()).append(a))).addClass(this.c.className).addClass(b)
          }
      });
      g.defaults = {
          className: "group",
          dataSrc: 0,
          enable: !0,
          endClassName: "group-end",
          endRender: null,
          startClassName: "group-start",
          startRender: function (a, b) {
              return b
          }
      };
      g.version = "1.0.2";
      c.fn.dataTable.RowGroup = g;
      c.fn.DataTable.RowGroup =
          g;
      e.Api.register("rowGroup()", function () {
          return this
      });
      e.Api.register("rowGroup().disable()", function () {
          return this.iterator("table", function (a) {
              a.rowGroup && a.rowGroup.enable(!1)
          })
      });
      e.Api.register("rowGroup().enable()", function (a) {
          return this.iterator("table", function (b) {
              b.rowGroup && b.rowGroup.enable(a === i ? !0 : a)
          })
      });
      e.Api.register("rowGroup().dataSrc()", function (a) {
          return a === i ? this.context[0].rowGroup.dataSrc() : this.iterator("table", function (b) {
              b.rowGroup && b.rowGroup.dataSrc(a)
          })
      });
      c(f).on("preInit.dt.dtrg",
          function (a, b) {
              if ("dt" === a.namespace) {
                  var d = b.oInit.rowGroup, f = e.defaults.rowGroup;
                  if (d || f) f = c.extend({}, f, d), !1 !== d && new g(b, f)
              }
          });
      return g
  });
  
  
  /*!
   RowReorder 1.2.3
   2015-2017 SpryMedia Ltd - datatables.net/license
  */
  (function (d) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (f) {
          return d(f, window, document)
      }) : "object" === typeof exports ? module.exports = function (f, g) {
          f || (f = window);
          if (!g || !g.fn.dataTable) g = require("datatables.net")(f, g).$;
          return d(g, f, f.document)
      } : d(jQuery, window, document)
  })(function (d, f, g, m) {
      var h = d.fn.dataTable, k = function (c, b) {
          if (!h.versionCheck || !h.versionCheck("1.10.8")) throw"DataTables RowReorder requires DataTables 1.10.8 or newer";
          this.c = d.extend(!0, {}, h.defaults.rowReorder,
              k.defaults, b);
          this.s = {
              bodyTop: null,
              dt: new h.Api(c),
              getDataFn: h.ext.oApi._fnGetObjectDataFn(this.c.dataSrc),
              middles: null,
              scroll: {},
              scrollInterval: null,
              setDataFn: h.ext.oApi._fnSetObjectDataFn(this.c.dataSrc),
              start: {top: 0, left: 0, offsetTop: 0, offsetLeft: 0, nodes: []},
              windowHeight: 0,
              documentOuterHeight: 0,
              domCloneOuterHeight: 0
          };
          this.dom = {clone: null, dtScroll: d("div.dataTables_scrollBody", this.s.dt.table().container())};
          var a = this.s.dt.settings()[0], e = a.rowreorder;
          if (e) return e;
          a.rowreorder = this;
          this._constructor()
      };
      d.extend(k.prototype, {
          _constructor: function () {
              var c = this, b = this.s.dt, a = d(b.table().node());
              "static" === a.css("position") && a.css("position", "relative");
              d(b.table().container()).on("mousedown.rowReorder touchstart.rowReorder", this.c.selector, function (a) {
                  if (c.c.enable) {
                      var i = d(this).closest("tr"), j = b.row(i);
                      if (j.any()) return c._emitEvent("pre-row-reorder", {
                          node: j.node(),
                          index: j.index()
                      }), c._mouseDown(a, i), !1
                  }
              });
              b.on("destroy.rowReorder", function () {
                  d(b.table().container()).off(".rowReorder");
                  b.off(".rowReorder")
              })
          },
          _cachePositions: function () {
              var c = this.s.dt, b = d(c.table().node()).find("thead").outerHeight(),
                  a = d.unique(c.rows({page: "current"}).nodes().toArray()), e = d.map(a, function (a) {
                      return d(a).position().top - b
                  }), a = d.map(e, function (a, b) {
                      return e.length < b - 1 ? (a + e[b + 1]) / 2 : (a + a + d(c.row(":last-child").node()).outerHeight()) / 2
                  });
              this.s.middles = a;
              this.s.bodyTop = d(c.table().body()).offset().top;
              this.s.windowHeight = d(f).height();
              this.s.documentOuterHeight = d(g).outerHeight()
          }, _clone: function (c) {
              var b = d(this.s.dt.table().node().cloneNode(!1)).addClass("dt-rowReorder-float").append("<tbody/>").append(c.clone(!1)),
                  a = c.outerWidth(), e = c.outerHeight(), i = c.children().map(function () {
                      return d(this).width()
                  });
              b.width(a).height(e).find("tr").children().each(function (a) {
                  this.style.width = i[a] + "px"
              });
              b.appendTo("body");
              this.dom.clone = b;
              this.s.domCloneOuterHeight = b.outerHeight()
          }, _clonePosition: function (c) {
              var b = this.s.start, a = this._eventToPage(c, "Y") - b.top, c = this._eventToPage(c, "X") - b.left,
                  e = this.c.snapX, a = a + b.offsetTop,
                  b = !0 === e ? b.offsetLeft : "number" === typeof e ? b.offsetLeft + e : c + b.offsetLeft;
              0 > a ? a = 0 : a + this.s.domCloneOuterHeight >
                  this.s.documentOuterHeight && (a = this.s.documentOuterHeight - this.s.domCloneOuterHeight);
              this.dom.clone.css({top: a, left: b})
          }, _emitEvent: function (c, b) {
              this.s.dt.iterator("table", function (a) {
                  d(a.nTable).triggerHandler(c + ".dt", b)
              })
          }, _eventToPage: function (c, b) {
              return -1 !== c.type.indexOf("touch") ? c.originalEvent.touches[0]["page" + b] : c["page" + b]
          }, _mouseDown: function (c, b) {
              var a = this, e = this.s.dt, i = this.s.start, j = b.offset();
              i.top = this._eventToPage(c, "Y");
              i.left = this._eventToPage(c, "X");
              i.offsetTop = j.top;
              i.offsetLeft =
                  j.left;
              i.nodes = d.unique(e.rows({page: "current"}).nodes().toArray());
              this._cachePositions();
              this._clone(b);
              this._clonePosition(c);
              this.dom.target = b;
              b.addClass("dt-rowReorder-moving");
              d(g).on("mouseup.rowReorder touchend.rowReorder", function (b) {
                  a._mouseUp(b)
              }).on("mousemove.rowReorder touchmove.rowReorder", function (b) {
                  a._mouseMove(b)
              });
              d(f).width() === d(g).width() && d(g.body).addClass("dt-rowReorder-noOverflow");
              e = this.dom.dtScroll;
              this.s.scroll = {
                  windowHeight: d(f).height(),
                  windowWidth: d(f).width(),
                  dtTop: e.length ?
                      e.offset().top : null,
                  dtLeft: e.length ? e.offset().left : null,
                  dtHeight: e.length ? e.outerHeight() : null,
                  dtWidth: e.length ? e.outerWidth() : null
              }
          }, _mouseMove: function (c) {
              this._clonePosition(c);
              for (var b = this._eventToPage(c, "Y") - this.s.bodyTop, a = this.s.middles, e = null, i = this.s.dt, j = i.table().body(), g = 0, f = a.length; g < f; g++) if (b < a[g]) {
                  e = g;
                  break
              }
              null === e && (e = a.length);
              if (null === this.s.lastInsert || this.s.lastInsert !== e) 0 === e ? this.dom.target.prependTo(j) : (b = d.unique(i.rows({page: "current"}).nodes().toArray()), e > this.s.lastInsert ?
                  this.dom.target.insertAfter(b[e - 1]) : this.dom.target.insertBefore(b[e])), this._cachePositions(), this.s.lastInsert = e;
              this._shiftScroll(c)
          }, _mouseUp: function () {
              var c = this, b = this.s.dt, a, e, i = this.c.dataSrc;
              this.dom.clone.remove();
              this.dom.clone = null;
              this.dom.target.removeClass("dt-rowReorder-moving");
              d(g).off(".rowReorder");
              d(g.body).removeClass("dt-rowReorder-noOverflow");
              clearInterval(this.s.scrollInterval);
              this.s.scrollInterval = null;
              var j = this.s.start.nodes, f = d.unique(b.rows({page: "current"}).nodes().toArray()),
                  k = {}, h = [], l = [], n = this.s.getDataFn, m = this.s.setDataFn;
              a = 0;
              for (e = j.length; a < e; a++) if (j[a] !== f[a]) {
                  var o = b.row(f[a]).id(), s = b.row(f[a]).data(), p = b.row(j[a]).data();
                  o && (k[o] = n(p));
                  h.push({node: f[a], oldData: n(s), newData: n(p), newPosition: a, oldPosition: d.inArray(f[a], j)});
                  l.push(f[a])
              }
              var q = [h, {dataSrc: i, nodes: l, values: k, triggerRow: b.row(this.dom.target)}];
              this._emitEvent("row-reorder", q);
              var r = function () {
                  if (c.c.update) {
                      a = 0;
                      for (e = h.length; a < e; a++) {
                          var d = b.row(h[a].node).data();
                          m(d, h[a].newData);
                          b.columns().every(function () {
                              this.dataSrc() ===
                              i && b.cell(h[a].node, this.index()).invalidate("data")
                          })
                      }
                      c._emitEvent("row-reordered", q);
                      b.draw(!1)
                  }
              };
              this.c.editor ? (this.c.enable = !1, this.c.editor.edit(l, !1, d.extend({submit: "changed"}, this.c.formOptions)).multiSet(i, k).one("submitUnsuccessful.rowReorder", function () {
                  b.draw(!1)
              }).one("submitSuccess.rowReorder", function () {
                  r()
              }).one("submitComplete", function () {
                  c.c.enable = !0;
                  c.c.editor.off(".rowReorder")
              }).submit()) : r()
          }, _shiftScroll: function (c) {
              var b = this, a = this.s.scroll, e = !1, d = c.pageY - g.body.scrollTop,
                  f, h;
              65 > d ? f = -5 : d > a.windowHeight - 65 && (f = 5);
              null !== a.dtTop && c.pageY < a.dtTop + 65 ? h = -5 : null !== a.dtTop && c.pageY > a.dtTop + a.dtHeight - 65 && (h = 5);
              f || h ? (a.windowVert = f, a.dtVert = h, e = !0) : this.s.scrollInterval && (clearInterval(this.s.scrollInterval), this.s.scrollInterval = null);
              !this.s.scrollInterval && e && (this.s.scrollInterval = setInterval(function () {
                  if (a.windowVert) g.body.scrollTop = g.body.scrollTop + a.windowVert;
                  if (a.dtVert) {
                      var c = b.dom.dtScroll[0];
                      if (a.dtVert) c.scrollTop = c.scrollTop + a.dtVert
                  }
              }, 20))
          }
      });
      k.defaults = {
          dataSrc: 0,
          editor: null, enable: !0, formOptions: {}, selector: "td:first-child", snapX: !1, update: !0
      };
      var l = d.fn.dataTable.Api;
      l.register("rowReorder()", function () {
          return this
      });
      l.register("rowReorder.enable()", function (c) {
          c === m && (c = !0);
          return this.iterator("table", function (b) {
              b.rowreorder && (b.rowreorder.c.enable = c)
          })
      });
      l.register("rowReorder.disable()", function () {
          return this.iterator("table", function (c) {
              c.rowreorder && (c.rowreorder.c.enable = !1)
          })
      });
      k.version = "1.2.3";
      d.fn.dataTable.RowReorder = k;
      d.fn.DataTable.RowReorder =
          k;
      d(g).on("init.dt.dtr", function (c, b) {
          if ("dt" === c.namespace) {
              var a = b.oInit.rowReorder, e = h.defaults.rowReorder;
              if (a || e) e = d.extend({}, a, e), !1 !== a && new k(b, e)
          }
      });
      return k
  });
  
  
  /*!
   Scroller 1.4.4
   ©2011-2018 SpryMedia Ltd - datatables.net/license
  */
  (function (e) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (g) {
          return e(g, window, document)
      }) : "object" === typeof exports ? module.exports = function (g, j) {
          g || (g = window);
          if (!j || !j.fn.dataTable) j = require("datatables.net")(g, j).$;
          return e(j, g, g.document)
      } : e(jQuery, window, document)
  })(function (e, g, j, l) {
      var m = e.fn.dataTable, h = function (a, b) {
          this instanceof h ? (b === l && (b = {}), this.s = {
              dt: e.fn.dataTable.Api(a).settings()[0],
              tableTop: 0,
              tableBottom: 0,
              redrawTop: 0,
              redrawBottom: 0,
              autoHeight: !0,
              viewportRows: 0,
              stateTO: null,
              drawTO: null,
              heights: {jump: null, page: null, virtual: null, scroll: null, row: null, viewport: null},
              topRowFloat: 0,
              scrollDrawDiff: null,
              loaderVisible: !1,
              forceReposition: !1
          }, this.s = e.extend(this.s, h.oDefaults, b), this.s.heights.row = this.s.rowHeight, this.dom = {
              force: j.createElement("div"),
              scroller: null,
              table: null,
              loader: null
          }, this.s.dt.oScroller || (this.s.dt.oScroller = this, this._fnConstruct())) : alert("Scroller warning: Scroller must be initialised with the 'new' keyword.")
      };
      e.extend(h.prototype,
          {
              fnRowToPixels: function (a, b, c) {
                  a = c ? this._domain("virtualToPhysical", a * this.s.heights.row) : this.s.baseScrollTop + (a - this.s.baseRowTop) * this.s.heights.row;
                  return b || b === l ? parseInt(a, 10) : a
              }, fnPixelsToRow: function (a, b, c) {
                  var d = a - this.s.baseScrollTop,
                      a = c ? this._domain("physicalToVirtual", a) / this.s.heights.row : d / this.s.heights.row + this.s.baseRowTop;
                  return b || b === l ? parseInt(a, 10) : a
              }, fnScrollToRow: function (a, b) {
                  var c = this, d = !1, f = this.fnRowToPixels(a),
                      i = a - (this.s.displayBuffer - 1) / 2 * this.s.viewportRows;
                  0 > i &&
                  (i = 0);
                  if ((f > this.s.redrawBottom || f < this.s.redrawTop) && this.s.dt._iDisplayStart !== i) d = !0, f = this.fnRowToPixels(a, !1, !0), this.s.redrawTop < f && f < this.s.redrawBottom && (this.s.forceReposition = !0, b = !1);
                  "undefined" == typeof b || b ? (this.s.ani = d, e(this.dom.scroller).animate({scrollTop: f}, function () {
                      setTimeout(function () {
                          c.s.ani = !1
                      }, 25)
                  })) : e(this.dom.scroller).scrollTop(f)
              }, fnMeasure: function (a) {
                  this.s.autoHeight && this._fnCalcRowHeight();
                  var b = this.s.heights;
                  b.row && (b.viewport = e.contains(j, this.dom.scroller) ? e(this.dom.scroller).height() :
                      this._parseHeight(e(this.dom.scroller).css("height")), b.viewport || (b.viewport = this._parseHeight(e(this.dom.scroller).css("max-height"))), this.s.viewportRows = parseInt(b.viewport / b.row, 10) + 1, this.s.dt._iDisplayLength = this.s.viewportRows * this.s.displayBuffer);
                  (a === l || a) && this.s.dt.oInstance.fnDraw(!1)
              }, fnPageInfo: function () {
                  var a = this.dom.scroller.scrollTop, b = this.s.dt.fnRecordsDisplay(),
                      c = Math.ceil(this.fnPixelsToRow(a + this.s.heights.viewport, !1, this.s.ani));
                  return {
                      start: Math.floor(this.fnPixelsToRow(a,
                          !1, this.s.ani)), end: b < c ? b - 1 : c - 1
                  }
              }, _fnConstruct: function () {
                  var a = this;
                  if (this.s.dt.oFeatures.bPaginate) {
                      this.dom.force.style.position = "relative";
                      this.dom.force.style.top = "0px";
                      this.dom.force.style.left = "0px";
                      this.dom.force.style.width = "1px";
                      this.dom.scroller = e("div." + this.s.dt.oClasses.sScrollBody, this.s.dt.nTableWrapper)[0];
                      this.dom.scroller.appendChild(this.dom.force);
                      this.dom.scroller.style.position = "relative";
                      this.dom.table = e(">table", this.dom.scroller)[0];
                      this.dom.table.style.position = "absolute";
                      this.dom.table.style.top = "0px";
                      this.dom.table.style.left = "0px";
                      e(this.s.dt.nTableWrapper).addClass("DTS");
                      this.s.loadingIndicator && (this.dom.loader = e('<div class="dataTables_processing DTS_Loading">' + this.s.dt.oLanguage.sLoadingRecords + "</div>").css("display", "none"), e(this.dom.scroller.parentNode).css("position", "relative").append(this.dom.loader));
                      this.s.heights.row && "auto" != this.s.heights.row && (this.s.autoHeight = !1);
                      this.fnMeasure(!1);
                      this.s.ingnoreScroll = !0;
                      this.s.stateSaveThrottle = this.s.dt.oApi._fnThrottle(function () {
                              a.s.dt.oApi._fnSaveState(a.s.dt)
                          },
                          500);
                      e(this.dom.scroller).on("scroll.DTS", function () {
                          a._fnScroll.call(a)
                      });
                      e(this.dom.scroller).on("touchstart.DTS", function () {
                          a._fnScroll.call(a)
                      });
                      this.s.dt.aoDrawCallback.push({
                          fn: function () {
                              a.s.dt.bInitialised && a._fnDrawCallback.call(a)
                          }, sName: "Scroller"
                      });
                      e(g).on("resize.DTS", function () {
                          a.fnMeasure(false);
                          a._fnInfo()
                      });
                      var b = !0;
                      this.s.dt.oApi._fnCallbackReg(this.s.dt, "aoStateSaveParams", function (c, d) {
                          if (b && a.s.dt.oLoadedState) {
                              d.iScroller = a.s.dt.oLoadedState.iScroller;
                              d.iScrollerTopRow = a.s.dt.oLoadedState.iScrollerTopRow;
                              b = false
                          } else {
                              d.iScroller = a.dom.scroller.scrollTop;
                              d.iScrollerTopRow = a.s.topRowFloat
                          }
                      }, "Scroller_State");
                      this.s.dt.oLoadedState && (this.s.topRowFloat = this.s.dt.oLoadedState.iScrollerTopRow || 0);
                      e(this.s.dt.nTable).one("init.dt", function () {
                          a.fnMeasure()
                      });
                      this.s.dt.aoDestroyCallback.push({
                          sName: "Scroller", fn: function () {
                              e(g).off("resize.DTS");
                              e(a.dom.scroller).off("touchstart.DTS scroll.DTS");
                              e(a.s.dt.nTableWrapper).removeClass("DTS");
                              e("div.DTS_Loading", a.dom.scroller.parentNode).remove();
                              e(a.s.dt.nTable).off("init.dt");
                              a.dom.table.style.position = "";
                              a.dom.table.style.top = "";
                              a.dom.table.style.left = ""
                          }
                      })
                  } else this.s.dt.oApi._fnLog(this.s.dt, 0, "Pagination must be enabled for Scroller")
              }, _fnScroll: function () {
                  var a = this, b = this.s.heights, c = this.dom.scroller.scrollTop, d;
                  if (!this.s.skip && !this.s.ingnoreScroll) if (this.s.dt.bFiltered || this.s.dt.bSorted) this.s.lastScrollTop = 0; else {
                      this._fnInfo();
                      clearTimeout(this.s.stateTO);
                      this.s.stateTO = setTimeout(function () {
                          a.s.dt.oApi._fnSaveState(a.s.dt)
                      }, 250);
                      if (this.s.forceReposition ||
                          c < this.s.redrawTop || c > this.s.redrawBottom) {
                          var f = Math.ceil((this.s.displayBuffer - 1) / 2 * this.s.viewportRows);
                          Math.abs(c - this.s.lastScrollTop) > b.viewport || this.s.ani || this.s.forceReposition ? (d = parseInt(this._domain("physicalToVirtual", c) / b.row, 10) - f, this.s.topRowFloat = this._domain("physicalToVirtual", c) / b.row) : (d = this.fnPixelsToRow(c) - f, this.s.topRowFloat = this.fnPixelsToRow(c, !1));
                          this.s.forceReposition = !1;
                          0 >= d ? d = 0 : d + this.s.dt._iDisplayLength > this.s.dt.fnRecordsDisplay() ? (d = this.s.dt.fnRecordsDisplay() -
                              this.s.dt._iDisplayLength, 0 > d && (d = 0)) : 0 !== d % 2 && d++;
                          if (d != this.s.dt._iDisplayStart && (this.s.tableTop = e(this.s.dt.nTable).offset().top, this.s.tableBottom = e(this.s.dt.nTable).height() + this.s.tableTop, b = function () {
                              if (a.s.scrollDrawReq === null) a.s.scrollDrawReq = c;
                              a.s.dt._iDisplayStart = d;
                              a.s.dt.oApi._fnDraw(a.s.dt)
                          }, this.s.dt.oFeatures.bServerSide ? (clearTimeout(this.s.drawTO), this.s.drawTO = setTimeout(b, this.s.serverWait)) : b(), this.dom.loader && !this.s.loaderVisible)) this.dom.loader.css("display", "block"),
                              this.s.loaderVisible = !0
                      } else this.s.topRowFloat = this._domain("physicalToVirtual", c) / b.row;
                      this.s.lastScrollTop = c;
                      this.s.stateSaveThrottle()
                  }
              }, _domain: function (a, b) {
                  var c = this.s.heights, d;
                  if (c.virtual === c.scroll) return b;
                  var e = (c.scroll - c.viewport) / 2, i = (c.virtual - c.viewport) / 2;
                  d = i / (e * e);
                  if ("virtualToPhysical" === a) {
                      if (b < i) return Math.pow(b / d, 0.5);
                      b = 2 * i - b;
                      return 0 > b ? c.scroll : 2 * e - Math.pow(b / d, 0.5)
                  }
                  if ("physicalToVirtual" === a) {
                      if (b < e) return b * b * d;
                      b = 2 * e - b;
                      return 0 > b ? c.virtual : 2 * i - b * b * d
                  }
              }, _parseHeight: function (a) {
                  var b,
                      c = /^([+-]?(?:\d+(?:\.\d+)?|\.\d+))(px|em|rem|vh)$/.exec(a);
                  if (null === c) return 0;
                  a = parseFloat(c[1]);
                  c = c[2];
                  "px" === c ? b = a : "vh" === c ? b = a / 100 * e(g).height() : "rem" === c ? b = a * parseFloat(e(":root").css("font-size")) : "em" === c && (b = a * parseFloat(e("body").css("font-size")));
                  return b ? b : 0
              }, _fnDrawCallback: function () {
                  var a = this, b = this.s.heights, c = this.dom.scroller.scrollTop, d = e(this.s.dt.nTable).height(),
                      f = this.s.dt._iDisplayStart, i = this.s.dt._iDisplayLength, h = this.s.dt.fnRecordsDisplay();
                  this.s.skip = !0;
                  this._fnScrollForce();
                  c = 0 === f ? this.s.topRowFloat * b.row : f + i >= h ? b.scroll - (h - this.s.topRowFloat) * b.row : this._domain("virtualToPhysical", this.s.topRowFloat * b.row);
                  this.dom.scroller.scrollTop = c;
                  this.s.baseScrollTop = c;
                  this.s.baseRowTop = this.s.topRowFloat;
                  var g = c - (this.s.topRowFloat - f) * b.row;
                  0 === f ? g = 0 : f + i >= h && (g = b.scroll - d);
                  this.dom.table.style.top = g + "px";
                  this.s.tableTop = g;
                  this.s.tableBottom = d + this.s.tableTop;
                  d = (c - this.s.tableTop) * this.s.boundaryScale;
                  this.s.redrawTop = c - d;
                  this.s.redrawBottom = c + d > b.scroll - b.viewport - b.row ? b.scroll -
                      b.viewport - b.row : c + d;
                  this.s.skip = !1;
                  this.s.dt.oFeatures.bStateSave && null !== this.s.dt.oLoadedState && "undefined" != typeof this.s.dt.oLoadedState.iScroller ? ((c = (this.s.dt.sAjaxSource || a.s.dt.ajax) && !this.s.dt.oFeatures.bServerSide ? !0 : !1) && 2 == this.s.dt.iDraw || !c && 1 == this.s.dt.iDraw) && setTimeout(function () {
                      e(a.dom.scroller).scrollTop(a.s.dt.oLoadedState.iScroller);
                      a.s.redrawTop = a.s.dt.oLoadedState.iScroller - b.viewport / 2;
                      setTimeout(function () {
                          a.s.ingnoreScroll = !1
                      }, 0)
                  }, 0) : a.s.ingnoreScroll = !1;
                  this.s.dt.oFeatures.bInfo &&
                  setTimeout(function () {
                      a._fnInfo.call(a)
                  }, 0);
                  this.dom.loader && this.s.loaderVisible && (this.dom.loader.css("display", "none"), this.s.loaderVisible = !1)
              }, _fnScrollForce: function () {
                  var a = this.s.heights;
                  a.virtual = a.row * this.s.dt.fnRecordsDisplay();
                  a.scroll = a.virtual;
                  1E6 < a.scroll && (a.scroll = 1E6);
                  this.dom.force.style.height = a.scroll > this.s.heights.row ? a.scroll + "px" : this.s.heights.row + "px"
              }, _fnCalcRowHeight: function () {
                  var a = this.s.dt, b = a.nTable, c = b.cloneNode(!1), d = e("<tbody/>").appendTo(c),
                      f = e('<div class="' +
                          a.oClasses.sWrapper + ' DTS"><div class="' + a.oClasses.sScrollWrapper + '"><div class="' + a.oClasses.sScrollBody + '"></div></div></div>');
                  for (e("tbody tr:lt(4)", b).clone().appendTo(d); 3 > e("tr", d).length;) d.append("<tr><td>&nbsp;</td></tr>");
                  e("div." + a.oClasses.sScrollBody, f).append(c);
                  a = this.s.dt.nHolding || b.parentNode;
                  e(a).is(":visible") || (a = "body");
                  f.appendTo(a);
                  this.s.heights.row = e("tr", d).eq(1).outerHeight();
                  f.remove()
              }, _fnInfo: function () {
                  if (this.s.dt.oFeatures.bInfo) {
                      var a = this.s.dt, b = a.oLanguage, c =
                              this.dom.scroller.scrollTop, d = Math.floor(this.fnPixelsToRow(c, !1, this.s.ani) + 1),
                          f = a.fnRecordsTotal(), i = a.fnRecordsDisplay(),
                          c = Math.ceil(this.fnPixelsToRow(c + this.s.heights.viewport, !1, this.s.ani)),
                          c = i < c ? i : c, g = a.fnFormatNumber(d), h = a.fnFormatNumber(c), j = a.fnFormatNumber(f),
                          k = a.fnFormatNumber(i),
                          g = 0 === a.fnRecordsDisplay() && a.fnRecordsDisplay() == a.fnRecordsTotal() ? b.sInfoEmpty + b.sInfoPostFix : 0 === a.fnRecordsDisplay() ? b.sInfoEmpty + " " + b.sInfoFiltered.replace("_MAX_", j) + b.sInfoPostFix : a.fnRecordsDisplay() ==
                          a.fnRecordsTotal() ? b.sInfo.replace("_START_", g).replace("_END_", h).replace("_MAX_", j).replace("_TOTAL_", k) + b.sInfoPostFix : b.sInfo.replace("_START_", g).replace("_END_", h).replace("_MAX_", j).replace("_TOTAL_", k) + " " + b.sInfoFiltered.replace("_MAX_", a.fnFormatNumber(a.fnRecordsTotal())) + b.sInfoPostFix;
                      (b = b.fnInfoCallback) && (g = b.call(a.oInstance, a, d, c, f, i, g));
                      d = a.aanFeatures.i;
                      if ("undefined" != typeof d) {
                          f = 0;
                          for (i = d.length; f < i; f++) e(d[f]).html(g)
                      }
                      e(a.nTable).triggerHandler("info.dt")
                  }
              }
          });
      h.defaults = {
          trace: !1,
          rowHeight: "auto", serverWait: 200, displayBuffer: 9, boundaryScale: 0.5, loadingIndicator: !1
      };
      h.oDefaults = h.defaults;
      h.version = "1.4.4";
      "function" == typeof e.fn.dataTable && "function" == typeof e.fn.dataTableExt.fnVersionCheck && e.fn.dataTableExt.fnVersionCheck("1.10.0") ? e.fn.dataTableExt.aoFeatures.push({
          fnInit: function (a) {
              var b = a.oInit;
              new h(a, b.scroller || b.oScroller || {})
          }, cFeature: "S", sFeature: "Scroller"
      }) : alert("Warning: Scroller requires DataTables 1.10.0 or greater - www.datatables.net/download");
      e(j).on("preInit.dt.dtscroller",
          function (a, b) {
              if ("dt" === a.namespace) {
                  var c = b.oInit.scroller, d = m.defaults.scroller;
                  if (c || d) d = e.extend({}, c, d), !1 !== c && new h(b, d)
              }
          });
      e.fn.dataTable.Scroller = h;
      e.fn.DataTable.Scroller = h;
      var k = e.fn.dataTable.Api;
      k.register("scroller()", function () {
          return this
      });
      k.register("scroller().rowToPixels()", function (a, b, c) {
          var d = this.context;
          if (d.length && d[0].oScroller) return d[0].oScroller.fnRowToPixels(a, b, c)
      });
      k.register("scroller().pixelsToRow()", function (a, b, c) {
          var d = this.context;
          if (d.length && d[0].oScroller) return d[0].oScroller.fnPixelsToRow(a,
              b, c)
      });
      k.register("scroller().scrollToRow()", function (a, b) {
          this.iterator("table", function (c) {
              c.oScroller && c.oScroller.fnScrollToRow(a, b)
          });
          return this
      });
      k.register("row().scrollTo()", function (a) {
          var b = this;
          this.iterator("row", function (c, d) {
              if (c.oScroller) {
                  var e = b.rows({order: "applied", search: "applied"}).indexes().indexOf(d);
                  c.oScroller.fnScrollToRow(e, a)
              }
          });
          return this
      });
      k.register("scroller.measure()", function (a) {
          this.iterator("table", function (b) {
              b.oScroller && b.oScroller.fnMeasure(a)
          });
          return this
      });
      k.register("scroller.page()", function () {
          var a = this.context;
          if (a.length && a[0].oScroller) return a[0].oScroller.fnPageInfo()
      });
      return h
  });
  
  
  /*!
   Select for DataTables 1.2.5
   2015-2018 SpryMedia Ltd - datatables.net/license/mit
  */
  (function (e) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (j) {
          return e(j, window, document)
      }) : "object" === typeof exports ? module.exports = function (j, m) {
          j || (j = window);
          if (!m || !m.fn.dataTable) m = require("datatables.net")(j, m).$;
          return e(m, j, j.document)
      } : e(jQuery, window, document)
  })(function (e, j, m, h) {
      function v(a, c, b) {
          var d;
          d = function (b, c) {
              if (b > c) var d = c, c = b, b = d;
              var f = !1;
              return a.columns(":visible").indexes().filter(function (a) {
                  a === b && (f = !0);
                  return a === c ? (f = !1, !0) : f
              })
          };
          var f =
              function (b, c) {
                  var d = a.rows({search: "applied"}).indexes();
                  if (d.indexOf(b) > d.indexOf(c)) var f = c, c = b, b = f;
                  var e = !1;
                  return d.filter(function (a) {
                      a === b && (e = !0);
                      return a === c ? (e = !1, !0) : e
                  })
              };
          !a.cells({selected: !0}).any() && !b ? (d = d(0, c.column), b = f(0, c.row)) : (d = d(b.column, c.column), b = f(b.row, c.row));
          b = a.cells(b, d).flatten();
          a.cells(c, {selected: !0}).any() ? a.cells(b).deselect() : a.cells(b).select()
      }
  
      function r(a) {
          var c = a.settings()[0]._select.selector;
          e(a.table().container()).off("mousedown.dtSelect", c).off("mouseup.dtSelect",
              c).off("click.dtSelect", c);
          e("body").off("click.dtSelect" + a.table().node().id)
      }
  
      function x(a) {
          var c = e(a.table().container()), b = a.settings()[0], d = b._select.selector;
          c.on("mousedown.dtSelect", d, function (b) {
              if (b.shiftKey || b.metaKey || b.ctrlKey) c.css("-moz-user-select", "none").one("selectstart.dtSelect", d, function () {
                  return !1
              })
          }).on("mouseup.dtSelect", d, function () {
              c.css("-moz-user-select", "")
          }).on("click.dtSelect", d, function (b) {
              var c = a.select.items();
              if (j.getSelection) {
                  var d = j.getSelection();
                  if ((!d.anchorNode ||
                      e(d.anchorNode).closest("table")[0] === a.table().node()) && "" !== e.trim(d.toString())) return
              }
              d = a.settings()[0];
              if (e(b.target).closest("div.dataTables_wrapper")[0] == a.table().container()) {
                  var k = a.cell(e(b.target).closest("td, th"));
                  if (k.any()) {
                      var g = e.Event("user-select.dt");
                      i(a, g, [c, k, b]);
                      g.isDefaultPrevented() || (g = k.index(), "row" === c ? (c = g.row, s(b, a, d, "row", c)) : "column" === c ? (c = k.index().column, s(b, a, d, "column", c)) : "cell" === c && (c = k.index(), s(b, a, d, "cell", c)), d._select_lastCell = g)
                  }
              }
          });
          e("body").on("click.dtSelect" +
              a.table().node().id, function (c) {
              b._select.blurable && !e(c.target).parents().filter(a.table().container()).length && (0 !== e(c.target).parents("html").length && !e(c.target).parents("div.DTE").length) && p(b, !0)
          })
      }
  
      function i(a, c, b, d) {
          if (!d || a.flatten().length) "string" === typeof c && (c += ".dt"), b.unshift(a), e(a.table().node()).trigger(c, b)
      }
  
      function y(a) {
          var c = a.settings()[0];
          if (c._select.info && c.aanFeatures.i && "api" !== a.select.style()) {
              var b = a.rows({selected: !0}).flatten().length, d = a.columns({selected: !0}).flatten().length,
                  f = a.cells({selected: !0}).flatten().length, l = function (b, c, d) {
                      b.append(e('<span class="select-item"/>').append(a.i18n("select." + c + "s", {
                          _: "%d " + c + "s selected",
                          "0": "",
                          1: "1 " + c + " selected"
                      }, d)))
                  };
              e.each(c.aanFeatures.i, function (c, a) {
                  var a = e(a), g = e('<span class="select-info"/>');
                  l(g, "row", b);
                  l(g, "column", d);
                  l(g, "cell", f);
                  var h = a.children("span.select-info");
                  h.length && h.remove();
                  "" !== g.text() && a.append(g)
              })
          }
      }
  
      function z(a, c, b, d) {
          var f = a[c + "s"]({search: "applied"}).indexes(), d = e.inArray(d, f), l = e.inArray(b,
              f);
          if (!a[c + "s"]({selected: !0}).any() && -1 === d) f.splice(e.inArray(b, f) + 1, f.length); else {
              if (d > l) var g = l, l = d, d = g;
              f.splice(l + 1, f.length);
              f.splice(0, d)
          }
          a[c](b, {selected: !0}).any() ? (f.splice(e.inArray(b, f), 1), a[c + "s"](f).deselect()) : a[c + "s"](f).select()
      }
  
      function p(a, c) {
          if (c || "single" === a._select.style) {
              var b = new g.Api(a);
              b.rows({selected: !0}).deselect();
              b.columns({selected: !0}).deselect();
              b.cells({selected: !0}).deselect()
          }
      }
  
      function s(a, c, b, d, f) {
          var e = c.select.style(), g = c[d](f, {selected: !0}).any();
          "os" ===
          e ? a.ctrlKey || a.metaKey ? c[d](f).select(!g) : a.shiftKey ? "cell" === d ? v(c, f, b._select_lastCell || null) : z(c, d, f, b._select_lastCell ? b._select_lastCell[d] : null) : (a = c[d + "s"]({selected: !0}), g && 1 === a.flatten().length ? c[d](f).deselect() : (a.deselect(), c[d](f).select())) : "multi+shift" == e ? a.shiftKey ? "cell" === d ? v(c, f, b._select_lastCell || null) : z(c, d, f, b._select_lastCell ? b._select_lastCell[d] : null) : c[d](f).select(!g) : c[d](f).select(!g)
      }
  
      function q(a, c) {
          return function (b) {
              return b.i18n("buttons." + a, c)
          }
      }
  
      function t(a) {
          a =
              a._eventNamespace;
          return "draw.dt.DT" + a + " select.dt.DT" + a + " deselect.dt.DT" + a
      }
  
      var g = e.fn.dataTable;
      g.select = {};
      g.select.version = "1.2.5";
      g.select.init = function (a) {
          var c = a.settings()[0], b = c.oInit.select, d = g.defaults.select, b = b === h ? d : b, d = "row", f = "api",
              l = !1, w = !0, k = "td, th", j = "selected", i = !1;
          c._select = {};
          if (!0 === b) f = "os", i = !0; else if ("string" === typeof b) f = b, i = !0; else if (e.isPlainObject(b) && (b.blurable !== h && (l = b.blurable), b.info !== h && (w = b.info), b.items !== h && (d = b.items), b.style !== h && (f = b.style, i = !0), b.selector !==
          h && (k = b.selector), b.className !== h)) j = b.className;
          a.select.selector(k);
          a.select.items(d);
          a.select.style(f);
          a.select.blurable(l);
          a.select.info(w);
          c._select.className = j;
          e.fn.dataTable.ext.order["select-checkbox"] = function (b, c) {
              return this.api().column(c, {order: "index"}).nodes().map(function (c) {
                  return "row" === b._select.items ? e(c).parent().hasClass(b._select.className) : "cell" === b._select.items ? e(c).hasClass(b._select.className) : !1
              })
          };
          !i && e(a.table().node()).hasClass("selectable") && a.select.style("os")
      };
      e.each([{type: "row", prop: "aoData"}, {type: "column", prop: "aoColumns"}], function (a, c) {
          g.ext.selector[c.type].push(function (b, a, f) {
              var a = a.selected, e, g = [];
              if (!0 !== a && !1 !== a) return f;
              for (var k = 0, h = f.length; k < h; k++) e = b[c.prop][f[k]], (!0 === a && !0 === e._select_selected || !1 === a && !e._select_selected) && g.push(f[k]);
              return g
          })
      });
      g.ext.selector.cell.push(function (a, c, b) {
          var c = c.selected, d, f = [];
          if (c === h) return b;
          for (var e = 0, g = b.length; e < g; e++) d = a.aoData[b[e].row], (!0 === c && d._selected_cells && !0 === d._selected_cells[b[e].column] ||
              !1 === c && (!d._selected_cells || !d._selected_cells[b[e].column])) && f.push(b[e]);
          return f
      });
      var n = g.Api.register, o = g.Api.registerPlural;
      n("select()", function () {
          return this.iterator("table", function (a) {
              g.select.init(new g.Api(a))
          })
      });
      n("select.blurable()", function (a) {
          return a === h ? this.context[0]._select.blurable : this.iterator("table", function (c) {
              c._select.blurable = a
          })
      });
      n("select.info()", function (a) {
          return y === h ? this.context[0]._select.info : this.iterator("table", function (c) {
              c._select.info = a
          })
      });
      n("select.items()",
          function (a) {
              return a === h ? this.context[0]._select.items : this.iterator("table", function (c) {
                  c._select.items = a;
                  i(new g.Api(c), "selectItems", [a])
              })
          });
      n("select.style()", function (a) {
          return a === h ? this.context[0]._select.style : this.iterator("table", function (c) {
              c._select.style = a;
              if (!c._select_init) {
                  var b = new g.Api(c);
                  c.aoRowCreatedCallback.push({
                      fn: function (b, a, d) {
                          a = c.aoData[d];
                          a._select_selected && e(b).addClass(c._select.className);
                          b = 0;
                          for (d = c.aoColumns.length; b < d; b++) (c.aoColumns[b]._select_selected || a._selected_cells &&
                              a._selected_cells[b]) && e(a.anCells[b]).addClass(c._select.className)
                      }, sName: "select-deferRender"
                  });
                  b.on("preXhr.dt.dtSelect", function () {
                      var c = b.rows({selected: !0}).ids(!0).filter(function (b) {
                          return b !== h
                      }), a = b.cells({selected: !0}).eq(0).map(function (a) {
                          var c = b.row(a.row).id(!0);
                          return c ? {row: c, column: a.column} : h
                      }).filter(function (b) {
                          return b !== h
                      });
                      b.one("draw.dt.dtSelect", function () {
                          b.rows(c).select();
                          a.any() && a.each(function (a) {
                              b.cells(a.row, a.column).select()
                          })
                      })
                  });
                  b.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",
                      function () {
                          y(b)
                      });
                  b.on("destroy.dtSelect", function () {
                      r(b);
                      b.off(".dtSelect")
                  })
              }
              var d = new g.Api(c);
              r(d);
              "api" !== a && x(d);
              i(new g.Api(c), "selectStyle", [a])
          })
      });
      n("select.selector()", function (a) {
          return a === h ? this.context[0]._select.selector : this.iterator("table", function (c) {
              r(new g.Api(c));
              c._select.selector = a;
              "api" !== c._select.style && x(new g.Api(c))
          })
      });
      o("rows().select()", "row().select()", function (a) {
          var c = this;
          if (!1 === a) return this.deselect();
          this.iterator("row", function (b, a) {
              p(b);
              b.aoData[a]._select_selected =
                  !0;
              e(b.aoData[a].nTr).addClass(b._select.className)
          });
          this.iterator("table", function (b, a) {
              i(c, "select", ["row", c[a]], !0)
          });
          return this
      });
      o("columns().select()", "column().select()", function (a) {
          var c = this;
          if (!1 === a) return this.deselect();
          this.iterator("column", function (b, a) {
              p(b);
              b.aoColumns[a]._select_selected = !0;
              var c = (new g.Api(b)).column(a);
              e(c.header()).addClass(b._select.className);
              e(c.footer()).addClass(b._select.className);
              c.nodes().to$().addClass(b._select.className)
          });
          this.iterator("table",
              function (b, a) {
                  i(c, "select", ["column", c[a]], !0)
              });
          return this
      });
      o("cells().select()", "cell().select()", function (a) {
          var c = this;
          if (!1 === a) return this.deselect();
          this.iterator("cell", function (b, a, c) {
              p(b);
              a = b.aoData[a];
              a._selected_cells === h && (a._selected_cells = []);
              a._selected_cells[c] = !0;
              a.anCells && e(a.anCells[c]).addClass(b._select.className)
          });
          this.iterator("table", function (a, d) {
              i(c, "select", ["cell", c[d]], !0)
          });
          return this
      });
      o("rows().deselect()", "row().deselect()", function () {
          var a = this;
          this.iterator("row",
              function (a, b) {
                  a.aoData[b]._select_selected = !1;
                  e(a.aoData[b].nTr).removeClass(a._select.className)
              });
          this.iterator("table", function (c, b) {
              i(a, "deselect", ["row", a[b]], !0)
          });
          return this
      });
      o("columns().deselect()", "column().deselect()", function () {
          var a = this;
          this.iterator("column", function (a, b) {
              a.aoColumns[b]._select_selected = !1;
              var d = new g.Api(a), f = d.column(b);
              e(f.header()).removeClass(a._select.className);
              e(f.footer()).removeClass(a._select.className);
              d.cells(null, b).indexes().each(function (b) {
                  var d =
                      a.aoData[b.row], f = d._selected_cells;
                  d.anCells && (!f || !f[b.column]) && e(d.anCells[b.column]).removeClass(a._select.className)
              })
          });
          this.iterator("table", function (c, b) {
              i(a, "deselect", ["column", a[b]], !0)
          });
          return this
      });
      o("cells().deselect()", "cell().deselect()", function () {
          var a = this;
          this.iterator("cell", function (a, b, d) {
              b = a.aoData[b];
              b._selected_cells[d] = !1;
              b.anCells && !a.aoColumns[d]._select_selected && e(b.anCells[d]).removeClass(a._select.className)
          });
          this.iterator("table", function (c, b) {
              i(a, "deselect",
                  ["cell", a[b]], !0)
          });
          return this
      });
      var u = 0;
      e.extend(g.ext.buttons, {
          selected: {
              text: q("selected", "Selected"),
              className: "buttons-selected",
              limitTo: ["rows", "columns", "cells"],
              init: function (a, c, b) {
                  var d = this;
                  b._eventNamespace = ".select" + u++;
                  a.on(t(b), function () {
                      d.enable(-1 !== e.inArray("rows", b.limitTo) && a.rows({selected: !0}).any() || -1 !== e.inArray("columns", b.limitTo) && a.columns({selected: !0}).any() || -1 !== e.inArray("cells", b.limitTo) && a.cells({selected: !0}).any() ? !0 : !1)
                  });
                  this.disable()
              },
              destroy: function (a,
                                 c, b) {
                  a.off(b._eventNamespace)
              }
          },
          selectedSingle: {
              text: q("selectedSingle", "Selected single"),
              className: "buttons-selected-single",
              init: function (a, c, b) {
                  var d = this;
                  b._eventNamespace = ".select" + u++;
                  a.on(t(b), function () {
                      var b = a.rows({selected: !0}).flatten().length + a.columns({selected: !0}).flatten().length + a.cells({selected: !0}).flatten().length;
                      d.enable(1 === b)
                  });
                  this.disable()
              },
              destroy: function (a, c, b) {
                  a.off(b._eventNamespace)
              }
          },
          selectAll: {
              text: q("selectAll", "Select all"), className: "buttons-select-all", action: function () {
                  this[this.select.items() +
                  "s"]().select()
              }
          },
          selectNone: {
              text: q("selectNone", "Deselect all"), className: "buttons-select-none", action: function () {
                  p(this.settings()[0], !0)
              }, init: function (a, c, b) {
                  var d = this;
                  b._eventNamespace = ".select" + u++;
                  a.on(t(b), function () {
                      var b = a.rows({selected: !0}).flatten().length + a.columns({selected: !0}).flatten().length + a.cells({selected: !0}).flatten().length;
                      d.enable(0 < b)
                  });
                  this.disable()
              }, destroy: function (a, c, b) {
                  a.off(b._eventNamespace)
              }
          }
      });
      e.each(["Row", "Column", "Cell"], function (a, c) {
          var b = c.toLowerCase();
          g.ext.buttons["select" + c + "s"] = {
              text: q("select" + c + "s", "Select " + b + "s"),
              className: "buttons-select-" + b + "s",
              action: function () {
                  this.select.items(b)
              },
              init: function (a) {
                  var c = this;
                  a.on("selectItems.dt.DT", function (a, d, e) {
                      c.active(e === b)
                  })
              }
          }
      });
      e(m).on("preInit.dt.dtSelect", function (a, c) {
          "dt" === a.namespace && g.select.init(new g.Api(c))
      });
      return g.select
  });
  
  
  