(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  // Generated by LiveScript 1.4.0
  var presets, simpleStr, wrap, slice$ = [].slice, toString$ = {}.toString;
  presets = require('./presets').presets;
  simpleStr = function(arr){
    return arr.join('');
  };
  wrap = function(content){
    return "data:image/svg+xml;base64," + btoa(content);
  };
  (function(){
    var make, handler, ldBar;
    make = {
      head: function(viewBox){
        return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"" + viewBox + "\">";
      },
      gradient: function(dir, dur){
        var colors, ret, len, gx, gy, x, y, i$, i, idx;
        dir == null && (dir = 45);
        dur == null && (dur = 1);
        colors = slice$.call(arguments, 2);
        ret = [this.head("0 0 100 100")];
        len = colors.length * 4 + 1;
        dir = dir * Math.PI / 180;
        gx = Math.pow(Math.cos(dir), 2);
        gy = Math.sqrt(gx - Math.pow(gx, 2));
        if (dir > Math.PI * 0.25) {
          gy = Math.pow(Math.sin(dir), 2);
          gx = Math.sqrt(gy - Math.pow(gy, 2));
        }
        x = gx * 100;
        y = gy * 100;
        ret.push("<defs><linearGradient id=\"gradient\" x1=\"0\" x2=\"" + gx + "\" y1=\"0\" y2=\"" + gy + "\">");
        for (i$ = 0; i$ < len; ++i$) {
          i = i$;
          idx = i * 100 / (len - 1);
          ret.push("<stop offset=\"" + idx + "%\" stop-color=\"" + colors[i % colors.length] + "\"/>");
        }
        ret.push("</linearGradient></defs>\n<rect x=\"0\" y=\"0\" width=\"400\" height=\"400\" fill=\"url(#gradient)\">\n<animateTransform attributeName=\"transform\" type=\"translate\" from=\"-" + x + ",-" + y + "\"\nto=\"0,0\" dur=\"" + dur + "s\" repeatCount=\"indefinite\"/></rect></svg>");
        return wrap(ret.join(""));
      },
      stripe: function(c1, c2, dur){
        var ret, i;
        c1 == null && (c1 = '#b4b4b4');
        c2 == null && (c2 = '#e6e6e6');
        dur == null && (dur = 1);
        ret = [this.head("0 0 100 100")];
        ret = ret.concat([
          "<rect fill=\"" + c2 + "\" width=\"100\" height=\"100\"/>", "<g><g>", (function(){
            var i$, results$ = [];
            for (i$ = 0; i$ < 13; ++i$) {
              i = i$;
              results$.push(("<polygon fill=\"" + c1 + "\" ") + ("points=\"" + (-90 + i * 20) + ",100 " + (-100 + i * 20) + ",") + ("100 " + (-60 + i * 20) + ",0 " + (-50 + i * 20) + ",0 \"/>"));
            }
            return results$;
          }()).join(""), "</g><animateTransform attributeName=\"transform\" type=\"translate\" ", "from=\"0,0\" to=\"20,0\" dur=\"" + dur + "s\" repeatCount=\"indefinite\"/></g></svg>"
        ].join(""));
        return wrap(ret);
      },
      bubble: function(c1, c2, count, dur, size, sw){
        var ret, i$, i, idx, x, r, d;
        c1 == null && (c1 = '#39d');
        c2 == null && (c2 = '#9cf');
        count == null && (count = 15);
        dur == null && (dur = 1);
        size == null && (size = 6);
        sw == null && (sw = 1);
        ret = [this.head("0 0 200 200"), "<rect x=\"0\" y=\"0\" width=\"200\" height=\"200\" fill=\"" + c1 + "\"/>"];
        for (i$ = 0; i$ < count; ++i$) {
          i = i$;
          idx = -(i / count) * dur;
          x = Math.random() * 184 + 8;
          r = (Math.random() * 0.7 + 0.3) * size;
          d = dur * (1 + Math.random() * 0.5);
          ret.push(["<circle cx=\"" + x + "\" cy=\"0\" r=\"" + r + "\" fill=\"none\" stroke=\"" + c2 + "\" stroke-width=\"" + sw + "\">", "<animate attributeName=\"cy\" values=\"190;-10\" times=\"0;1\" ", "dur=\"" + d + "s\" begin=\"" + idx + "s\" repeatCount=\"indefinite\"/>", "</circle>", "<circle cx=\"" + x + "\" cy=\"0\" r=\"" + r + "\" fill=\"none\" stroke=\"" + c2 + "\" stroke-width=\"" + sw + "\">", "<animate attributeName=\"cy\" values=\"390;190\" times=\"0;1\" ", "dur=\"" + d + "s\" begin=\"" + idx + "s\" repeatCount=\"indefinite\"/>", "</circle>"].join(""));
        }
        return wrap(ret.join("") + "</svg>");
      }
    };
    handler = {
      queue: {},
      running: false,
      main: function(timestamp){
        var keepon, removed, k, ref$, func, ret, this$ = this;
        keepon = false;
        removed = [];
        for (k in ref$ = this.queue) {
          func = ref$[k];
          ret = func(timestamp);
          if (!ret) {
            removed.push(func);
          }
          keepon = keepon || ret;
        }
        for (k in ref$ = this.queue) {
          func = ref$[k];
          if (removed.indexOf(func) >= 0) {
            delete this.queue[k];
          }
        }
        if (keepon) {
          return requestAnimationFrame(function(it){
            return this$.main(it);
          });
        } else {
          return this.running = false;
        }
      },
      add: function(key, f){
        var this$ = this;
        if (!this.queue[key]) {
          this.queue[key] = f;
        }
        if (!this.running) {
          this.running = true;
          return requestAnimationFrame(function(it){
            return this$.main(it);
          });
        }
      }
    };
    window.ldBar = ldBar = function(selector, option){
      var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, this$ = this;
      option == null && (option = {});
      xmlns = {
        xlink: "http://www.w3.org/1999/xlink"
      };
      root = toString$.call(selector).slice(8, -1) === 'String' ? document.querySelector(selector) : selector;
      if (!root.ldBar) {
        root.ldBar = this;
      } else {
        return root.ldBar;
      }
      cls = root.getAttribute('class') || '';
      if (!~cls.indexOf('ldBar')) {
        root.setAttribute('class', cls + " ldBar");
      }
      idPrefix = "ldBar-" + Math.random().toString(16).substring(2);
      id = {
        key: idPrefix,
        clip: idPrefix + "-clip",
        filter: idPrefix + "-filter",
        pattern: idPrefix + "-pattern",
        mask: idPrefix + "-mask",
        maskPath: idPrefix + "-mask-path"
      };
      domTree = function(n, o){
        var k, v;
        n = newNode(n);
        for (k in o) {
          v = o[k];
          if (k !== 'attr') {
            n.appendChild(domTree(k, v || {}));
          }
        }
        n.attrs(o.attr || {});
        return n;
      };
      newNode = function(n){
        return document.createElementNS("http://www.w3.org/2000/svg", n);
      };
      x$ = document.body.__proto__.__proto__.__proto__;
      x$.text = function(t){
        return this.appendChild(document.createTextNode(t));
      };
      x$.attrs = function(o){
        var k, v, ret, results$ = [];
        for (k in o) {
          v = o[k];
          ret = /([^:]+):([^:]+)/.exec(k);
          if (!ret || !xmlns[ret[1]]) {
            results$.push(this.setAttribute(k, v));
          } else {
            results$.push(this.setAttributeNS(xmlns[ret[1]], k, v));
          }
        }
        return results$;
      };
      x$.styles = function(o){
        var k, v, results$ = [];
        for (k in o) {
          v = o[k];
          results$.push(this.style[k] = v);
        }
        return results$;
      };
      x$.append = function(n){
        var r;
        return this.appendChild(r = document.createElementNS("http://www.w3.og/2000/svg", n));
      };
      x$.attr = function(n, v){
        if (v != null) {
          return this.setAttribute(n, v);
        } else {
          return this.getAttribute(n);
        }
      };
      config = {
        "type": 'stroke',
        "img": '',
        "path": 'M10 10L90 10M90 8M90 12',
        "fill-dir": 'btt',
        "fill": '#25b',
        "fill-background": '#ddd',
        "fill-background-extrude": 3,
        "pattern-size": null,
        "stroke-dir": 'normal',
        "stroke": '#25b',
        "stroke-width": '3',
        "stroke-trail": '#ddd',
        "stroke-trail-width": 0.5,
        "duration": 1,
        "easing": 'linear',
        "value": 0,
        "img-size": null,
        "bbox": null,
        "set-dim": true,
        "aspect-ratio": "xMidYMid",
        "min": 0,
        "max": 100
      };
      config["preset"] = root.getAttribute("data-preset") || option["preset"];
      if (config.preset != null) {
        import$(config, presets[config.preset]);
      }
      for (attr in config) {
        if (that = that = root.getAttribute("data-" + attr)) {
          config[attr] = that;
        }
      }
      import$(config, option);
      if (config.img) {
        config.path = null;
      }
      isStroke = config.type === 'stroke';
      parseRes = function(v){
        var parser, ret;
        parser = /data:ldbar\/res,([^()]+)\(([^)]+)\)/;
        ret = parser.exec(v);
        if (!ret) {
          return v;
        }
        return ret = make[ret[1]].apply(make, ret[2].split(','));
      };
      config.fill = parseRes(config.fill);
      config.stroke = parseRes(config.stroke);
      if (config["set-dim"] === 'false') {
        config["set-dim"] = false;
      }
      dom = {
        attr: {
          "xmlns:xlink": 'http://www.w3.org/1999/xlink',
          preserveAspectRatio: config["aspect-ratio"],
          width: "100%",
          height: "100%"
        },
        defs: {
          filter: {
            attr: {
              id: id.filter,
              x: -1,
              y: -1,
              width: 3,
              height: 3
            },
            feMorphology: {
              attr: {
                operator: +config["fill-background-extrude"] >= 0 ? 'dilate' : 'erode',
                radius: Math.abs(+config["fill-background-extrude"])
              }
            },
            feColorMatrix: {
              attr: {
                values: '0 0 0 0 1    0 0 0 0 1    0 0 0 0 1    0 0 0 1 0',
                result: "cm"
              }
            }
          },
          mask: {
            attr: {
              id: id.mask
            },
            image: {
              attr: {
                "xlink:href": config.img,
                filter: "url(#" + id.filter + ")",
                x: 0,
                y: 0,
                width: 100,
                height: 100,
                preserveAspectRatio: config["aspect-ratio"]
              }
            }
          },
          g: {
            mask: {
              attr: {
                id: id.maskPath
              },
              path: {
                attr: {
                  d: config.path || "",
                  fill: '#fff',
                  stroke: '#fff',
                  filter: "url(#" + id.filter + ")"
                }
              }
            }
          },
          clipPath: {
            attr: {
              id: id.clip
            },
            rect: {
              attr: {
                'class': 'mask',
                fill: '#000'
              }
            }
          },
          pattern: {
            attr: {
              id: id.pattern,
              patternUnits: 'userSpaceOnUse',
              x: 0,
              y: 0,
              width: 300,
              height: 300
            },
            image: {
              attr: {
                x: 0,
                y: 0,
                width: 300,
                height: 300
              }
            }
          }
        }
      };
      svg = domTree('svg', dom);
      text = document.createElement('div');
      text.setAttribute('class', 'ldBar-label');
      root.appendChild(svg);
      root.appendChild(text);
      group = [0, 0];
      length = 0;
      this.fit = function(){
        var that, box, d, rect;
        if (that = config["bbox"]) {
          box = that.split(' ').map(function(it){
            return +it.trim();
          });
          box = {
            x: box[0],
            y: box[1],
            width: box[2],
            height: box[3]
          };
        } else {
          box = group[1].getBBox();
        }
        if (!box || box.width === 0 || box.height === 0) {
          box = {
            x: 0,
            y: 0,
            width: 100,
            height: 100
          };
        }
        d = Math.max.apply(null, ['stroke-width', 'stroke-trail-width', 'fill-background-extrude'].map(function(it){
          return config[it];
        })) * 1.5;
        svg.attrs({
          viewBox: [box.x - d, box.y - d, box.width + d * 2, box.height + d * 2].join(" ")
        });
        if (config["set-dim"]) {
          ['width', 'height'].map(function(it){
            if (!root.style[it] || this$.fit[it]) {
              root.style[it] = (box[it] + d * 2) + "px";
              return this$.fit[it] = true;
            }
          });
        }
        rect = group[0].querySelector('rect');
        if (rect) {
          return rect.attrs({
            x: box.x - d,
            y: box.y - d,
            width: box.width + d * 2,
            height: box.height + d * 2
          });
        }
      };
      if (config.path) {
        if (isStroke) {
          group[0] = domTree('g', {
            path: {
              attr: {
                d: config.path,
                fill: 'none',
                'class': 'baseline'
              }
            }
          });
        } else {
          group[0] = domTree('g', {
            rect: {
              attr: {
                x: 0,
                y: 0,
                width: 100,
                height: 100,
                mask: "url(#" + id.maskPath + ")",
                fill: config["fill-background"],
                'class': 'frame'
              }
            }
          });
        }
        svg.appendChild(group[0]);
        group[1] = domTree('g', {
          path: {
            attr: {
              d: config.path,
              'class': isStroke ? 'mainline' : 'solid',
              "clip-path": config.type === 'fill' ? "url(#" + id.clip + ")" : ''
            }
          }
        });
        svg.appendChild(group[1]);
        path0 = group[0].querySelector(isStroke ? 'path' : 'rect');
        path1 = group[1].querySelector('path');
        if (isStroke) {
          path1.attrs({
            fill: 'none'
          });
        }
        patimg = svg.querySelector('pattern image');
        img = new Image();
        img.addEventListener('load', function(){
          var box, that;
          box = (that = config["pattern-size"])
            ? {
              width: +that,
              height: +that
            }
            : img.width && img.height
              ? {
                width: img.width,
                height: img.height
              }
              : {
                width: 300,
                height: 300
              };
          svg.querySelector('pattern').attrs({
            width: box.width,
            height: box.height
          });
          return patimg.attrs({
            width: box.width,
            height: box.height
          });
        });
        if (/.+\..+|^data:/.exec(!isStroke
          ? config.fill
          : config.stroke)) {
          img.src = !isStroke
            ? config.fill
            : config.stroke;
          patimg.attrs({
            "xlink:href": img.src
          });
        }
        if (isStroke) {
          path0.attrs({
            stroke: config["stroke-trail"],
            "stroke-width": config["stroke-trail-width"]
          });
          path1.attrs({
            "stroke-width": config["stroke-width"],
            stroke: /.+\..+|^data:/.exec(config.stroke)
              ? "url(#" + id.pattern + ")"
              : config.stroke
          });
        }
        if (config.fill && !isStroke) {
          path1.attrs({
            fill: /.+\..+|^data:/.exec(config.fill)
              ? "url(#" + id.pattern + ")"
              : config.fill
          });
        }
        length = path1.getTotalLength();
        this.fit();
        this.inited = true;
      } else if (config.img) {
        if (config["img-size"]) {
          ret = config["img-size"].split(',');
          size = {
            width: +ret[0],
            height: +ret[1]
          };
        } else {
          size = {
            width: 100,
            height: 100
          };
        }
        group[0] = domTree('g', {
          rect: {
            attr: {
              x: 0,
              y: 0,
              width: 100,
              height: 100,
              mask: "url(#" + id.mask + ")",
              fill: config["fill-background"]
            }
          }
        });
        svg.querySelector('mask image').attrs({
          width: size.width,
          height: size.height
        });
        group[1] = domTree('g', {
          image: {
            attr: {
              width: size.width,
              height: size.height,
              x: 0,
              y: 0,
              preserveAspectRatio: config["aspect-ratio"],
              "clip-path": config.type === 'fill' ? "url(#" + id.clip + ")" : '',
              "xlink:href": config.img,
              'class': 'solid'
            }
          }
        });
        img = new Image();
        img.addEventListener('load', function(){
          var ret, size;
          if (config["img-size"]) {
            ret = config["img-size"].split(',');
            size = {
              width: +ret[0],
              height: +ret[1]
            };
          } else if (img.width && img.height) {
            size = {
              width: img.width,
              height: img.height
            };
          } else {
            size = {
              width: 100,
              height: 100
            };
          }
          svg.querySelector('mask image').attrs({
            width: size.width,
            height: size.height
          });
          group[1].querySelector('image').attrs({
            width: size.width,
            height: size.height
          });
          this$.fit();
          this$.set(undefined, false);
          return this$.inited = true;
        });
        img.src = config.img;
        svg.appendChild(group[0]);
        svg.appendChild(group[1]);
      }
      svg.attrs({
        width: '100%',
        height: '100%'
      });
      this.transition = {
        value: {
          src: 0,
          des: 0
        },
        time: {},
        ease: function(t, b, c, d){
          t = t / (d * 0.5);
          if (t < 1) {
            return c * 0.5 * t * t + b;
          }
          t = t - 1;
          return -c * 0.5 * (t * (t - 2) - 1) + b;
        },
        handler: function(time, doTransition){
          var ref$, min, max, dv, dt, dur, v, p, node, style, box, dir;
          doTransition == null && (doTransition = true);
          if (this.time.src == null) {
            this.time.src = time;
          }
          ref$ = [config["min"], config["max"]], min = ref$[0], max = ref$[1];
          ref$ = [this.value.des - this.value.src, (time - this.time.src) * 0.001, +config["duration"] || 1], dv = ref$[0], dt = ref$[1], dur = ref$[2];
          v = doTransition
            ? Math.round(this.ease(dt, this.value.src, dv, dur))
            : this.value.des;
          v >= min || (v = min);
          v <= max || (v = max);
          text.textContent = v;
          p = 100.0 * (v - min) / (max - min);
          if (isStroke) {
            node = path1;
            style = {
              "stroke-dasharray": config["stroke-dir"] === 'reverse'
                ? "0 " + length * (100 - p) * 0.01 + " " + length * p * 0.01 + " 0"
                : p * 0.01 * length + " " + ((100 - p) * 0.01 * length + 1)
            };
          } else {
            box = group[1].getBBox();
            dir = config["fill-dir"];
            style = dir === 'btt' || !dir
              ? {
                y: box.y + box.height * (100 - p) * 0.01,
                height: box.height * p * 0.01,
                x: box.x,
                width: box.width
              }
              : dir === 'ttb'
                ? {
                  y: box.y,
                  height: box.height * p * 0.01,
                  x: box.x,
                  width: box.width
                }
                : dir === 'ltr'
                  ? {
                    y: box.y,
                    height: box.height,
                    x: box.x,
                    width: box.width * p * 0.01
                  }
                  : dir === 'rtl' ? {
                    y: box.y,
                    height: box.height,
                    x: box.x + box.width * (100 - p) * 0.01,
                    width: box.width * p * 0.01
                  } : void 8;
            node = svg.querySelector('rect');
          }
          node.attrs(style);
          if (dt >= dur) {
            delete this.time.src;
            return false;
          }
          return true;
        },
        start: function(src, des, doTransition){
          var ref$, this$ = this;
          ref$ = this.value;
          ref$.src = src;
          ref$.des = des;
          !!(root.offsetWidth || root.offsetHeight || root.getClientRects().length);
          if (!doTransition || !(root.offsetWidth || root.offsetHeight || root.getClientRects().length)) {
            this.time.src = 0;
            this.handler(1000, false);
            return;
          }
          return handler.add(id.key, function(time){
            return this$.handler(time);
          });
        }
      };
      this.set = function(v, doTransition){
        var src, des;
        doTransition == null && (doTransition = true);
        src = this.value || 0;
        if (v != null) {
          this.value = v;
        } else {
          v = this.value;
        }
        des = this.value;
        return this.transition.start(src, des, doTransition);
      };
      this.set(+config.value || 0, false);
      return this;
    };
    return window.addEventListener('load', function(){
      var i$, ref$, len$, node, results$ = [];
      for (i$ = 0, len$ = (ref$ = document.querySelectorAll('.ldBar')).length; i$ < len$; ++i$) {
        node = ref$[i$];
        if (!node.ldBar) {
          results$.push(node.ldBar = new ldBar(node));
        }
      }
      return results$;
    }, false);
  })();
  module.exports = ldBar;
  function import$(obj, src){
    var own = {}.hasOwnProperty;
    for (var key in src) if (own.call(src, key)) obj[key] = src[key];
    return obj;
  }
  
  
  
  },{"./presets":2}],2:[function(require,module,exports){
  // Generated by LiveScript 1.4.0
  var presets, out$ = typeof exports != 'undefined' && exports || this;
  out$.presets = presets = {
    rainbow: {
      "type": 'stroke',
      "path": 'M10 10L90 10',
      "stroke": 'data:ldbar/res,gradient(0,1,#a551df,#fd51ad,#ff7f82,#ffb874,#ffeb90)',
      "bbox": "10 10 80 10"
    },
    energy: {
      "type": 'fill',
      "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5',
      "stroke": '#f00',
      "fill": 'data:ldbar/res,gradient(45,2,#4e9,#8fb,#4e9)',
      "fill-dir": "ltr",
      "fill-background": '#444',
      "fill-background-extrude": 1,
      "bbox": "10 5 80 10"
    },
    stripe: {
      "type": 'fill',
      "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5',
      "stroke": '#f00',
      "fill": 'data:ldbar/res,stripe(#25b,#58e,1)',
      "fill-dir": "ltr",
      "fill-background": '#ddd',
      "fill-background-extrude": 1,
      "bbox": "10 5 80 10"
    },
    text: {
      "type": 'fill',
      "img": "data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"70\" height=\"20\" viewBox=\"0 0 70 20\"><text x=\"35\" y=\"10\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"arial\">LOADING</text></svg>",
      "fill-background-extrude": 1.3,
      "pattern-size": 100,
      "fill-dir": "ltr",
      "img-size": "70,20",
      "bbox": "0 0 70 20"
    },
    line: {
      "type": 'stroke',
      "path": 'M10 10L90 10',
      "stroke": '#25b',
      "stroke-width": 3,
      "stroke-trail": '#ddd',
      "stroke-trail-width": 1,
      "bbox": "10 10 80 10"
    },
    fan: {
      "type": 'stroke',
      "path": 'M10 90A40 40 0 0 1 90 90',
      "fill-dir": 'btt',
      "fill": '#25b',
      "fill-background": '#ddd',
      "fill-background-extrude": 3,
      "stroke-dir": 'normal',
      "stroke": '#25b',
      "stroke-width": '3',
      "stroke-trail": '#ddd',
      "stroke-trail-width": 0.5,
      "bbox": "10 50 80 40"
    },
    circle: {
      "type": 'stroke',
      "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10',
      "fill-dir": 'btt',
      "fill": '#25b',
      "fill-background": '#ddd',
      "fill-background-extrude": 3,
      "stroke-dir": 'normal',
      "stroke": '#25b',
      "stroke-width": '3',
      "stroke-trail": '#ddd',
      "stroke-trail-width": 0.5,
      "bbox": "10 10 80 80"
    },
    bubble: {
      "type": 'fill',
      "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10',
      "fill-dir": 'btt',
      "fill": 'data:ldbar/res,bubble(#39d,#cef)',
      "pattern-size": "150",
      "fill-background": '#ddd',
      "fill-background-extrude": 2,
      "stroke-dir": 'normal',
      "stroke": '#25b',
      "stroke-width": '3',
      "stroke-trail": '#ddd',
      "stroke-trail-width": 0.5,
      "bbox": "10 10 80 80"
    }
  };
  },{}]},{},[1])
  