diff --git "a/dist/distill.bundle.js.map" "b/dist/distill.bundle.js.map"
--- "a/dist/distill.bundle.js.map"
+++ "b/dist/distill.bundle.js.map"
@@ -1 +1 @@
-{"version":3,"file":"distill.bundle.js","mappings":"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","sources":["webpack://blogpost/./src/distill.js","webpack://blogpost/webpack/bootstrap","webpack://blogpost/webpack/runtime/global","webpack://blogpost/webpack/startup"],"sourcesContent":["(function (factory) {\n  typeof define === 'function' && define.amd ? define(factory) :\n  factory();\n}((function () { 'use strict';\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n  const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'];\n  const zeroPad = n => n < 10 ? '0' + n : n;\n\n  const RFC = function(date) {\n    const day = days[date.getDay()].substring(0, 3);\n    const paddedDate = zeroPad(date.getDate());\n    const month = months[date.getMonth()].substring(0,3);\n    const year = date.getFullYear().toString();\n    const hours = date.getUTCHours().toString();\n    const minutes = date.getUTCMinutes().toString();\n    const seconds = date.getUTCSeconds().toString();\n    return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;\n  };\n\n  const objectFromMap = function(map) {\n    const object = Array.from(map).reduce((object, [key, value]) => (\n      Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't.\n    ), {});\n    return object;\n  };\n\n  const mapFromObject = function(object) {\n    const map = new Map();\n    for (var property in object) {\n      if (object.hasOwnProperty(property)) {\n        map.set(property, object[property]);\n      }\n    }\n    return map;\n  };\n\n  class Author {\n\n    // constructor(name='', personalURL='', affiliation='', affiliationURL='') {\n    //   this.name = name; // 'Chris Olah'\n    //   this.personalURL = personalURL; // 'https://colah.github.io'\n    //   this.affiliation = affiliation; // 'Google Brain'\n    //   this.affiliationURL = affiliationURL; // 'https://g.co/brain'\n    // }\n\n    constructor(object) {\n      this.name = object.author; // 'Chris Olah'\n      this.personalURL = object.authorURL; // 'https://colah.github.io'\n      this.affiliation = object.affiliation; // 'Google Brain'\n      this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'\n      this.affiliations = object.affiliations || []; // new-style affiliations\n    }\n\n    // 'Chris'\n    get firstName() {\n      const names = this.name.split(' ');\n      return names.slice(0, names.length - 1).join(' ');\n    }\n\n    // 'Olah'\n    get lastName() {\n      const names = this.name.split(' ');\n      return names[names.length -1];\n    }\n  }\n\n  function mergeFromYMLFrontmatter(target, source) {\n    target.title = source.title;\n    if (source.published) {\n      if (source.published instanceof Date) {\n        target.publishedDate = source.published;\n      } else if (source.published.constructor === String) {\n        target.publishedDate = new Date(source.published);\n      }\n    }\n    if (source.publishedDate) {\n      if (source.publishedDate instanceof Date) {\n        target.publishedDate = source.publishedDate;\n      } else if (source.publishedDate.constructor === String) {\n        target.publishedDate = new Date(source.publishedDate);\n      } else {\n        console.error('Don\\'t know what to do with published date: ' + source.publishedDate);\n      }\n    }\n    target.description = source.description;\n    target.authors = source.authors.map( (authorObject) => new Author(authorObject));\n    target.katex = source.katex;\n    target.password = source.password;\n    if (source.doi) {\n      target.doi = source.doi;\n    }\n  }\n\n  class FrontMatter {\n    constructor() {\n      this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks'\n      this.description = ''; // 'A visual overview of neural attention...'\n      this.authors = []; // Array of Author(s)\n\n      this.bibliography = new Map();\n      this.bibliographyParsed = false;\n      //  {\n      //    'gregor2015draw': {\n      //      'title': 'DRAW: A recurrent neural network for image generation',\n      //      'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',\n      //      'journal': 'arXiv preprint arXiv:1502.04623',\n      //      'year': '2015',\n      //      'url': 'https://arxiv.org/pdf/1502.04623.pdf',\n      //      'type': 'article'\n      //    },\n      //  }\n\n      // Citation keys should be listed in the order that they are appear in the document.\n      // Each key refers to a key in the bibliography dictionary.\n      this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]\n      this.citationsCollected = false;\n\n      //\n      // Assigned from posts.csv\n      //\n\n      //  publishedDate: 2016-09-08T07:00:00.000Z,\n      //  tags: [ 'rnn' ],\n      //  distillPath: '2016/augmented-rnns',\n      //  githubPath: 'distillpub/post--augmented-rnns',\n      //  doiSuffix: 1,\n\n      //\n      // Assigned from journal\n      //\n      this.journal = {};\n      //  journal: {\n      //    'title': 'Distill',\n      //    'full_title': 'Distill',\n      //    'abbrev_title': 'Distill',\n      //    'url': 'http://distill.pub',\n      //    'doi': '10.23915/distill',\n      //    'publisherName': 'Distill Working Group',\n      //    'publisherEmail': 'admin@distill.pub',\n      //    'issn': '2476-0757',\n      //    'editors': [...],\n      //    'committee': [...]\n      //  }\n      //  volume: 1,\n      //  issue: 9,\n\n      this.katex = {};\n\n      //\n      // Assigned from publishing process\n      //\n\n      //  githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',\n      //  updatedDate: 2017-03-21T07:13:16.000Z,\n      //  doi: '10.23915/distill.00001',\n      this.doi = undefined;\n      this.publishedDate = undefined;\n    }\n\n    // Example:\n    // title: Demo Title Attention and Augmented Recurrent Neural Networks\n    // published: Jan 10, 2017\n    // authors:\n    // - Chris Olah:\n    // - Shan Carter: http://shancarter.com\n    // affiliations:\n    // - Google Brain:\n    // - Google Brain: http://g.co/brain\n\n    //\n    // Computed Properties\n    //\n\n    // 'http://distill.pub/2016/augmented-rnns',\n    set url(value) {\n      this._url = value;\n    }\n    get url() {\n      if (this._url) {\n        return this._url;\n      } else if (this.distillPath && this.journal.url) {\n        return this.journal.url + '/' + this.distillPath;\n      } else if (this.journal.url) {\n        return this.journal.url;\n      }\n    }\n\n    // 'https://github.com/distillpub/post--augmented-rnns',\n    get githubUrl() {\n      if (this.githubPath) {\n        return 'https://github.com/' + this.githubPath;\n      } else {\n        return undefined;\n      }\n    }\n\n    // TODO resolve differences in naming of URL/Url/url.\n    // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',\n    set previewURL(value) {\n      this._previewURL = value;\n    }\n    get previewURL() {\n      return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg';\n    }\n\n    // 'Thu, 08 Sep 2016 00:00:00 -0700',\n    get publishedDateRFC() {\n      return RFC(this.publishedDate);\n    }\n\n    // 'Thu, 08 Sep 2016 00:00:00 -0700',\n    get updatedDateRFC() {\n      return RFC(this.updatedDate);\n    }\n\n    // 2016,\n    get publishedYear() {\n      return this.publishedDate.getFullYear();\n    }\n\n    // 'Sept',\n    get publishedMonth() {\n      return months[this.publishedDate.getMonth()];\n    }\n\n    // 8,\n    get publishedDay() {\n      return this.publishedDate.getDate();\n    }\n\n    // '09',\n    get publishedMonthPadded() {\n      return zeroPad(this.publishedDate.getMonth() + 1);\n    }\n\n    // '08',\n    get publishedDayPadded() {\n      return zeroPad(this.publishedDate.getDate());\n    }\n\n    get publishedISODateOnly() {\n      return this.publishedDate.toISOString().split('T')[0];\n    }\n\n    get volume() {\n      const volume = this.publishedYear - 2015;\n      if (volume < 1) {\n        throw new Error('Invalid publish date detected during computing volume');\n      }\n      return volume;\n    }\n\n    get issue() {\n      return this.publishedDate.getMonth() + 1;\n    }\n\n    // 'Olah & Carter',\n    get concatenatedAuthors() {\n      if (this.authors.length > 2) {\n        return this.authors[0].lastName + ', et al.';\n      } else if (this.authors.length === 2) {\n        return this.authors[0].lastName + ' & ' + this.authors[1].lastName;\n      } else if (this.authors.length === 1) {\n        return this.authors[0].lastName;\n      }\n    }\n\n    // 'Olah, Chris and Carter, Shan',\n    get bibtexAuthors() {\n      return this.authors.map(author => {\n        return author.lastName + ', ' + author.firstName;\n      }).join(' and ');\n    }\n\n    // 'olah2016attention'\n    get slug() {\n      let slug = '';\n      if (this.authors.length) {\n        slug += this.authors[0].lastName.toLowerCase();\n        slug += this.publishedYear;\n        slug += this.title.split(' ')[0].toLowerCase();\n      }\n      return slug || 'Untitled';\n    }\n\n    get bibliographyEntries() {\n      return new Map(this.citations.map( citationKey => {\n        const entry = this.bibliography.get(citationKey);\n        return [citationKey, entry];\n      }));\n    }\n\n    set bibliography(bibliography) {\n      if (bibliography instanceof Map) {\n        this._bibliography = bibliography;\n      } else if (typeof bibliography === 'object') {\n        this._bibliography = mapFromObject(bibliography);\n      }\n    }\n\n    get bibliography() {\n      return this._bibliography;\n    }\n\n    static fromObject(source) {\n      const frontMatter = new FrontMatter();\n      Object.assign(frontMatter, source);\n      return frontMatter;\n    }\n\n    assignToObject(target) {\n      Object.assign(target, this);\n      target.bibliography = objectFromMap(this.bibliographyEntries);\n      target.url = this.url;\n      target.doi = this.doi;\n      target.githubUrl = this.githubUrl;\n      target.previewURL = this.previewURL;\n      if (this.publishedDate) {\n        target.volume = this.volume;\n        target.issue = this.issue;\n        target.publishedDateRFC = this.publishedDateRFC;\n        target.publishedYear = this.publishedYear;\n        target.publishedMonth = this.publishedMonth;\n        target.publishedDay = this.publishedDay;\n        target.publishedMonthPadded = this.publishedMonthPadded;\n        target.publishedDayPadded = this.publishedDayPadded;\n      }\n      if (this.updatedDate) {\n        target.updatedDateRFC = this.updatedDateRFC;\n      }\n      target.concatenatedAuthors = this.concatenatedAuthors;\n      target.bibtexAuthors = this.bibtexAuthors;\n      target.slug = this.slug;\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  const Mutating = (superclass) => {\n    return class extends superclass {\n\n      constructor() {\n        super();\n\n        // set up mutation observer\n        const options = {childList: true, characterData: true, subtree: true};\n        const observer = new MutationObserver( () => {\n          observer.disconnect();\n          this.renderIfPossible();\n          observer.observe(this, options);\n        });\n\n        // ...and listen for changes\n        observer.observe(this, options);\n      }\n\n      connectedCallback() {\n        super.connectedCallback();\n\n        this.renderIfPossible();\n      }\n\n      // potential TODO: check if this is enough for all our usecases\n      // maybe provide a custom function to tell if we have enough information to render\n      renderIfPossible() {\n        if (this.textContent && this.root) {\n          this.renderContent();\n        }\n      }\n\n      renderContent() {\n        console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!` );\n      }\n\n    }; // end class\n  }; // end mixin function\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  /*global ShadyCSS*/\n\n  const Template = (name, templateString, useShadow = true) => {\n\n    return (superclass) => {\n\n      const template = document.createElement('template');\n      template.innerHTML = templateString;\n\n      if (useShadow && 'ShadyCSS' in window) {\n        ShadyCSS.prepareTemplate(template, name);\n      }\n\n      return class extends superclass {\n\n        static get is() { return name; }\n\n        constructor() {\n          super();\n\n          this.clone = document.importNode(template.content, true);\n          if (useShadow) {\n            this.attachShadow({mode: 'open'});\n            this.shadowRoot.appendChild(this.clone);\n          }\n        }\n\n        connectedCallback() {\n          if (this.hasAttribute('distill-prerendered')) {\n            return;\n          }\n          if (useShadow) {\n            if ('ShadyCSS' in window) {\n              ShadyCSS.styleElement(this);\n            }\n          } else {\n            this.insertBefore(this.clone, this.firstChild);\n          }\n        }\n\n        get root() {\n          if (useShadow) {\n            return this.shadowRoot;\n          } else {\n            return this;\n          }\n        }\n\n        /* TODO: Are we using these? Should we even? */\n        $(query) {\n          return this.root.querySelector(query);\n        }\n\n        $$(query) {\n          return this.root.querySelectorAll(query);\n        }\n      };\n    };\n  };\n\n  var math = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nspan.katex-display {\\n  text-align: left;\\n  padding: 8px 0 8px 0;\\n  margin: 0.5em 0 0.5em 1em;\\n}\\n\\nspan.katex {\\n  -webkit-font-smoothing: antialiased;\\n  color: rgba(0, 0, 0, 0.8);\\n  font-size: 1.18em;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // This is a straight concatenation of code from KaTeX's contrib folder,\n  // but we aren't using some of their helpers that don't work well outside a browser environment.\n\n  /*global katex */\n\n  const findEndOfMath = function(delimiter, text, startIndex) {\n    // Adapted from\n    // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n    let index = startIndex;\n    let braceLevel = 0;\n\n    const delimLength = delimiter.length;\n\n    while (index < text.length) {\n      const character = text[index];\n\n      if (\n        braceLevel <= 0 &&\n        text.slice(index, index + delimLength) === delimiter\n      ) {\n        return index;\n      } else if (character === \"\\\\\") {\n        index++;\n      } else if (character === \"{\") {\n        braceLevel++;\n      } else if (character === \"}\") {\n        braceLevel--;\n      }\n\n      index++;\n    }\n\n    return -1;\n  };\n\n  const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) {\n    const finalData = [];\n\n    for (let i = 0; i < startData.length; i++) {\n      if (startData[i].type === \"text\") {\n        const text = startData[i].data;\n\n        let lookingForLeft = true;\n        let currIndex = 0;\n        let nextIndex;\n\n        nextIndex = text.indexOf(leftDelim);\n        if (nextIndex !== -1) {\n          currIndex = nextIndex;\n          finalData.push({\n            type: \"text\",\n            data: text.slice(0, currIndex)\n          });\n          lookingForLeft = false;\n        }\n\n        while (true) {\n          // eslint-disable-line no-constant-condition\n          if (lookingForLeft) {\n            nextIndex = text.indexOf(leftDelim, currIndex);\n            if (nextIndex === -1) {\n              break;\n            }\n\n            finalData.push({\n              type: \"text\",\n              data: text.slice(currIndex, nextIndex)\n            });\n\n            currIndex = nextIndex;\n          } else {\n            nextIndex = findEndOfMath(\n              rightDelim,\n              text,\n              currIndex + leftDelim.length\n            );\n            if (nextIndex === -1) {\n              break;\n            }\n\n            finalData.push({\n              type: \"math\",\n              data: text.slice(currIndex + leftDelim.length, nextIndex),\n              rawData: text.slice(currIndex, nextIndex + rightDelim.length),\n              display: display\n            });\n\n            currIndex = nextIndex + rightDelim.length;\n          }\n\n          lookingForLeft = !lookingForLeft;\n        }\n\n        finalData.push({\n          type: \"text\",\n          data: text.slice(currIndex)\n        });\n      } else {\n        finalData.push(startData[i]);\n      }\n    }\n\n    return finalData;\n  };\n\n  const splitWithDelimiters = function(text, delimiters) {\n    let data = [{ type: \"text\", data: text }];\n    for (let i = 0; i < delimiters.length; i++) {\n      const delimiter = delimiters[i];\n      data = splitAtDelimiters(\n        data,\n        delimiter.left,\n        delimiter.right,\n        delimiter.display || false\n      );\n    }\n    return data;\n  };\n\n  /* Note: optionsCopy is mutated by this method. If it is ever exposed in the\n   * API, we should copy it before mutating.\n   */\n  const renderMathInText = function(text, optionsCopy) {\n    const data = splitWithDelimiters(text, optionsCopy.delimiters);\n    const fragment = document.createDocumentFragment();\n\n    for (let i = 0; i < data.length; i++) {\n      if (data[i].type === \"text\") {\n        fragment.appendChild(document.createTextNode(data[i].data));\n      } else {\n        const tag = document.createElement(\"d-math\");\n        const math = data[i].data;\n        // Override any display mode defined in the settings with that\n        // defined by the text itself\n        optionsCopy.displayMode = data[i].display;\n        try {\n          tag.textContent = math;\n          if (optionsCopy.displayMode) {\n            tag.setAttribute(\"block\", \"\");\n          }\n        } catch (e) {\n          if (!(e instanceof katex.ParseError)) {\n            throw e;\n          }\n          optionsCopy.errorCallback(\n            \"KaTeX auto-render: Failed to parse `\" + data[i].data + \"` with \",\n            e\n          );\n          fragment.appendChild(document.createTextNode(data[i].rawData));\n          continue;\n        }\n        fragment.appendChild(tag);\n      }\n    }\n\n    return fragment;\n  };\n\n  const renderElem = function(elem, optionsCopy) {\n    for (let i = 0; i < elem.childNodes.length; i++) {\n      const childNode = elem.childNodes[i];\n      if (childNode.nodeType === 3) {\n        // Text node\n        const text = childNode.textContent;\n        if (optionsCopy.mightHaveMath(text)) {\n          const frag = renderMathInText(text, optionsCopy);\n          i += frag.childNodes.length - 1;\n          elem.replaceChild(frag, childNode);\n        }\n      } else if (childNode.nodeType === 1) {\n        // Element node\n        const shouldRender =\n          optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) ===\n          -1;\n\n        if (shouldRender) {\n          renderElem(childNode, optionsCopy);\n        }\n      }\n      // Otherwise, it's something else, and ignore it.\n    }\n  };\n\n  const defaultAutoRenderOptions = {\n    delimiters: [\n      { left: \"$$\", right: \"$$\", display: true },\n      { left: \"\\\\[\", right: \"\\\\]\", display: true },\n      { left: \"\\\\(\", right: \"\\\\)\", display: false }\n      // LaTeX uses this, but it ruins the display of normal `$` in text:\n      // {left: '$', right: '$', display: false},\n    ],\n\n    ignoredTags: [\n      \"script\",\n      \"noscript\",\n      \"style\",\n      \"textarea\",\n      \"pre\",\n      \"code\",\n      \"svg\"\n    ],\n\n    errorCallback: function(msg, err) {\n      console.error(msg, err);\n    }\n  };\n\n  const renderMathInElement = function(elem, options) {\n    if (!elem) {\n      throw new Error(\"No element provided to render\");\n    }\n\n    const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);\n    const delimiterStrings = optionsCopy.delimiters.flatMap(d => [\n      d.left,\n      d.right\n    ]);\n    const mightHaveMath = text =>\n      delimiterStrings.some(d => text.indexOf(d) !== -1);\n    optionsCopy.mightHaveMath = mightHaveMath;\n    renderElem(elem, optionsCopy);\n  };\n\n  // Copyright 2018 The Distill Template Authors\n\n  const katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js';\n  const katexCSSTag = '<link rel=\"stylesheet\" href=\"https://distill.pub/third-party/katex/katex.min.css\" crossorigin=\"anonymous\">';\n\n  const T = Template('d-math', `\n${katexCSSTag}\n<style>\n\n:host {\n  display: inline-block;\n  contain: style;\n}\n\n:host([block]) {\n  display: block;\n}\n\n${math}\n</style>\n<span id='katex-container'></span>\n`);\n\n  // DMath, not Math, because that would conflict with the JS built-in\n  class DMath extends Mutating(T(HTMLElement)) {\n\n    static set katexOptions(options) {\n      DMath._katexOptions = options;\n      if (DMath.katexOptions.delimiters) {\n        if (!DMath.katexAdded) {\n          DMath.addKatex();\n        } else {\n          DMath.katexLoadedCallback();\n        }\n      }\n    }\n\n    static get katexOptions() {\n      if (!DMath._katexOptions) {\n        DMath._katexOptions = {\n          delimiters: [ { 'left':'$$', 'right':'$$', 'display': false } ]\n        };\n      }\n      return DMath._katexOptions;\n    }\n\n    static katexLoadedCallback() {\n      // render all d-math tags\n      const mathTags = document.querySelectorAll('d-math');\n      for (const mathTag of mathTags) {\n        mathTag.renderContent();\n      }\n      // transform inline delimited math to d-math tags\n      if (DMath.katexOptions.delimiters) {\n        renderMathInElement(document.body, DMath.katexOptions);\n      }\n    }\n\n    static addKatex() {\n      // css tag can use this convenience function\n      document.head.insertAdjacentHTML('beforeend', katexCSSTag);\n      // script tag has to be created to work properly\n      const scriptTag = document.createElement('script');\n      scriptTag.src = katexJSURL;\n      scriptTag.async = true;\n      scriptTag.onload = DMath.katexLoadedCallback;\n      scriptTag.crossorigin = 'anonymous';\n      document.head.appendChild(scriptTag);\n\n      DMath.katexAdded = true;\n    }\n\n    get options() {\n      const localOptions = { displayMode: this.hasAttribute('block') };\n      return Object.assign(localOptions, DMath.katexOptions);\n    }\n\n    connectedCallback() {\n      super.connectedCallback();\n      if (!DMath.katexAdded) {\n        DMath.addKatex();\n      }\n    }\n\n    renderContent() {\n      if (typeof katex !== 'undefined') {\n        const container = this.root.querySelector('#katex-container');\n        katex.render(this.textContent, container, this.options);\n      }\n    }\n\n  }\n\n  DMath.katexAdded = false;\n  DMath.inlineMathRendered = false;\n  window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function collect_citations(dom = document) {\n    const citations = new Set();\n    const citeTags = dom.querySelectorAll(\"d-cite\");\n    for (const tag of citeTags) {\n      const keyString = tag.getAttribute(\"key\") || tag.getAttribute(\"bibtex-key\");\n      const keys = keyString.split(\",\").map(k => k.trim());\n      for (const key of keys) {\n        citations.add(key);\n      }\n    }\n    return [...citations];\n  }\n\n  function author_string(ent, template, sep, finalSep) {\n    if (ent.author == null) {\n      return \"\";\n    }\n    var names = ent.author.split(\" and \");\n    let name_strings = names.map(name => {\n      name = name.trim();\n      if (name.indexOf(\",\") != -1) {\n        var last = name.split(\",\")[0].trim();\n        var firsts = name.split(\",\")[1];\n      } else if (name.indexOf(\" \") != -1) {\n        var last = name\n          .split(\" \")\n          .slice(-1)[0]\n          .trim();\n        var firsts = name\n          .split(\" \")\n          .slice(0, -1)\n          .join(\" \");\n      } else {\n        var last = name.trim();\n      }\n      var initials = \"\";\n      if (firsts != undefined) {\n        initials = firsts\n          .trim()\n          .split(\" \")\n          .map(s => s.trim()[0]);\n        initials = initials.join(\".\") + \".\";\n      }\n      return template\n        .replace(\"${F}\", firsts)\n        .replace(\"${L}\", last)\n        .replace(\"${I}\", initials)\n        .trim(); // in case one of first or last was empty\n    });\n    if (names.length > 1) {\n      var str = name_strings.slice(0, names.length - 1).join(sep);\n      str += (finalSep || sep) + name_strings[names.length - 1];\n      return str;\n    } else {\n      return name_strings[0];\n    }\n  }\n\n  function venue_string(ent) {\n    var cite = ent.journal || ent.booktitle || \"\";\n    if (\"volume\" in ent) {\n      var issue = ent.issue || ent.number;\n      issue = issue != undefined ? \"(\" + issue + \")\" : \"\";\n      cite += \", Vol \" + ent.volume + issue;\n    }\n    if (\"pages\" in ent) {\n      cite += \", pp. \" + ent.pages;\n    }\n    if (cite != \"\") cite += \". \";\n    if (\"publisher\" in ent) {\n      cite += ent.publisher;\n      if (cite[cite.length - 1] != \".\") cite += \".\";\n    }\n    return cite;\n  }\n\n  function link_string(ent) {\n    if (\"url\" in ent) {\n      var url = ent.url;\n      var arxiv_match = /arxiv\\.org\\/abs\\/([0-9\\.]*)/.exec(url);\n      if (arxiv_match != null) {\n        url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;\n      }\n\n      if (url.slice(-4) == \".pdf\") {\n        var label = \"PDF\";\n      } else if (url.slice(-5) == \".html\") {\n        var label = \"HTML\";\n      }\n      return ` &ensp;<a href=\"${url}\">[${label || \"link\"}]</a>`;\n    } /* else if (\"doi\" in ent){\n      return ` &ensp;<a href=\"https://doi.org/${ent.doi}\" >[DOI]</a>`;\n    }*/ else {\n      return \"\";\n    }\n  }\n  function doi_string(ent, new_line) {\n    if (\"doi\" in ent) {\n      return `${new_line ? \"<br>\" : \"\"} <a href=\"https://doi.org/${\n      ent.doi\n    }\" style=\"text-decoration:inherit;\">DOI: ${ent.doi}</a>`;\n    } else {\n      return \"\";\n    }\n  }\n\n  function title_string(ent) {\n    return '<span class=\"title\">' + ent.title + \"</span> \";\n  }\n\n  function bibliography_cite(ent, fancy) {\n    if (ent) {\n      var cite = title_string(ent);\n      cite += link_string(ent) + \"<br>\";\n      if (ent.author) {\n        cite += author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n        if (ent.year || ent.date) {\n          cite += \", \";\n        }\n      }\n      if (ent.year || ent.date) {\n        cite += (ent.year || ent.date) + \". \";\n      } else {\n        cite += \". \";\n      }\n      cite += venue_string(ent);\n      cite += doi_string(ent);\n      return cite;\n      /*var cite =  author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n      if (ent.year || ent.date){\n        cite += \", \" + (ent.year || ent.date) + \". \"\n      } else {\n        cite += \". \"\n      }\n      cite += \"<b>\" + ent.title + \"</b>. \";\n      cite += venue_string(ent);\n      cite += doi_string(ent);\n      cite += link_string(ent);\n      return cite*/\n    } else {\n      return \"?\";\n    }\n  }\n\n  function hover_cite(ent) {\n    if (ent) {\n      var cite = \"\";\n      cite += \"<strong>\" + ent.title + \"</strong>\";\n      cite += link_string(ent);\n      cite += \"<br>\";\n\n      var a_str = author_string(ent, \"${I} ${L}\", \", \") + \".\";\n      var v_str =\n        venue_string(ent).trim() + \" \" + ent.year + \". \" + doi_string(ent, true);\n\n      if ((a_str + v_str).length < Math.min(40, ent.title.length)) {\n        cite += a_str + \" \" + v_str;\n      } else {\n        cite += a_str + \"<br>\" + v_str;\n      }\n      return cite;\n    } else {\n      return \"?\";\n    }\n  }\n\n  function domContentLoaded() {\n    return ['interactive', 'complete'].indexOf(document.readyState) !== -1;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function _moveLegacyAffiliationFormatIntoArray(frontMatter) {\n    // authors used to have propoerties \"affiliation\" and \"affiliationURL\".\n    // We now encourage using an array for affiliations containing objects with\n    // properties \"name\" and \"url\".\n    for (let author of frontMatter.authors) {\n      const hasOldStyle = Boolean(author.affiliation);\n      const hasNewStyle = Boolean(author.affiliations);\n      if (!hasOldStyle) continue;\n      if (hasNewStyle) {\n        console.warn(`Author ${author.author} has both old-style (\"affiliation\" & \"affiliationURL\") and new style (\"affiliations\") affiliation information!`);\n      } else {\n        let newAffiliation = {\n          \"name\": author.affiliation\n        };\n        if (author.affiliationURL) newAffiliation.url = author.affiliationURL;\n        author.affiliations = [newAffiliation];\n      }\n    }\n    return frontMatter\n  }\n\n  function parseFrontmatter(element) {\n    const scriptTag = element.firstElementChild;\n    if (scriptTag) {\n      const type = scriptTag.getAttribute('type');\n      if (type.split('/')[1] == 'json') {\n        const content = scriptTag.textContent;\n        const parsed = JSON.parse(content);\n        return _moveLegacyAffiliationFormatIntoArray(parsed);\n      } else {\n        console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.');\n      }\n    } else {\n      console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.');\n    }\n    return {};\n  }\n\n  class FrontMatter$1 extends HTMLElement {\n\n    static get is() { return 'd-front-matter'; }\n\n    constructor() {\n      super();\n\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver( (entries) => {\n        for (const entry of entries) {\n          if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n            const data = parseFrontmatter(this);\n            this.notify(data);\n          }\n        }\n      });\n      observer.observe(this, options);\n    }\n\n    notify(data) {\n      const options = { detail: data, bubbles: true };\n      const event = new CustomEvent('onFrontMatterChanged', options);\n      document.dispatchEvent(event);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // no appendix -> add appendix\n  // title in front, no h1 -> add it\n  // no title in front, h1 -> read and put into frontMatter\n  // footnote -> footnote list\n  // break up bib\n  // if citation, no bib-list -> add citation-list\n\n  // if authors, no byline -> add byline\n\n  function optionalComponents(dom, data) {\n    const body = dom.body;\n    const article = body.querySelector('d-article');\n\n    // If we don't have an article tag, something weird is going on—giving up.\n    if (!article) {\n      console.warn('No d-article tag found; skipping adding optional components!');\n      return;\n    }\n\n    let byline = dom.querySelector('d-byline');\n    if (!byline) {\n      if (data.authors) {\n        byline = dom.createElement('d-byline');\n        body.insertBefore(byline, article);\n      } else {\n        console.warn('No authors found in front matter; please add them before submission!');\n      }\n    }\n\n    let title = dom.querySelector('d-title');\n    if (!title) {\n      title = dom.createElement('d-title');\n      body.insertBefore(title, byline);\n    }\n\n    let h1 = title.querySelector('h1');\n    if (!h1) {\n      h1 = dom.createElement('h1');\n      h1.textContent = data.title;\n      title.insertBefore(h1, title.firstChild);\n    }\n\n    const hasPassword = typeof data.password !== 'undefined';\n    let interstitial = body.querySelector('d-interstitial');\n    if (hasPassword && !interstitial) {\n      const inBrowser = typeof window !== 'undefined';\n      const onLocalhost = inBrowser && window.location.hostname.includes('localhost');\n      if (!inBrowser || !onLocalhost) {\n        interstitial = dom.createElement('d-interstitial');\n        interstitial.password = data.password;\n        body.insertBefore(interstitial, body.firstChild);\n      }\n    } else if (!hasPassword && interstitial) {\n      interstitial.parentElement.removeChild(this);\n    }\n\n    let appendix = dom.querySelector('d-appendix');\n    if (!appendix) {\n      appendix = dom.createElement('d-appendix');\n      dom.body.appendChild(appendix);\n    }\n\n    let footnoteList = dom.querySelector('d-footnote-list');\n    if (!footnoteList) {\n      footnoteList = dom.createElement('d-footnote-list');\n      appendix.appendChild(footnoteList);\n    }\n\n    let citationList = dom.querySelector('d-citation-list');\n    if (!citationList) {\n      citationList = dom.createElement('d-citation-list');\n      appendix.appendChild(citationList);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const frontMatter = new FrontMatter();\n\n  const Controller = {\n    frontMatter: frontMatter,\n    waitingOn: {\n      bibliography: [],\n      citations: []\n    },\n    listeners: {\n      onCiteKeyCreated(event) {\n        const [citeTag, keys] = event.detail;\n\n        // ensure we have citations\n        if (!frontMatter.citationsCollected) {\n          // console.debug('onCiteKeyCreated, but unresolved dependency (\"citations\"). Enqueing.');\n          Controller.waitingOn.citations.push(() =>\n            Controller.listeners.onCiteKeyCreated(event)\n          );\n          return;\n        }\n\n        // ensure we have a loaded bibliography\n        if (!frontMatter.bibliographyParsed) {\n          // console.debug('onCiteKeyCreated, but unresolved dependency (\"bibliography\"). Enqueing.');\n          Controller.waitingOn.bibliography.push(() =>\n            Controller.listeners.onCiteKeyCreated(event)\n          );\n          return;\n        }\n\n        const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n        citeTag.numbers = numbers;\n        const entries = keys.map(key => frontMatter.bibliography.get(key));\n        citeTag.entries = entries;\n      },\n\n      onCiteKeyChanged() {\n        // const [citeTag, keys] = event.detail;\n\n        // update citations\n        frontMatter.citations = collect_citations();\n        frontMatter.citationsCollected = true;\n        for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n          waitingCallback();\n        }\n\n        // update bibliography\n        const citationListTag = document.querySelector(\"d-citation-list\");\n        const bibliographyEntries = new Map(\n          frontMatter.citations.map(citationKey => {\n            return [citationKey, frontMatter.bibliography.get(citationKey)];\n          })\n        );\n        citationListTag.citations = bibliographyEntries;\n\n        const citeTags = document.querySelectorAll(\"d-cite\");\n        for (const citeTag of citeTags) {\n          console.log(citeTag);\n          const keys = citeTag.keys;\n          const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n          citeTag.numbers = numbers;\n          const entries = keys.map(key => frontMatter.bibliography.get(key));\n          citeTag.entries = entries;\n        }\n      },\n\n      onCiteKeyRemoved(event) {\n        Controller.listeners.onCiteKeyChanged(event);\n      },\n\n      onBibliographyChanged(event) {\n        const citationListTag = document.querySelector(\"d-citation-list\");\n\n        const bibliography = event.detail;\n\n        frontMatter.bibliography = bibliography;\n        frontMatter.bibliographyParsed = true;\n        for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n          waitingCallback();\n        }\n\n        // ensure we have citations\n        if (!frontMatter.citationsCollected) {\n          Controller.waitingOn.citations.push(function() {\n            Controller.listeners.onBibliographyChanged({\n              target: event.target,\n              detail: event.detail\n            });\n          });\n          return;\n        }\n\n        if (citationListTag.hasAttribute(\"distill-prerendered\")) {\n          console.debug(\"Citation list was prerendered; not updating it.\");\n        } else {\n          const entries = new Map(\n            frontMatter.citations.map(citationKey => {\n              return [citationKey, frontMatter.bibliography.get(citationKey)];\n            })\n          );\n          citationListTag.citations = entries;\n        }\n      },\n\n      onFootnoteChanged() {\n        // const footnote = event.detail;\n        //TODO: optimize to only update current footnote\n        const footnotesList = document.querySelector(\"d-footnote-list\");\n        if (footnotesList) {\n          const footnotes = document.querySelectorAll(\"d-footnote\");\n          footnotesList.footnotes = footnotes;\n        }\n      },\n\n      onFrontMatterChanged(event) {\n        const data = event.detail;\n        mergeFromYMLFrontmatter(frontMatter, data);\n\n        const interstitial = document.querySelector(\"d-interstitial\");\n        if (interstitial) {\n          if (typeof frontMatter.password !== \"undefined\") {\n            interstitial.password = frontMatter.password;\n          } else {\n            interstitial.parentElement.removeChild(interstitial);\n          }\n        }\n\n        const prerendered = document.body.hasAttribute(\"distill-prerendered\");\n        if (!prerendered && domContentLoaded()) {\n          optionalComponents(document, frontMatter);\n\n          const appendix = document.querySelector(\"distill-appendix\");\n          if (appendix) {\n            appendix.frontMatter = frontMatter;\n          }\n\n          const byline = document.querySelector(\"d-byline\");\n          if (byline) {\n            byline.frontMatter = frontMatter;\n          }\n\n          if (data.katex) {\n            DMath.katexOptions = data.katex;\n          }\n        }\n      },\n\n      DOMContentLoaded() {\n        if (Controller.loaded) {\n          console.warn(\n            \"Controller received DOMContentLoaded but was already loaded!\"\n          );\n          return;\n        } else if (!domContentLoaded()) {\n          console.warn(\n            \"Controller received DOMContentLoaded at document.readyState: \" +\n              document.readyState +\n              \"!\"\n          );\n          return;\n        } else {\n          Controller.loaded = true;\n          console.debug(\"Runlevel 4: Controller running DOMContentLoaded\");\n        }\n\n        const frontMatterTag = document.querySelector(\"d-front-matter\");\n        if (frontMatterTag) {\n          const data = parseFrontmatter(frontMatterTag);\n          Controller.listeners.onFrontMatterChanged({ detail: data });\n        }\n\n        // Resolving \"citations\" dependency due to initial DOM load\n        frontMatter.citations = collect_citations();\n        frontMatter.citationsCollected = true;\n        for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n          waitingCallback();\n        }\n\n        if (frontMatter.bibliographyParsed) {\n          for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n            waitingCallback();\n          }\n        }\n\n        const footnotesList = document.querySelector(\"d-footnote-list\");\n        if (footnotesList) {\n          const footnotes = document.querySelectorAll(\"d-footnote\");\n          footnotesList.footnotes = footnotes;\n        }\n      }\n    } // listeners\n  }; // Controller\n\n  var base = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nhtml {\\n  font-size: 14px;\\n\\tline-height: 1.6em;\\n  /* font-family: \\\"Libre Franklin\\\", \\\"Helvetica Neue\\\", sans-serif; */\\n  font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen, Ubuntu, Cantarell, \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n  /*, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";*/\\n  text-size-adjust: 100%;\\n  -ms-text-size-adjust: 100%;\\n  -webkit-text-size-adjust: 100%;\\n}\\n\\n@media(min-width: 768px) {\\n  html {\\n    font-size: 16px;\\n  }\\n}\\n\\nbody {\\n  margin: 0;\\n}\\n\\na {\\n  color: #004276;\\n}\\n\\nfigure {\\n  margin: 0;\\n}\\n\\ntable {\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th {\\n\\ttext-align: left;\\n}\\n\\ntable thead {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\ntable thead th {\\n  padding-bottom: 0.5em;\\n}\\n\\ntable tbody :first-child td {\\n  padding-top: 0.5em;\\n}\\n\\npre {\\n  overflow: auto;\\n  max-width: 100%;\\n}\\n\\np {\\n  margin-top: 0;\\n  margin-bottom: 1em;\\n}\\n\\nsup, sub {\\n  vertical-align: baseline;\\n  position: relative;\\n  top: -0.4em;\\n  line-height: 1em;\\n}\\n\\nsub {\\n  top: 0.4em;\\n}\\n\\n.kicker,\\n.marker {\\n  font-size: 15px;\\n  font-weight: 600;\\n  color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n/* Headline */\\n\\n@media(min-width: 1024px) {\\n  d-title h1 span {\\n    display: block;\\n  }\\n}\\n\\n/* Figure */\\n\\nfigure {\\n  position: relative;\\n  margin-bottom: 2.5em;\\n  margin-top: 1.5em;\\n}\\n\\nfigcaption+figure {\\n\\n}\\n\\nfigure img {\\n  width: 100%;\\n}\\n\\nfigure svg text,\\nfigure svg tspan {\\n}\\n\\nfigcaption,\\n.figcaption {\\n  color: rgba(0, 0, 0, 0.6);\\n  font-size: 12px;\\n  line-height: 1.5em;\\n}\\n\\n@media(min-width: 1024px) {\\nfigcaption,\\n.figcaption {\\n    font-size: 13px;\\n  }\\n}\\n\\nfigure.external img {\\n  background: white;\\n  border: 1px solid rgba(0, 0, 0, 0.1);\\n  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\\n  padding: 18px;\\n  box-sizing: border-box;\\n}\\n\\nfigcaption a {\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\nfigcaption b,\\nfigcaption strong, {\\n  font-weight: 600;\\n  color: rgba(0, 0, 0, 1.0);\\n}\\n\";\n\n  var layout = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@supports not (display: grid) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    display: block;\\n    padding: 8px;\\n  }\\n}\\n\\n.base-grid,\\ndistill-header,\\nd-title,\\nd-abstract,\\nd-article,\\nd-appendix,\\ndistill-appendix,\\nd-byline,\\nd-footnote-list,\\nd-citation-list,\\ndistill-footer {\\n  display: grid;\\n  justify-items: stretch;\\n  grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\\n  grid-column-gap: 8px;\\n}\\n\\n.grid {\\n  display: grid;\\n  grid-column-gap: 8px;\\n}\\n\\n@media(min-width: 768px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 16px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 16px;\\n  }\\n}\\n\\n@media(min-width: 1000px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 16px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 16px;\\n  }\\n}\\n\\n@media(min-width: 1180px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 32px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 32px;\\n  }\\n}\\n\\n\\n\\n\\n.base-grid {\\n  grid-column: screen;\\n}\\n\\n/* .l-body,\\nd-article > *  {\\n  grid-column: text;\\n}\\n\\n.l-page,\\nd-title > *,\\nd-figure {\\n  grid-column: page;\\n} */\\n\\n.l-gutter {\\n  grid-column: gutter;\\n}\\n\\n.l-text,\\n.l-body {\\n  grid-column: text;\\n}\\n\\n.l-page {\\n  grid-column: page;\\n}\\n\\n.l-body-outset {\\n  grid-column: middle;\\n}\\n\\n.l-page-outset {\\n  grid-column: page;\\n}\\n\\n.l-screen {\\n  grid-column: screen;\\n}\\n\\n.l-screen-inset {\\n  grid-column: screen;\\n  padding-left: 16px;\\n  padding-left: 16px;\\n}\\n\\n\\n/* Aside */\\n\\nd-article aside {\\n  grid-column: gutter;\\n  font-size: 12px;\\n  line-height: 1.6em;\\n  color: rgba(0, 0, 0, 0.6)\\n}\\n\\n@media(min-width: 768px) {\\n  aside {\\n    grid-column: gutter;\\n  }\\n\\n  .side {\\n    grid-column: gutter;\\n  }\\n}\\n\";\n\n  var print = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@media print {\\n\\n  @page {\\n    size: 8in 11in;\\n    @bottom-right {\\n      content: counter(page) \\\" of \\\" counter(pages);\\n    }\\n  }\\n\\n  html {\\n    /* no general margins -- CSS Grid takes care of those */\\n  }\\n\\n  p, code {\\n    page-break-inside: avoid;\\n  }\\n\\n  h2, h3 {\\n    page-break-after: avoid;\\n  }\\n\\n  d-header {\\n    visibility: hidden;\\n  }\\n\\n  d-footer {\\n    display: none!important;\\n  }\\n\\n}\\n\";\n\n  var byline = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-byline {\\n  contain: style;\\n  overflow: hidden;\\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\\n  font-size: 0.8rem;\\n  line-height: 1.8em;\\n  padding: 1.5rem 0;\\n  min-height: 1.8em;\\n}\\n\\n\\nd-byline .byline {\\n  grid-template-columns: 1fr 1fr;\\n  grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n  d-byline .byline {\\n    grid-template-columns: 1fr 1fr 1fr 1fr;\\n  }\\n}\\n\\nd-byline .authors-affiliations {\\n  grid-column-end: span 2;\\n  grid-template-columns: 1fr 1fr;\\n  margin-bottom: 1em;\\n}\\n\\n@media(min-width: 768px) {\\n  d-byline .authors-affiliations {\\n    margin-bottom: 0;\\n  }\\n}\\n\\nd-byline h3 {\\n  font-size: 0.6rem;\\n  font-weight: 400;\\n  color: rgba(0, 0, 0, 0.5);\\n  margin: 0;\\n  text-transform: uppercase;\\n}\\n\\nd-byline p {\\n  margin: 0;\\n}\\n\\nd-byline a,\\nd-article d-byline a {\\n  color: rgba(0, 0, 0, 0.8);\\n  text-decoration: none;\\n  border-bottom: none;\\n}\\n\\nd-article d-byline a:hover {\\n  text-decoration: underline;\\n  border-bottom: none;\\n}\\n\\nd-byline p.author {\\n  font-weight: 500;\\n}\\n\\nd-byline .affiliations {\\n\\n}\\n\";\n\n  var article = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-article {\\n  contain: layout style;\\n  overflow-x: hidden;\\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\\n  padding-top: 2rem;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article > * {\\n  grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n  d-article {\\n    font-size: 16px;\\n  }\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article {\\n    font-size: 1.06rem;\\n    line-height: 1.7em;\\n  }\\n}\\n\\n\\n/* H2 */\\n\\n\\nd-article .marker {\\n  text-decoration: none;\\n  border: none;\\n  counter-reset: section;\\n  grid-column: kicker;\\n  line-height: 1.7em;\\n}\\n\\nd-article .marker:hover {\\n  border: none;\\n}\\n\\nd-article .marker span {\\n  padding: 0 3px 4px;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n  position: relative;\\n  top: 4px;\\n}\\n\\nd-article .marker:hover span {\\n  color: rgba(0, 0, 0, 0.7);\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.7);\\n}\\n\\nd-article h2 {\\n  font-weight: 600;\\n  font-size: 24px;\\n  line-height: 1.25em;\\n  margin: 2rem 0 1.5rem 0;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n  padding-bottom: 1rem;\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article h2 {\\n    font-size: 36px;\\n  }\\n}\\n\\n/* H3 */\\n\\nd-article h3 {\\n  font-weight: 700;\\n  font-size: 18px;\\n  line-height: 1.4em;\\n  margin-bottom: 1em;\\n  margin-top: 2em;\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article h3 {\\n    font-size: 20px;\\n  }\\n}\\n\\n/* H4 */\\n\\nd-article h4 {\\n  font-weight: 600;\\n  text-transform: uppercase;\\n  font-size: 14px;\\n  line-height: 1.4em;\\n}\\n\\nd-article a {\\n  color: inherit;\\n}\\n\\nd-article p,\\nd-article ul,\\nd-article ol,\\nd-article blockquote {\\n  margin-top: 0;\\n  margin-bottom: 1em;\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\nd-article blockquote {\\n  border-left: 2px solid rgba(0, 0, 0, 0.2);\\n  padding-left: 2em;\\n  font-style: italic;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\nd-article a {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.4);\\n  text-decoration: none;\\n}\\n\\nd-article a:hover {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article .link {\\n  text-decoration: underline;\\n  cursor: pointer;\\n}\\n\\nd-article ul,\\nd-article ol {\\n  padding-left: 24px;\\n}\\n\\nd-article li {\\n  margin-bottom: 0.2em;\\n  margin-left: 0;\\n  padding-left: 0;\\n}\\n\\nd-article li:last-child {\\n  margin-bottom: 0;\\n}\\n\\nd-article pre {\\n  font-size: 14px;\\n  margin-bottom: 20px;\\n}\\n\\nd-article hr {\\n  grid-column: screen;\\n  width: 100%;\\n  border: none;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n  margin-top: 60px;\\n  margin-bottom: 60px;\\n}\\n\\nd-article section {\\n  margin-top: 60px;\\n  margin-bottom: 60px;\\n}\\n\\nd-article span.equation-mimic {\\n  font-family: georgia;\\n  font-size: 115%;\\n  font-style: italic;\\n}\\n\\nd-article > d-code,\\nd-article section > d-code  {\\n  display: block;\\n}\\n\\nd-article > d-math[block],\\nd-article section > d-math[block]  {\\n  display: block;\\n}\\n\\n@media (max-width: 768px) {\\n  d-article > d-code,\\n  d-article section > d-code,\\n  d-article > d-math[block],\\n  d-article section > d-math[block] {\\n      overflow-x: scroll;\\n      -ms-overflow-style: none;  // IE 10+\\n      overflow: -moz-scrollbars-none;  // Firefox\\n  }\\n\\n  d-article > d-code::-webkit-scrollbar,\\n  d-article section > d-code::-webkit-scrollbar,\\n  d-article > d-math[block]::-webkit-scrollbar,\\n  d-article section > d-math[block]::-webkit-scrollbar {\\n    display: none;  // Safari and Chrome\\n  }\\n}\\n\\nd-article .citation {\\n  color: #668;\\n  cursor: pointer;\\n}\\n\\nd-include {\\n  width: auto;\\n  display: block;\\n}\\n\\nd-figure {\\n  contain: layout style;\\n}\\n\\n/* KaTeX */\\n\\n.katex, .katex-prerendered {\\n  contain: style;\\n  display: inline-block;\\n}\\n\\n/* Tables */\\n\\nd-article table {\\n  border-collapse: collapse;\\n  margin-bottom: 1.5rem;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table th {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table td {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\nd-article table tr:last-of-type td {\\n  border-bottom: none;\\n}\\n\\nd-article table th,\\nd-article table td {\\n  font-size: 15px;\\n  padding: 2px 8px;\\n}\\n\\nd-article table tbody :first-child td {\\n  padding-top: 2px;\\n}\\n\";\n\n  var title = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-title {\\n  padding: 2rem 0 1.5rem;\\n  contain: layout style;\\n  overflow-x: hidden;\\n}\\n\\n@media(min-width: 768px) {\\n  d-title {\\n    padding: 4rem 0 1.5rem;\\n  }\\n}\\n\\nd-title h1 {\\n  grid-column: text;\\n  font-size: 40px;\\n  font-weight: 700;\\n  line-height: 1.1em;\\n  margin: 0 0 0.5rem;\\n}\\n\\n@media(min-width: 768px) {\\n  d-title h1 {\\n    font-size: 50px;\\n  }\\n}\\n\\nd-title p {\\n  font-weight: 300;\\n  font-size: 1.2rem;\\n  line-height: 1.55em;\\n  grid-column: text;\\n}\\n\\nd-title .status {\\n  margin-top: 0px;\\n  font-size: 12px;\\n  color: #009688;\\n  opacity: 0.8;\\n  grid-column: kicker;\\n}\\n\\nd-title .status span {\\n  line-height: 1;\\n  display: inline-block;\\n  padding: 6px 0;\\n  border-bottom: 1px solid #80cbc4;\\n  font-size: 11px;\\n  text-transform: uppercase;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles = base + layout + title + byline + article + math + print;\n\n  function makeStyleTag(dom) {\n\n    const styleTagId = 'distill-prerendered-styles';\n    const prerenderedTag = dom.getElementById(styleTagId);\n    if (!prerenderedTag) {\n      const styleTag = dom.createElement('style');\n      styleTag.id = styleTagId;\n      styleTag.type = 'text/css';\n      const cssTextTag = dom.createTextNode(styles);\n      styleTag.appendChild(cssTextTag);\n      const firstScriptTag = dom.head.querySelector('script');\n      dom.head.insertBefore(styleTag, firstScriptTag);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function addPolyfill(polyfill, polyfillLoadedCallback) {\n    console.debug('Runlevel 0: Polyfill required: ' + polyfill.name);\n    const script = document.createElement('script');\n    script.src = polyfill.url;\n    script.async = false;\n    if (polyfillLoadedCallback) {\n      script.onload = function() { polyfillLoadedCallback(polyfill); };\n    }\n    script.onerror = function() {\n      new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name);\n    };\n    document.head.appendChild(script);\n  }\n\n  const polyfills = [\n    {\n      name: 'WebComponents',\n      support: function() {\n        return 'customElements' in window &&\n               'attachShadow' in Element.prototype &&\n               'getRootNode' in Element.prototype &&\n               'content' in document.createElement('template') &&\n               'Promise' in window &&\n               'from' in Array;\n      },\n      url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js'\n    }, {\n      name: 'IntersectionObserver',\n      support: function() {\n        return 'IntersectionObserver' in window &&\n               'IntersectionObserverEntry' in window;\n      },\n      url: 'https://distill.pub/third-party/polyfills/intersection-observer.js'\n    },\n  ];\n\n  class Polyfills {\n\n    static browserSupportsAllFeatures() {\n      return polyfills.every((poly) => poly.support());\n    }\n\n    static load(callback) {\n      // Define an intermediate callback that checks if all is loaded.\n      const polyfillLoaded = function(polyfill) {\n        polyfill.loaded = true;\n        console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name);\n        // console.debug(window[polyfill.name]);\n        if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {\n          console.debug('Runlevel 0: All required polyfills have finished loading.');\n          console.debug('Runlevel 0->1.');\n          window.distillRunlevel = 1;\n          callback();\n        }\n      };\n      // Add polyfill script tags\n      for (const polyfill of Polyfills.neededPolyfills) {\n        addPolyfill(polyfill, polyfillLoaded);\n      }\n    }\n\n    static get neededPolyfills() {\n      if (!Polyfills._neededPolyfills) {\n        Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());\n      }\n      return Polyfills._neededPolyfills;\n    }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // const marginSmall = 16;\n  // const marginLarge = 3 * marginSmall;\n  // const margin = marginSmall + marginLarge;\n  // const gutter = marginSmall;\n  // const outsetAmount = margin / 2;\n  // const numCols = 4;\n  // const numGutters = numCols - 1;\n  // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;\n  //\n  // const screenwidth = 768;\n  // const pageWidth = screenwidth - 2 * marginLarge;\n  // const bodyWidth = pageWidth - columnWidth - gutter;\n\n  function body(selector) {\n    return `${selector} {\n      grid-column: left / text;\n    }\n  `;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$1 = Template('d-abstract', `\n<style>\n  :host {\n    font-size: 1.25rem;\n    line-height: 1.6em;\n    color: rgba(0, 0, 0, 0.7);\n    -webkit-font-smoothing: antialiased;\n  }\n\n  ::slotted(p) {\n    margin-top: 0;\n    margin-bottom: 1em;\n    grid-column: text-start / middle-end;\n  }\n  ${body('d-abstract')}\n</style>\n\n<slot></slot>\n`);\n\n  class Abstract extends T$1(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$2 = Template('d-appendix', `\n<style>\n\nd-appendix {\n  contain: layout style;\n  font-size: 0.8em;\n  line-height: 1.7em;\n  margin-top: 60px;\n  margin-bottom: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  color: rgba(0,0,0,0.5);\n  padding-top: 60px;\n  padding-bottom: 48px;\n}\n\nd-appendix h3 {\n  grid-column: page-start / text-start;\n  font-size: 15px;\n  font-weight: 500;\n  margin-top: 1em;\n  margin-bottom: 0;\n  color: rgba(0,0,0,0.65);\n}\n\nd-appendix h3 + * {\n  margin-top: 1em;\n}\n\nd-appendix ol {\n  padding: 0 0 0 15px;\n}\n\n@media (min-width: 768px) {\n  d-appendix ol {\n    padding: 0 0 0 30px;\n    margin-left: -30px;\n  }\n}\n\nd-appendix li {\n  margin-bottom: 1em;\n}\n\nd-appendix a {\n  color: rgba(0, 0, 0, 0.6);\n}\n\nd-appendix > * {\n  grid-column: text;\n}\n\nd-appendix > d-footnote-list,\nd-appendix > d-citation-list,\nd-appendix > distill-appendix {\n  grid-column: screen;\n}\n\n</style>\n\n`, false);\n\n  class Appendix extends T$2(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // import { Template } from '../mixins/template';\n  // import { Controller } from '../controller';\n\n  const isOnlyWhitespace = /^\\s*$/;\n\n  class Article extends HTMLElement {\n    static get is() { return 'd-article'; }\n\n    constructor() {\n      super();\n\n      new MutationObserver( (mutations) => {\n        for (const mutation of mutations) {\n          for (const addedNode of mutation.addedNodes) {\n            switch (addedNode.nodeName) {\n            case '#text': { // usually text nodes are only linebreaks.\n              const text = addedNode.nodeValue;\n              if (!isOnlyWhitespace.test(text)) {\n                console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a <span> or <p> tag. We found the following text: ' + text);\n                const wrapper = document.createElement('span');\n                wrapper.innerHTML = addedNode.nodeValue;\n                addedNode.parentNode.insertBefore(wrapper, addedNode);\n                addedNode.parentNode.removeChild(addedNode);\n              }\n            } break;\n            }\n          }\n        }\n      }).observe(this, {childList: true});\n    }\n\n  }\n\n  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n  function createCommonjsModule(fn, module) {\n  \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n  }\n\n  var bibtexParse = createCommonjsModule(function (module, exports) {\n  /* start bibtexParse 0.0.22 */\n\n  //Original work by Henrik Muehe (c) 2010\n  //\n  //CommonJS port by Mikola Lysenko 2013\n  //\n  //Port to Browser lib by ORCID / RCPETERS\n  //\n  //Issues:\n  //no comment handling within strings\n  //no string concatenation\n  //no variable values yet\n  //Grammar implemented here:\n  //bibtex -> (string | preamble | comment | entry)*;\n  //string -> '@STRING' '{' key_equals_value '}';\n  //preamble -> '@PREAMBLE' '{' value '}';\n  //comment -> '@COMMENT' '{' value '}';\n  //entry -> '@' key '{' key ',' key_value_list '}';\n  //key_value_list -> key_equals_value (',' key_equals_value)*;\n  //key_equals_value -> key '=' value;\n  //value -> value_quotes | value_braces | key;\n  //value_quotes -> '\"' .*? '\"'; // not quite\n  //value_braces -> '{' .*? '\"'; // not quite\n  (function(exports) {\n\n      function BibtexParser() {\n\n          this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n          this.notKey = [',','{','}',' ','='];\n          this.pos = 0;\n          this.input = \"\";\n          this.entries = new Array();\n\n          this.currentEntry = \"\";\n\n          this.setInput = function(t) {\n              this.input = t;\n          };\n\n          this.getEntries = function() {\n              return this.entries;\n          };\n\n          this.isWhitespace = function(s) {\n              return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n          };\n\n          this.match = function(s, canCommentOut) {\n              if (canCommentOut == undefined || canCommentOut == null)\n                  canCommentOut = true;\n              this.skipWhitespace(canCommentOut);\n              if (this.input.substring(this.pos, this.pos + s.length) == s) {\n                  this.pos += s.length;\n              } else {\n                  throw \"Token mismatch, expected \" + s + \", found \"\n                          + this.input.substring(this.pos);\n              }            this.skipWhitespace(canCommentOut);\n          };\n\n          this.tryMatch = function(s, canCommentOut) {\n              if (canCommentOut == undefined || canCommentOut == null)\n                  canCommentOut = true;\n              this.skipWhitespace(canCommentOut);\n              if (this.input.substring(this.pos, this.pos + s.length) == s) {\n                  return true;\n              } else {\n                  return false;\n              }        };\n\n          /* when search for a match all text can be ignored, not just white space */\n          this.matchAt = function() {\n              while (this.input.length > this.pos && this.input[this.pos] != '@') {\n                  this.pos++;\n              }\n              if (this.input[this.pos] == '@') {\n                  return true;\n              }            return false;\n          };\n\n          this.skipWhitespace = function(canCommentOut) {\n              while (this.isWhitespace(this.input[this.pos])) {\n                  this.pos++;\n              }            if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n                  while (this.input[this.pos] != \"\\n\") {\n                      this.pos++;\n                  }                this.skipWhitespace(canCommentOut);\n              }        };\n\n          this.value_braces = function() {\n              var bracecount = 0;\n              this.match(\"{\", false);\n              var start = this.pos;\n              var escaped = false;\n              while (true) {\n                  if (!escaped) {\n                      if (this.input[this.pos] == '}') {\n                          if (bracecount > 0) {\n                              bracecount--;\n                          } else {\n                              var end = this.pos;\n                              this.match(\"}\", false);\n                              return this.input.substring(start, end);\n                          }                    } else if (this.input[this.pos] == '{') {\n                          bracecount++;\n                      } else if (this.pos >= this.input.length - 1) {\n                          throw \"Unterminated value\";\n                      }                }                if (this.input[this.pos] == '\\\\' && escaped == false)\n                      escaped = true;\n                  else\n                      escaped = false;\n                  this.pos++;\n              }        };\n\n          this.value_comment = function() {\n              var str = '';\n              var brcktCnt = 0;\n              while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n                  str = str + this.input[this.pos];\n                  if (this.input[this.pos] == '{')\n                      brcktCnt++;\n                  if (this.input[this.pos] == '}')\n                      brcktCnt--;\n                  if (this.pos >= this.input.length - 1) {\n                      throw \"Unterminated value:\" + this.input.substring(start);\n                  }                this.pos++;\n              }            return str;\n          };\n\n          this.value_quotes = function() {\n              this.match('\"', false);\n              var start = this.pos;\n              var escaped = false;\n              while (true) {\n                  if (!escaped) {\n                      if (this.input[this.pos] == '\"') {\n                          var end = this.pos;\n                          this.match('\"', false);\n                          return this.input.substring(start, end);\n                      } else if (this.pos >= this.input.length - 1) {\n                          throw \"Unterminated value:\" + this.input.substring(start);\n                      }                }\n                  if (this.input[this.pos] == '\\\\' && escaped == false)\n                      escaped = true;\n                  else\n                      escaped = false;\n                  this.pos++;\n              }        };\n\n          this.single_value = function() {\n              var start = this.pos;\n              if (this.tryMatch(\"{\")) {\n                  return this.value_braces();\n              } else if (this.tryMatch('\"')) {\n                  return this.value_quotes();\n              } else {\n                  var k = this.key();\n                  if (k.match(\"^[0-9]+$\"))\n                      return k;\n                  else if (this.months.indexOf(k.toLowerCase()) >= 0)\n                      return k.toLowerCase();\n                  else\n                      throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n\n              }        };\n\n          this.value = function() {\n              var values = [];\n              values.push(this.single_value());\n              while (this.tryMatch(\"#\")) {\n                  this.match(\"#\");\n                  values.push(this.single_value());\n              }            return values.join(\"\");\n          };\n\n          this.key = function() {\n              var start = this.pos;\n              while (true) {\n                  if (this.pos >= this.input.length) {\n                      throw \"Runaway key\";\n                  }                                // а-яА-Я is Cyrillic\n                  //console.log(this.input[this.pos]);\n                  if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n                      return this.input.substring(start, this.pos);\n                  } else {\n                      this.pos++;\n\n                  }            }        };\n\n          this.key_equals_value = function() {\n              var key = this.key();\n              if (this.tryMatch(\"=\")) {\n                  this.match(\"=\");\n                  var val = this.value();\n                  return [ key, val ];\n              } else {\n                  throw \"... = value expected, equals sign missing:\"\n                          + this.input.substring(this.pos);\n              }        };\n\n          this.key_value_list = function() {\n              var kv = this.key_equals_value();\n              this.currentEntry['entryTags'] = {};\n              this.currentEntry['entryTags'][kv[0]] = kv[1];\n              while (this.tryMatch(\",\")) {\n                  this.match(\",\");\n                  // fixes problems with commas at the end of a list\n                  if (this.tryMatch(\"}\")) {\n                      break;\n                  }\n                  kv = this.key_equals_value();\n                  this.currentEntry['entryTags'][kv[0]] = kv[1];\n              }        };\n\n          this.entry_body = function(d) {\n              this.currentEntry = {};\n              this.currentEntry['citationKey'] = this.key();\n              this.currentEntry['entryType'] = d.substring(1);\n              this.match(\",\");\n              this.key_value_list();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.directive = function() {\n              this.match(\"@\");\n              return \"@\" + this.key();\n          };\n\n          this.preamble = function() {\n              this.currentEntry = {};\n              this.currentEntry['entryType'] = 'PREAMBLE';\n              this.currentEntry['entry'] = this.value_comment();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.comment = function() {\n              this.currentEntry = {};\n              this.currentEntry['entryType'] = 'COMMENT';\n              this.currentEntry['entry'] = this.value_comment();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.entry = function(d) {\n              this.entry_body(d);\n          };\n\n          this.bibtex = function() {\n              while (this.matchAt()) {\n                  var d = this.directive();\n                  this.match(\"{\");\n                  if (d == \"@STRING\") {\n                      this.string();\n                  } else if (d == \"@PREAMBLE\") {\n                      this.preamble();\n                  } else if (d == \"@COMMENT\") {\n                      this.comment();\n                  } else {\n                      this.entry(d);\n                  }\n                  this.match(\"}\");\n              }        };\n      }\n      exports.toJSON = function(bibtex) {\n          var b = new BibtexParser();\n          b.setInput(bibtex);\n          b.bibtex();\n          return b.entries;\n      };\n\n      /* added during hackathon don't hate on me */\n      exports.toBibtex = function(json) {\n          var out = '';\n          for ( var i in json) {\n              out += \"@\" + json[i].entryType;\n              out += '{';\n              if (json[i].citationKey)\n                  out += json[i].citationKey + ', ';\n              if (json[i].entry)\n                  out += json[i].entry ;\n              if (json[i].entryTags) {\n                  var tags = '';\n                  for (var jdx in json[i].entryTags) {\n                      if (tags.length != 0)\n                          tags += ', ';\n                      tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n                  }\n                  out += tags;\n              }\n              out += '}\\n\\n';\n          }\n          return out;\n\n      };\n\n  })( exports);\n\n  /* end bibtexParse */\n  });\n\n  // Copyright 2018 The Distill Template Authors\n\n  function normalizeTag(string) {\n    return string\n      .replace(/[\\t\\n ]+/g, ' ')\n      .replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)\n      .replace(/{\\\\([a-zA-Z])}/g, (full, char) => char);\n  }\n\n  function parseBibtex(bibtex) {\n    const bibliography = new Map();\n    const parsedEntries = bibtexParse.toJSON(bibtex);\n    for (const entry of parsedEntries) {\n      // normalize tags; note entryTags is an object, not Map\n      for (const [key, value] of Object.entries(entry.entryTags)) {\n        entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n      }\n      entry.entryTags.type = entry.entryType;\n      // add to bibliography\n      bibliography.set(entry.citationKey, entry.entryTags);\n    }\n    return bibliography;\n  }\n\n  function serializeFrontmatterToBibtex(frontMatter) {\n    return `@article{${frontMatter.slug},\n  author = {${frontMatter.bibtexAuthors}},\n  title = {${frontMatter.title}},\n  journal = {${frontMatter.journal.title}},\n  year = {${frontMatter.publishedYear}},\n  note = {${frontMatter.url}},\n  doi = {${frontMatter.doi}}\n}`;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  class Bibliography extends HTMLElement {\n\n    static get is() { return 'd-bibliography'; }\n\n    constructor() {\n      super();\n\n      // set up mutation observer\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver( (entries) => {\n        for (const entry of entries) {\n          if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n            this.parseIfPossible();\n          }\n        }\n      });\n      observer.observe(this, options);\n    }\n\n    connectedCallback() {\n      requestAnimationFrame(() => {\n        this.parseIfPossible();\n      });\n    }\n\n    parseIfPossible() {\n      const scriptTag = this.querySelector('script');\n      if (!scriptTag) return;\n      if (scriptTag.type == 'text/bibtex') {\n        const newBibtex = scriptTag.textContent;\n        if (this.bibtex !== newBibtex) {\n          this.bibtex = newBibtex;\n          const bibliography = parseBibtex(this.bibtex);\n          this.notify(bibliography);\n        }\n      } else if (scriptTag.type == 'text/json') {\n        const bibliography = new Map(JSON.parse(scriptTag.textContent));\n        this.notify(bibliography);\n      } else {\n        console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n      }\n    }\n\n    notify(bibliography) {\n      const options = { detail: bibliography, bubbles: true };\n      const event = new CustomEvent('onBibliographyChanged', options);\n      this.dispatchEvent(event);\n    }\n\n    /* observe 'src' attribute */\n\n    static get observedAttributes() {\n      return ['src'];\n    }\n\n    receivedBibtex(event) {\n      const bibliography = parseBibtex(event.target.response);\n      this.notify(bibliography);\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      var oReq = new XMLHttpRequest();\n      oReq.onload = (e) => this.receivedBibtex(e);\n      oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);\n      oReq.responseType = 'text';\n      oReq.open('GET', newValue, true);\n      oReq.send();\n    }\n\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // import style from '../styles/d-byline.css';\n\n  function bylineTemplate(frontMatter) {\n    return `\n    <div class=\"byline grid\">\n      <div>\n          <h3>Authors</h3>\n          <div>\n              ${frontMatter.authors.map((author, i) => `\n              <span class=\"author\">\n        ${author.personalURL ? `\n          <a class=\"name\" href=\"${author.personalURL}\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</a>` : `\n          <span class=\"name\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</span>`}\n      </span>\n              `).join('')}\n          </div>\n      </div>\n      <div >\n          <h3>Affiliation</h3>\n          <div><a href=\"https://huggingface.co/\">HuggingFace</a>\n          </div>\n      </div>\n      <div >\n          <h3>Published</h3>\n          <div>May 31, 2024</div>\n      </div>\n    </div>\n`;\n  }\n\n  class Byline extends HTMLElement {\n\n    static get is() { return 'd-byline'; }\n\n    set frontMatter(frontMatter) {\n      this.innerHTML = bylineTemplate(frontMatter);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$3 = Template(\n    \"d-cite\",\n    `\n<style>\n\n:host {\n  display: inline-block;\n}\n\n.citation {\n  color: hsla(206, 90%, 20%, 0.7);\n}\n\n.citation-number {\n  cursor: default;\n  white-space: nowrap;\n  font-family: -apple-system, BlinkMacSystemFont, \"Roboto\", Helvetica, sans-serif;\n  font-size: 75%;\n  color: hsla(206, 90%, 20%, 0.7);\n  display: inline-block;\n  line-height: 1.1em;\n  text-align: center;\n  position: relative;\n  top: -2px;\n  margin: 0 2px;\n}\n\nfigcaption .citation-number {\n  font-size: 11px;\n  font-weight: normal;\n  top: -2px;\n  line-height: 1em;\n}\n\nul {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n\nul li {\n  padding: 15px 10px 15px 10px;\n  border-bottom: 1px solid rgba(0,0,0,0.1)\n}\n\nul li:last-of-type {\n  border-bottom: none;\n}\n\n</style>\n\n<d-hover-box id=\"hover-box\"></d-hover-box>\n\n<div id=\"citation-\" class=\"citation\">\n  <span class=\"citation-number\"></span>\n</div>\n`\n  );\n\n  class Cite extends T$3(HTMLElement) {\n    /* Lifecycle */\n    constructor() {\n      super();\n      this._numbers = [];\n      this._entries = [];\n    }\n\n    connectedCallback() {\n      this.outerSpan = this.root.querySelector(\"#citation-\");\n      this.innerSpan = this.root.querySelector(\".citation-number\");\n      this.hoverBox = this.root.querySelector(\"d-hover-box\");\n      window.customElements.whenDefined(\"d-hover-box\").then(() => {\n        this.hoverBox.listen(this);\n      });\n      // in case this component got connected after values were set\n      if (this.numbers) {\n        this.displayNumbers(this.numbers);\n      }\n      if (this.entries) {\n        this.displayEntries(this.entries);\n      }\n    }\n\n    //TODO This causes an infinite loop on firefox with polyfills.\n    // This is only needed for interactive editing so no priority.\n    // disconnectedCallback() {\n    // const options = { detail: [this, this.keys], bubbles: true };\n    // const event = new CustomEvent('onCiteKeyRemoved', options);\n    // document.dispatchEvent(event);\n    // }\n\n    /* observe 'key' attribute */\n\n    static get observedAttributes() {\n      return [\"key\", \"bibtex-key\"];\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      const eventName = oldValue ? \"onCiteKeyChanged\" : \"onCiteKeyCreated\";\n      const keys = newValue.split(\",\").map(k => k.trim());\n      const options = { detail: [this, keys], bubbles: true };\n      const event = new CustomEvent(eventName, options);\n      document.dispatchEvent(event);\n    }\n\n    set key(value) {\n      this.setAttribute(\"key\", value);\n    }\n\n    get key() {\n      return this.getAttribute(\"key\") || this.getAttribute(\"bibtex-key\");\n    }\n\n    get keys() {\n      const result = this.key.split(\",\");\n      console.log(result);\n      return result;\n    }\n\n    /* Setters & Rendering */\n\n    set numbers(numbers) {\n      this._numbers = numbers;\n      this.displayNumbers(numbers);\n    }\n\n    get numbers() {\n      return this._numbers;\n    }\n\n    displayNumbers(numbers) {\n      if (!this.innerSpan) return;\n      const numberStrings = numbers.map(index => {\n        return index == -1 ? \"?\" : index + 1 + \"\";\n      });\n      const textContent = \"[\" + numberStrings.join(\", \") + \"]\";\n      this.innerSpan.textContent = textContent;\n    }\n\n    set entries(entries) {\n      this._entries = entries;\n      this.displayEntries(entries);\n    }\n\n    get entries() {\n      return this._entries;\n    }\n\n    displayEntries(entries) {\n      if (!this.hoverBox) return;\n      this.hoverBox.innerHTML = `<ul>\n      ${entries\n        .map(hover_cite)\n        .map(html => `<li>${html}</li>`)\n        .join(\"\\n\")}\n    </ul>`;\n    }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles$1 = `\nd-citation-list {\n  contain: style;\n}\n\nd-citation-list .references {\n  grid-column: text;\n}\n\nd-citation-list .references .title {\n  font-weight: 500;\n}\n`;\n\n  function renderCitationList(element, entries, dom=document) {\n    if (entries.size > 0) {\n      element.style.display = '';\n      let list = element.querySelector('.references');\n      if (list) {\n        list.innerHTML = '';\n      } else {\n        const stylesTag = dom.createElement('style');\n        stylesTag.innerHTML = styles$1;\n        element.appendChild(stylesTag);\n\n        const heading = dom.createElement('h3');\n        heading.id = 'references';\n        heading.textContent = 'References';\n        element.appendChild(heading);\n\n        list = dom.createElement('ol');\n        list.id = 'references-list';\n        list.className = 'references';\n        element.appendChild(list);\n      }\n\n      for (const [key, entry] of entries) {\n        const listItem = dom.createElement('li');\n        listItem.id = key;\n        listItem.innerHTML = bibliography_cite(entry);\n        list.appendChild(listItem);\n      }\n    } else {\n      element.style.display = 'none';\n    }\n  }\n\n  class CitationList extends HTMLElement {\n\n    static get is() { return 'd-citation-list'; }\n\n    connectedCallback() {\n      if (!this.hasAttribute('distill-prerendered')) {\n        this.style.display = 'none';\n      }\n    }\n\n    set citations(citations) {\n      renderCitationList(this, citations);\n    }\n\n  }\n\n  var prism = createCommonjsModule(function (module) {\n  /* **********************************************\n       Begin prism-core.js\n  ********************************************** */\n\n  var _self = (typeof window !== 'undefined')\n  \t? window   // if in browser\n  \t: (\n  \t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n  \t\t? self // if in worker\n  \t\t: {}   // if in node js\n  \t);\n\n  /**\n   * Prism: Lightweight, robust, elegant syntax highlighting\n   * MIT license http://www.opensource.org/licenses/mit-license.php/\n   * @author Lea Verou http://lea.verou.me\n   */\n\n  var Prism = (function (_self){\n\n  // Private helper vars\n  var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n  var uniqueId = 0;\n\n\n  var _ = {\n  \tmanual: _self.Prism && _self.Prism.manual,\n  \tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n  \tutil: {\n  \t\tencode: function encode(tokens) {\n  \t\t\tif (tokens instanceof Token) {\n  \t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n  \t\t\t} else if (Array.isArray(tokens)) {\n  \t\t\t\treturn tokens.map(encode);\n  \t\t\t} else {\n  \t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n  \t\t\t}\n  \t\t},\n\n  \t\ttype: function (o) {\n  \t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n  \t\t},\n\n  \t\tobjId: function (obj) {\n  \t\t\tif (!obj['__id']) {\n  \t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n  \t\t\t}\n  \t\t\treturn obj['__id'];\n  \t\t},\n\n  \t\t// Deep clone a language definition (e.g. to extend it)\n  \t\tclone: function deepClone(o, visited) {\n  \t\t\tvar clone, id, type = _.util.type(o);\n  \t\t\tvisited = visited || {};\n\n  \t\t\tswitch (type) {\n  \t\t\t\tcase 'Object':\n  \t\t\t\t\tid = _.util.objId(o);\n  \t\t\t\t\tif (visited[id]) {\n  \t\t\t\t\t\treturn visited[id];\n  \t\t\t\t\t}\n  \t\t\t\t\tclone = {};\n  \t\t\t\t\tvisited[id] = clone;\n\n  \t\t\t\t\tfor (var key in o) {\n  \t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n  \t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n\n  \t\t\t\t\treturn clone;\n\n  \t\t\t\tcase 'Array':\n  \t\t\t\t\tid = _.util.objId(o);\n  \t\t\t\t\tif (visited[id]) {\n  \t\t\t\t\t\treturn visited[id];\n  \t\t\t\t\t}\n  \t\t\t\t\tclone = [];\n  \t\t\t\t\tvisited[id] = clone;\n\n  \t\t\t\t\to.forEach(function (v, i) {\n  \t\t\t\t\t\tclone[i] = deepClone(v, visited);\n  \t\t\t\t\t});\n\n  \t\t\t\t\treturn clone;\n\n  \t\t\t\tdefault:\n  \t\t\t\t\treturn o;\n  \t\t\t}\n  \t\t},\n\n  \t\t/**\n  \t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n  \t\t *\n  \t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n  \t\t *\n  \t\t * @param {Element} element\n  \t\t * @returns {string}\n  \t\t */\n  \t\tgetLanguage: function (element) {\n  \t\t\twhile (element && !lang.test(element.className)) {\n  \t\t\t\telement = element.parentElement;\n  \t\t\t}\n  \t\t\tif (element) {\n  \t\t\t\treturn (element.className.match(lang) || [, 'none'])[1].toLowerCase();\n  \t\t\t}\n  \t\t\treturn 'none';\n  \t\t},\n\n  \t\t/**\n  \t\t * Returns the script element that is currently executing.\n  \t\t *\n  \t\t * This does __not__ work for line script element.\n  \t\t *\n  \t\t * @returns {HTMLScriptElement | null}\n  \t\t */\n  \t\tcurrentScript: function () {\n  \t\t\tif (typeof document === 'undefined') {\n  \t\t\t\treturn null;\n  \t\t\t}\n  \t\t\tif ('currentScript' in document) {\n  \t\t\t\treturn document.currentScript;\n  \t\t\t}\n\n  \t\t\t// IE11 workaround\n  \t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n  \t\t\t// this will not work for inline scripts\n\n  \t\t\ttry {\n  \t\t\t\tthrow new Error();\n  \t\t\t} catch (err) {\n  \t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n  \t\t\t\t// A stack will look like this:\n  \t\t\t\t//\n  \t\t\t\t// Error\n  \t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n  \t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n  \t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(err.stack) || [])[1];\n  \t\t\t\tif (src) {\n  \t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n  \t\t\t\t\tfor (var i in scripts) {\n  \t\t\t\t\t\tif (scripts[i].src == src) {\n  \t\t\t\t\t\t\treturn scripts[i];\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\treturn null;\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tlanguages: {\n  \t\textend: function (id, redef) {\n  \t\t\tvar lang = _.util.clone(_.languages[id]);\n\n  \t\t\tfor (var key in redef) {\n  \t\t\t\tlang[key] = redef[key];\n  \t\t\t}\n\n  \t\t\treturn lang;\n  \t\t},\n\n  \t\t/**\n  \t\t * Insert a token before another token in a language literal\n  \t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n  \t\t * we cannot just provide an object, we need an object and a key.\n  \t\t * @param inside The key (or language id) of the parent\n  \t\t * @param before The key to insert before.\n  \t\t * @param insert Object with the key/value pairs to insert\n  \t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n  \t\t */\n  \t\tinsertBefore: function (inside, before, insert, root) {\n  \t\t\troot = root || _.languages;\n  \t\t\tvar grammar = root[inside];\n  \t\t\tvar ret = {};\n\n  \t\t\tfor (var token in grammar) {\n  \t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n  \t\t\t\t\tif (token == before) {\n  \t\t\t\t\t\tfor (var newToken in insert) {\n  \t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n  \t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n  \t\t\t\t\t\t\t}\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n  \t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n  \t\t\t\t\t\tret[token] = grammar[token];\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tvar old = root[inside];\n  \t\t\troot[inside] = ret;\n\n  \t\t\t// Update references in other language definitions\n  \t\t\t_.languages.DFS(_.languages, function(key, value) {\n  \t\t\t\tif (value === old && key != inside) {\n  \t\t\t\t\tthis[key] = ret;\n  \t\t\t\t}\n  \t\t\t});\n\n  \t\t\treturn ret;\n  \t\t},\n\n  \t\t// Traverse a language definition with Depth First Search\n  \t\tDFS: function DFS(o, callback, type, visited) {\n  \t\t\tvisited = visited || {};\n\n  \t\t\tvar objId = _.util.objId;\n\n  \t\t\tfor (var i in o) {\n  \t\t\t\tif (o.hasOwnProperty(i)) {\n  \t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n  \t\t\t\t\tvar property = o[i],\n  \t\t\t\t\t    propertyType = _.util.type(property);\n\n  \t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n  \t\t\t\t\t\tvisited[objId(property)] = true;\n  \t\t\t\t\t\tDFS(property, callback, null, visited);\n  \t\t\t\t\t}\n  \t\t\t\t\telse if (propertyType === 'Array' && !visited[objId(property)]) {\n  \t\t\t\t\t\tvisited[objId(property)] = true;\n  \t\t\t\t\t\tDFS(property, callback, i, visited);\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t},\n  \tplugins: {},\n\n  \thighlightAll: function(async, callback) {\n  \t\t_.highlightAllUnder(document, async, callback);\n  \t},\n\n  \thighlightAllUnder: function(container, async, callback) {\n  \t\tvar env = {\n  \t\t\tcallback: callback,\n  \t\t\tcontainer: container,\n  \t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n  \t\t};\n\n  \t\t_.hooks.run('before-highlightall', env);\n\n  \t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n  \t\t_.hooks.run('before-all-elements-highlight', env);\n\n  \t\tfor (var i = 0, element; element = env.elements[i++];) {\n  \t\t\t_.highlightElement(element, async === true, env.callback);\n  \t\t}\n  \t},\n\n  \thighlightElement: function(element, async, callback) {\n  \t\t// Find language\n  \t\tvar language = _.util.getLanguage(element);\n  \t\tvar grammar = _.languages[language];\n\n  \t\t// Set language on the element, if not present\n  \t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\n  \t\t// Set language on the parent, for styling\n  \t\tvar parent = element.parentNode;\n  \t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n  \t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n  \t\t}\n\n  \t\tvar code = element.textContent;\n\n  \t\tvar env = {\n  \t\t\telement: element,\n  \t\t\tlanguage: language,\n  \t\t\tgrammar: grammar,\n  \t\t\tcode: code\n  \t\t};\n\n  \t\tfunction insertHighlightedCode(highlightedCode) {\n  \t\t\tenv.highlightedCode = highlightedCode;\n\n  \t\t\t_.hooks.run('before-insert', env);\n\n  \t\t\tenv.element.innerHTML = env.highlightedCode;\n\n  \t\t\t_.hooks.run('after-highlight', env);\n  \t\t\t_.hooks.run('complete', env);\n  \t\t\tcallback && callback.call(env.element);\n  \t\t}\n\n  \t\t_.hooks.run('before-sanity-check', env);\n\n  \t\tif (!env.code) {\n  \t\t\t_.hooks.run('complete', env);\n  \t\t\tcallback && callback.call(env.element);\n  \t\t\treturn;\n  \t\t}\n\n  \t\t_.hooks.run('before-highlight', env);\n\n  \t\tif (!env.grammar) {\n  \t\t\tinsertHighlightedCode(_.util.encode(env.code));\n  \t\t\treturn;\n  \t\t}\n\n  \t\tif (async && _self.Worker) {\n  \t\t\tvar worker = new Worker(_.filename);\n\n  \t\t\tworker.onmessage = function(evt) {\n  \t\t\t\tinsertHighlightedCode(evt.data);\n  \t\t\t};\n\n  \t\t\tworker.postMessage(JSON.stringify({\n  \t\t\t\tlanguage: env.language,\n  \t\t\t\tcode: env.code,\n  \t\t\t\timmediateClose: true\n  \t\t\t}));\n  \t\t}\n  \t\telse {\n  \t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n  \t\t}\n  \t},\n\n  \thighlight: function (text, grammar, language) {\n  \t\tvar env = {\n  \t\t\tcode: text,\n  \t\t\tgrammar: grammar,\n  \t\t\tlanguage: language\n  \t\t};\n  \t\t_.hooks.run('before-tokenize', env);\n  \t\tenv.tokens = _.tokenize(env.code, env.grammar);\n  \t\t_.hooks.run('after-tokenize', env);\n  \t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n  \t},\n\n  \ttokenize: function(text, grammar) {\n  \t\tvar rest = grammar.rest;\n  \t\tif (rest) {\n  \t\t\tfor (var token in rest) {\n  \t\t\t\tgrammar[token] = rest[token];\n  \t\t\t}\n\n  \t\t\tdelete grammar.rest;\n  \t\t}\n\n  \t\tvar tokenList = new LinkedList();\n  \t\taddAfter(tokenList, tokenList.head, text);\n\n  \t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n  \t\treturn toArray(tokenList);\n  \t},\n\n  \thooks: {\n  \t\tall: {},\n\n  \t\tadd: function (name, callback) {\n  \t\t\tvar hooks = _.hooks.all;\n\n  \t\t\thooks[name] = hooks[name] || [];\n\n  \t\t\thooks[name].push(callback);\n  \t\t},\n\n  \t\trun: function (name, env) {\n  \t\t\tvar callbacks = _.hooks.all[name];\n\n  \t\t\tif (!callbacks || !callbacks.length) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n  \t\t\t\tcallback(env);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tToken: Token\n  };\n\n  _self.Prism = _;\n\n  function Token(type, content, alias, matchedStr, greedy) {\n  \tthis.type = type;\n  \tthis.content = content;\n  \tthis.alias = alias;\n  \t// Copy of the full string this token was created from\n  \tthis.length = (matchedStr || '').length|0;\n  \tthis.greedy = !!greedy;\n  }\n\n  Token.stringify = function stringify(o, language) {\n  \tif (typeof o == 'string') {\n  \t\treturn o;\n  \t}\n  \tif (Array.isArray(o)) {\n  \t\tvar s = '';\n  \t\to.forEach(function (e) {\n  \t\t\ts += stringify(e, language);\n  \t\t});\n  \t\treturn s;\n  \t}\n\n  \tvar env = {\n  \t\ttype: o.type,\n  \t\tcontent: stringify(o.content, language),\n  \t\ttag: 'span',\n  \t\tclasses: ['token', o.type],\n  \t\tattributes: {},\n  \t\tlanguage: language\n  \t};\n\n  \tvar aliases = o.alias;\n  \tif (aliases) {\n  \t\tif (Array.isArray(aliases)) {\n  \t\t\tArray.prototype.push.apply(env.classes, aliases);\n  \t\t} else {\n  \t\t\tenv.classes.push(aliases);\n  \t\t}\n  \t}\n\n  \t_.hooks.run('wrap', env);\n\n  \tvar attributes = '';\n  \tfor (var name in env.attributes) {\n  \t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n  \t}\n\n  \treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n  };\n\n  /**\n   * @param {string} text\n   * @param {LinkedList<string | Token>} tokenList\n   * @param {any} grammar\n   * @param {LinkedListNode<string | Token>} startNode\n   * @param {number} startPos\n   * @param {boolean} [oneshot=false]\n   * @param {string} [target]\n   */\n  function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n  \tfor (var token in grammar) {\n  \t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n  \t\t\tcontinue;\n  \t\t}\n\n  \t\tvar patterns = grammar[token];\n  \t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n  \t\tfor (var j = 0; j < patterns.length; ++j) {\n  \t\t\tif (target && target == token + ',' + j) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tvar pattern = patterns[j],\n  \t\t\t\tinside = pattern.inside,\n  \t\t\t\tlookbehind = !!pattern.lookbehind,\n  \t\t\t\tgreedy = !!pattern.greedy,\n  \t\t\t\tlookbehindLength = 0,\n  \t\t\t\talias = pattern.alias;\n\n  \t\t\tif (greedy && !pattern.pattern.global) {\n  \t\t\t\t// Without the global flag, lastIndex won't work\n  \t\t\t\tvar flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n  \t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n  \t\t\t}\n\n  \t\t\tpattern = pattern.pattern || pattern;\n\n  \t\t\tfor ( // iterate the token list and keep track of the current token/string position\n  \t\t\t\tvar currentNode = startNode.next, pos = startPos;\n  \t\t\t\tcurrentNode !== tokenList.tail;\n  \t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n  \t\t\t) {\n\n  \t\t\t\tvar str = currentNode.value;\n\n  \t\t\t\tif (tokenList.length > text.length) {\n  \t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tif (str instanceof Token) {\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\n  \t\t\t\tif (greedy && currentNode != tokenList.tail.prev) {\n  \t\t\t\t\tpattern.lastIndex = pos;\n  \t\t\t\t\tvar match = pattern.exec(text);\n  \t\t\t\t\tif (!match) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n\n  \t\t\t\t\tvar from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n  \t\t\t\t\tvar to = match.index + match[0].length;\n  \t\t\t\t\tvar p = pos;\n\n  \t\t\t\t\t// find the node that contains the match\n  \t\t\t\t\tp += currentNode.value.length;\n  \t\t\t\t\twhile (from >= p) {\n  \t\t\t\t\t\tcurrentNode = currentNode.next;\n  \t\t\t\t\t\tp += currentNode.value.length;\n  \t\t\t\t\t}\n  \t\t\t\t\t// adjust pos (and p)\n  \t\t\t\t\tp -= currentNode.value.length;\n  \t\t\t\t\tpos = p;\n\n  \t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n  \t\t\t\t\tif (currentNode.value instanceof Token) {\n  \t\t\t\t\t\tcontinue;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// find the last node which is affected by this match\n  \t\t\t\t\tfor (\n  \t\t\t\t\t\tvar k = currentNode;\n  \t\t\t\t\t\tk !== tokenList.tail && (p < to || (typeof k.value === 'string' && !k.prev.value.greedy));\n  \t\t\t\t\t\tk = k.next\n  \t\t\t\t\t) {\n  \t\t\t\t\t\tremoveCount++;\n  \t\t\t\t\t\tp += k.value.length;\n  \t\t\t\t\t}\n  \t\t\t\t\tremoveCount--;\n\n  \t\t\t\t\t// replace with the new match\n  \t\t\t\t\tstr = text.slice(pos, p);\n  \t\t\t\t\tmatch.index -= pos;\n  \t\t\t\t} else {\n  \t\t\t\t\tpattern.lastIndex = 0;\n\n  \t\t\t\t\tvar match = pattern.exec(str);\n  \t\t\t\t}\n\n  \t\t\t\tif (!match) {\n  \t\t\t\t\tif (oneshot) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\tif (lookbehind) {\n  \t\t\t\t\tlookbehindLength = match[1] ? match[1].length : 0;\n  \t\t\t\t}\n\n  \t\t\t\tvar from = match.index + lookbehindLength,\n  \t\t\t\t\tmatch = match[0].slice(lookbehindLength),\n  \t\t\t\t\tto = from + match.length,\n  \t\t\t\t\tbefore = str.slice(0, from),\n  \t\t\t\t\tafter = str.slice(to);\n\n  \t\t\t\tvar removeFrom = currentNode.prev;\n\n  \t\t\t\tif (before) {\n  \t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n  \t\t\t\t\tpos += before.length;\n  \t\t\t\t}\n\n  \t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n  \t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n  \t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n  \t\t\t\tif (after) {\n  \t\t\t\t\taddAfter(tokenList, currentNode, after);\n  \t\t\t\t}\n\n\n  \t\t\t\tif (removeCount > 1)\n  \t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n\n  \t\t\t\tif (oneshot)\n  \t\t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n  \t}\n  }\n\n  /**\n   * @typedef LinkedListNode\n   * @property {T} value\n   * @property {LinkedListNode<T> | null} prev The previous node.\n   * @property {LinkedListNode<T> | null} next The next node.\n   * @template T\n   */\n\n  /**\n   * @template T\n   */\n  function LinkedList() {\n  \t/** @type {LinkedListNode<T>} */\n  \tvar head = { value: null, prev: null, next: null };\n  \t/** @type {LinkedListNode<T>} */\n  \tvar tail = { value: null, prev: head, next: null };\n  \thead.next = tail;\n\n  \t/** @type {LinkedListNode<T>} */\n  \tthis.head = head;\n  \t/** @type {LinkedListNode<T>} */\n  \tthis.tail = tail;\n  \tthis.length = 0;\n  }\n\n  /**\n   * Adds a new node with the given value to the list.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {T} value\n   * @returns {LinkedListNode<T>} The added node.\n   * @template T\n   */\n  function addAfter(list, node, value) {\n  \t// assumes that node != list.tail && values.length >= 0\n  \tvar next = node.next;\n\n  \tvar newNode = { value: value, prev: node, next: next };\n  \tnode.next = newNode;\n  \tnext.prev = newNode;\n  \tlist.length++;\n\n  \treturn newNode;\n  }\n  /**\n   * Removes `count` nodes after the given node. The given node will not be removed.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {number} count\n   * @template T\n   */\n  function removeRange(list, node, count) {\n  \tvar next = node.next;\n  \tfor (var i = 0; i < count && next !== list.tail; i++) {\n  \t\tnext = next.next;\n  \t}\n  \tnode.next = next;\n  \tnext.prev = node;\n  \tlist.length -= i;\n  }\n  /**\n   * @param {LinkedList<T>} list\n   * @returns {T[]}\n   * @template T\n   */\n  function toArray(list) {\n  \tvar array = [];\n  \tvar node = list.head.next;\n  \twhile (node !== list.tail) {\n  \t\tarray.push(node.value);\n  \t\tnode = node.next;\n  \t}\n  \treturn array;\n  }\n\n\n  if (!_self.document) {\n  \tif (!_self.addEventListener) {\n  \t\t// in Node.js\n  \t\treturn _;\n  \t}\n\n  \tif (!_.disableWorkerMessageHandler) {\n  \t\t// In worker\n  \t\t_self.addEventListener('message', function (evt) {\n  \t\t\tvar message = JSON.parse(evt.data),\n  \t\t\t\tlang = message.language,\n  \t\t\t\tcode = message.code,\n  \t\t\t\timmediateClose = message.immediateClose;\n\n  \t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n  \t\t\tif (immediateClose) {\n  \t\t\t\t_self.close();\n  \t\t\t}\n  \t\t}, false);\n  \t}\n\n  \treturn _;\n  }\n\n  //Get current script and highlight\n  var script = _.util.currentScript();\n\n  if (script) {\n  \t_.filename = script.src;\n\n  \tif (script.hasAttribute('data-manual')) {\n  \t\t_.manual = true;\n  \t}\n  }\n\n  function highlightAutomaticallyCallback() {\n  \tif (!_.manual) {\n  \t\t_.highlightAll();\n  \t}\n  }\n\n  if (!_.manual) {\n  \t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n  \t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n  \t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n  \t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n  \t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n  \t// See https://github.com/PrismJS/prism/issues/2102\n  \tvar readyState = document.readyState;\n  \tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n  \t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n  \t} else {\n  \t\tif (window.requestAnimationFrame) {\n  \t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n  \t\t} else {\n  \t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n  \t\t}\n  \t}\n  }\n\n  return _;\n\n  })(_self);\n\n  if ( module.exports) {\n  \tmodule.exports = Prism;\n  }\n\n  // hack for components to work correctly in node.js\n  if (typeof commonjsGlobal !== 'undefined') {\n  \tcommonjsGlobal.Prism = Prism;\n  }\n\n\n  /* **********************************************\n       Begin prism-markup.js\n  ********************************************** */\n\n  Prism.languages.markup = {\n  \t'comment': /<!--[\\s\\S]*?-->/,\n  \t'prolog': /<\\?[\\s\\S]+?\\?>/,\n  \t'doctype': {\n  \t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n  \t\tgreedy: true\n  \t},\n  \t'cdata': /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n  \t'tag': {\n  \t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'tag': {\n  \t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'punctuation': /^<\\/?/,\n  \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'attr-value': {\n  \t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'punctuation': [\n  \t\t\t\t\t\t/^=/,\n  \t\t\t\t\t\t{\n  \t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n  \t\t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t\t}\n  \t\t\t\t\t]\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'punctuation': /\\/?>/,\n  \t\t\t'attr-name': {\n  \t\t\t\tpattern: /[^\\s>\\/]+/,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t}\n  \t},\n  \t'entity': /&#?[\\da-z]{1,8};/i\n  };\n\n  Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n  \tPrism.languages.markup['entity'];\n\n  // Plugin to make entity title show the real entity, idea by Roman Komarov\n  Prism.hooks.add('wrap', function(env) {\n\n  \tif (env.type === 'entity') {\n  \t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n  \t}\n  });\n\n  Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n  \t/**\n  \t * Adds an inlined language to markup.\n  \t *\n  \t * An example of an inlined language is CSS with `<style>` tags.\n  \t *\n  \t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n  \t * case insensitive.\n  \t * @param {string} lang The language key.\n  \t * @example\n  \t * addInlined('style', 'css');\n  \t */\n  \tvalue: function addInlined(tagName, lang) {\n  \t\tvar includedCdataInside = {};\n  \t\tincludedCdataInside['language-' + lang] = {\n  \t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages[lang]\n  \t\t};\n  \t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n  \t\tvar inside = {\n  \t\t\t'included-cdata': {\n  \t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n  \t\t\t\tinside: includedCdataInside\n  \t\t\t}\n  \t\t};\n  \t\tinside['language-' + lang] = {\n  \t\t\tpattern: /[\\s\\S]+/,\n  \t\t\tinside: Prism.languages[lang]\n  \t\t};\n\n  \t\tvar def = {};\n  \t\tdef[tagName] = {\n  \t\t\tpattern: RegExp(/(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: inside\n  \t\t};\n\n  \t\tPrism.languages.insertBefore('markup', 'cdata', def);\n  \t}\n  });\n\n  Prism.languages.xml = Prism.languages.extend('markup', {});\n  Prism.languages.html = Prism.languages.markup;\n  Prism.languages.mathml = Prism.languages.markup;\n  Prism.languages.svg = Prism.languages.markup;\n\n\n  /* **********************************************\n       Begin prism-css.js\n  ********************************************** */\n\n  (function (Prism) {\n\n  \tvar string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\n  \tPrism.languages.css = {\n  \t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n  \t\t'atrule': {\n  \t\t\tpattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n  \t\t\tinside: {\n  \t\t\t\t'rule': /^@[\\w-]+/,\n  \t\t\t\t'selector-function-argument': {\n  \t\t\t\t\tpattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\talias: 'selector'\n  \t\t\t\t}\n  \t\t\t\t// See rest below\n  \t\t\t}\n  \t\t},\n  \t\t'url': {\n  \t\t\tpattern: RegExp('url\\\\((?:' + string.source + '|[^\\n\\r()]*)\\\\)', 'i'),\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'function': /^url/i,\n  \t\t\t\t'punctuation': /^\\(|\\)$/\n  \t\t\t}\n  \t\t},\n  \t\t'selector': RegExp('[^{}\\\\s](?:[^{};\"\\']|' + string.source + ')*?(?=\\\\s*\\\\{)'),\n  \t\t'string': {\n  \t\t\tpattern: string,\n  \t\t\tgreedy: true\n  \t\t},\n  \t\t'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n  \t\t'important': /!important\\b/i,\n  \t\t'function': /[-a-z0-9]+(?=\\()/i,\n  \t\t'punctuation': /[(){};:,]/\n  \t};\n\n  \tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n  \tvar markup = Prism.languages.markup;\n  \tif (markup) {\n  \t\tmarkup.tag.addInlined('style', 'css');\n\n  \t\tPrism.languages.insertBefore('inside', 'attr-value', {\n  \t\t\t'style-attr': {\n  \t\t\t\tpattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'attr-name': {\n  \t\t\t\t\t\tpattern: /^\\s*style/i,\n  \t\t\t\t\t\tinside: markup.tag.inside\n  \t\t\t\t\t},\n  \t\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n  \t\t\t\t\t'attr-value': {\n  \t\t\t\t\t\tpattern: /.+/i,\n  \t\t\t\t\t\tinside: Prism.languages.css\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\talias: 'language-css'\n  \t\t\t}\n  \t\t}, markup.tag);\n  \t}\n\n  }(Prism));\n\n\n  /* **********************************************\n       Begin prism-clike.js\n  ********************************************** */\n\n  Prism.languages.clike = {\n  \t'comment': [\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true\n  \t\t}\n  \t],\n  \t'string': {\n  \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n  \t\tgreedy: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n  \t\tlookbehind: true,\n  \t\tinside: {\n  \t\t\t'punctuation': /[.\\\\]/\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n  \t'boolean': /\\b(?:true|false)\\b/,\n  \t'function': /\\w+(?=\\()/,\n  \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n  \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n\n  /* **********************************************\n       Begin prism-javascript.js\n  ********************************************** */\n\n  Prism.languages.javascript = Prism.languages.extend('clike', {\n  \t'class-name': [\n  \t\tPrism.languages.clike['class-name'],\n  \t\t{\n  \t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t],\n  \t'keyword': [\n  \t\t{\n  \t\t\tpattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t],\n  \t'number': /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n  \t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n  \t'function': /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n  \t'operator': /--|\\+\\+|\\*\\*=?|=>|&&|\\|\\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?[.?]?|[~:]/\n  });\n\n  Prism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;\n\n  Prism.languages.insertBefore('javascript', 'keyword', {\n  \t'regex': {\n  \t\tpattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n  \t\tlookbehind: true,\n  \t\tgreedy: true\n  \t},\n  \t// This must be declared before keyword because we use \"function\" inside the look-forward\n  \t'function-variable': {\n  \t\tpattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n  \t\talias: 'function'\n  \t},\n  \t'parameter': [\n  \t\t{\n  \t\t\tpattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t}\n  \t],\n  \t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n  });\n\n  Prism.languages.insertBefore('javascript', 'string', {\n  \t'template-string': {\n  \t\tpattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'template-punctuation': {\n  \t\t\t\tpattern: /^`|`$/,\n  \t\t\t\talias: 'string'\n  \t\t\t},\n  \t\t\t'interpolation': {\n  \t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'interpolation-punctuation': {\n  \t\t\t\t\t\tpattern: /^\\${|}$/,\n  \t\t\t\t\t\talias: 'punctuation'\n  \t\t\t\t\t},\n  \t\t\t\t\trest: Prism.languages.javascript\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'string': /[\\s\\S]+/\n  \t\t}\n  \t}\n  });\n\n  if (Prism.languages.markup) {\n  \tPrism.languages.markup.tag.addInlined('script', 'javascript');\n  }\n\n  Prism.languages.js = Prism.languages.javascript;\n\n\n  /* **********************************************\n       Begin prism-file-highlight.js\n  ********************************************** */\n\n  (function () {\n  \tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n  \t\treturn;\n  \t}\n\n  \t/**\n  \t * @param {Element} [container=document]\n  \t */\n  \tself.Prism.fileHighlight = function(container) {\n  \t\tcontainer = container || document;\n\n  \t\tvar Extensions = {\n  \t\t\t'js': 'javascript',\n  \t\t\t'py': 'python',\n  \t\t\t'rb': 'ruby',\n  \t\t\t'ps1': 'powershell',\n  \t\t\t'psm1': 'powershell',\n  \t\t\t'sh': 'bash',\n  \t\t\t'bat': 'batch',\n  \t\t\t'h': 'c',\n  \t\t\t'tex': 'latex'\n  \t\t};\n\n  \t\tArray.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n  \t\t\t// ignore if already loaded\n  \t\t\tif (pre.hasAttribute('data-src-loaded')) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\t// load current\n  \t\t\tvar src = pre.getAttribute('data-src');\n\n  \t\t\tvar language, parent = pre;\n  \t\t\tvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n  \t\t\twhile (parent && !lang.test(parent.className)) {\n  \t\t\t\tparent = parent.parentNode;\n  \t\t\t}\n\n  \t\t\tif (parent) {\n  \t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n  \t\t\t}\n\n  \t\t\tif (!language) {\n  \t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n  \t\t\t\tlanguage = Extensions[extension] || extension;\n  \t\t\t}\n\n  \t\t\tvar code = document.createElement('code');\n  \t\t\tcode.className = 'language-' + language;\n\n  \t\t\tpre.textContent = '';\n\n  \t\t\tcode.textContent = 'Loading…';\n\n  \t\t\tpre.appendChild(code);\n\n  \t\t\tvar xhr = new XMLHttpRequest();\n\n  \t\t\txhr.open('GET', src, true);\n\n  \t\t\txhr.onreadystatechange = function () {\n  \t\t\t\tif (xhr.readyState == 4) {\n\n  \t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n  \t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n  \t\t\t\t\t\tPrism.highlightElement(code);\n  \t\t\t\t\t\t// mark as loaded\n  \t\t\t\t\t\tpre.setAttribute('data-src-loaded', '');\n  \t\t\t\t\t}\n  \t\t\t\t\telse if (xhr.status >= 400) {\n  \t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n  \t\t\t\t\t}\n  \t\t\t\t\telse {\n  \t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t};\n\n  \t\t\txhr.send(null);\n  \t\t});\n  \t};\n\n  \tdocument.addEventListener('DOMContentLoaded', function () {\n  \t\t// execute inside handler, for dropping Event as argument\n  \t\tself.Prism.fileHighlight();\n  \t});\n\n  })();\n  });\n\n  Prism.languages.python = {\n  \t'comment': {\n  \t\tpattern: /(^|[^\\\\])#.*/,\n  \t\tlookbehind: true\n  \t},\n  \t'string-interpolation': {\n  \t\tpattern: /(?:f|rf|fr)(?:(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'interpolation': {\n  \t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n  \t\t\t\tpattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'format-spec': {\n  \t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=}$)/,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'conversion-option': {\n  \t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n  \t\t\t\t\t\talias: 'punctuation'\n  \t\t\t\t\t},\n  \t\t\t\t\trest: null\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'string': /[\\s\\S]+/\n  \t\t}\n  \t},\n  \t'triple-quoted-string': {\n  \t\tpattern: /(?:[rub]|rb|br)?(\"\"\"|''')[\\s\\S]+?\\1/i,\n  \t\tgreedy: true,\n  \t\talias: 'string'\n  \t},\n  \t'string': {\n  \t\tpattern: /(?:[rub]|rb|br)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n  \t\tgreedy: true\n  \t},\n  \t'function': {\n  \t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n  \t\tlookbehind: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\bclass\\s+)\\w+/i,\n  \t\tlookbehind: true\n  \t},\n  \t'decorator': {\n  \t\tpattern: /(^\\s*)@\\w+(?:\\.\\w+)*/im,\n  \t\tlookbehind: true,\n  \t\talias: ['annotation', 'punctuation'],\n  \t\tinside: {\n  \t\t\t'punctuation': /\\./\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n  \t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n  \t'boolean': /\\b(?:True|False|None)\\b/,\n  \t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n  \t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n  Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\n  Prism.languages.py = Prism.languages.python;\n\n  Prism.languages.clike = {\n  \t'comment': [\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true\n  \t\t}\n  \t],\n  \t'string': {\n  \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n  \t\tgreedy: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n  \t\tlookbehind: true,\n  \t\tinside: {\n  \t\t\t'punctuation': /[.\\\\]/\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n  \t'boolean': /\\b(?:true|false)\\b/,\n  \t'function': /\\w+(?=\\()/,\n  \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n  \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n  Prism.languages.lua = {\n  \t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n  \t// \\z may be used to skip the following space\n  \t'string': {\n  \t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n  \t\tgreedy: true\n  \t},\n  \t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n  \t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n  \t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n  \t'operator': [\n  \t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n  \t\t{\n  \t\t\t// Match \"..\" but don't break \"...\"\n  \t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t],\n  \t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n  };\n\n  (function(Prism) {\n  \t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n  \t// + LC_ALL, RANDOM, REPLY, SECONDS.\n  \t// + make sure PS1..4 are here as they are not always set,\n  \t// - some useless things.\n  \tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n  \tvar insideString = {\n  \t\t'environment': {\n  \t\t\tpattern: RegExp(\"\\\\$\" + envVars),\n  \t\t\talias: 'constant'\n  \t\t},\n  \t\t'variable': [\n  \t\t\t// [0]: Arithmetic Environment\n  \t\t\t{\n  \t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n  \t\t\t\t\t'variable': [\n  \t\t\t\t\t\t{\n  \t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n  \t\t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t/^\\$\\(\\(/\n  \t\t\t\t\t],\n  \t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n  \t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n  \t\t\t\t\t'operator': /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n  \t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n  \t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t// [1]: Command Substitution\n  \t\t\t{\n  \t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t// [2]: Brace expansion\n  \t\t\t{\n  \t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n  \t\t\t\t\t'punctuation': /[\\[\\]]/,\n  \t\t\t\t\t'environment': {\n  \t\t\t\t\t\tpattern: RegExp(\"(\\\\{)\" + envVars),\n  \t\t\t\t\t\tlookbehind: true,\n  \t\t\t\t\t\talias: 'constant'\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t/\\$(?:\\w+|[#?*!@$])/\n  \t\t],\n  \t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n  \t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/\n  \t};\n\n  \tPrism.languages.bash = {\n  \t\t'shebang': {\n  \t\t\tpattern: /^#!\\s*\\/.*/,\n  \t\t\talias: 'important'\n  \t\t},\n  \t\t'comment': {\n  \t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'function-name': [\n  \t\t\t// a) function foo {\n  \t\t\t// b) foo() {\n  \t\t\t// c) function foo() {\n  \t\t\t// but not “foo {”\n  \t\t\t{\n  \t\t\t\t// a) and c)\n  \t\t\t\tpattern: /(\\bfunction\\s+)\\w+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'function'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// b)\n  \t\t\t\tpattern: /\\b\\w+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n  \t\t\t\talias: 'function'\n  \t\t\t}\n  \t\t],\n  \t\t// Highlight variable names as variables in for and select beginnings.\n  \t\t'for-or-select': {\n  \t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n  \t\t\talias: 'variable',\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t// Highlight variable names as variables in the left-hand part\n  \t\t// of assignments (“=” and “+=”).\n  \t\t'assign-left': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?=\\+?=)/,\n  \t\t\tinside: {\n  \t\t\t\t'environment': {\n  \t\t\t\t\tpattern: RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\" + envVars),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\talias: 'constant'\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\talias: 'variable',\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'string': [\n  \t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n  \t\t\t{\n  \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+?)\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: insideString\n  \t\t\t},\n  \t\t\t// Here-document with quotes around the tag\n  \t\t\t// → No expansion (so no “inside”).\n  \t\t\t{\n  \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true\n  \t\t\t},\n  \t\t\t// “Normal” string\n  \t\t\t{\n  \t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)([\"'])(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|`[^`]+`|(?!\\2)[^\\\\])*\\2/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: insideString\n  \t\t\t}\n  \t\t],\n  \t\t'environment': {\n  \t\t\tpattern: RegExp(\"\\\\$?\" + envVars),\n  \t\t\talias: 'constant'\n  \t\t},\n  \t\t'variable': insideString.variable,\n  \t\t'function': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'keyword': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  \t\t'builtin': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true,\n  \t\t\t// Alias added to make those easier to distinguish from strings.\n  \t\t\talias: 'class-name'\n  \t\t},\n  \t\t'boolean': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:true|false)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'file-descriptor': {\n  \t\t\tpattern: /\\B&\\d\\b/,\n  \t\t\talias: 'important'\n  \t\t},\n  \t\t'operator': {\n  \t\t\t// Lots of redirections here, but not just that.\n  \t\t\tpattern: /\\d?<>|>\\||\\+=|==?|!=?|=~|<<[<-]?|[&\\d]?>>|\\d?[<>]&?|&[>&]?|\\|[&|]?|<=?|>=?/,\n  \t\t\tinside: {\n  \t\t\t\t'file-descriptor': {\n  \t\t\t\t\tpattern: /^\\d/,\n  \t\t\t\t\talias: 'important'\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n  \t\t'number': {\n  \t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t};\n\n  \t/* Patterns in command substitution. */\n  \tvar toBeCopied = [\n  \t\t'comment',\n  \t\t'function-name',\n  \t\t'for-or-select',\n  \t\t'assign-left',\n  \t\t'string',\n  \t\t'environment',\n  \t\t'function',\n  \t\t'keyword',\n  \t\t'builtin',\n  \t\t'boolean',\n  \t\t'file-descriptor',\n  \t\t'operator',\n  \t\t'punctuation',\n  \t\t'number'\n  \t];\n  \tvar inside = insideString.variable[1].inside;\n  \tfor(var i = 0; i < toBeCopied.length; i++) {\n  \t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n  \t}\n\n  \tPrism.languages.shell = Prism.languages.bash;\n  })(Prism);\n\n  Prism.languages.go = Prism.languages.extend('clike', {\n  \t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n  \t'builtin': /\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b/,\n  \t'boolean': /\\b(?:_|iota|nil|true|false)\\b/,\n  \t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n  \t'number': /(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?/i,\n  \t'string': {\n  \t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n  \t\tgreedy: true\n  \t}\n  });\n  delete Prism.languages.go['class-name'];\n\n  (function (Prism) {\n\n  \t// Allow only one line break\n  \tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?!\\n|\\r\\n?))/.source;\n\n  \t/**\n  \t * This function is intended for the creation of the bold or italic pattern.\n  \t *\n  \t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n  \t *\n  \t * _Note:_ Keep in mind that this adds a capturing group.\n  \t *\n  \t * @param {string} pattern\n  \t * @param {boolean} starAlternative Whether to also add an alternative where all `_`s are replaced with `*`s.\n  \t * @returns {RegExp}\n  \t */\n  \tfunction createInline(pattern, starAlternative) {\n  \t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n  \t\tif (starAlternative) {\n  \t\t\tpattern = pattern + '|' + pattern.replace(/_/g, '\\\\*');\n  \t\t}\n  \t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n  \t}\n\n\n  \tvar tableCell = /(?:\\\\.|``.+?``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n  \tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|$)/.source.replace(/__/g, function () { return tableCell; });\n  \tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n  \tPrism.languages.markdown = Prism.languages.extend('markup', {});\n  \tPrism.languages.insertBefore('markdown', 'prolog', {\n  \t\t'blockquote': {\n  \t\t\t// > ...\n  \t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'table': {\n  \t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n  \t\t\tinside: {\n  \t\t\t\t'table-data-rows': {\n  \t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'table-data': {\n  \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n  \t\t\t\t\t\t\tinside: Prism.languages.markdown\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t'punctuation': /\\|/\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\t'table-line': {\n  \t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\t'table-header-row': {\n  \t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'table-header': {\n  \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n  \t\t\t\t\t\t\talias: 'important',\n  \t\t\t\t\t\t\tinside: Prism.languages.markdown\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t'punctuation': /\\|/\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t'code': [\n  \t\t\t{\n  \t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n  \t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'keyword'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// `code`\n  \t\t\t\t// ``code``\n  \t\t\t\tpattern: /``.+?``|`[^`\\r\\n]+`/,\n  \t\t\t\talias: 'keyword'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// ```optional language\n  \t\t\t\t// code block\n  \t\t\t\t// ```\n  \t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'code-block': {\n  \t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'code-language': {\n  \t\t\t\t\t\tpattern: /^(```).+/,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'punctuation': /```/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t],\n  \t\t'title': [\n  \t\t\t{\n  \t\t\t\t// title 1\n  \t\t\t\t// =======\n\n  \t\t\t\t// title 2\n  \t\t\t\t// -------\n  \t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n  \t\t\t\talias: 'important',\n  \t\t\t\tinside: {\n  \t\t\t\t\tpunctuation: /==+$|--+$/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// # title 1\n  \t\t\t\t// ###### title 6\n  \t\t\t\tpattern: /(^\\s*)#+.+/m,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'important',\n  \t\t\t\tinside: {\n  \t\t\t\t\tpunctuation: /^#+|#+$/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t],\n  \t\t'hr': {\n  \t\t\t// ***\n  \t\t\t// ---\n  \t\t\t// * * *\n  \t\t\t// -----------\n  \t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n  \t\t\tlookbehind: true,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'list': {\n  \t\t\t// * item\n  \t\t\t// + item\n  \t\t\t// - item\n  \t\t\t// 1. item\n  \t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n  \t\t\tlookbehind: true,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'url-reference': {\n  \t\t\t// [id]: http://example.com \"Optional title\"\n  \t\t\t// [id]: http://example.com 'Optional title'\n  \t\t\t// [id]: http://example.com (Optional title)\n  \t\t\t// [id]: <http://example.com> \"Optional title\"\n  \t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n  \t\t\tinside: {\n  \t\t\t\t'variable': {\n  \t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n  \t\t\t\t\tlookbehind: true\n  \t\t\t\t},\n  \t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n  \t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n  \t\t\t},\n  \t\t\talias: 'url'\n  \t\t},\n  \t\t'bold': {\n  \t\t\t// **strong**\n  \t\t\t// __strong__\n\n  \t\t\t// allow one nested instance of italic text using the same delimiter\n  \t\t\tpattern: createInline(/__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__/.source, true),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /\\*\\*|__/\n  \t\t\t}\n  \t\t},\n  \t\t'italic': {\n  \t\t\t// *em*\n  \t\t\t// _em_\n\n  \t\t\t// allow one nested instance of bold text using the same delimiter\n  \t\t\tpattern: createInline(/_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_/.source, true),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /[*_]/\n  \t\t\t}\n  \t\t},\n  \t\t'strike': {\n  \t\t\t// ~~strike through~~\n  \t\t\t// ~strike~\n  \t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+?\\2/.source, false),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /~~?/\n  \t\t\t}\n  \t\t},\n  \t\t'url': {\n  \t\t\t// [example](http://example.com \"Optional title\")\n  \t\t\t// [example][id]\n  \t\t\t// [example] [id]\n  \t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[(?:(?!\\])<inner>)+\\])/.source, false),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'variable': {\n  \t\t\t\t\tpattern: /(\\[)[^\\]]+(?=\\]$)/,\n  \t\t\t\t\tlookbehind: true\n  \t\t\t\t},\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^!?\\[)[^\\]]+(?=\\])/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'string': {\n  \t\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t});\n\n  \t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n  \t\t['url', 'bold', 'italic', 'strike'].forEach(function (inside) {\n  \t\t\tif (token !== inside) {\n  \t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n  \t\t\t}\n  \t\t});\n  \t});\n\n  \tPrism.hooks.add('after-tokenize', function (env) {\n  \t\tif (env.language !== 'markdown' && env.language !== 'md') {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tfunction walkTokens(tokens) {\n  \t\t\tif (!tokens || typeof tokens === 'string') {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n  \t\t\t\tvar token = tokens[i];\n\n  \t\t\t\tif (token.type !== 'code') {\n  \t\t\t\t\twalkTokens(token.content);\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\t/*\n  \t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n  \t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n  \t\t\t\t *\n  \t\t\t\t * token.content = [\n  \t\t\t\t *     <span class=\"punctuation\">```</span>,\n  \t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n  \t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n  \t\t\t\t *     <span class=\"code-block\">...</span>,\n  \t\t\t\t *     '\\n', // exactly one new lines again\n  \t\t\t\t *     <span class=\"punctuation\">```</span>\n  \t\t\t\t * ];\n  \t\t\t\t */\n\n  \t\t\t\tvar codeLang = token.content[1];\n  \t\t\t\tvar codeBlock = token.content[3];\n\n  \t\t\t\tif (codeLang && codeBlock &&\n  \t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n  \t\t\t\t\ttypeof codeLang.content === 'string') {\n\n  \t\t\t\t\t// this might be a language that Prism does not support\n\n  \t\t\t\t\t// do some replacements to support C++, C#, and F#\n  \t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n  \t\t\t\t\t// only use the first word\n  \t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n  \t\t\t\t\tvar alias = 'language-' + lang;\n\n  \t\t\t\t\t// add alias\n  \t\t\t\t\tif (!codeBlock.alias) {\n  \t\t\t\t\t\tcodeBlock.alias = [alias];\n  \t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n  \t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n  \t\t\t\t\t} else {\n  \t\t\t\t\t\tcodeBlock.alias.push(alias);\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\twalkTokens(env.tokens);\n  \t});\n\n  \tPrism.hooks.add('wrap', function (env) {\n  \t\tif (env.type !== 'code-block') {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar codeLang = '';\n  \t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n  \t\t\tvar cls = env.classes[i];\n  \t\t\tvar match = /language-(.+)/.exec(cls);\n  \t\t\tif (match) {\n  \t\t\t\tcodeLang = match[1];\n  \t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n\n  \t\tvar grammar = Prism.languages[codeLang];\n\n  \t\tif (!grammar) {\n  \t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n  \t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n  \t\t\t\tenv.attributes['id'] = id;\n\n  \t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n  \t\t\t\t\tvar ele = document.getElementById(id);\n  \t\t\t\t\tif (ele) {\n  \t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n  \t\t\t\t\t}\n  \t\t\t\t});\n  \t\t\t}\n  \t\t} else {\n  \t\t\t// reverse Prism.util.encode\n  \t\t\tvar code = env.content.replace(/&lt;/g, '<').replace(/&amp;/g, '&');\n\n  \t\t\tenv.content = Prism.highlight(code, grammar, codeLang);\n  \t\t}\n  \t});\n\n  \tPrism.languages.md = Prism.languages.markdown;\n\n  }(Prism));\n\n  Prism.languages.julia= {\n  \t'comment': {\n  \t\tpattern: /(^|[^\\\\])#.*/,\n  \t\tlookbehind: true\n  \t},\n  \t'string': /(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2/,\n  \t'keyword' : /\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,\n  \t'boolean' : /\\b(?:true|false)\\b/,\n  \t'number' : /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+\\.?\\d*|\\.\\d+)(?:[efp][+-]?\\d+)?j?/i,\n  \t'operator': /[-+*^%÷&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥]/,\n  \t'punctuation' : /[{}[\\];(),.:]/,\n  \t'constant': /\\b(?:(?:NaN|Inf)(?:16|32|64)?)\\b/\n  };\n\n  var css = \"/**\\n * prism.js default theme for JavaScript, CSS and HTML\\n * Based on dabblet (http://dabblet.com)\\n * @author Lea Verou\\n */\\n\\ncode[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tcolor: black;\\n\\tbackground: none;\\n\\ttext-shadow: 0 1px white;\\n\\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\\n\\tfont-size: 1em;\\n\\ttext-align: left;\\n\\twhite-space: pre;\\n\\tword-spacing: normal;\\n\\tword-break: normal;\\n\\tword-wrap: normal;\\n\\tline-height: 1.5;\\n\\n\\t-moz-tab-size: 4;\\n\\t-o-tab-size: 4;\\n\\ttab-size: 4;\\n\\n\\t-webkit-hyphens: none;\\n\\t-moz-hyphens: none;\\n\\t-ms-hyphens: none;\\n\\thyphens: none;\\n}\\n\\npre[class*=\\\"language-\\\"]::-moz-selection, pre[class*=\\\"language-\\\"] ::-moz-selection,\\ncode[class*=\\\"language-\\\"]::-moz-selection, code[class*=\\\"language-\\\"] ::-moz-selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\npre[class*=\\\"language-\\\"]::selection, pre[class*=\\\"language-\\\"] ::selection,\\ncode[class*=\\\"language-\\\"]::selection, code[class*=\\\"language-\\\"] ::selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\n@media print {\\n\\tcode[class*=\\\"language-\\\"],\\n\\tpre[class*=\\\"language-\\\"] {\\n\\t\\ttext-shadow: none;\\n\\t}\\n}\\n\\n/* Code blocks */\\npre[class*=\\\"language-\\\"] {\\n\\tpadding: 1em;\\n\\tmargin: .5em 0;\\n\\toverflow: auto;\\n}\\n\\n:not(pre) > code[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tbackground: #f5f2f0;\\n}\\n\\n/* Inline code */\\n:not(pre) > code[class*=\\\"language-\\\"] {\\n\\tpadding: .1em;\\n\\tborder-radius: .3em;\\n\\twhite-space: normal;\\n}\\n\\n.token.comment,\\n.token.prolog,\\n.token.doctype,\\n.token.cdata {\\n\\tcolor: slategray;\\n}\\n\\n.token.punctuation {\\n\\tcolor: #999;\\n}\\n\\n.token.namespace {\\n\\topacity: .7;\\n}\\n\\n.token.property,\\n.token.tag,\\n.token.boolean,\\n.token.number,\\n.token.constant,\\n.token.symbol,\\n.token.deleted {\\n\\tcolor: #905;\\n}\\n\\n.token.selector,\\n.token.attr-name,\\n.token.string,\\n.token.char,\\n.token.builtin,\\n.token.inserted {\\n\\tcolor: #690;\\n}\\n\\n.token.operator,\\n.token.entity,\\n.token.url,\\n.language-css .token.string,\\n.style .token.string {\\n\\tcolor: #9a6e3a;\\n\\tbackground: hsla(0, 0%, 100%, .5);\\n}\\n\\n.token.atrule,\\n.token.attr-value,\\n.token.keyword {\\n\\tcolor: #07a;\\n}\\n\\n.token.function,\\n.token.class-name {\\n\\tcolor: #DD4A68;\\n}\\n\\n.token.regex,\\n.token.important,\\n.token.variable {\\n\\tcolor: #e90;\\n}\\n\\n.token.important,\\n.token.bold {\\n\\tfont-weight: bold;\\n}\\n.token.italic {\\n\\tfont-style: italic;\\n}\\n\\n.token.entity {\\n\\tcursor: help;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$4 = Template('d-code', `\n<style>\n\ncode {\n  white-space: nowrap;\n  background: rgba(0, 0, 0, 0.04);\n  border-radius: 2px;\n  padding: 4px 7px;\n  font-size: 15px;\n  color: rgba(0, 0, 0, 0.6);\n}\n\npre code {\n  display: block;\n  border-left: 2px solid rgba(0, 0, 0, .1);\n  padding: 0 0 0 36px;\n}\n\n${css}\n</style>\n\n<code id=\"code-container\"></code>\n\n`);\n\n  class Code extends Mutating(T$4(HTMLElement)) {\n\n    renderContent() {\n\n      // check if language can be highlighted\n      this.languageName = this.getAttribute('language');\n      if (!this.languageName) {\n        console.warn('You need to provide a language attribute to your <d-code> block to let us know how to highlight your code; e.g.:\\n <d-code language=\"python\">zeros = np.zeros(shape)</d-code>.');\n        return;\n      }\n      const language = prism.languages[this.languageName];\n      if (language == undefined) {\n        console.warn(`Distill does not yet support highlighting your code block in \"${this.languageName}'.`);\n        return;\n      }\n\n      let content = this.textContent;\n      const codeTag = this.shadowRoot.querySelector('#code-container');\n\n      if (this.hasAttribute('block')) {\n        // normalize the tab indents\n        content = content.replace(/\\n/, '');\n        const tabs = content.match(/\\s*/);\n        content = content.replace(new RegExp('\\n' + tabs, 'g'), '\\n');\n        content = content.trim();\n        // wrap code block in pre tag if needed\n        if (codeTag.parentNode instanceof ShadowRoot) {\n          const preTag = document.createElement('pre');\n          this.shadowRoot.removeChild(codeTag);\n          preTag.appendChild(codeTag);\n          this.shadowRoot.appendChild(preTag);\n        }\n\n      }\n\n      codeTag.className = `language-${this.languageName}`;\n      codeTag.innerHTML = prism.highlight(content, language);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$5 = Template('d-footnote', `\n<style>\n\nd-math[block] {\n  display: block;\n}\n\n:host {\n\n}\n\nsup {\n  line-height: 1em;\n  font-size: 0.75em;\n  position: relative;\n  top: -.5em;\n  vertical-align: baseline;\n}\n\nspan {\n  color: hsla(206, 90%, 20%, 0.7);\n  cursor: default;\n}\n\n.footnote-container {\n  padding: 10px;\n}\n\n</style>\n\n<d-hover-box>\n  <div class=\"footnote-container\">\n    <slot id=\"slot\"></slot>\n  </div>\n</d-hover-box>\n\n<sup>\n  <span id=\"fn-\" data-hover-ref=\"\"></span>\n</sup>\n\n`);\n\n  class Footnote extends T$5(HTMLElement) {\n\n    constructor() {\n      super();\n\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver(this.notify);\n      observer.observe(this, options);\n    }\n\n    notify() {\n      const options = { detail: this, bubbles: true };\n      const event = new CustomEvent('onFootnoteChanged', options);\n      document.dispatchEvent(event);\n    }\n\n    connectedCallback() {\n      // listen and notify about changes to slotted content\n      // const slot = this.shadowRoot.querySelector('#slot');\n      // console.warn(slot.textContent);\n      // slot.addEventListener('slotchange', this.notify);\n      this.hoverBox = this.root.querySelector('d-hover-box');\n      window.customElements.whenDefined('d-hover-box').then(() => {\n        this.hoverBox.listen(this);\n      });\n      // create numeric ID\n      Footnote.currentFootnoteId += 1;\n      const IdString = Footnote.currentFootnoteId.toString();\n      this.root.host.id = 'd-footnote-' + IdString;\n\n      // set up hidden hover box\n      const id = 'dt-fn-hover-box-' + IdString;\n      this.hoverBox.id = id;\n\n      // set up visible footnote marker\n      const span = this.root.querySelector('#fn-');\n      span.setAttribute('id', 'fn-' + IdString);\n      span.setAttribute('data-hover-ref', id);\n      span.textContent = IdString;\n    }\n\n  }\n\n  Footnote.currentFootnoteId = 0;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$6 = Template('d-footnote-list', `\n<style>\n\nd-footnote-list {\n  contain: layout style;\n}\n\nd-footnote-list > * {\n  grid-column: text;\n}\n\nd-footnote-list a.footnote-backlink {\n  color: rgba(0,0,0,0.3);\n  padding-left: 0.5em;\n}\n\n</style>\n\n<h3>Footnotes</h3>\n<ol></ol>\n`, false);\n\n  class FootnoteList extends T$6(HTMLElement) {\n\n    connectedCallback() {\n      super.connectedCallback();\n\n      this.list = this.root.querySelector('ol');\n      // footnotes list is initially hidden\n      this.root.style.display = 'none';\n      // look through document and register existing footnotes\n      // Store.subscribeTo('footnotes', (footnote) => {\n      //   this.renderFootnote(footnote);\n      // });\n    }\n\n    // TODO: could optimize this to accept individual footnotes?\n    set footnotes(footnotes) {\n      this.list.innerHTML = '';\n      if (footnotes.length) {\n        // ensure footnote list is visible\n        this.root.style.display = '';\n\n        for (const footnote of footnotes) {\n          // construct and append list item to show footnote\n          const listItem = document.createElement('li');\n          listItem.id = footnote.id + '-listing';\n          listItem.innerHTML = footnote.innerHTML;\n\n          const backlink = document.createElement('a');\n          backlink.setAttribute('class', 'footnote-backlink');\n          backlink.setAttribute('target', '_self');\n          backlink.textContent = '[↩]';\n          backlink.href = '#' + footnote.id;\n\n          listItem.appendChild(backlink);\n          this.list.appendChild(listItem);\n        }\n      } else {\n        // ensure footnote list is invisible\n        this.root.style.display = 'none';\n      }\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$7 = Template('d-hover-box', `\n<style>\n\n:host {\n  position: absolute;\n  width: 100%;\n  left: 0px;\n  z-index: 10000;\n  display: none;\n  white-space: normal\n}\n\n.container {\n  position: relative;\n  width: 704px;\n  max-width: 100vw;\n  margin: 0 auto;\n}\n\n.panel {\n  position: absolute;\n  font-size: 1rem;\n  line-height: 1.5em;\n  top: 0;\n  left: 0;\n  width: 100%;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  background-color: rgba(250, 250, 250, 0.95);\n  box-shadow: 0 0 7px rgba(0, 0, 0, 0.1);\n  border-radius: 4px;\n  box-sizing: border-box;\n\n  backdrop-filter: blur(2px);\n  -webkit-backdrop-filter: blur(2px);\n}\n\n</style>\n\n<div class=\"container\">\n  <div class=\"panel\">\n    <slot></slot>\n  </div>\n</div>\n`);\n\n  class HoverBox extends T$7(HTMLElement) {\n\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n\n    }\n\n    listen(element) {\n      // console.log(element)\n      this.bindDivEvents(this);\n      this.bindTriggerEvents(element);\n      // this.style.display = \"block\";\n    }\n\n    bindDivEvents(element) {\n      // For mice, same behavior as hovering on links\n      element.addEventListener('mouseover', () => {\n        if (!this.visible) this.showAtNode(element);\n        this.stopTimeout();\n      });\n      element.addEventListener('mouseout', () => {\n        this.extendTimeout(500);\n      });\n      // Don't trigger body touchstart event when touching within box\n      element.addEventListener('touchstart', (event) => {\n        event.stopPropagation();\n      }, {passive: true});\n      // Close box when touching outside box\n      document.body.addEventListener('touchstart', () => {\n        this.hide();\n      }, {passive: true});\n    }\n\n    bindTriggerEvents(node) {\n      node.addEventListener('mouseover', () => {\n        if (!this.visible) {\n          this.showAtNode(node);\n        }\n        this.stopTimeout();\n      });\n\n      node.addEventListener('mouseout', () => {\n        this.extendTimeout(300);\n      });\n\n      node.addEventListener('touchstart', (event) => {\n        if (this.visible) {\n          this.hide();\n        } else {\n          this.showAtNode(node);\n        }\n        // Don't trigger body touchstart event when touching link\n        event.stopPropagation();\n      }, {passive: true});\n    }\n\n    show(position) {\n      this.visible = true;\n      this.style.display = 'block';\n      // 10px extra offset from element\n      this.style.top = Math.round(position[1] + 10) + 'px';\n    }\n\n    showAtNode(node) {\n      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n      const bbox = node.getBoundingClientRect();\n      this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);\n    }\n\n    hide() {\n      this.visible = false;\n      this.style.display = 'none';\n      this.stopTimeout();\n    }\n\n    stopTimeout() {\n      if (this.timeout) {\n        clearTimeout(this.timeout);\n      }\n    }\n\n    extendTimeout(time) {\n      this.stopTimeout();\n      this.timeout = setTimeout(() => {\n        this.hide();\n      }, time);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  class Title extends HTMLElement {\n    static get is() { return 'd-title'; }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$8 = Template('d-references', `\n<style>\nd-references {\n  display: block;\n}\n</style>\n`, false);\n\n  class References extends T$8(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  class TOC extends HTMLElement {\n\n    static get is() { return 'd-toc'; }\n\n    connectedCallback() {\n      if (!this.getAttribute('prerendered')) {\n        window.onload = () => {\n          const article = document.querySelector('d-article');\n          const headings = article.querySelectorAll('h2, h3');\n          renderTOC(this, headings);\n        };\n      }\n    }\n\n  }\n\n  function renderTOC(element, headings) {\n\n    let ToC =`\n  <style>\n\n  d-toc {\n    contain: layout style;\n    display: block;\n  }\n\n  d-toc ul {\n    padding-left: 0;\n  }\n\n  d-toc ul > ul {\n    padding-left: 24px;\n  }\n\n  d-toc a {\n    border-bottom: none;\n    text-decoration: none;\n  }\n\n  </style>\n  <nav role=\"navigation\" class=\"table-of-contents\"></nav>\n  <h2>Table of contents</h2>\n  <ul>`;\n\n    for (const el of headings) {\n      // should element be included in TOC?\n      const isInTitle = el.parentElement.tagName == 'D-TITLE';\n      const isException = el.getAttribute('no-toc');\n      if (isInTitle || isException) continue;\n      // create TOC entry\n      const title = el.textContent;\n      const link = '#' + el.getAttribute('id');\n\n      let newLine = '<li>' + '<a href=\"' + link + '\">' + title + '</a>' + '</li>';\n      if (el.tagName == 'H3') {\n        newLine = '<ul>' + newLine + '</ul>';\n      } else {\n        newLine += '<br>';\n      }\n      ToC += newLine;\n\n    }\n\n    ToC += '</ul></nav>';\n    element.innerHTML = ToC;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // Figure\n  //\n  // d-figure provides a state-machine of visibility events:\n  //\n  //                         scroll out of view\n  //                         +----------------+\n  //   *do work here*        |                |\n  // +----------------+    +-+---------+    +-v---------+\n  // | ready          +----> onscreen  |    | offscreen |\n  // +----------------+    +---------^-+    +---------+-+\n  //                                 |                |\n  //                                 +----------------+\n  //                                  scroll into view\n  //\n\n  class Figure extends HTMLElement {\n\n    static get is() { return 'd-figure'; }\n\n    static get readyQueue() {\n      if (!Figure._readyQueue) {\n        Figure._readyQueue = [];\n      }\n      return Figure._readyQueue;\n    }\n\n    static addToReadyQueue(figure) {\n      if (Figure.readyQueue.indexOf(figure) === -1) {\n        Figure.readyQueue.push(figure);\n        Figure.runReadyQueue();\n      }\n    }\n\n    static runReadyQueue() {\n      // console.log(\"Checking to run readyQueue, length: \" + Figure.readyQueue.length + \", scrolling: \" + Figure.isScrolling);\n      // if (Figure.isScrolling) return;\n      // console.log(\"Running ready Queue\");\n      const figure = Figure.readyQueue\n        .sort((a,b) => a._seenOnScreen - b._seenOnScreen )\n        .filter((figure) => !figure._ready)\n        .pop();\n      if (figure) {\n        figure.ready();\n        requestAnimationFrame(Figure.runReadyQueue);\n      }\n\n    }\n\n    constructor() {\n      super();\n      // debugger\n      this._ready = false;\n      this._onscreen = false;\n      this._offscreen = true;\n    }\n\n    connectedCallback() {\n      this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling');\n      Figure.marginObserver.observe(this);\n      Figure.directObserver.observe(this);\n    }\n\n    disconnectedCallback() {\n      Figure.marginObserver.unobserve(this);\n      Figure.directObserver.unobserve(this);\n    }\n\n    // We use two separate observers:\n    // One with an extra 1000px margin to warn if the viewpoint gets close,\n    // And one for the actual on/off screen events\n\n    static get marginObserver() {\n      if (!Figure._marginObserver) {\n        // if (!('IntersectionObserver' in window)) {\n        //   throw new Error('no interscetionobbserver!');\n        // }\n        const viewportHeight = window.innerHeight;\n        const margin = Math.floor(2 * viewportHeight);\n        const options = {rootMargin: margin + 'px 0px ' + margin + 'px 0px', threshold: 0.01};\n        const callback = Figure.didObserveMarginIntersection;\n        const observer = new IntersectionObserver(callback, options);\n        Figure._marginObserver = observer;\n      }\n      return Figure._marginObserver;\n    }\n\n    static didObserveMarginIntersection(entries) {\n      for (const entry of entries) {\n        const figure = entry.target;\n        if (entry.isIntersecting && !figure._ready) {\n          Figure.addToReadyQueue(figure);\n        }\n      }\n    }\n\n    static get directObserver() {\n      if (!Figure._directObserver) {\n        Figure._directObserver = new IntersectionObserver(\n          Figure.didObserveDirectIntersection, {\n            rootMargin: '0px', threshold: [0, 1.0],\n          }\n        );\n      }\n      return Figure._directObserver;\n    }\n\n    static didObserveDirectIntersection(entries) {\n      for (const entry of entries) {\n        const figure = entry.target;\n        if (entry.isIntersecting) {\n          figure._seenOnScreen = new Date();\n          // if (!figure._ready) { figure.ready(); }\n          if (figure._offscreen) { figure.onscreen(); }\n        } else {\n          if (figure._onscreen) { figure.offscreen(); }\n        }\n      }\n    }\n\n    // Notify listeners that registered late, too:\n\n    addEventListener(eventName, callback) {\n      super.addEventListener(eventName, callback);\n      // if we had already dispatched something while presumingly no one was listening, we do so again\n      // debugger\n      if (eventName === 'ready') {\n        if (Figure.readyQueue.indexOf(this) !== -1) {\n          this._ready = false;\n          Figure.runReadyQueue();\n        }\n      }\n      if (eventName === 'onscreen') {\n        this.onscreen();\n      }\n    }\n\n    // Custom Events\n\n    ready() {\n      // debugger\n      this._ready = true;\n      Figure.marginObserver.unobserve(this);\n      const event = new CustomEvent('ready');\n      this.dispatchEvent(event);\n    }\n\n    onscreen() {\n      this._onscreen = true;\n      this._offscreen = false;\n      const event = new CustomEvent('onscreen');\n      this.dispatchEvent(event);\n    }\n\n    offscreen() {\n      this._onscreen = false;\n      this._offscreen = true;\n      const event = new CustomEvent('offscreen');\n      this.dispatchEvent(event);\n    }\n\n  }\n\n  if (typeof window !== 'undefined') {\n\n    Figure.isScrolling = false;\n    let timeout;\n    const resetTimer = () => {\n      Figure.isScrolling = true;\n      clearTimeout(timeout);\n      timeout = setTimeout(() => {\n        Figure.isScrolling = false;\n        Figure.runReadyQueue();\n      }, 500);\n    };\n    window.addEventListener('scroll', resetTimer, true);\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  // This overlay is not secure.\n  // It is only meant as a social deterrent.\n\n  const productionHostname = 'distill.pub';\n  const T$9 = Template('d-interstitial', `\n<style>\n\n.overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  background: white;\n\n  opacity: 1;\n  visibility: visible;\n\n  display: flex;\n  flex-flow: column;\n  justify-content: center;\n  z-index: 2147483647 /* MaxInt32 */\n\n}\n\n.container {\n  position: relative;\n  margin-left: auto;\n  margin-right: auto;\n  max-width: 420px;\n  padding: 2em;\n}\n\nh1 {\n  text-decoration: underline;\n  text-decoration-color: hsl(0,100%,40%);\n  -webkit-text-decoration-color: hsl(0,100%,40%);\n  margin-bottom: 1em;\n  line-height: 1.5em;\n}\n\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  -webkit-border-radius: none;\n  -moz-border-radius: none;\n  -ms-border-radius: none;\n  -o-border-radius: none;\n  border-radius: none;\n  outline: none;\n\n  font-size: 18px;\n  background: none;\n  width: 25%;\n  padding: 10px;\n  border: none;\n  border-bottom: solid 2px #999;\n  transition: border .3s;\n}\n\ninput[type=\"password\"]:focus {\n  border-bottom: solid 2px #333;\n}\n\ninput[type=\"password\"].wrong {\n  border-bottom: solid 2px hsl(0,100%,40%);\n}\n\np small {\n  color: #888;\n}\n\n.logo {\n  position: relative;\n  font-size: 1.5em;\n  margin-bottom: 3em;\n}\n\n.logo svg {\n  width: 36px;\n  position: relative;\n  top: 6px;\n  margin-right: 2px;\n}\n\n.logo svg path {\n  fill: none;\n  stroke: black;\n  stroke-width: 2px;\n}\n\n</style>\n\n<div class=\"overlay\">\n  <div class=\"container\">\n    <h1>This article is in review.</h1>\n    <p>Do not share this URL or the contents of this article. Thank you!</p>\n    <input id=\"interstitial-password-input\" type=\"password\" name=\"password\" autofocus/>\n    <p><small>Enter the password we shared with you as part of the review process to view the article.</small></p>\n  </div>\n</div>\n`);\n\n  class Interstitial extends T$9(HTMLElement) {\n\n    connectedCallback() {\n      if (this.shouldRemoveSelf()) {\n        this.parentElement.removeChild(this);\n      } else {\n        const passwordInput = this.root.querySelector('#interstitial-password-input');\n        passwordInput.oninput = (event) => this.passwordChanged(event);\n      }\n    }\n\n    passwordChanged(event) {\n      const entered = event.target.value;\n      if (entered === this.password) {\n        console.log('Correct password entered.');\n        this.parentElement.removeChild(this);\n        if (typeof(Storage) !== 'undefined') {\n          console.log('Saved that correct password was entered.');\n          localStorage.setItem(this.localStorageIdentifier(), 'true');\n        }\n      }\n    }\n\n    shouldRemoveSelf() {\n      // should never be visible in production\n      if (window && window.location.hostname === productionHostname) {\n        console.warn('Interstitial found on production, hiding it.');\n        return true\n      }\n      // should only have to enter password once\n      if (typeof(Storage) !== 'undefined') {\n        if (localStorage.getItem(this.localStorageIdentifier()) === 'true') {\n          console.log('Loaded that correct password was entered before; skipping interstitial.');\n          return true;\n        }\n      }\n      // otherwise, leave visible\n      return false;\n    }\n\n    localStorageIdentifier() {\n      const prefix = 'distill-drafts';\n      const suffix = 'interstitial-password-correct';\n      return prefix + (window ? window.location.pathname : '-') + suffix\n    }\n\n  }\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50),\n      e5 = Math.sqrt(10),\n      e2 = Math.sqrt(2);\n\n  function ticks(start, stop, count) {\n    var reverse,\n        i = -1,\n        n,\n        ticks,\n        step;\n\n    stop = +stop, start = +start, count = +count;\n    if (start === stop && count > 0) return [start];\n    if (reverse = stop < start) n = start, start = stop, stop = n;\n    if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n    if (step > 0) {\n      start = Math.ceil(start / step);\n      stop = Math.floor(stop / step);\n      ticks = new Array(n = Math.ceil(stop - start + 1));\n      while (++i < n) ticks[i] = (start + i) * step;\n    } else {\n      start = Math.floor(start * step);\n      stop = Math.ceil(stop * step);\n      ticks = new Array(n = Math.ceil(start - stop + 1));\n      while (++i < n) ticks[i] = (start - i) / step;\n    }\n\n    if (reverse) ticks.reverse();\n\n    return ticks;\n  }\n\n  function tickIncrement(start, stop, count) {\n    var step = (stop - start) / Math.max(0, count),\n        power = Math.floor(Math.log(step) / Math.LN10),\n        error = step / Math.pow(10, power);\n    return power >= 0\n        ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n        : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function initRange(domain, range) {\n    switch (arguments.length) {\n      case 0: break;\n      case 1: this.range(domain); break;\n      default: this.range(range).domain(domain); break;\n    }\n    return this;\n  }\n\n  function define(constructor, factory, prototype) {\n    constructor.prototype = factory.prototype = prototype;\n    prototype.constructor = constructor;\n  }\n\n  function extend(parent, definition) {\n    var prototype = Object.create(parent.prototype);\n    for (var key in definition) prototype[key] = definition[key];\n    return prototype;\n  }\n\n  function Color() {}\n\n  var darker = 0.7;\n  var brighter = 1 / darker;\n\n  var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n      reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n      reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n      reHex = /^#([0-9a-f]{3,8})$/,\n      reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n      reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n      reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n      reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n      reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n      reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\n  var named = {\n    aliceblue: 0xf0f8ff,\n    antiquewhite: 0xfaebd7,\n    aqua: 0x00ffff,\n    aquamarine: 0x7fffd4,\n    azure: 0xf0ffff,\n    beige: 0xf5f5dc,\n    bisque: 0xffe4c4,\n    black: 0x000000,\n    blanchedalmond: 0xffebcd,\n    blue: 0x0000ff,\n    blueviolet: 0x8a2be2,\n    brown: 0xa52a2a,\n    burlywood: 0xdeb887,\n    cadetblue: 0x5f9ea0,\n    chartreuse: 0x7fff00,\n    chocolate: 0xd2691e,\n    coral: 0xff7f50,\n    cornflowerblue: 0x6495ed,\n    cornsilk: 0xfff8dc,\n    crimson: 0xdc143c,\n    cyan: 0x00ffff,\n    darkblue: 0x00008b,\n    darkcyan: 0x008b8b,\n    darkgoldenrod: 0xb8860b,\n    darkgray: 0xa9a9a9,\n    darkgreen: 0x006400,\n    darkgrey: 0xa9a9a9,\n    darkkhaki: 0xbdb76b,\n    darkmagenta: 0x8b008b,\n    darkolivegreen: 0x556b2f,\n    darkorange: 0xff8c00,\n    darkorchid: 0x9932cc,\n    darkred: 0x8b0000,\n    darksalmon: 0xe9967a,\n    darkseagreen: 0x8fbc8f,\n    darkslateblue: 0x483d8b,\n    darkslategray: 0x2f4f4f,\n    darkslategrey: 0x2f4f4f,\n    darkturquoise: 0x00ced1,\n    darkviolet: 0x9400d3,\n    deeppink: 0xff1493,\n    deepskyblue: 0x00bfff,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1e90ff,\n    firebrick: 0xb22222,\n    floralwhite: 0xfffaf0,\n    forestgreen: 0x228b22,\n    fuchsia: 0xff00ff,\n    gainsboro: 0xdcdcdc,\n    ghostwhite: 0xf8f8ff,\n    gold: 0xffd700,\n    goldenrod: 0xdaa520,\n    gray: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xadff2f,\n    grey: 0x808080,\n    honeydew: 0xf0fff0,\n    hotpink: 0xff69b4,\n    indianred: 0xcd5c5c,\n    indigo: 0x4b0082,\n    ivory: 0xfffff0,\n    khaki: 0xf0e68c,\n    lavender: 0xe6e6fa,\n    lavenderblush: 0xfff0f5,\n    lawngreen: 0x7cfc00,\n    lemonchiffon: 0xfffacd,\n    lightblue: 0xadd8e6,\n    lightcoral: 0xf08080,\n    lightcyan: 0xe0ffff,\n    lightgoldenrodyellow: 0xfafad2,\n    lightgray: 0xd3d3d3,\n    lightgreen: 0x90ee90,\n    lightgrey: 0xd3d3d3,\n    lightpink: 0xffb6c1,\n    lightsalmon: 0xffa07a,\n    lightseagreen: 0x20b2aa,\n    lightskyblue: 0x87cefa,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xb0c4de,\n    lightyellow: 0xffffe0,\n    lime: 0x00ff00,\n    limegreen: 0x32cd32,\n    linen: 0xfaf0e6,\n    magenta: 0xff00ff,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66cdaa,\n    mediumblue: 0x0000cd,\n    mediumorchid: 0xba55d3,\n    mediumpurple: 0x9370db,\n    mediumseagreen: 0x3cb371,\n    mediumslateblue: 0x7b68ee,\n    mediumspringgreen: 0x00fa9a,\n    mediumturquoise: 0x48d1cc,\n    mediumvioletred: 0xc71585,\n    midnightblue: 0x191970,\n    mintcream: 0xf5fffa,\n    mistyrose: 0xffe4e1,\n    moccasin: 0xffe4b5,\n    navajowhite: 0xffdead,\n    navy: 0x000080,\n    oldlace: 0xfdf5e6,\n    olive: 0x808000,\n    olivedrab: 0x6b8e23,\n    orange: 0xffa500,\n    orangered: 0xff4500,\n    orchid: 0xda70d6,\n    palegoldenrod: 0xeee8aa,\n    palegreen: 0x98fb98,\n    paleturquoise: 0xafeeee,\n    palevioletred: 0xdb7093,\n    papayawhip: 0xffefd5,\n    peachpuff: 0xffdab9,\n    peru: 0xcd853f,\n    pink: 0xffc0cb,\n    plum: 0xdda0dd,\n    powderblue: 0xb0e0e6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xff0000,\n    rosybrown: 0xbc8f8f,\n    royalblue: 0x4169e1,\n    saddlebrown: 0x8b4513,\n    salmon: 0xfa8072,\n    sandybrown: 0xf4a460,\n    seagreen: 0x2e8b57,\n    seashell: 0xfff5ee,\n    sienna: 0xa0522d,\n    silver: 0xc0c0c0,\n    skyblue: 0x87ceeb,\n    slateblue: 0x6a5acd,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xfffafa,\n    springgreen: 0x00ff7f,\n    steelblue: 0x4682b4,\n    tan: 0xd2b48c,\n    teal: 0x008080,\n    thistle: 0xd8bfd8,\n    tomato: 0xff6347,\n    turquoise: 0x40e0d0,\n    violet: 0xee82ee,\n    wheat: 0xf5deb3,\n    white: 0xffffff,\n    whitesmoke: 0xf5f5f5,\n    yellow: 0xffff00,\n    yellowgreen: 0x9acd32\n  };\n\n  define(Color, color, {\n    copy: function(channels) {\n      return Object.assign(new this.constructor, this, channels);\n    },\n    displayable: function() {\n      return this.rgb().displayable();\n    },\n    hex: color_formatHex, // Deprecated! Use color.formatHex.\n    formatHex: color_formatHex,\n    formatHsl: color_formatHsl,\n    formatRgb: color_formatRgb,\n    toString: color_formatRgb\n  });\n\n  function color_formatHex() {\n    return this.rgb().formatHex();\n  }\n\n  function color_formatHsl() {\n    return hslConvert(this).formatHsl();\n  }\n\n  function color_formatRgb() {\n    return this.rgb().formatRgb();\n  }\n\n  function color(format) {\n    var m, l;\n    format = (format + \"\").trim().toLowerCase();\n    return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n        : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n        : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n        : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n        : null) // invalid hex\n        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n        : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n        : null;\n  }\n\n  function rgbn(n) {\n    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n  }\n\n  function rgba(r, g, b, a) {\n    if (a <= 0) r = g = b = NaN;\n    return new Rgb(r, g, b, a);\n  }\n\n  function rgbConvert(o) {\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Rgb;\n    o = o.rgb();\n    return new Rgb(o.r, o.g, o.b, o.opacity);\n  }\n\n  function rgb(r, g, b, opacity) {\n    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n  }\n\n  function Rgb(r, g, b, opacity) {\n    this.r = +r;\n    this.g = +g;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Rgb, rgb, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    rgb: function() {\n      return this;\n    },\n    displayable: function() {\n      return (-0.5 <= this.r && this.r < 255.5)\n          && (-0.5 <= this.g && this.g < 255.5)\n          && (-0.5 <= this.b && this.b < 255.5)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n    formatHex: rgb_formatHex,\n    formatRgb: rgb_formatRgb,\n    toString: rgb_formatRgb\n  }));\n\n  function rgb_formatHex() {\n    return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n  }\n\n  function rgb_formatRgb() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"rgb(\" : \"rgba(\")\n        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n\n  function hex(value) {\n    value = Math.max(0, Math.min(255, Math.round(value) || 0));\n    return (value < 16 ? \"0\" : \"\") + value.toString(16);\n  }\n\n  function hsla(h, s, l, a) {\n    if (a <= 0) h = s = l = NaN;\n    else if (l <= 0 || l >= 1) h = s = NaN;\n    else if (s <= 0) h = NaN;\n    return new Hsl(h, s, l, a);\n  }\n\n  function hslConvert(o) {\n    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Hsl;\n    if (o instanceof Hsl) return o;\n    o = o.rgb();\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        min = Math.min(r, g, b),\n        max = Math.max(r, g, b),\n        h = NaN,\n        s = max - min,\n        l = (max + min) / 2;\n    if (s) {\n      if (r === max) h = (g - b) / s + (g < b) * 6;\n      else if (g === max) h = (b - r) / s + 2;\n      else h = (r - g) / s + 4;\n      s /= l < 0.5 ? max + min : 2 - max - min;\n      h *= 60;\n    } else {\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new Hsl(h, s, l, o.opacity);\n  }\n\n  function hsl(h, s, l, opacity) {\n    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hsl(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hsl, hsl, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = this.h % 360 + (this.h < 0) * 360,\n          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n          l = this.l,\n          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n          m1 = 2 * l - m2;\n      return new Rgb(\n        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n        hsl2rgb(h, m1, m2),\n        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n        this.opacity\n      );\n    },\n    displayable: function() {\n      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n          && (0 <= this.l && this.l <= 1)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    formatHsl: function() {\n      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n      return (a === 1 ? \"hsl(\" : \"hsla(\")\n          + (this.h || 0) + \", \"\n          + (this.s || 0) * 100 + \"%, \"\n          + (this.l || 0) * 100 + \"%\"\n          + (a === 1 ? \")\" : \", \" + a + \")\");\n    }\n  }));\n\n  /* From FvD 13.37, CSS Color Module Level 3 */\n  function hsl2rgb(h, m1, m2) {\n    return (h < 60 ? m1 + (m2 - m1) * h / 60\n        : h < 180 ? m2\n        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n        : m1) * 255;\n  }\n\n  var deg2rad = Math.PI / 180;\n  var rad2deg = 180 / Math.PI;\n\n  // https://observablehq.com/@mbostock/lab-and-rgb\n  var K = 18,\n      Xn = 0.96422,\n      Yn = 1,\n      Zn = 0.82521,\n      t0 = 4 / 29,\n      t1 = 6 / 29,\n      t2 = 3 * t1 * t1,\n      t3 = t1 * t1 * t1;\n\n  function labConvert(o) {\n    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n    if (o instanceof Hcl) return hcl2lab(o);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = rgb2lrgb(o.r),\n        g = rgb2lrgb(o.g),\n        b = rgb2lrgb(o.b),\n        y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n    if (r === g && g === b) x = z = y; else {\n      x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n      z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n    }\n    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n  }\n\n  function lab(l, a, b, opacity) {\n    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n  }\n\n  function Lab(l, a, b, opacity) {\n    this.l = +l;\n    this.a = +a;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Lab, lab, extend(Color, {\n    brighter: function(k) {\n      return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    darker: function(k) {\n      return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    rgb: function() {\n      var y = (this.l + 16) / 116,\n          x = isNaN(this.a) ? y : y + this.a / 500,\n          z = isNaN(this.b) ? y : y - this.b / 200;\n      x = Xn * lab2xyz(x);\n      y = Yn * lab2xyz(y);\n      z = Zn * lab2xyz(z);\n      return new Rgb(\n        lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n        lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n        lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n        this.opacity\n      );\n    }\n  }));\n\n  function xyz2lab(t) {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n  }\n\n  function lab2xyz(t) {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n  }\n\n  function lrgb2rgb(x) {\n    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n  }\n\n  function rgb2lrgb(x) {\n    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n  }\n\n  function hclConvert(o) {\n    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n    if (!(o instanceof Lab)) o = labConvert(o);\n    if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n    var h = Math.atan2(o.b, o.a) * rad2deg;\n    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n  }\n\n  function hcl(h, c, l, opacity) {\n    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hcl(h, c, l, opacity) {\n    this.h = +h;\n    this.c = +c;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  function hcl2lab(o) {\n    if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n    var h = o.h * deg2rad;\n    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n  }\n\n  define(Hcl, hcl, extend(Color, {\n    brighter: function(k) {\n      return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n    },\n    darker: function(k) {\n      return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n    },\n    rgb: function() {\n      return hcl2lab(this).rgb();\n    }\n  }));\n\n  var A = -0.14861,\n      B = +1.78277,\n      C = -0.29227,\n      D = -0.90649,\n      E = +1.97294,\n      ED = E * D,\n      EB = E * B,\n      BC_DA = B * C - D * A;\n\n  function cubehelixConvert(o) {\n    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n        bl = b - l,\n        k = (E * (g - l) - C * bl) / D,\n        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n  }\n\n  function cubehelix(h, s, l, opacity) {\n    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Cubehelix(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Cubehelix, cubehelix, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n          l = +this.l,\n          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n          cosh = Math.cos(h),\n          sinh = Math.sin(h);\n      return new Rgb(\n        255 * (l + a * (A * cosh + B * sinh)),\n        255 * (l + a * (C * cosh + D * sinh)),\n        255 * (l + a * (E * cosh)),\n        this.opacity\n      );\n    }\n  }));\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function linear(a, d) {\n    return function(t) {\n      return a + t * d;\n    };\n  }\n\n  function exponential(a, b, y) {\n    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n      return Math.pow(a + t * b, y);\n    };\n  }\n\n  function gamma(y) {\n    return (y = +y) === 1 ? nogamma : function(a, b) {\n      return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n    };\n  }\n\n  function nogamma(a, b) {\n    var d = b - a;\n    return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n  }\n\n  var rgb$1 = (function rgbGamma(y) {\n    var color = gamma(y);\n\n    function rgb$1(start, end) {\n      var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n          g = color(start.g, end.g),\n          b = color(start.b, end.b),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.r = r(t);\n        start.g = g(t);\n        start.b = b(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    rgb$1.gamma = rgbGamma;\n\n    return rgb$1;\n  })(1);\n\n  function numberArray(a, b) {\n    if (!b) b = [];\n    var n = a ? Math.min(b.length, a.length) : 0,\n        c = b.slice(),\n        i;\n    return function(t) {\n      for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n      return c;\n    };\n  }\n\n  function isNumberArray(x) {\n    return ArrayBuffer.isView(x) && !(x instanceof DataView);\n  }\n\n  function genericArray(a, b) {\n    var nb = b ? b.length : 0,\n        na = a ? Math.min(nb, a.length) : 0,\n        x = new Array(na),\n        c = new Array(nb),\n        i;\n\n    for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n    for (; i < nb; ++i) c[i] = b[i];\n\n    return function(t) {\n      for (i = 0; i < na; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n\n  function date(a, b) {\n    var d = new Date;\n    return a = +a, b = +b, function(t) {\n      return d.setTime(a * (1 - t) + b * t), d;\n    };\n  }\n\n  function interpolateNumber(a, b) {\n    return a = +a, b = +b, function(t) {\n      return a * (1 - t) + b * t;\n    };\n  }\n\n  function object(a, b) {\n    var i = {},\n        c = {},\n        k;\n\n    if (a === null || typeof a !== \"object\") a = {};\n    if (b === null || typeof b !== \"object\") b = {};\n\n    for (k in b) {\n      if (k in a) {\n        i[k] = interpolate(a[k], b[k]);\n      } else {\n        c[k] = b[k];\n      }\n    }\n\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n\n  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n      reB = new RegExp(reA.source, \"g\");\n\n  function zero(b) {\n    return function() {\n      return b;\n    };\n  }\n\n  function one(b) {\n    return function(t) {\n      return b(t) + \"\";\n    };\n  }\n\n  function string(a, b) {\n    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n        am, // current match in a\n        bm, // current match in b\n        bs, // string preceding current number in b, if any\n        i = -1, // index in s\n        s = [], // string constants and placeholders\n        q = []; // number interpolators\n\n    // Coerce inputs to strings.\n    a = a + \"\", b = b + \"\";\n\n    // Interpolate pairs of numbers in a & b.\n    while ((am = reA.exec(a))\n        && (bm = reB.exec(b))) {\n      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; // coalesce with previous string\n        else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n        if (s[i]) s[i] += bm; // coalesce with previous string\n        else s[++i] = bm;\n      } else { // interpolate non-matching numbers\n        s[++i] = null;\n        q.push({i: i, x: interpolateNumber(am, bm)});\n      }\n      bi = reB.lastIndex;\n    }\n\n    // Add remains of b.\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n\n    // Special optimization for only a single match.\n    // Otherwise, interpolate each of the numbers and rejoin the string.\n    return s.length < 2 ? (q[0]\n        ? one(q[0].x)\n        : zero(b))\n        : (b = q.length, function(t) {\n            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n            return s.join(\"\");\n          });\n  }\n\n  function interpolate(a, b) {\n    var t = typeof b, c;\n    return b == null || t === \"boolean\" ? constant(b)\n        : (t === \"number\" ? interpolateNumber\n        : t === \"string\" ? ((c = color(b)) ? (b = c, rgb$1) : string)\n        : b instanceof color ? rgb$1\n        : b instanceof Date ? date\n        : isNumberArray(b) ? numberArray\n        : Array.isArray(b) ? genericArray\n        : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n        : interpolateNumber)(a, b);\n  }\n\n  function interpolateRound(a, b) {\n    return a = +a, b = +b, function(t) {\n      return Math.round(a * (1 - t) + b * t);\n    };\n  }\n\n  function constant$1(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  var unit = [0, 1];\n\n  function identity(x) {\n    return x;\n  }\n\n  function normalize(a, b) {\n    return (b -= (a = +a))\n        ? function(x) { return (x - a) / b; }\n        : constant$1(isNaN(b) ? NaN : 0.5);\n  }\n\n  function clamper(a, b) {\n    var t;\n    if (a > b) t = a, a = b, b = t;\n    return function(x) { return Math.max(a, Math.min(b, x)); };\n  }\n\n  // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n  // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n  function bimap(domain, range, interpolate) {\n    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n    if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n    else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n    return function(x) { return r0(d0(x)); };\n  }\n\n  function polymap(domain, range, interpolate) {\n    var j = Math.min(domain.length, range.length) - 1,\n        d = new Array(j),\n        r = new Array(j),\n        i = -1;\n\n    // Reverse descending domains.\n    if (domain[j] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n\n    while (++i < j) {\n      d[i] = normalize(domain[i], domain[i + 1]);\n      r[i] = interpolate(range[i], range[i + 1]);\n    }\n\n    return function(x) {\n      var i = bisectRight(domain, x, 1, j) - 1;\n      return r[i](d[i](x));\n    };\n  }\n\n  function copy(source, target) {\n    return target\n        .domain(source.domain())\n        .range(source.range())\n        .interpolate(source.interpolate())\n        .clamp(source.clamp())\n        .unknown(source.unknown());\n  }\n\n  function transformer() {\n    var domain = unit,\n        range = unit,\n        interpolate$1 = interpolate,\n        transform,\n        untransform,\n        unknown,\n        clamp = identity,\n        piecewise,\n        output,\n        input;\n\n    function rescale() {\n      var n = Math.min(domain.length, range.length);\n      if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n      piecewise = n > 2 ? polymap : bimap;\n      output = input = null;\n      return scale;\n    }\n\n    function scale(x) {\n      return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));\n    }\n\n    scale.invert = function(y) {\n      return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range = Array.from(_), interpolate$1 = interpolateRound, rescale();\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n    };\n\n    scale.interpolate = function(_) {\n      return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;\n    };\n\n    scale.unknown = function(_) {\n      return arguments.length ? (unknown = _, scale) : unknown;\n    };\n\n    return function(t, u) {\n      transform = t, untransform = u;\n      return rescale();\n    };\n  }\n\n  function continuous() {\n    return transformer()(identity, identity);\n  }\n\n  // Computes the decimal coefficient and exponent of the specified number x with\n  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n  // For example, formatDecimal(1.23) returns [\"123\", 0].\n  function formatDecimal(x, p) {\n    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n    var i, coefficient = x.slice(0, i);\n\n    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n    return [\n      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n      +x.slice(i + 1)\n    ];\n  }\n\n  function exponent(x) {\n    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n  }\n\n  function formatGroup(grouping, thousands) {\n    return function(value, width) {\n      var i = value.length,\n          t = [],\n          j = 0,\n          g = grouping[0],\n          length = 0;\n\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = grouping[j = (j + 1) % grouping.length];\n      }\n\n      return t.reverse().join(thousands);\n    };\n  }\n\n  function formatNumerals(numerals) {\n    return function(value) {\n      return value.replace(/[0-9]/g, function(i) {\n        return numerals[+i];\n      });\n    };\n  }\n\n  // [[fill]align][sign][symbol][0][width][,][.precision][~][type]\n  var re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\n  function formatSpecifier(specifier) {\n    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n    var match;\n    return new FormatSpecifier({\n      fill: match[1],\n      align: match[2],\n      sign: match[3],\n      symbol: match[4],\n      zero: match[5],\n      width: match[6],\n      comma: match[7],\n      precision: match[8] && match[8].slice(1),\n      trim: match[9],\n      type: match[10]\n    });\n  }\n\n  formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\n  function FormatSpecifier(specifier) {\n    this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n    this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n    this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n    this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n    this.zero = !!specifier.zero;\n    this.width = specifier.width === undefined ? undefined : +specifier.width;\n    this.comma = !!specifier.comma;\n    this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n    this.trim = !!specifier.trim;\n    this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n  }\n\n  FormatSpecifier.prototype.toString = function() {\n    return this.fill\n        + this.align\n        + this.sign\n        + this.symbol\n        + (this.zero ? \"0\" : \"\")\n        + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n        + (this.comma ? \",\" : \"\")\n        + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n        + (this.trim ? \"~\" : \"\")\n        + this.type;\n  };\n\n  // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n  function formatTrim(s) {\n    out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n      switch (s[i]) {\n        case \".\": i0 = i1 = i; break;\n        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n        default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n      }\n    }\n    return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n  }\n\n  var prefixExponent;\n\n  function formatPrefixAuto(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1],\n        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n        n = coefficient.length;\n    return i === n ? coefficient\n        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n  }\n\n  function formatRounded(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1];\n    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n  }\n\n  var formatTypes = {\n    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n    \"b\": function(x) { return Math.round(x).toString(2); },\n    \"c\": function(x) { return x + \"\"; },\n    \"d\": function(x) { return Math.round(x).toString(10); },\n    \"e\": function(x, p) { return x.toExponential(p); },\n    \"f\": function(x, p) { return x.toFixed(p); },\n    \"g\": function(x, p) { return x.toPrecision(p); },\n    \"o\": function(x) { return Math.round(x).toString(8); },\n    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n    \"r\": formatRounded,\n    \"s\": formatPrefixAuto,\n    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n    \"x\": function(x) { return Math.round(x).toString(16); }\n  };\n\n  function identity$1(x) {\n    return x;\n  }\n\n  var map = Array.prototype.map,\n      prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n  function formatLocale(locale) {\n    var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n        currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n        currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n        decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n        numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),\n        percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n        minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n        nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n    function newFormat(specifier) {\n      specifier = formatSpecifier(specifier);\n\n      var fill = specifier.fill,\n          align = specifier.align,\n          sign = specifier.sign,\n          symbol = specifier.symbol,\n          zero = specifier.zero,\n          width = specifier.width,\n          comma = specifier.comma,\n          precision = specifier.precision,\n          trim = specifier.trim,\n          type = specifier.type;\n\n      // The \"n\" type is an alias for \",g\".\n      if (type === \"n\") comma = true, type = \"g\";\n\n      // The \"\" type, and any invalid type, is an alias for \".12~g\".\n      else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n      // If zero fill is specified, padding goes after sign and before digits.\n      if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n      // Compute the prefix and suffix.\n      // For SI-prefix, the suffix is lazily computed.\n      var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n          suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n      // What format function should we use?\n      // Is this an integer type?\n      // Can this type generate exponential notation?\n      var formatType = formatTypes[type],\n          maybeSuffix = /[defgprs%]/.test(type);\n\n      // Set the default precision if not specified,\n      // or clamp the specified precision to the supported range.\n      // For significant precision, it must be in [1, 21].\n      // For fixed precision, it must be in [0, 20].\n      precision = precision === undefined ? 6\n          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n          : Math.max(0, Math.min(20, precision));\n\n      function format(value) {\n        var valuePrefix = prefix,\n            valueSuffix = suffix,\n            i, n, c;\n\n        if (type === \"c\") {\n          valueSuffix = formatType(value) + valueSuffix;\n          value = \"\";\n        } else {\n          value = +value;\n\n          // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n          var valueNegative = value < 0 || 1 / value < 0;\n\n          // Perform the initial formatting.\n          value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n          // Trim insignificant zeros.\n          if (trim) value = formatTrim(value);\n\n          // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n          if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n          // Compute the prefix and suffix.\n          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n          valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n          // Break the formatted value into the integer “value” part that can be\n          // grouped, and fractional or exponential “suffix” part that is not.\n          if (maybeSuffix) {\n            i = -1, n = value.length;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n                value = value.slice(0, i);\n                break;\n              }\n            }\n          }\n        }\n\n        // If the fill character is not \"0\", grouping is applied before padding.\n        if (comma && !zero) value = group(value, Infinity);\n\n        // Compute the padding.\n        var length = valuePrefix.length + value.length + valueSuffix.length,\n            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n        // If the fill character is \"0\", grouping is applied after padding.\n        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n        // Reconstruct the final output based on the desired alignment.\n        switch (align) {\n          case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n          case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n          case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n          default: value = padding + valuePrefix + value + valueSuffix; break;\n        }\n\n        return numerals(value);\n      }\n\n      format.toString = function() {\n        return specifier + \"\";\n      };\n\n      return format;\n    }\n\n    function formatPrefix(specifier, value) {\n      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n          e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n          k = Math.pow(10, -e),\n          prefix = prefixes[8 + e / 3];\n      return function(value) {\n        return f(k * value) + prefix;\n      };\n    }\n\n    return {\n      format: newFormat,\n      formatPrefix: formatPrefix\n    };\n  }\n\n  var locale;\n  var format;\n  var formatPrefix;\n\n  defaultLocale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [3],\n    currency: [\"$\", \"\"],\n    minus: \"-\"\n  });\n\n  function defaultLocale(definition) {\n    locale = formatLocale(definition);\n    format = locale.format;\n    formatPrefix = locale.formatPrefix;\n    return locale;\n  }\n\n  function precisionFixed(step) {\n    return Math.max(0, -exponent(Math.abs(step)));\n  }\n\n  function precisionPrefix(step, value) {\n    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n  }\n\n  function precisionRound(step, max) {\n    step = Math.abs(step), max = Math.abs(max) - step;\n    return Math.max(0, exponent(max) - exponent(step)) + 1;\n  }\n\n  function tickFormat(start, stop, count, specifier) {\n    var step = tickStep(start, stop, count),\n        precision;\n    specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n    switch (specifier.type) {\n      case \"s\": {\n        var value = Math.max(Math.abs(start), Math.abs(stop));\n        if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n        return formatPrefix(specifier, value);\n      }\n      case \"\":\n      case \"e\":\n      case \"g\":\n      case \"p\":\n      case \"r\": {\n        if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n        break;\n      }\n      case \"f\":\n      case \"%\": {\n        if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n        break;\n      }\n    }\n    return format(specifier);\n  }\n\n  function linearish(scale) {\n    var domain = scale.domain;\n\n    scale.ticks = function(count) {\n      var d = domain();\n      return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      var d = domain();\n      return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n    };\n\n    scale.nice = function(count) {\n      if (count == null) count = 10;\n\n      var d = domain(),\n          i0 = 0,\n          i1 = d.length - 1,\n          start = d[i0],\n          stop = d[i1],\n          step;\n\n      if (stop < start) {\n        step = start, start = stop, stop = step;\n        step = i0, i0 = i1, i1 = step;\n      }\n\n      step = tickIncrement(start, stop, count);\n\n      if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n        step = tickIncrement(start, stop, count);\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n        step = tickIncrement(start, stop, count);\n      }\n\n      if (step > 0) {\n        d[i0] = Math.floor(start / step) * step;\n        d[i1] = Math.ceil(stop / step) * step;\n        domain(d);\n      } else if (step < 0) {\n        d[i0] = Math.ceil(start * step) / step;\n        d[i1] = Math.floor(stop * step) / step;\n        domain(d);\n      }\n\n      return scale;\n    };\n\n    return scale;\n  }\n\n  function linear$1() {\n    var scale = continuous();\n\n    scale.copy = function() {\n      return copy(scale, linear$1());\n    };\n\n    initRange.apply(scale, arguments);\n\n    return linearish(scale);\n  }\n\n  var t0$1 = new Date,\n      t1$1 = new Date;\n\n  function newInterval(floori, offseti, count, field) {\n\n    function interval(date) {\n      return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n    }\n\n    interval.floor = function(date) {\n      return floori(date = new Date(+date)), date;\n    };\n\n    interval.ceil = function(date) {\n      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n    };\n\n    interval.round = function(date) {\n      var d0 = interval(date),\n          d1 = interval.ceil(date);\n      return date - d0 < d1 - date ? d0 : d1;\n    };\n\n    interval.offset = function(date, step) {\n      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n    };\n\n    interval.range = function(start, stop, step) {\n      var range = [], previous;\n      start = interval.ceil(start);\n      step = step == null ? 1 : Math.floor(step);\n      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n      do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n      while (previous < start && start < stop);\n      return range;\n    };\n\n    interval.filter = function(test) {\n      return newInterval(function(date) {\n        if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n      }, function(date, step) {\n        if (date >= date) {\n          if (step < 0) while (++step <= 0) {\n            while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n          } else while (--step >= 0) {\n            while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n          }\n        }\n      });\n    };\n\n    if (count) {\n      interval.count = function(start, end) {\n        t0$1.setTime(+start), t1$1.setTime(+end);\n        floori(t0$1), floori(t1$1);\n        return Math.floor(count(t0$1, t1$1));\n      };\n\n      interval.every = function(step) {\n        step = Math.floor(step);\n        return !isFinite(step) || !(step > 0) ? null\n            : !(step > 1) ? interval\n            : interval.filter(field\n                ? function(d) { return field(d) % step === 0; }\n                : function(d) { return interval.count(0, d) % step === 0; });\n      };\n    }\n\n    return interval;\n  }\n\n  var millisecond = newInterval(function() {\n    // noop\n  }, function(date, step) {\n    date.setTime(+date + step);\n  }, function(start, end) {\n    return end - start;\n  });\n\n  // An optimized implementation for this simple case.\n  millisecond.every = function(k) {\n    k = Math.floor(k);\n    if (!isFinite(k) || !(k > 0)) return null;\n    if (!(k > 1)) return millisecond;\n    return newInterval(function(date) {\n      date.setTime(Math.floor(date / k) * k);\n    }, function(date, step) {\n      date.setTime(+date + step * k);\n    }, function(start, end) {\n      return (end - start) / k;\n    });\n  };\n\n  var durationSecond = 1e3;\n  var durationMinute = 6e4;\n  var durationHour = 36e5;\n  var durationDay = 864e5;\n  var durationWeek = 6048e5;\n\n  var second = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds());\n  }, function(date, step) {\n    date.setTime(+date + step * durationSecond);\n  }, function(start, end) {\n    return (end - start) / durationSecond;\n  }, function(date) {\n    return date.getUTCSeconds();\n  });\n\n  var minute = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getMinutes();\n  });\n\n  var hour = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getHours();\n  });\n\n  var day = newInterval(function(date) {\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n\n  function weekday(i) {\n    return newInterval(function(date) {\n      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setDate(date.getDate() + step * 7);\n    }, function(start, end) {\n      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n    });\n  }\n\n  var sunday = weekday(0);\n  var monday = weekday(1);\n  var tuesday = weekday(2);\n  var wednesday = weekday(3);\n  var thursday = weekday(4);\n  var friday = weekday(5);\n  var saturday = weekday(6);\n\n  var month = newInterval(function(date) {\n    date.setDate(1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setMonth(date.getMonth() + step);\n  }, function(start, end) {\n    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n  }, function(date) {\n    return date.getMonth();\n  });\n\n  var year = newInterval(function(date) {\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step);\n  }, function(start, end) {\n    return end.getFullYear() - start.getFullYear();\n  }, function(date) {\n    return date.getFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  year.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n      date.setMonth(0, 1);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setFullYear(date.getFullYear() + step * k);\n    });\n  };\n\n  var utcMinute = newInterval(function(date) {\n    date.setUTCSeconds(0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getUTCMinutes();\n  });\n\n  var utcHour = newInterval(function(date) {\n    date.setUTCMinutes(0, 0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getUTCHours();\n  });\n\n  var utcDay = newInterval(function(date) {\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step);\n  }, function(start, end) {\n    return (end - start) / durationDay;\n  }, function(date) {\n    return date.getUTCDate() - 1;\n  });\n\n  function utcWeekday(i) {\n    return newInterval(function(date) {\n      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCDate(date.getUTCDate() + step * 7);\n    }, function(start, end) {\n      return (end - start) / durationWeek;\n    });\n  }\n\n  var utcSunday = utcWeekday(0);\n  var utcMonday = utcWeekday(1);\n  var utcTuesday = utcWeekday(2);\n  var utcWednesday = utcWeekday(3);\n  var utcThursday = utcWeekday(4);\n  var utcFriday = utcWeekday(5);\n  var utcSaturday = utcWeekday(6);\n\n  var utcMonth = newInterval(function(date) {\n    date.setUTCDate(1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCMonth(date.getUTCMonth() + step);\n  }, function(start, end) {\n    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n  }, function(date) {\n    return date.getUTCMonth();\n  });\n\n  var utcYear = newInterval(function(date) {\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step);\n  }, function(start, end) {\n    return end.getUTCFullYear() - start.getUTCFullYear();\n  }, function(date) {\n    return date.getUTCFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  utcYear.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n      date.setUTCMonth(0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n    });\n  };\n\n  function localDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n      date.setFullYear(d.y);\n      return date;\n    }\n    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n  }\n\n  function utcDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n      date.setUTCFullYear(d.y);\n      return date;\n    }\n    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n  }\n\n  function newDate(y, m, d) {\n    return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n  }\n\n  function formatLocale$1(locale) {\n    var locale_dateTime = locale.dateTime,\n        locale_date = locale.date,\n        locale_time = locale.time,\n        locale_periods = locale.periods,\n        locale_weekdays = locale.days,\n        locale_shortWeekdays = locale.shortDays,\n        locale_months = locale.months,\n        locale_shortMonths = locale.shortMonths;\n\n    var periodRe = formatRe(locale_periods),\n        periodLookup = formatLookup(locale_periods),\n        weekdayRe = formatRe(locale_weekdays),\n        weekdayLookup = formatLookup(locale_weekdays),\n        shortWeekdayRe = formatRe(locale_shortWeekdays),\n        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n        monthRe = formatRe(locale_months),\n        monthLookup = formatLookup(locale_months),\n        shortMonthRe = formatRe(locale_shortMonths),\n        shortMonthLookup = formatLookup(locale_shortMonths);\n\n    var formats = {\n      \"a\": formatShortWeekday,\n      \"A\": formatWeekday,\n      \"b\": formatShortMonth,\n      \"B\": formatMonth,\n      \"c\": null,\n      \"d\": formatDayOfMonth,\n      \"e\": formatDayOfMonth,\n      \"f\": formatMicroseconds,\n      \"H\": formatHour24,\n      \"I\": formatHour12,\n      \"j\": formatDayOfYear,\n      \"L\": formatMilliseconds,\n      \"m\": formatMonthNumber,\n      \"M\": formatMinutes,\n      \"p\": formatPeriod,\n      \"q\": formatQuarter,\n      \"Q\": formatUnixTimestamp,\n      \"s\": formatUnixTimestampSeconds,\n      \"S\": formatSeconds,\n      \"u\": formatWeekdayNumberMonday,\n      \"U\": formatWeekNumberSunday,\n      \"V\": formatWeekNumberISO,\n      \"w\": formatWeekdayNumberSunday,\n      \"W\": formatWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatYear,\n      \"Y\": formatFullYear,\n      \"Z\": formatZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var utcFormats = {\n      \"a\": formatUTCShortWeekday,\n      \"A\": formatUTCWeekday,\n      \"b\": formatUTCShortMonth,\n      \"B\": formatUTCMonth,\n      \"c\": null,\n      \"d\": formatUTCDayOfMonth,\n      \"e\": formatUTCDayOfMonth,\n      \"f\": formatUTCMicroseconds,\n      \"H\": formatUTCHour24,\n      \"I\": formatUTCHour12,\n      \"j\": formatUTCDayOfYear,\n      \"L\": formatUTCMilliseconds,\n      \"m\": formatUTCMonthNumber,\n      \"M\": formatUTCMinutes,\n      \"p\": formatUTCPeriod,\n      \"q\": formatUTCQuarter,\n      \"Q\": formatUnixTimestamp,\n      \"s\": formatUnixTimestampSeconds,\n      \"S\": formatUTCSeconds,\n      \"u\": formatUTCWeekdayNumberMonday,\n      \"U\": formatUTCWeekNumberSunday,\n      \"V\": formatUTCWeekNumberISO,\n      \"w\": formatUTCWeekdayNumberSunday,\n      \"W\": formatUTCWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatUTCYear,\n      \"Y\": formatUTCFullYear,\n      \"Z\": formatUTCZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var parses = {\n      \"a\": parseShortWeekday,\n      \"A\": parseWeekday,\n      \"b\": parseShortMonth,\n      \"B\": parseMonth,\n      \"c\": parseLocaleDateTime,\n      \"d\": parseDayOfMonth,\n      \"e\": parseDayOfMonth,\n      \"f\": parseMicroseconds,\n      \"H\": parseHour24,\n      \"I\": parseHour24,\n      \"j\": parseDayOfYear,\n      \"L\": parseMilliseconds,\n      \"m\": parseMonthNumber,\n      \"M\": parseMinutes,\n      \"p\": parsePeriod,\n      \"q\": parseQuarter,\n      \"Q\": parseUnixTimestamp,\n      \"s\": parseUnixTimestampSeconds,\n      \"S\": parseSeconds,\n      \"u\": parseWeekdayNumberMonday,\n      \"U\": parseWeekNumberSunday,\n      \"V\": parseWeekNumberISO,\n      \"w\": parseWeekdayNumberSunday,\n      \"W\": parseWeekNumberMonday,\n      \"x\": parseLocaleDate,\n      \"X\": parseLocaleTime,\n      \"y\": parseYear,\n      \"Y\": parseFullYear,\n      \"Z\": parseZone,\n      \"%\": parseLiteralPercent\n    };\n\n    // These recursive directive definitions must be deferred.\n    formats.x = newFormat(locale_date, formats);\n    formats.X = newFormat(locale_time, formats);\n    formats.c = newFormat(locale_dateTime, formats);\n    utcFormats.x = newFormat(locale_date, utcFormats);\n    utcFormats.X = newFormat(locale_time, utcFormats);\n    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n    function newFormat(specifier, formats) {\n      return function(date) {\n        var string = [],\n            i = -1,\n            j = 0,\n            n = specifier.length,\n            c,\n            pad,\n            format;\n\n        if (!(date instanceof Date)) date = new Date(+date);\n\n        while (++i < n) {\n          if (specifier.charCodeAt(i) === 37) {\n            string.push(specifier.slice(j, i));\n            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n            else pad = c === \"e\" ? \" \" : \"0\";\n            if (format = formats[c]) c = format(date, pad);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n\n        string.push(specifier.slice(j, i));\n        return string.join(\"\");\n      };\n    }\n\n    function newParse(specifier, Z) {\n      return function(string) {\n        var d = newDate(1900, undefined, 1),\n            i = parseSpecifier(d, specifier, string += \"\", 0),\n            week, day$1;\n        if (i != string.length) return null;\n\n        // If a UNIX timestamp is specified, return it.\n        if (\"Q\" in d) return new Date(d.Q);\n        if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n        // If this is utcParse, never use the local timezone.\n        if (Z && !(\"Z\" in d)) d.Z = 0;\n\n        // The am-pm flag is 0 for AM, and 1 for PM.\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n        // If the month was not specified, inherit from the quarter.\n        if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n        // Convert day-of-week and week-of-year to day-of-year.\n        if (\"V\" in d) {\n          if (d.V < 1 || d.V > 53) return null;\n          if (!(\"w\" in d)) d.w = 1;\n          if (\"Z\" in d) {\n            week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();\n            week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n            week = utcDay.offset(week, (d.V - 1) * 7);\n            d.y = week.getUTCFullYear();\n            d.m = week.getUTCMonth();\n            d.d = week.getUTCDate() + (d.w + 6) % 7;\n          } else {\n            week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();\n            week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);\n            week = day.offset(week, (d.V - 1) * 7);\n            d.y = week.getFullYear();\n            d.m = week.getMonth();\n            d.d = week.getDate() + (d.w + 6) % 7;\n          }\n        } else if (\"W\" in d || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n          day$1 = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n          d.m = 0;\n          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;\n        }\n\n        // If a time zone is specified, all fields are interpreted as UTC and then\n        // offset according to the specified time zone.\n        if (\"Z\" in d) {\n          d.H += d.Z / 100 | 0;\n          d.M += d.Z % 100;\n          return utcDate(d);\n        }\n\n        // Otherwise, all fields are in local time.\n        return localDate(d);\n      };\n    }\n\n    function parseSpecifier(d, specifier, string, j) {\n      var i = 0,\n          n = specifier.length,\n          m = string.length,\n          c,\n          parse;\n\n      while (i < n) {\n        if (j >= m) return -1;\n        c = specifier.charCodeAt(i++);\n        if (c === 37) {\n          c = specifier.charAt(i++);\n          parse = parses[c in pads ? specifier.charAt(i++) : c];\n          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n\n      return j;\n    }\n\n    function parsePeriod(d, string, i) {\n      var n = periodRe.exec(string.slice(i));\n      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortWeekday(d, string, i) {\n      var n = shortWeekdayRe.exec(string.slice(i));\n      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseWeekday(d, string, i) {\n      var n = weekdayRe.exec(string.slice(i));\n      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortMonth(d, string, i) {\n      var n = shortMonthRe.exec(string.slice(i));\n      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseMonth(d, string, i) {\n      var n = monthRe.exec(string.slice(i));\n      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseLocaleDateTime(d, string, i) {\n      return parseSpecifier(d, locale_dateTime, string, i);\n    }\n\n    function parseLocaleDate(d, string, i) {\n      return parseSpecifier(d, locale_date, string, i);\n    }\n\n    function parseLocaleTime(d, string, i) {\n      return parseSpecifier(d, locale_time, string, i);\n    }\n\n    function formatShortWeekday(d) {\n      return locale_shortWeekdays[d.getDay()];\n    }\n\n    function formatWeekday(d) {\n      return locale_weekdays[d.getDay()];\n    }\n\n    function formatShortMonth(d) {\n      return locale_shortMonths[d.getMonth()];\n    }\n\n    function formatMonth(d) {\n      return locale_months[d.getMonth()];\n    }\n\n    function formatPeriod(d) {\n      return locale_periods[+(d.getHours() >= 12)];\n    }\n\n    function formatQuarter(d) {\n      return 1 + ~~(d.getMonth() / 3);\n    }\n\n    function formatUTCShortWeekday(d) {\n      return locale_shortWeekdays[d.getUTCDay()];\n    }\n\n    function formatUTCWeekday(d) {\n      return locale_weekdays[d.getUTCDay()];\n    }\n\n    function formatUTCShortMonth(d) {\n      return locale_shortMonths[d.getUTCMonth()];\n    }\n\n    function formatUTCMonth(d) {\n      return locale_months[d.getUTCMonth()];\n    }\n\n    function formatUTCPeriod(d) {\n      return locale_periods[+(d.getUTCHours() >= 12)];\n    }\n\n    function formatUTCQuarter(d) {\n      return 1 + ~~(d.getUTCMonth() / 3);\n    }\n\n    return {\n      format: function(specifier) {\n        var f = newFormat(specifier += \"\", formats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      parse: function(specifier) {\n        var p = newParse(specifier += \"\", false);\n        p.toString = function() { return specifier; };\n        return p;\n      },\n      utcFormat: function(specifier) {\n        var f = newFormat(specifier += \"\", utcFormats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      utcParse: function(specifier) {\n        var p = newParse(specifier += \"\", true);\n        p.toString = function() { return specifier; };\n        return p;\n      }\n    };\n  }\n\n  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n      numberRe = /^\\s*\\d+/, // note: ignores next directive\n      percentRe = /^%/,\n      requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n  function pad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\",\n        string = (sign ? -value : value) + \"\",\n        length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n\n  function requote(s) {\n    return s.replace(requoteRe, \"\\\\$&\");\n  }\n\n  function formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n  }\n\n  function formatLookup(names) {\n    var map = {}, i = -1, n = names.length;\n    while (++i < n) map[names[i].toLowerCase()] = i;\n    return map;\n  }\n\n  function parseWeekdayNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.w = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekdayNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.u = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.U = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberISO(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.V = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.W = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseFullYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 4));\n    return n ? (d.y = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n  }\n\n  function parseZone(d, string, i) {\n    var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n  }\n\n  function parseQuarter(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n  }\n\n  function parseMonthNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n  }\n\n  function parseDayOfMonth(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseDayOfYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseHour24(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.H = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMinutes(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.M = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.S = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMilliseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.L = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMicroseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 6));\n    return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n  }\n\n  function parseLiteralPercent(d, string, i) {\n    var n = percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n\n  function parseUnixTimestamp(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.Q = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseUnixTimestampSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.s = +n[0], i + n[0].length) : -1;\n  }\n\n  function formatDayOfMonth(d, p) {\n    return pad(d.getDate(), p, 2);\n  }\n\n  function formatHour24(d, p) {\n    return pad(d.getHours(), p, 2);\n  }\n\n  function formatHour12(d, p) {\n    return pad(d.getHours() % 12 || 12, p, 2);\n  }\n\n  function formatDayOfYear(d, p) {\n    return pad(1 + day.count(year(d), d), p, 3);\n  }\n\n  function formatMilliseconds(d, p) {\n    return pad(d.getMilliseconds(), p, 3);\n  }\n\n  function formatMicroseconds(d, p) {\n    return formatMilliseconds(d, p) + \"000\";\n  }\n\n  function formatMonthNumber(d, p) {\n    return pad(d.getMonth() + 1, p, 2);\n  }\n\n  function formatMinutes(d, p) {\n    return pad(d.getMinutes(), p, 2);\n  }\n\n  function formatSeconds(d, p) {\n    return pad(d.getSeconds(), p, 2);\n  }\n\n  function formatWeekdayNumberMonday(d) {\n    var day = d.getDay();\n    return day === 0 ? 7 : day;\n  }\n\n  function formatWeekNumberSunday(d, p) {\n    return pad(sunday.count(year(d) - 1, d), p, 2);\n  }\n\n  function formatWeekNumberISO(d, p) {\n    var day = d.getDay();\n    d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n    return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n  }\n\n  function formatWeekdayNumberSunday(d) {\n    return d.getDay();\n  }\n\n  function formatWeekNumberMonday(d, p) {\n    return pad(monday.count(year(d) - 1, d), p, 2);\n  }\n\n  function formatYear(d, p) {\n    return pad(d.getFullYear() % 100, p, 2);\n  }\n\n  function formatFullYear(d, p) {\n    return pad(d.getFullYear() % 10000, p, 4);\n  }\n\n  function formatZone(d) {\n    var z = d.getTimezoneOffset();\n    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n        + pad(z / 60 | 0, \"0\", 2)\n        + pad(z % 60, \"0\", 2);\n  }\n\n  function formatUTCDayOfMonth(d, p) {\n    return pad(d.getUTCDate(), p, 2);\n  }\n\n  function formatUTCHour24(d, p) {\n    return pad(d.getUTCHours(), p, 2);\n  }\n\n  function formatUTCHour12(d, p) {\n    return pad(d.getUTCHours() % 12 || 12, p, 2);\n  }\n\n  function formatUTCDayOfYear(d, p) {\n    return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n  }\n\n  function formatUTCMilliseconds(d, p) {\n    return pad(d.getUTCMilliseconds(), p, 3);\n  }\n\n  function formatUTCMicroseconds(d, p) {\n    return formatUTCMilliseconds(d, p) + \"000\";\n  }\n\n  function formatUTCMonthNumber(d, p) {\n    return pad(d.getUTCMonth() + 1, p, 2);\n  }\n\n  function formatUTCMinutes(d, p) {\n    return pad(d.getUTCMinutes(), p, 2);\n  }\n\n  function formatUTCSeconds(d, p) {\n    return pad(d.getUTCSeconds(), p, 2);\n  }\n\n  function formatUTCWeekdayNumberMonday(d) {\n    var dow = d.getUTCDay();\n    return dow === 0 ? 7 : dow;\n  }\n\n  function formatUTCWeekNumberSunday(d, p) {\n    return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n  }\n\n  function formatUTCWeekNumberISO(d, p) {\n    var day = d.getUTCDay();\n    d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n    return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n  }\n\n  function formatUTCWeekdayNumberSunday(d) {\n    return d.getUTCDay();\n  }\n\n  function formatUTCWeekNumberMonday(d, p) {\n    return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n  }\n\n  function formatUTCYear(d, p) {\n    return pad(d.getUTCFullYear() % 100, p, 2);\n  }\n\n  function formatUTCFullYear(d, p) {\n    return pad(d.getUTCFullYear() % 10000, p, 4);\n  }\n\n  function formatUTCZone() {\n    return \"+0000\";\n  }\n\n  function formatLiteralPercent() {\n    return \"%\";\n  }\n\n  function formatUnixTimestamp(d) {\n    return +d;\n  }\n\n  function formatUnixTimestampSeconds(d) {\n    return Math.floor(+d / 1000);\n  }\n\n  var locale$1;\n  var timeFormat;\n  var timeParse;\n  var utcFormat;\n  var utcParse;\n\n  defaultLocale$1({\n    dateTime: \"%x, %X\",\n    date: \"%-m/%-d/%Y\",\n    time: \"%-I:%M:%S %p\",\n    periods: [\"AM\", \"PM\"],\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n  });\n\n  function defaultLocale$1(definition) {\n    locale$1 = formatLocale$1(definition);\n    timeFormat = locale$1.format;\n    timeParse = locale$1.parse;\n    utcFormat = locale$1.utcFormat;\n    utcParse = locale$1.utcParse;\n    return locale$1;\n  }\n\n  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n  function formatIsoNative(date) {\n    return date.toISOString();\n  }\n\n  var formatIso = Date.prototype.toISOString\n      ? formatIsoNative\n      : utcFormat(isoSpecifier);\n\n  function parseIsoNative(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  }\n\n  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n      ? parseIsoNative\n      : utcParse(isoSpecifier);\n\n  var noop = {value: function() {}};\n\n  function dispatch() {\n    for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n      if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n      _[t] = [];\n    }\n    return new Dispatch(_);\n  }\n\n  function Dispatch(_) {\n    this._ = _;\n  }\n\n  function parseTypenames(typenames, types) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n      return {type: t, name: name};\n    });\n  }\n\n  Dispatch.prototype = dispatch.prototype = {\n    constructor: Dispatch,\n    on: function(typename, callback) {\n      var _ = this._,\n          T = parseTypenames(typename + \"\", _),\n          t,\n          i = -1,\n          n = T.length;\n\n      // If no callback was specified, return the callback of the given type and name.\n      if (arguments.length < 2) {\n        while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n        return;\n      }\n\n      // If a type was specified, set the callback for the given type and name.\n      // Otherwise, if a null callback was specified, remove callbacks of the given name.\n      if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n      while (++i < n) {\n        if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n        else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n      }\n\n      return this;\n    },\n    copy: function() {\n      var copy = {}, _ = this._;\n      for (var t in _) copy[t] = _[t].slice();\n      return new Dispatch(copy);\n    },\n    call: function(type, that) {\n      if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    },\n    apply: function(type, that, args) {\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    }\n  };\n\n  function get(type, name) {\n    for (var i = 0, n = type.length, c; i < n; ++i) {\n      if ((c = type[i]).name === name) {\n        return c.value;\n      }\n    }\n  }\n\n  function set(type, name, callback) {\n    for (var i = 0, n = type.length; i < n; ++i) {\n      if (type[i].name === name) {\n        type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n        break;\n      }\n    }\n    if (callback != null) type.push({name: name, value: callback});\n    return type;\n  }\n\n  var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n  var namespaces = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: xhtml,\n    xlink: \"http://www.w3.org/1999/xlink\",\n    xml: \"http://www.w3.org/XML/1998/namespace\",\n    xmlns: \"http://www.w3.org/2000/xmlns/\"\n  };\n\n  function namespace(name) {\n    var prefix = name += \"\", i = prefix.indexOf(\":\");\n    if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n    return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n  }\n\n  function creatorInherit(name) {\n    return function() {\n      var document = this.ownerDocument,\n          uri = this.namespaceURI;\n      return uri === xhtml && document.documentElement.namespaceURI === xhtml\n          ? document.createElement(name)\n          : document.createElementNS(uri, name);\n    };\n  }\n\n  function creatorFixed(fullname) {\n    return function() {\n      return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n    };\n  }\n\n  function creator(name) {\n    var fullname = namespace(name);\n    return (fullname.local\n        ? creatorFixed\n        : creatorInherit)(fullname);\n  }\n\n  function none() {}\n\n  function selector(selector) {\n    return selector == null ? none : function() {\n      return this.querySelector(selector);\n    };\n  }\n\n  function selection_select(select) {\n    if (typeof select !== \"function\") select = selector(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          subgroup[i] = subnode;\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function empty() {\n    return [];\n  }\n\n  function selectorAll(selector) {\n    return selector == null ? empty : function() {\n      return this.querySelectorAll(selector);\n    };\n  }\n\n  function selection_selectAll(select) {\n    if (typeof select !== \"function\") select = selectorAll(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          subgroups.push(select.call(node, node.__data__, i, group));\n          parents.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, parents);\n  }\n\n  function matcher(selector) {\n    return function() {\n      return this.matches(selector);\n    };\n  }\n\n  function selection_filter(match) {\n    if (typeof match !== \"function\") match = matcher(match);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n          subgroup.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function sparse(update) {\n    return new Array(update.length);\n  }\n\n  function selection_enter() {\n    return new Selection(this._enter || this._groups.map(sparse), this._parents);\n  }\n\n  function EnterNode(parent, datum) {\n    this.ownerDocument = parent.ownerDocument;\n    this.namespaceURI = parent.namespaceURI;\n    this._next = null;\n    this._parent = parent;\n    this.__data__ = datum;\n  }\n\n  EnterNode.prototype = {\n    constructor: EnterNode,\n    appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n    insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n    querySelector: function(selector) { return this._parent.querySelector(selector); },\n    querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n  };\n\n  function constant$2(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n  function bindIndex(parent, group, enter, update, exit, data) {\n    var i = 0,\n        node,\n        groupLength = group.length,\n        dataLength = data.length;\n\n    // Put any non-null nodes that fit into update.\n    // Put any null nodes into enter.\n    // Put any remaining data into enter.\n    for (; i < dataLength; ++i) {\n      if (node = group[i]) {\n        node.__data__ = data[i];\n        update[i] = node;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Put any non-null nodes that don’t fit into exit.\n    for (; i < groupLength; ++i) {\n      if (node = group[i]) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function bindKey(parent, group, enter, update, exit, data, key) {\n    var i,\n        node,\n        nodeByKeyValue = {},\n        groupLength = group.length,\n        dataLength = data.length,\n        keyValues = new Array(groupLength),\n        keyValue;\n\n    // Compute the key for each node.\n    // If multiple nodes have the same key, the duplicates are added to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if (node = group[i]) {\n        keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n        if (keyValue in nodeByKeyValue) {\n          exit[i] = node;\n        } else {\n          nodeByKeyValue[keyValue] = node;\n        }\n      }\n    }\n\n    // Compute the key for each datum.\n    // If there a node associated with this key, join and add it to update.\n    // If there is not (or the key is a duplicate), add it to enter.\n    for (i = 0; i < dataLength; ++i) {\n      keyValue = keyPrefix + key.call(parent, data[i], i, data);\n      if (node = nodeByKeyValue[keyValue]) {\n        update[i] = node;\n        node.__data__ = data[i];\n        nodeByKeyValue[keyValue] = null;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Add any remaining nodes that were not bound to data to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function selection_data(value, key) {\n    if (!value) {\n      data = new Array(this.size()), j = -1;\n      this.each(function(d) { data[++j] = d; });\n      return data;\n    }\n\n    var bind = key ? bindKey : bindIndex,\n        parents = this._parents,\n        groups = this._groups;\n\n    if (typeof value !== \"function\") value = constant$2(value);\n\n    for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n      var parent = parents[j],\n          group = groups[j],\n          groupLength = group.length,\n          data = value.call(parent, parent && parent.__data__, j, parents),\n          dataLength = data.length,\n          enterGroup = enter[j] = new Array(dataLength),\n          updateGroup = update[j] = new Array(dataLength),\n          exitGroup = exit[j] = new Array(groupLength);\n\n      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n      // Now connect the enter nodes to their following update node, such that\n      // appendChild can insert the materialized enter node before this node,\n      // rather than at the end of the parent node.\n      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n        if (previous = enterGroup[i0]) {\n          if (i0 >= i1) i1 = i0 + 1;\n          while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n          previous._next = next || null;\n        }\n      }\n    }\n\n    update = new Selection(update, parents);\n    update._enter = enter;\n    update._exit = exit;\n    return update;\n  }\n\n  function selection_exit() {\n    return new Selection(this._exit || this._groups.map(sparse), this._parents);\n  }\n\n  function selection_join(onenter, onupdate, onexit) {\n    var enter = this.enter(), update = this, exit = this.exit();\n    enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n    if (onupdate != null) update = onupdate(update);\n    if (onexit == null) exit.remove(); else onexit(exit);\n    return enter && update ? enter.merge(update).order() : update;\n  }\n\n  function selection_merge(selection) {\n\n    for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group0[i] || group1[i]) {\n          merge[i] = node;\n        }\n      }\n    }\n\n    for (; j < m0; ++j) {\n      merges[j] = groups0[j];\n    }\n\n    return new Selection(merges, this._parents);\n  }\n\n  function selection_order() {\n\n    for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n      for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n        if (node = group[i]) {\n          if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function selection_sort(compare) {\n    if (!compare) compare = ascending$1;\n\n    function compareNode(a, b) {\n      return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n    }\n\n    for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          sortgroup[i] = node;\n        }\n      }\n      sortgroup.sort(compareNode);\n    }\n\n    return new Selection(sortgroups, this._parents).order();\n  }\n\n  function ascending$1(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function selection_call() {\n    var callback = arguments[0];\n    arguments[0] = this;\n    callback.apply(null, arguments);\n    return this;\n  }\n\n  function selection_nodes() {\n    var nodes = new Array(this.size()), i = -1;\n    this.each(function() { nodes[++i] = this; });\n    return nodes;\n  }\n\n  function selection_node() {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n\n    return null;\n  }\n\n  function selection_size() {\n    var size = 0;\n    this.each(function() { ++size; });\n    return size;\n  }\n\n  function selection_empty() {\n    return !this.node();\n  }\n\n  function selection_each(callback) {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n        if (node = group[i]) callback.call(node, node.__data__, i, group);\n      }\n    }\n\n    return this;\n  }\n\n  function attrRemove(name) {\n    return function() {\n      this.removeAttribute(name);\n    };\n  }\n\n  function attrRemoveNS(fullname) {\n    return function() {\n      this.removeAttributeNS(fullname.space, fullname.local);\n    };\n  }\n\n  function attrConstant(name, value) {\n    return function() {\n      this.setAttribute(name, value);\n    };\n  }\n\n  function attrConstantNS(fullname, value) {\n    return function() {\n      this.setAttributeNS(fullname.space, fullname.local, value);\n    };\n  }\n\n  function attrFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttribute(name);\n      else this.setAttribute(name, v);\n    };\n  }\n\n  function attrFunctionNS(fullname, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n      else this.setAttributeNS(fullname.space, fullname.local, v);\n    };\n  }\n\n  function selection_attr(name, value) {\n    var fullname = namespace(name);\n\n    if (arguments.length < 2) {\n      var node = this.node();\n      return fullname.local\n          ? node.getAttributeNS(fullname.space, fullname.local)\n          : node.getAttribute(fullname);\n    }\n\n    return this.each((value == null\n        ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n        ? (fullname.local ? attrFunctionNS : attrFunction)\n        : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n  }\n\n  function defaultView(node) {\n    return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n        || (node.document && node) // node is a Window\n        || node.defaultView; // node is a Document\n  }\n\n  function styleRemove(name) {\n    return function() {\n      this.style.removeProperty(name);\n    };\n  }\n\n  function styleConstant(name, value, priority) {\n    return function() {\n      this.style.setProperty(name, value, priority);\n    };\n  }\n\n  function styleFunction(name, value, priority) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.style.removeProperty(name);\n      else this.style.setProperty(name, v, priority);\n    };\n  }\n\n  function selection_style(name, value, priority) {\n    return arguments.length > 1\n        ? this.each((value == null\n              ? styleRemove : typeof value === \"function\"\n              ? styleFunction\n              : styleConstant)(name, value, priority == null ? \"\" : priority))\n        : styleValue(this.node(), name);\n  }\n\n  function styleValue(node, name) {\n    return node.style.getPropertyValue(name)\n        || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n  }\n\n  function propertyRemove(name) {\n    return function() {\n      delete this[name];\n    };\n  }\n\n  function propertyConstant(name, value) {\n    return function() {\n      this[name] = value;\n    };\n  }\n\n  function propertyFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) delete this[name];\n      else this[name] = v;\n    };\n  }\n\n  function selection_property(name, value) {\n    return arguments.length > 1\n        ? this.each((value == null\n            ? propertyRemove : typeof value === \"function\"\n            ? propertyFunction\n            : propertyConstant)(name, value))\n        : this.node()[name];\n  }\n\n  function classArray(string) {\n    return string.trim().split(/^|\\s+/);\n  }\n\n  function classList(node) {\n    return node.classList || new ClassList(node);\n  }\n\n  function ClassList(node) {\n    this._node = node;\n    this._names = classArray(node.getAttribute(\"class\") || \"\");\n  }\n\n  ClassList.prototype = {\n    add: function(name) {\n      var i = this._names.indexOf(name);\n      if (i < 0) {\n        this._names.push(name);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    remove: function(name) {\n      var i = this._names.indexOf(name);\n      if (i >= 0) {\n        this._names.splice(i, 1);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    contains: function(name) {\n      return this._names.indexOf(name) >= 0;\n    }\n  };\n\n  function classedAdd(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.add(names[i]);\n  }\n\n  function classedRemove(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.remove(names[i]);\n  }\n\n  function classedTrue(names) {\n    return function() {\n      classedAdd(this, names);\n    };\n  }\n\n  function classedFalse(names) {\n    return function() {\n      classedRemove(this, names);\n    };\n  }\n\n  function classedFunction(names, value) {\n    return function() {\n      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n    };\n  }\n\n  function selection_classed(name, value) {\n    var names = classArray(name + \"\");\n\n    if (arguments.length < 2) {\n      var list = classList(this.node()), i = -1, n = names.length;\n      while (++i < n) if (!list.contains(names[i])) return false;\n      return true;\n    }\n\n    return this.each((typeof value === \"function\"\n        ? classedFunction : value\n        ? classedTrue\n        : classedFalse)(names, value));\n  }\n\n  function textRemove() {\n    this.textContent = \"\";\n  }\n\n  function textConstant(value) {\n    return function() {\n      this.textContent = value;\n    };\n  }\n\n  function textFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_text(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? textRemove : (typeof value === \"function\"\n            ? textFunction\n            : textConstant)(value))\n        : this.node().textContent;\n  }\n\n  function htmlRemove() {\n    this.innerHTML = \"\";\n  }\n\n  function htmlConstant(value) {\n    return function() {\n      this.innerHTML = value;\n    };\n  }\n\n  function htmlFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_html(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? htmlRemove : (typeof value === \"function\"\n            ? htmlFunction\n            : htmlConstant)(value))\n        : this.node().innerHTML;\n  }\n\n  function raise() {\n    if (this.nextSibling) this.parentNode.appendChild(this);\n  }\n\n  function selection_raise() {\n    return this.each(raise);\n  }\n\n  function lower() {\n    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n  }\n\n  function selection_lower() {\n    return this.each(lower);\n  }\n\n  function selection_append(name) {\n    var create = typeof name === \"function\" ? name : creator(name);\n    return this.select(function() {\n      return this.appendChild(create.apply(this, arguments));\n    });\n  }\n\n  function constantNull() {\n    return null;\n  }\n\n  function selection_insert(name, before) {\n    var create = typeof name === \"function\" ? name : creator(name),\n        select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n    return this.select(function() {\n      return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n    });\n  }\n\n  function remove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n\n  function selection_remove() {\n    return this.each(remove);\n  }\n\n  function selection_cloneShallow() {\n    var clone = this.cloneNode(false), parent = this.parentNode;\n    return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n  }\n\n  function selection_cloneDeep() {\n    var clone = this.cloneNode(true), parent = this.parentNode;\n    return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n  }\n\n  function selection_clone(deep) {\n    return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n  }\n\n  function selection_datum(value) {\n    return arguments.length\n        ? this.property(\"__data__\", value)\n        : this.node().__data__;\n  }\n\n  var filterEvents = {};\n\n  var event = null;\n\n  if (typeof document !== \"undefined\") {\n    var element = document.documentElement;\n    if (!(\"onmouseenter\" in element)) {\n      filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n    }\n  }\n\n  function filterContextListener(listener, index, group) {\n    listener = contextListener(listener, index, group);\n    return function(event) {\n      var related = event.relatedTarget;\n      if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n        listener.call(this, event);\n      }\n    };\n  }\n\n  function contextListener(listener, index, group) {\n    return function(event1) {\n      var event0 = event; // Events can be reentrant (e.g., focus).\n      event = event1;\n      try {\n        listener.call(this, this.__data__, index, group);\n      } finally {\n        event = event0;\n      }\n    };\n  }\n\n  function parseTypenames$1(typenames) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      return {type: t, name: name};\n    });\n  }\n\n  function onRemove(typename) {\n    return function() {\n      var on = this.__on;\n      if (!on) return;\n      for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n        if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n        } else {\n          on[++i] = o;\n        }\n      }\n      if (++i) on.length = i;\n      else delete this.__on;\n    };\n  }\n\n  function onAdd(typename, value, capture) {\n    var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n    return function(d, i, group) {\n      var on = this.__on, o, listener = wrap(value, i, group);\n      if (on) for (var j = 0, m = on.length; j < m; ++j) {\n        if ((o = on[j]).type === typename.type && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n          this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n          o.value = value;\n          return;\n        }\n      }\n      this.addEventListener(typename.type, listener, capture);\n      o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n      if (!on) this.__on = [o];\n      else on.push(o);\n    };\n  }\n\n  function selection_on(typename, value, capture) {\n    var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n    if (arguments.length < 2) {\n      var on = this.node().__on;\n      if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n        for (i = 0, o = on[j]; i < n; ++i) {\n          if ((t = typenames[i]).type === o.type && t.name === o.name) {\n            return o.value;\n          }\n        }\n      }\n      return;\n    }\n\n    on = value ? onAdd : onRemove;\n    if (capture == null) capture = false;\n    for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n    return this;\n  }\n\n  function customEvent(event1, listener, that, args) {\n    var event0 = event;\n    event1.sourceEvent = event;\n    event = event1;\n    try {\n      return listener.apply(that, args);\n    } finally {\n      event = event0;\n    }\n  }\n\n  function dispatchEvent(node, type, params) {\n    var window = defaultView(node),\n        event = window.CustomEvent;\n\n    if (typeof event === \"function\") {\n      event = new event(type, params);\n    } else {\n      event = window.document.createEvent(\"Event\");\n      if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n      else event.initEvent(type, false, false);\n    }\n\n    node.dispatchEvent(event);\n  }\n\n  function dispatchConstant(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params);\n    };\n  }\n\n  function dispatchFunction(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params.apply(this, arguments));\n    };\n  }\n\n  function selection_dispatch(type, params) {\n    return this.each((typeof params === \"function\"\n        ? dispatchFunction\n        : dispatchConstant)(type, params));\n  }\n\n  var root = [null];\n\n  function Selection(groups, parents) {\n    this._groups = groups;\n    this._parents = parents;\n  }\n\n  function selection() {\n    return new Selection([[document.documentElement]], root);\n  }\n\n  Selection.prototype = selection.prototype = {\n    constructor: Selection,\n    select: selection_select,\n    selectAll: selection_selectAll,\n    filter: selection_filter,\n    data: selection_data,\n    enter: selection_enter,\n    exit: selection_exit,\n    join: selection_join,\n    merge: selection_merge,\n    order: selection_order,\n    sort: selection_sort,\n    call: selection_call,\n    nodes: selection_nodes,\n    node: selection_node,\n    size: selection_size,\n    empty: selection_empty,\n    each: selection_each,\n    attr: selection_attr,\n    style: selection_style,\n    property: selection_property,\n    classed: selection_classed,\n    text: selection_text,\n    html: selection_html,\n    raise: selection_raise,\n    lower: selection_lower,\n    append: selection_append,\n    insert: selection_insert,\n    remove: selection_remove,\n    clone: selection_clone,\n    datum: selection_datum,\n    on: selection_on,\n    dispatch: selection_dispatch\n  };\n\n  function select(selector) {\n    return typeof selector === \"string\"\n        ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n        : new Selection([[selector]], root);\n  }\n\n  function sourceEvent() {\n    var current = event, source;\n    while (source = current.sourceEvent) current = source;\n    return current;\n  }\n\n  function point(node, event) {\n    var svg = node.ownerSVGElement || node;\n\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n\n    var rect = node.getBoundingClientRect();\n    return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n  }\n\n  function mouse(node) {\n    var event = sourceEvent();\n    if (event.changedTouches) event = event.changedTouches[0];\n    return point(node, event);\n  }\n\n  function touch(node, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n    for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return point(node, touch);\n      }\n    }\n\n    return null;\n  }\n\n  function nopropagation() {\n    event.stopImmediatePropagation();\n  }\n\n  function noevent() {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n\n  function nodrag(view) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", noevent, true);\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", noevent, true);\n    } else {\n      root.__noselect = root.style.MozUserSelect;\n      root.style.MozUserSelect = \"none\";\n    }\n  }\n\n  function yesdrag(view, noclick) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", null);\n    if (noclick) {\n      selection.on(\"click.drag\", noevent, true);\n      setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n    }\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", null);\n    } else {\n      root.style.MozUserSelect = root.__noselect;\n      delete root.__noselect;\n    }\n  }\n\n  function constant$3(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n    this.target = target;\n    this.type = type;\n    this.subject = subject;\n    this.identifier = id;\n    this.active = active;\n    this.x = x;\n    this.y = y;\n    this.dx = dx;\n    this.dy = dy;\n    this._ = dispatch;\n  }\n\n  DragEvent.prototype.on = function() {\n    var value = this._.on.apply(this._, arguments);\n    return value === this._ ? this : value;\n  };\n\n  // Ignore right-click, since that should open the context menu.\n  function defaultFilter() {\n    return !event.ctrlKey && !event.button;\n  }\n\n  function defaultContainer() {\n    return this.parentNode;\n  }\n\n  function defaultSubject(d) {\n    return d == null ? {x: event.x, y: event.y} : d;\n  }\n\n  function defaultTouchable() {\n    return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n  }\n\n  function drag() {\n    var filter = defaultFilter,\n        container = defaultContainer,\n        subject = defaultSubject,\n        touchable = defaultTouchable,\n        gestures = {},\n        listeners = dispatch(\"start\", \"drag\", \"end\"),\n        active = 0,\n        mousedownx,\n        mousedowny,\n        mousemoving,\n        touchending,\n        clickDistance2 = 0;\n\n    function drag(selection) {\n      selection\n          .on(\"mousedown.drag\", mousedowned)\n        .filter(touchable)\n          .on(\"touchstart.drag\", touchstarted)\n          .on(\"touchmove.drag\", touchmoved)\n          .on(\"touchend.drag touchcancel.drag\", touchended)\n          .style(\"touch-action\", \"none\")\n          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n    }\n\n    function mousedowned() {\n      if (touchending || !filter.apply(this, arguments)) return;\n      var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n      if (!gesture) return;\n      select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n      nodrag(event.view);\n      nopropagation();\n      mousemoving = false;\n      mousedownx = event.clientX;\n      mousedowny = event.clientY;\n      gesture(\"start\");\n    }\n\n    function mousemoved() {\n      noevent();\n      if (!mousemoving) {\n        var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n        mousemoving = dx * dx + dy * dy > clickDistance2;\n      }\n      gestures.mouse(\"drag\");\n    }\n\n    function mouseupped() {\n      select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n      yesdrag(event.view, mousemoving);\n      noevent();\n      gestures.mouse(\"end\");\n    }\n\n    function touchstarted() {\n      if (!filter.apply(this, arguments)) return;\n      var touches = event.changedTouches,\n          c = container.apply(this, arguments),\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n          nopropagation();\n          gesture(\"start\");\n        }\n      }\n    }\n\n    function touchmoved() {\n      var touches = event.changedTouches,\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          noevent();\n          gesture(\"drag\");\n        }\n      }\n    }\n\n    function touchended() {\n      var touches = event.changedTouches,\n          n = touches.length, i, gesture;\n\n      if (touchending) clearTimeout(touchending);\n      touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          nopropagation();\n          gesture(\"end\");\n        }\n      }\n    }\n\n    function beforestart(id, container, point, that, args) {\n      var p = point(container, id), s, dx, dy,\n          sublisteners = listeners.copy();\n\n      if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n        if ((event.subject = s = subject.apply(that, args)) == null) return false;\n        dx = s.x - p[0] || 0;\n        dy = s.y - p[1] || 0;\n        return true;\n      })) return;\n\n      return function gesture(type) {\n        var p0 = p, n;\n        switch (type) {\n          case \"start\": gestures[id] = gesture, n = active++; break;\n          case \"end\": delete gestures[id], --active; // nobreak\n          case \"drag\": p = point(container, id), n = active; break;\n        }\n        customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n      };\n    }\n\n    drag.filter = function(_) {\n      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : filter;\n    };\n\n    drag.container = function(_) {\n      return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$3(_), drag) : container;\n    };\n\n    drag.subject = function(_) {\n      return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$3(_), drag) : subject;\n    };\n\n    drag.touchable = function(_) {\n      return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : touchable;\n    };\n\n    drag.on = function() {\n      var value = listeners.on.apply(listeners, arguments);\n      return value === listeners ? drag : value;\n    };\n\n    drag.clickDistance = function(_) {\n      return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n    };\n\n    return drag;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$a = Template('d-slider', `\n<style>\n  :host {\n    position: relative;\n    display: inline-block;\n  }\n\n  :host(:focus) {\n    outline: none;\n  }\n\n  .background {\n    padding: 9px 0;\n    color: white;\n    position: relative;\n  }\n\n  .track {\n    height: 3px;\n    width: 100%;\n    border-radius: 2px;\n    background-color: hsla(0, 0%, 0%, 0.2);\n  }\n\n  .track-fill {\n    position: absolute;\n    top: 9px;\n    height: 3px;\n    border-radius: 4px;\n    background-color: hsl(24, 100%, 50%);\n  }\n\n  .knob-container {\n    position: absolute;\n    top: 10px;\n  }\n\n  .knob {\n    position: absolute;\n    top: -6px;\n    left: -6px;\n    width: 13px;\n    height: 13px;\n    background-color: hsl(24, 100%, 50%);\n    border-radius: 50%;\n    transition-property: transform;\n    transition-duration: 0.18s;\n    transition-timing-function: ease;\n  }\n  .mousedown .knob {\n    transform: scale(1.5);\n  }\n\n  .knob-highlight {\n    position: absolute;\n    top: -6px;\n    left: -6px;\n    width: 13px;\n    height: 13px;\n    background-color: hsla(0, 0%, 0%, 0.1);\n    border-radius: 50%;\n    transition-property: transform;\n    transition-duration: 0.18s;\n    transition-timing-function: ease;\n  }\n\n  .focus .knob-highlight {\n    transform: scale(2);\n  }\n\n  .ticks {\n    position: absolute;\n    top: 16px;\n    height: 4px;\n    width: 100%;\n    z-index: -1;\n  }\n\n  .ticks .tick {\n    position: absolute;\n    height: 100%;\n    border-left: 1px solid hsla(0, 0%, 0%, 0.2);\n  }\n\n</style>\n\n  <div class='background'>\n    <div class='track'></div>\n    <div class='track-fill'></div>\n    <div class='knob-container'>\n      <div class='knob-highlight'></div>\n      <div class='knob'></div>\n    </div>\n    <div class='ticks'></div>\n  </div>\n`);\n\n  // ARIA\n  // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.\n  // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.\n\n  const keyCodes = {\n    left: 37,\n    up: 38,\n    right: 39,\n    down: 40,\n    pageUp: 33,\n    pageDown: 34,\n    end: 35,\n    home: 36\n  };\n\n  class Slider extends T$a(HTMLElement) {\n\n\n    connectedCallback() {\n      this.connected = true;\n      this.setAttribute('role', 'slider');\n      // Makes the element tab-able.\n      if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', 0); }\n\n      // Keeps track of keyboard vs. mouse interactions for focus rings\n      this.mouseEvent = false;\n\n      // Handles to shadow DOM elements\n      this.knob = this.root.querySelector('.knob-container');\n      this.background = this.root.querySelector('.background');\n      this.trackFill = this.root.querySelector('.track-fill');\n      this.track = this.root.querySelector('.track');\n\n      // Default values for attributes\n      this.min = this.min ? this.min : 0;\n      this.max = this.max ? this.max : 100;\n      this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);\n\n      this.origin = this.origin !== undefined ? this.origin : this.min;\n      this.step = this.step ? this.step : 1;\n      this.update(this.value ? this.value : 0);\n\n      this.ticks = this.ticks ? this.ticks : false;\n      this.renderTicks();\n\n      this.drag = drag()\n        .container(this.background)\n        .on('start', () => {\n          this.mouseEvent = true;\n          this.background.classList.add('mousedown');\n          this.changeValue = this.value;\n          this.dragUpdate();\n        })\n        .on('drag', () => {\n          this.dragUpdate();\n        })\n        .on('end', () => {\n          this.mouseEvent = false;\n          this.background.classList.remove('mousedown');\n          this.dragUpdate();\n          if (this.changeValue !== this.value) this.dispatchChange();\n          this.changeValue = this.value;\n        });\n      this.drag(select(this.background));\n\n      this.addEventListener('focusin', () => {\n        if(!this.mouseEvent) {\n          this.background.classList.add('focus');\n        }\n      });\n      this.addEventListener('focusout', () => {\n        this.background.classList.remove('focus');\n      });\n      this.addEventListener('keydown', this.onKeyDown);\n\n    }\n\n    static get observedAttributes() {return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels']; }\n\n    attributeChangedCallback(attr, oldValue, newValue) {\n      if (isNaN(newValue) || newValue === undefined || newValue === null) return;\n      if (attr == 'min') {\n        this.min = +newValue;\n        this.setAttribute('aria-valuemin', this.min);\n      }\n      if (attr == 'max') {\n        this.max = +newValue;\n        this.setAttribute('aria-valuemax', this.max);\n      }\n      if (attr == 'value') {\n        this.update(+newValue);\n      }\n      if (attr == 'origin') {\n        this.origin = +newValue;\n        // this.update(this.value);\n      }\n      if (attr == 'step') {\n        if (newValue > 0) {\n          this.step = +newValue;\n        }\n      }\n      if (attr == 'ticks') {\n        this.ticks = (newValue === '' ? true : newValue);\n      }\n    }\n\n    onKeyDown(event) {\n      this.changeValue = this.value;\n      let stopPropagation = false;\n      switch (event.keyCode) {\n      case keyCodes.left:\n      case keyCodes.down:\n        this.update(this.value - this.step);\n        stopPropagation = true;\n        break;\n      case keyCodes.right:\n      case keyCodes.up:\n        this.update(this.value + this.step);\n        stopPropagation = true;\n        break;\n      case keyCodes.pageUp:\n        this.update(this.value + this.step * 10);\n        stopPropagation = true;\n        break;\n\n      case keyCodes.pageDown:\n        this.update(this.value + this.step * 10);\n        stopPropagation = true;\n        break;\n      case keyCodes.home:\n        this.update(this.min);\n        stopPropagation = true;\n        break;\n      case keyCodes.end:\n        this.update(this.max);\n        stopPropagation = true;\n        break;\n      }\n      if (stopPropagation) {\n        this.background.classList.add('focus');\n        event.preventDefault();\n        event.stopPropagation();\n        if (this.changeValue !== this.value) this.dispatchChange();\n      }\n    }\n\n    validateValueRange(min, max, value) {\n      return Math.max(Math.min(max, value), min);\n    }\n\n    quantizeValue(value, step) {\n      return Math.round(value / step) * step;\n    }\n\n    dragUpdate() {\n      const bbox = this.background.getBoundingClientRect();\n      const x = event.x;\n      const width = bbox.width;\n      this.update(this.scale.invert(x / width));\n    }\n\n    update(value) {\n      let v = value;\n      if (this.step !== 'any') {\n        v = this.quantizeValue(value, this.step);\n      }\n      v = this.validateValueRange(this.min, this.max, v);\n      if (this.connected) {\n        this.knob.style.left = this.scale(v) * 100 + '%';\n        this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%';\n        this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%';\n      }\n      if (this.value !== v) {\n        this.value = v;\n        this.setAttribute('aria-valuenow', this.value);\n        this.dispatchInput();\n      }\n    }\n\n    // Dispatches only on a committed change (basically only on mouseup).\n    dispatchChange() {\n      const e = new Event('change');\n      this.dispatchEvent(e, {});\n    }\n\n    // Dispatches on each value change.\n    dispatchInput() {\n      const e = new Event('input');\n      this.dispatchEvent(e, {});\n    }\n\n    renderTicks() {\n      const ticksContainer = this.root.querySelector('.ticks');\n      if (this.ticks !== false) {\n        let tickData = [];\n        if (this.ticks > 0) {\n          tickData = this.scale.ticks(this.ticks);\n        } else if (this.step === 'any') {\n          tickData = this.scale.ticks();\n        } else {\n          tickData = range(this.min, this.max + 1e-6, this.step);\n        }\n        tickData.forEach(d => {\n          const tick = document.createElement('div');\n          tick.classList.add('tick');\n          tick.style.left = this.scale(d) * 100 + '%';\n          ticksContainer.appendChild(tick);\n        });\n      } else {\n        ticksContainer.style.display = 'none';\n      }\n    }\n  }\n\n  var logo = \"<svg viewBox=\\\"-607 419 64 64\\\">\\n  <path d=\\\"M-573.4,478.9c-8,0-14.6-6.4-14.6-14.5s14.6-25.9,14.6-40.8c0,14.9,14.6,32.8,14.6,40.8S-565.4,478.9-573.4,478.9z\\\"/>\\n</svg>\\n\";\n\n  const headerTemplate = `\n<style>\ndistill-header {\n  position: relative;\n  height: 60px;\n  background-color: hsl(200, 60%, 15%);\n  width: 100%;\n  box-sizing: border-box;\n  z-index: 2;\n  color: rgba(0, 0, 0, 0.8);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n  box-shadow: 0 1px 6px rgba(0, 0, 0, 0.05);\n}\ndistill-header .content {\n  height: 70px;\n  grid-column: page;\n}\ndistill-header a {\n  font-size: 16px;\n  height: 60px;\n  line-height: 60px;\n  text-decoration: none;\n  color: rgba(255, 255, 255, 0.8);\n  padding: 22px 0;\n}\ndistill-header a:hover {\n  color: rgba(255, 255, 255, 1);\n}\ndistill-header svg {\n  width: 24px;\n  position: relative;\n  top: 4px;\n  margin-right: 2px;\n}\n@media(min-width: 1080px) {\n  distill-header {\n    height: 70px;\n  }\n  distill-header a {\n    height: 70px;\n    line-height: 70px;\n    padding: 28px 0;\n  }\n  distill-header .logo {\n  }\n}\ndistill-header svg path {\n  fill: none;\n  stroke: rgba(255, 255, 255, 0.8);\n  stroke-width: 3px;\n}\ndistill-header .logo {\n  font-size: 17px;\n  font-weight: 200;\n}\ndistill-header .nav {\n  float: right;\n  font-weight: 300;\n}\ndistill-header .nav a {\n  font-size: 12px;\n  margin-left: 24px;\n  text-transform: uppercase;\n}\n</style>\n<div class=\"content\">\n  <a href=\"/\" class=\"logo\">\n    ${logo}\n    Distill\n  </a>\n  <nav class=\"nav\">\n    <a href=\"/about/\">About</a>\n    <a href=\"/prize/\">Prize</a>\n    <a href=\"/journal/\">Submit</a>\n  </nav>\n</div>\n`;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$b = Template('distill-header', headerTemplate, false);\n\n  class DistillHeader extends T$b(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles$2 = `\n<style>\n  distill-appendix {\n    contain: layout style;\n  }\n\n  distill-appendix .citation {\n    font-size: 11px;\n    line-height: 15px;\n    border-left: 1px solid rgba(0, 0, 0, 0.1);\n    padding-left: 18px;\n    border: 1px solid rgba(0,0,0,0.1);\n    background: rgba(0, 0, 0, 0.02);\n    padding: 10px 18px;\n    border-radius: 3px;\n    color: rgba(150, 150, 150, 1);\n    overflow: hidden;\n    margin-top: -12px;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n  }\n\n  distill-appendix > * {\n    grid-column: text;\n  }\n</style>\n`;\n\n  function appendixTemplate(frontMatter) {\n    let html = styles$2;\n\n    if (typeof frontMatter.githubUrl !== 'undefined') {\n      html += `\n    <h3 id=\"updates-and-corrections\">Updates and Corrections</h3>\n    <p>`;\n      if (frontMatter.githubCompareUpdatesUrl) {\n        html += `<a href=\"${frontMatter.githubCompareUpdatesUrl}\">View all changes</a> to this article since it was first published.`;\n      }\n      html += `\n    If you see mistakes or want to suggest changes, please <a href=\"${frontMatter.githubUrl + '/issues/new'}\">create an issue on GitHub</a>. </p>\n    `;\n    }\n\n    const journal = frontMatter.journal;\n    if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n      html += `\n    <h3 id=\"reuse\">Reuse</h3>\n    <p>Diagrams and text are licensed under Creative Commons Attribution <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC-BY 4.0</a> with the <a class=\"github\" href=\"${frontMatter.githubUrl}\">source available on GitHub</a>, unless noted otherwise. The figures that have been reused from other sources don���t fall under this license and can be recognized by a note in their caption: “Figure from …”.</p>\n    `;\n    }\n\n    if (typeof frontMatter.publishedDate !== 'undefined') {\n      html += `\n    <h3 id=\"citation\">Citation</h3>\n    <p>For attribution in academic contexts, please cite this work as</p>\n    <pre class=\"citation short\">${frontMatter.concatenatedAuthors}, \"${frontMatter.title}\", Distill, ${frontMatter.publishedYear}.</pre>\n    <p>BibTeX citation</p>\n    <pre class=\"citation long\">${serializeFrontmatterToBibtex(frontMatter)}</pre>\n    `;\n    }\n\n    return html;\n  }\n\n  class DistillAppendix extends HTMLElement {\n\n    static get is() { return 'distill-appendix'; }\n\n    set frontMatter(frontMatter) {\n      this.innerHTML = appendixTemplate(frontMatter);\n    }\n\n  }\n\n  const footerTemplate = `\n<style>\n\n:host {\n  color: rgba(255, 255, 255, 0.5);\n  font-weight: 300;\n  padding: 2rem 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  background-color: hsl(180, 5%, 15%); /*hsl(200, 60%, 15%);*/\n  text-align: left;\n  contain: content;\n}\n\n.footer-container .logo svg {\n  width: 24px;\n  position: relative;\n  top: 4px;\n  margin-right: 2px;\n}\n\n.footer-container .logo svg path {\n  fill: none;\n  stroke: rgba(255, 255, 255, 0.8);\n  stroke-width: 3px;\n}\n\n.footer-container .logo {\n  font-size: 17px;\n  font-weight: 200;\n  color: rgba(255, 255, 255, 0.8);\n  text-decoration: none;\n  margin-right: 6px;\n}\n\n.footer-container {\n  grid-column: text;\n}\n\n.footer-container .nav {\n  font-size: 0.9em;\n  margin-top: 1.5em;\n}\n\n.footer-container .nav a {\n  color: rgba(255, 255, 255, 0.8);\n  margin-right: 6px;\n  text-decoration: none;\n}\n\n</style>\n\n<div class='footer-container'>\n\n  <a href=\"/\" class=\"logo\">\n    ${logo}\n    Distill\n  </a> is dedicated to clear explanations of machine learning\n\n  <div class=\"nav\">\n    <a href=\"https://distill.pub/about/\">About</a>\n    <a href=\"https://distill.pub/journal/\">Submit</a>\n    <a href=\"https://distill.pub/prize/\">Prize</a>\n    <a href=\"https://distill.pub/archive/\">Archive</a>\n    <a href=\"https://distill.pub/rss.xml\">RSS</a>\n    <a href=\"https://github.com/distillpub\">GitHub</a>\n    <a href=\"https://twitter.com/distillpub\">Twitter</a>\n    &nbsp;&nbsp;&nbsp;&nbsp; ISSN 2476-0757\n  </div>\n\n</div>\n\n`;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$c = Template('distill-footer', footerTemplate);\n\n  class DistillFooter extends T$c(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  let templateIsLoading = false;\n  let runlevel = 0;\n  const initialize = function() {\n    if (window.distill.runlevel < 1) {\n      throw new Error(\"Insufficient Runlevel for Distill Template!\");\n    }\n\n    /* 1. Flag that we're being loaded */\n    if (\"distill\" in window && window.distill.templateIsLoading) {\n      throw new Error(\n        \"Runlevel 1: Distill Template is getting loaded more than once, aborting!\"\n      );\n    } else {\n      window.distill.templateIsLoading = true;\n      console.debug(\"Runlevel 1: Distill Template has started loading.\");\n    }\n\n    /* 2. Add styles if they weren't added during prerendering */\n    makeStyleTag(document);\n    console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n    console.debug(\"Runlevel 1->2.\");\n    window.distill.runlevel += 1;\n\n    /* 3. Register Controller listener functions */\n    /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n    for (const [functionName, callback] of Object.entries(Controller.listeners)) {\n      if (typeof callback === \"function\") {\n        document.addEventListener(functionName, callback);\n      } else {\n        console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n      }\n    }\n    console.debug(\"Runlevel 2: We can now listen to controller events.\");\n    console.debug(\"Runlevel 2->3.\");\n    window.distill.runlevel += 1;\n\n    /* 4. Register components */\n    const components = [\n      Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code,\n      Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure,\n      Slider, Interstitial\n    ];\n\n    const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n\n    if (window.distill.runlevel < 2) {\n      throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n    }\n    const allComponents = components.concat(distillComponents);\n    for (const component of allComponents) {\n      console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n      customElements.define(component.is, component);\n    }\n\n    console.debug(\n      \"Runlevel 3: Distill Template finished registering custom elements.\"\n    );\n    console.debug(\"Runlevel 3->4.\");\n    window.distill.runlevel += 1;\n\n    // If template was added after DOMContentLoaded we may have missed that event.\n    // Controller will check for that case, so trigger the event explicitly:\n    if (domContentLoaded()) {\n      Controller.listeners.DOMContentLoaded();\n    }\n\n    console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n    window.distill.templateIsLoading = false;\n    window.distill.templateHasLoaded = true;\n  };\n\n  window.distill = { runlevel, initialize, templateIsLoading };\n\n  /* 0. Check browser feature support; synchronously polyfill if needed */\n  if (Polyfills.browserSupportsAllFeatures()) {\n    console.debug(\"Runlevel 0: No need for polyfills.\");\n    console.debug(\"Runlevel 0->1.\");\n    window.distill.runlevel += 1;\n    window.distill.initialize();\n  } else {\n    console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n    Polyfills.load(window.distill.initialize);\n  }\n\n})));\n//# sourceMappingURL=template.v2.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(792);\n"],"names":["define","days","months","zeroPad","n","RFC","date","day","getDay","substring","paddedDate","getDate","month","getMonth","year","getFullYear","toString","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","concat","Author","_createClass","object","_classCallCheck","this","name","author","personalURL","authorURL","affiliation","affiliationURL","affiliations","key","get","names","split","slice","length","join","FrontMatter","title","description","authors","bibliography","Map","bibliographyParsed","citations","citationsCollected","journal","katex","doi","undefined","publishedDate","_url","distillPath","url","set","value","githubPath","_previewURL","updatedDate","toISOString","volume","publishedYear","Error","lastName","map","firstName","slug","toLowerCase","_this","citationKey","_bibliography","_typeof","property","hasOwnProperty","mapFromObject","target","Object","assign","Array","from","reduce","_ref","_ref2","_slicedToArray","objectFromMap","bibliographyEntries","githubUrl","previewURL","issue","publishedDateRFC","publishedMonth","publishedDay","publishedMonthPadded","publishedDayPadded","updatedDateRFC","concatenatedAuthors","bibtexAuthors","source","frontMatter","Mutating","superclass","_superclass","_class","_this2","_callSuper","options","childList","characterData","subtree","observer","MutationObserver","disconnect","renderIfPossible","observe","_inherits","_superPropGet","textContent","root","renderContent","console","error","constructor","Template","templateString","useShadow","arguments","template","document","createElement","innerHTML","window","ShadyCSS","prepareTemplate","_superclass2","_class2","_this3","clone","importNode","content","attachShadow","mode","shadowRoot","appendChild","hasAttribute","styleElement","insertBefore","firstChild","query","querySelector","querySelectorAll","math","findEndOfMath","delimiter","text","startIndex","index","braceLevel","delimLength","character","splitAtDelimiters","startData","leftDelim","rightDelim","display","finalData","i","type","data","lookingForLeft","currIndex","nextIndex","indexOf","push","rawData","renderMathInText","optionsCopy","delimiters","left","right","splitWithDelimiters","fragment","createDocumentFragment","createTextNode","tag","displayMode","setAttribute","e","ParseError","errorCallback","renderElem","elem","childNodes","childNode","nodeType","mightHaveMath","frag","replaceChild","ignoredTags","nodeName","defaultAutoRenderOptions","msg","err","katexCSSTag","DMath","_Mutating","localOptions","katexOptions","katexAdded","addKatex","container","render","_katexOptions","katexLoadedCallback","_step","_iterator","_createForOfIteratorHelper","s","done","f","delimiterStrings","flatMap","d","some","renderMathInElement","body","head","insertAdjacentHTML","scriptTag","src","async","onload","crossorigin","T","HTMLElement","collect_citations","_step2","dom","Set","_iterator2","_step3","_iterator3","getAttribute","k","trim","add","author_string","ent","sep","finalSep","name_strings","last","firsts","initials","replace","venue_string","cite","booktitle","number","pages","publisher","link_string","arxiv_match","exec","label","doi_string","new_line","bibliography_cite","fancy","title_string","hover_cite","a_str","v_str","Math","min","domContentLoaded","readyState","parseFrontmatter","element","firstElementChild","_step4","_iterator4","hasOldStyle","Boolean","hasNewStyle","warn","newAffiliation","_moveLegacyAffiliationFormatIntoArray","JSON","parse","inlineMathRendered","FrontMatter$1","_HTMLElement","_this4","entries","_step5","_iterator5","entry","notify","event","CustomEvent","detail","bubbles","dispatchEvent","_wrapNativeSuper","Controller","waitingOn","listeners","onCiteKeyCreated","_event$detail","citeTag","keys","numbers","onCiteKeyChanged","_step6","_iterator6","waitingCallback","citationListTag","_step7","_iterator7","log","onCiteKeyRemoved","onBibliographyChanged","_step8","_iterator8","debug","onFootnoteChanged","footnotesList","footnotes","onFrontMatterChanged","published","Date","String","authorObject","password","interstitial","parentElement","removeChild","article","byline","h1","hasPassword","inBrowser","onLocalhost","location","hostname","includes","appendix","footnoteList","citationList","optionalComponents","DOMContentLoaded","loaded","frontMatterTag","_step9","_iterator9","_step10","_iterator10","styles","base","addPolyfill","polyfill","polyfillLoadedCallback","script","onerror","polyfills","support","Element","prototype","Polyfills","every","poly","callback","_step11","polyfillLoaded","neededPolyfills","distillRunlevel","_iterator11","_neededPolyfills","filter","Abstract","_T$","selector","T$1","Appendix","_T$2","T$2","isOnlyWhitespace","Article","_HTMLElement2","_this5","mutations","_step12","_iterator12","_step13","_iterator13","addedNodes","addedNode","nodeValue","test","wrapper","parentNode","commonjsGlobal","globalThis","global","self","createCommonjsModule","fn","module","exports","bibtexParse","BibtexParser","notKey","pos","input","currentEntry","setInput","t","getEntries","isWhitespace","match","canCommentOut","skipWhitespace","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","values","key_equals_value","key_value_list","kv","entry_body","directive","preamble","comment","bibtex","string","toJSON","b","toBibtex","json","out","entryType","entryTags","tags","jdx","normalizeTag","full","x","char","parseBibtex","_step14","_iterator14","_i","_Object$entries","_Object$entries$_i","Bibliography","_HTMLElement3","_this6","_step15","_iterator15","parseIfPossible","_this7","requestAnimationFrame","newBibtex","response","oldValue","newValue","_this8","oReq","XMLHttpRequest","receivedBibtex","responseType","open","send","Byline","_HTMLElement4","bylineTemplate","Cite","_T$3","_this9","_numbers","_entries","_this10","outerSpan","innerSpan","hoverBox","customElements","whenDefined","then","listen","displayNumbers","displayEntries","eventName","result","html","T$3","CitationList","_HTMLElement5","style","size","list","stylesTag","heading","id","className","_step16","_iterator16","_step16$value","listItem","renderCitationList","prism","Prism","_self","lang","uniqueId","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","alias","isArray","o","call","objId","obj","defineProperty","deepClone","visited","forEach","v","getLanguage","currentScript","stack","scripts","getElementsByTagName","languages","extend","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","propertyType","plugins","highlightAll","highlightAllUnder","env","hooks","run","elements","apply","highlightElement","language","parent","code","insertHighlightedCode","highlightedCode","Worker","worker","filename","onmessage","evt","postMessage","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","matchGrammar","array","node","next","tail","toArray","all","callbacks","matchedStr","greedy","startNode","startPos","oneshot","patterns","j","pattern","lookbehind","lookbehindLength","flags","RegExp","currentNode","removeCount","prev","lastIndex","to","p","after","removeFrom","removeRange","newNode","count","classes","attributes","aliases","addEventListener","message","close","highlightAutomaticallyCallback","defer","setTimeout","WorkerGlobalScope","markup","tagName","includedCdataInside","def","xml","mathml","svg","css","addInlined","clike","javascript","js","fileHighlight","Extensions","pre","extension","xhr","onreadystatechange","status","responseText","statusText","python","py","lua","envVars","insideString","bash","variable","toBeCopied","shell","go","inner","createInline","starAlternative","tableCell","tableRow","tableLine","markdown","punctuation","walkTokens","l","codeLang","codeBlock","cls","autoloader","valueOf","floor","random","loadLanguages","ele","getElementById","md","julia","Code","_Mutating2","languageName","codeTag","tabs","ShadowRoot","preTag","T$4","Footnote","_T$4","_this11","_this12","currentFootnoteId","IdString","host","span","T$5","FootnoteList","_T$5","_step17","_iterator17","footnote","backlink","href","T$6","HoverBox","_T$6","bindDivEvents","bindTriggerEvents","_this13","visible","showAtNode","stopTimeout","extendTimeout","stopPropagation","passive","hide","_this14","position","top","round","bbox","getBoundingClientRect","show","offsetLeft","width","offsetTop","height","timeout","clearTimeout","time","_this15","T$7","Title","_HTMLElement6","References","_T$7","T$8","TOC","_HTMLElement7","_this16","headings","_step18","ToC","_iterator18","el","isInTitle","isException","newLine","renderTOC","Figure","_HTMLElement8","_this17","_ready","_onscreen","_offscreen","loadsWhileScrolling","marginObserver","directObserver","unobserve","readyQueue","runReadyQueue","onscreen","_readyQueue","figure","sort","a","_seenOnScreen","pop","ready","_marginObserver","viewportHeight","innerHeight","margin","rootMargin","threshold","didObserveMarginIntersection","IntersectionObserver","_step19","_iterator19","isIntersecting","addToReadyQueue","_directObserver","didObserveDirectIntersection","_step20","_iterator20","offscreen","isScrolling","Interstitial","_T$8","_this18","shouldRemoveSelf","oninput","passwordChanged","Storage","localStorage","setItem","localStorageIdentifier","getItem","pathname","T$9","ascending","NaN","compare","bisectRight","lo","hi","mid","e10","sqrt","e5","e2","tickIncrement","stop","step","max","power","LN10","pow","initRange","domain","range","factory","definition","create","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","m","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","h","Hsl","hslConvert","hsl2rgb","m1","m2","copy","channels","displayable","formatHsl","deg2rad","PI","rad2deg","Xn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","z","rgb2lrgb","y","xyz2lab","lab2xyz","lrgb2rgb","c","cos","sin","atan2","hclConvert","A","B","C","D","E","ED","EB","BC_DA","Cubehelix","constant","gamma","nogamma","exponential","linear","bl","cubehelixConvert","cosh","sinh","rgb$1","rgbGamma","numberArray","genericArray","nb","na","interpolate","setTime","interpolateNumber","reA","reB","am","bm","bs","bi","q","one","zero","ArrayBuffer","isView","DataView","interpolateRound","unit","identity","normalize","bimap","d0","d1","r0","r1","polymap","reverse","transformer","transform","untransform","unknown","piecewise","output","interpolate$1","clamp","rescale","scale","invert","rangeRound","u","formatDecimal","toExponential","coefficient","exponent","abs","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","formatRounded","formatTypes","toFixed","toPrecision","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","i1","i0","formatTrim","charCodeAt","Infinity","padding","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","ceil","nice","linear$1","t0$1","t1$1","newInterval","floori","offseti","field","interval","offset","previous","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","getMilliseconds","getSeconds","getMinutes","getHours","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","thursday","setMonth","setFullYear","setUTCSeconds","setUTCMinutes","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcYear","setUTCMonth","getUTCMonth","getUTCFullYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","locale$1","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","day$1","X","formatLocale$1","defaultLocale$1","isoSpecifier","noop","dispatch","Dispatch","on","typename","types","that","args","xhtml","namespaces","xlink","xmlns","namespace","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","empty","sparse","update","EnterNode","datum","_next","_parent","__data__","child","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending$1","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","splice","contains","filterEvents","filterContextListener","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","customEvent","sourceEvent","params","createEvent","initEvent","cancelable","dispatchConstant","dispatchFunction","mouseenter","mouseleave","Selection","groups","parents","_groups","_parents","select","current","point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","clientLeft","clientTop","mouse","changedTouches","touch","touches","identifier","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$3","DragEvent","subject","active","dx","dy","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","selection","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","noclick","yesdrag","sublisteners","p0","clickDistance","subgroups","subnode","subgroup","selectAll","selectorAll","matches","matcher","each","bind","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","classed","deep","typenames","parseTypenames$1","T$a","keyCodes","Slider","_T$a","_this19","connected","mouseEvent","knob","background","trackFill","track","origin","renderTicks","changeValue","dragUpdate","dispatchChange","onKeyDown","keyCode","quantizeValue","validateValueRange","dispatchInput","Event","_this20","ticksContainer","tick","logo","DistillHeader","_T$b","T$b","DistillAppendix","_HTMLElement9","githubCompareUpdatesUrl","serializeFrontmatterToBibtex","appendixTemplate","DistillFooter","_T$c","T$c","distill","runlevel","initialize","templateIsLoading","styleTagId","styleTag","cssTextTag","firstScriptTag","makeStyleTag","_i2","_Object$entries2","_Object$entries2$_i","functionName","components","distillComponents","_step21","_iterator21","component","is","templateHasLoaded","browserSupportsAllFeatures","load","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","Function"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"distill.bundle.js","mappings":"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","sources":["webpack://blogpost/./src/distill.js","webpack://blogpost/webpack/bootstrap","webpack://blogpost/webpack/runtime/global","webpack://blogpost/webpack/startup"],"sourcesContent":["(function (factory) {\n  typeof define === 'function' && define.amd ? define(factory) :\n  factory();\n}((function () { 'use strict';\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n  const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'];\n  const zeroPad = n => n < 10 ? '0' + n : n;\n\n  const RFC = function(date) {\n    const day = days[date.getDay()].substring(0, 3);\n    const paddedDate = zeroPad(date.getDate());\n    const month = months[date.getMonth()].substring(0,3);\n    const year = date.getFullYear().toString();\n    const hours = date.getUTCHours().toString();\n    const minutes = date.getUTCMinutes().toString();\n    const seconds = date.getUTCSeconds().toString();\n    return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;\n  };\n\n  const objectFromMap = function(map) {\n    const object = Array.from(map).reduce((object, [key, value]) => (\n      Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't.\n    ), {});\n    return object;\n  };\n\n  const mapFromObject = function(object) {\n    const map = new Map();\n    for (var property in object) {\n      if (object.hasOwnProperty(property)) {\n        map.set(property, object[property]);\n      }\n    }\n    return map;\n  };\n\n  class Author {\n\n    // constructor(name='', personalURL='', affiliation='', affiliationURL='') {\n    //   this.name = name; // 'Chris Olah'\n    //   this.personalURL = personalURL; // 'https://colah.github.io'\n    //   this.affiliation = affiliation; // 'Google Brain'\n    //   this.affiliationURL = affiliationURL; // 'https://g.co/brain'\n    // }\n\n    constructor(object) {\n      this.name = object.author; // 'Chris Olah'\n      this.personalURL = object.authorURL; // 'https://colah.github.io'\n      this.affiliation = object.affiliation; // 'Google Brain'\n      this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'\n      this.affiliations = object.affiliations || []; // new-style affiliations\n    }\n\n    // 'Chris'\n    get firstName() {\n      const names = this.name.split(' ');\n      return names.slice(0, names.length - 1).join(' ');\n    }\n\n    // 'Olah'\n    get lastName() {\n      const names = this.name.split(' ');\n      return names[names.length -1];\n    }\n  }\n\n  function mergeFromYMLFrontmatter(target, source) {\n    target.title = source.title;\n    if (source.published) {\n      if (source.published instanceof Date) {\n        target.publishedDate = source.published;\n      } else if (source.published.constructor === String) {\n        target.publishedDate = new Date(source.published);\n      }\n    }\n    if (source.publishedDate) {\n      if (source.publishedDate instanceof Date) {\n        target.publishedDate = source.publishedDate;\n      } else if (source.publishedDate.constructor === String) {\n        target.publishedDate = new Date(source.publishedDate);\n      } else {\n        console.error('Don\\'t know what to do with published date: ' + source.publishedDate);\n      }\n    }\n    target.description = source.description;\n    target.authors = source.authors.map( (authorObject) => new Author(authorObject));\n    target.katex = source.katex;\n    target.password = source.password;\n    if (source.doi) {\n      target.doi = source.doi;\n    }\n  }\n\n  class FrontMatter {\n    constructor() {\n      this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks'\n      this.description = ''; // 'A visual overview of neural attention...'\n      this.authors = []; // Array of Author(s)\n\n      this.bibliography = new Map();\n      this.bibliographyParsed = false;\n      //  {\n      //    'gregor2015draw': {\n      //      'title': 'DRAW: A recurrent neural network for image generation',\n      //      'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',\n      //      'journal': 'arXiv preprint arXiv:1502.04623',\n      //      'year': '2015',\n      //      'url': 'https://arxiv.org/pdf/1502.04623.pdf',\n      //      'type': 'article'\n      //    },\n      //  }\n\n      // Citation keys should be listed in the order that they are appear in the document.\n      // Each key refers to a key in the bibliography dictionary.\n      this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]\n      this.citationsCollected = false;\n\n      //\n      // Assigned from posts.csv\n      //\n\n      //  publishedDate: 2016-09-08T07:00:00.000Z,\n      //  tags: [ 'rnn' ],\n      //  distillPath: '2016/augmented-rnns',\n      //  githubPath: 'distillpub/post--augmented-rnns',\n      //  doiSuffix: 1,\n\n      //\n      // Assigned from journal\n      //\n      this.journal = {};\n      //  journal: {\n      //    'title': 'Distill',\n      //    'full_title': 'Distill',\n      //    'abbrev_title': 'Distill',\n      //    'url': 'http://distill.pub',\n      //    'doi': '10.23915/distill',\n      //    'publisherName': 'Distill Working Group',\n      //    'publisherEmail': 'admin@distill.pub',\n      //    'issn': '2476-0757',\n      //    'editors': [...],\n      //    'committee': [...]\n      //  }\n      //  volume: 1,\n      //  issue: 9,\n\n      this.katex = {};\n\n      //\n      // Assigned from publishing process\n      //\n\n      //  githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',\n      //  updatedDate: 2017-03-21T07:13:16.000Z,\n      //  doi: '10.23915/distill.00001',\n      this.doi = undefined;\n      this.publishedDate = undefined;\n    }\n\n    // Example:\n    // title: Demo Title Attention and Augmented Recurrent Neural Networks\n    // published: Jan 10, 2017\n    // authors:\n    // - Chris Olah:\n    // - Shan Carter: http://shancarter.com\n    // affiliations:\n    // - Google Brain:\n    // - Google Brain: http://g.co/brain\n\n    //\n    // Computed Properties\n    //\n\n    // 'http://distill.pub/2016/augmented-rnns',\n    set url(value) {\n      this._url = value;\n    }\n    get url() {\n      if (this._url) {\n        return this._url;\n      } else if (this.distillPath && this.journal.url) {\n        return this.journal.url + '/' + this.distillPath;\n      } else if (this.journal.url) {\n        return this.journal.url;\n      }\n    }\n\n    // 'https://github.com/distillpub/post--augmented-rnns',\n    get githubUrl() {\n      if (this.githubPath) {\n        return 'https://github.com/' + this.githubPath;\n      } else {\n        return undefined;\n      }\n    }\n\n    // TODO resolve differences in naming of URL/Url/url.\n    // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',\n    set previewURL(value) {\n      this._previewURL = value;\n    }\n    get previewURL() {\n      return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg';\n    }\n\n    // 'Thu, 08 Sep 2016 00:00:00 -0700',\n    get publishedDateRFC() {\n      return RFC(this.publishedDate);\n    }\n\n    // 'Thu, 08 Sep 2016 00:00:00 -0700',\n    get updatedDateRFC() {\n      return RFC(this.updatedDate);\n    }\n\n    // 2016,\n    get publishedYear() {\n      return this.publishedDate.getFullYear();\n    }\n\n    // 'Sept',\n    get publishedMonth() {\n      return months[this.publishedDate.getMonth()];\n    }\n\n    // 8,\n    get publishedDay() {\n      return this.publishedDate.getDate();\n    }\n\n    // '09',\n    get publishedMonthPadded() {\n      return zeroPad(this.publishedDate.getMonth() + 1);\n    }\n\n    // '08',\n    get publishedDayPadded() {\n      return zeroPad(this.publishedDate.getDate());\n    }\n\n    get publishedISODateOnly() {\n      return this.publishedDate.toISOString().split('T')[0];\n    }\n\n    get volume() {\n      const volume = this.publishedYear - 2015;\n      if (volume < 1) {\n        throw new Error('Invalid publish date detected during computing volume');\n      }\n      return volume;\n    }\n\n    get issue() {\n      return this.publishedDate.getMonth() + 1;\n    }\n\n    // 'Olah & Carter',\n    get concatenatedAuthors() {\n      if (this.authors.length > 2) {\n        return this.authors[0].lastName + ', et al.';\n      } else if (this.authors.length === 2) {\n        return this.authors[0].lastName + ' & ' + this.authors[1].lastName;\n      } else if (this.authors.length === 1) {\n        return this.authors[0].lastName;\n      }\n    }\n\n    // 'Olah, Chris and Carter, Shan',\n    get bibtexAuthors() {\n      return this.authors.map(author => {\n        return author.lastName + ', ' + author.firstName;\n      }).join(' and ');\n    }\n\n    // 'olah2016attention'\n    get slug() {\n      let slug = '';\n      if (this.authors.length) {\n        slug += this.authors[0].lastName.toLowerCase();\n        slug += this.publishedYear;\n        slug += this.title.split(' ')[0].toLowerCase();\n      }\n      return slug || 'Untitled';\n    }\n\n    get bibliographyEntries() {\n      return new Map(this.citations.map( citationKey => {\n        const entry = this.bibliography.get(citationKey);\n        return [citationKey, entry];\n      }));\n    }\n\n    set bibliography(bibliography) {\n      if (bibliography instanceof Map) {\n        this._bibliography = bibliography;\n      } else if (typeof bibliography === 'object') {\n        this._bibliography = mapFromObject(bibliography);\n      }\n    }\n\n    get bibliography() {\n      return this._bibliography;\n    }\n\n    static fromObject(source) {\n      const frontMatter = new FrontMatter();\n      Object.assign(frontMatter, source);\n      return frontMatter;\n    }\n\n    assignToObject(target) {\n      Object.assign(target, this);\n      target.bibliography = objectFromMap(this.bibliographyEntries);\n      target.url = this.url;\n      target.doi = this.doi;\n      target.githubUrl = this.githubUrl;\n      target.previewURL = this.previewURL;\n      if (this.publishedDate) {\n        target.volume = this.volume;\n        target.issue = this.issue;\n        target.publishedDateRFC = this.publishedDateRFC;\n        target.publishedYear = this.publishedYear;\n        target.publishedMonth = this.publishedMonth;\n        target.publishedDay = this.publishedDay;\n        target.publishedMonthPadded = this.publishedMonthPadded;\n        target.publishedDayPadded = this.publishedDayPadded;\n      }\n      if (this.updatedDate) {\n        target.updatedDateRFC = this.updatedDateRFC;\n      }\n      target.concatenatedAuthors = this.concatenatedAuthors;\n      target.bibtexAuthors = this.bibtexAuthors;\n      target.slug = this.slug;\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  const Mutating = (superclass) => {\n    return class extends superclass {\n\n      constructor() {\n        super();\n\n        // set up mutation observer\n        const options = {childList: true, characterData: true, subtree: true};\n        const observer = new MutationObserver( () => {\n          observer.disconnect();\n          this.renderIfPossible();\n          observer.observe(this, options);\n        });\n\n        // ...and listen for changes\n        observer.observe(this, options);\n      }\n\n      connectedCallback() {\n        super.connectedCallback();\n\n        this.renderIfPossible();\n      }\n\n      // potential TODO: check if this is enough for all our usecases\n      // maybe provide a custom function to tell if we have enough information to render\n      renderIfPossible() {\n        if (this.textContent && this.root) {\n          this.renderContent();\n        }\n      }\n\n      renderContent() {\n        console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!` );\n      }\n\n    }; // end class\n  }; // end mixin function\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  /*global ShadyCSS*/\n\n  const Template = (name, templateString, useShadow = true) => {\n\n    return (superclass) => {\n\n      const template = document.createElement('template');\n      template.innerHTML = templateString;\n\n      if (useShadow && 'ShadyCSS' in window) {\n        ShadyCSS.prepareTemplate(template, name);\n      }\n\n      return class extends superclass {\n\n        static get is() { return name; }\n\n        constructor() {\n          super();\n\n          this.clone = document.importNode(template.content, true);\n          if (useShadow) {\n            this.attachShadow({mode: 'open'});\n            this.shadowRoot.appendChild(this.clone);\n          }\n        }\n\n        connectedCallback() {\n          if (this.hasAttribute('distill-prerendered')) {\n            return;\n          }\n          if (useShadow) {\n            if ('ShadyCSS' in window) {\n              ShadyCSS.styleElement(this);\n            }\n          } else {\n            this.insertBefore(this.clone, this.firstChild);\n          }\n        }\n\n        get root() {\n          if (useShadow) {\n            return this.shadowRoot;\n          } else {\n            return this;\n          }\n        }\n\n        /* TODO: Are we using these? Should we even? */\n        $(query) {\n          return this.root.querySelector(query);\n        }\n\n        $$(query) {\n          return this.root.querySelectorAll(query);\n        }\n      };\n    };\n  };\n\n  var math = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nspan.katex-display {\\n  text-align: left;\\n  padding: 8px 0 8px 0;\\n  margin: 0.5em 0 0.5em 1em;\\n}\\n\\nspan.katex {\\n  -webkit-font-smoothing: antialiased;\\n  color: rgba(0, 0, 0, 0.8);\\n  font-size: 1.18em;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // This is a straight concatenation of code from KaTeX's contrib folder,\n  // but we aren't using some of their helpers that don't work well outside a browser environment.\n\n  /*global katex */\n\n  const findEndOfMath = function(delimiter, text, startIndex) {\n    // Adapted from\n    // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n    let index = startIndex;\n    let braceLevel = 0;\n\n    const delimLength = delimiter.length;\n\n    while (index < text.length) {\n      const character = text[index];\n\n      if (\n        braceLevel <= 0 &&\n        text.slice(index, index + delimLength) === delimiter\n      ) {\n        return index;\n      } else if (character === \"\\\\\") {\n        index++;\n      } else if (character === \"{\") {\n        braceLevel++;\n      } else if (character === \"}\") {\n        braceLevel--;\n      }\n\n      index++;\n    }\n\n    return -1;\n  };\n\n  const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) {\n    const finalData = [];\n\n    for (let i = 0; i < startData.length; i++) {\n      if (startData[i].type === \"text\") {\n        const text = startData[i].data;\n\n        let lookingForLeft = true;\n        let currIndex = 0;\n        let nextIndex;\n\n        nextIndex = text.indexOf(leftDelim);\n        if (nextIndex !== -1) {\n          currIndex = nextIndex;\n          finalData.push({\n            type: \"text\",\n            data: text.slice(0, currIndex)\n          });\n          lookingForLeft = false;\n        }\n\n        while (true) {\n          // eslint-disable-line no-constant-condition\n          if (lookingForLeft) {\n            nextIndex = text.indexOf(leftDelim, currIndex);\n            if (nextIndex === -1) {\n              break;\n            }\n\n            finalData.push({\n              type: \"text\",\n              data: text.slice(currIndex, nextIndex)\n            });\n\n            currIndex = nextIndex;\n          } else {\n            nextIndex = findEndOfMath(\n              rightDelim,\n              text,\n              currIndex + leftDelim.length\n            );\n            if (nextIndex === -1) {\n              break;\n            }\n\n            finalData.push({\n              type: \"math\",\n              data: text.slice(currIndex + leftDelim.length, nextIndex),\n              rawData: text.slice(currIndex, nextIndex + rightDelim.length),\n              display: display\n            });\n\n            currIndex = nextIndex + rightDelim.length;\n          }\n\n          lookingForLeft = !lookingForLeft;\n        }\n\n        finalData.push({\n          type: \"text\",\n          data: text.slice(currIndex)\n        });\n      } else {\n        finalData.push(startData[i]);\n      }\n    }\n\n    return finalData;\n  };\n\n  const splitWithDelimiters = function(text, delimiters) {\n    let data = [{ type: \"text\", data: text }];\n    for (let i = 0; i < delimiters.length; i++) {\n      const delimiter = delimiters[i];\n      data = splitAtDelimiters(\n        data,\n        delimiter.left,\n        delimiter.right,\n        delimiter.display || false\n      );\n    }\n    return data;\n  };\n\n  /* Note: optionsCopy is mutated by this method. If it is ever exposed in the\n   * API, we should copy it before mutating.\n   */\n  const renderMathInText = function(text, optionsCopy) {\n    const data = splitWithDelimiters(text, optionsCopy.delimiters);\n    const fragment = document.createDocumentFragment();\n\n    for (let i = 0; i < data.length; i++) {\n      if (data[i].type === \"text\") {\n        fragment.appendChild(document.createTextNode(data[i].data));\n      } else {\n        const tag = document.createElement(\"d-math\");\n        const math = data[i].data;\n        // Override any display mode defined in the settings with that\n        // defined by the text itself\n        optionsCopy.displayMode = data[i].display;\n        try {\n          tag.textContent = math;\n          if (optionsCopy.displayMode) {\n            tag.setAttribute(\"block\", \"\");\n          }\n        } catch (e) {\n          if (!(e instanceof katex.ParseError)) {\n            throw e;\n          }\n          optionsCopy.errorCallback(\n            \"KaTeX auto-render: Failed to parse `\" + data[i].data + \"` with \",\n            e\n          );\n          fragment.appendChild(document.createTextNode(data[i].rawData));\n          continue;\n        }\n        fragment.appendChild(tag);\n      }\n    }\n\n    return fragment;\n  };\n\n  const renderElem = function(elem, optionsCopy) {\n    for (let i = 0; i < elem.childNodes.length; i++) {\n      const childNode = elem.childNodes[i];\n      if (childNode.nodeType === 3) {\n        // Text node\n        const text = childNode.textContent;\n        if (optionsCopy.mightHaveMath(text)) {\n          const frag = renderMathInText(text, optionsCopy);\n          i += frag.childNodes.length - 1;\n          elem.replaceChild(frag, childNode);\n        }\n      } else if (childNode.nodeType === 1) {\n        // Element node\n        const shouldRender =\n          optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) ===\n          -1;\n\n        if (shouldRender) {\n          renderElem(childNode, optionsCopy);\n        }\n      }\n      // Otherwise, it's something else, and ignore it.\n    }\n  };\n\n  const defaultAutoRenderOptions = {\n    delimiters: [\n      { left: \"$$\", right: \"$$\", display: true },\n      { left: \"\\\\[\", right: \"\\\\]\", display: true },\n      { left: \"\\\\(\", right: \"\\\\)\", display: false }\n      // LaTeX uses this, but it ruins the display of normal `$` in text:\n      // {left: '$', right: '$', display: false},\n    ],\n\n    ignoredTags: [\n      \"script\",\n      \"noscript\",\n      \"style\",\n      \"textarea\",\n      \"pre\",\n      \"code\",\n      \"svg\"\n    ],\n\n    errorCallback: function(msg, err) {\n      console.error(msg, err);\n    }\n  };\n\n  const renderMathInElement = function(elem, options) {\n    if (!elem) {\n      throw new Error(\"No element provided to render\");\n    }\n\n    const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);\n    const delimiterStrings = optionsCopy.delimiters.flatMap(d => [\n      d.left,\n      d.right\n    ]);\n    const mightHaveMath = text =>\n      delimiterStrings.some(d => text.indexOf(d) !== -1);\n    optionsCopy.mightHaveMath = mightHaveMath;\n    renderElem(elem, optionsCopy);\n  };\n\n  // Copyright 2018 The Distill Template Authors\n\n  const katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js';\n  const katexCSSTag = '<link rel=\"stylesheet\" href=\"https://distill.pub/third-party/katex/katex.min.css\" crossorigin=\"anonymous\">';\n\n  const T = Template('d-math', `\n${katexCSSTag}\n<style>\n\n:host {\n  display: inline-block;\n  contain: style;\n}\n\n:host([block]) {\n  display: block;\n}\n\n${math}\n</style>\n<span id='katex-container'></span>\n`);\n\n  // DMath, not Math, because that would conflict with the JS built-in\n  class DMath extends Mutating(T(HTMLElement)) {\n\n    static set katexOptions(options) {\n      DMath._katexOptions = options;\n      if (DMath.katexOptions.delimiters) {\n        if (!DMath.katexAdded) {\n          DMath.addKatex();\n        } else {\n          DMath.katexLoadedCallback();\n        }\n      }\n    }\n\n    static get katexOptions() {\n      if (!DMath._katexOptions) {\n        DMath._katexOptions = {\n          delimiters: [ { 'left':'$$', 'right':'$$', 'display': false } ]\n        };\n      }\n      return DMath._katexOptions;\n    }\n\n    static katexLoadedCallback() {\n      // render all d-math tags\n      const mathTags = document.querySelectorAll('d-math');\n      for (const mathTag of mathTags) {\n        mathTag.renderContent();\n      }\n      // transform inline delimited math to d-math tags\n      if (DMath.katexOptions.delimiters) {\n        renderMathInElement(document.body, DMath.katexOptions);\n      }\n    }\n\n    static addKatex() {\n      // css tag can use this convenience function\n      document.head.insertAdjacentHTML('beforeend', katexCSSTag);\n      // script tag has to be created to work properly\n      const scriptTag = document.createElement('script');\n      scriptTag.src = katexJSURL;\n      scriptTag.async = true;\n      scriptTag.onload = DMath.katexLoadedCallback;\n      scriptTag.crossorigin = 'anonymous';\n      document.head.appendChild(scriptTag);\n\n      DMath.katexAdded = true;\n    }\n\n    get options() {\n      const localOptions = { displayMode: this.hasAttribute('block') };\n      return Object.assign(localOptions, DMath.katexOptions);\n    }\n\n    connectedCallback() {\n      super.connectedCallback();\n      if (!DMath.katexAdded) {\n        DMath.addKatex();\n      }\n    }\n\n    renderContent() {\n      if (typeof katex !== 'undefined') {\n        const container = this.root.querySelector('#katex-container');\n        katex.render(this.textContent, container, this.options);\n      }\n    }\n\n  }\n\n  DMath.katexAdded = false;\n  DMath.inlineMathRendered = false;\n  window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function collect_citations(dom = document) {\n    const citations = new Set();\n    const citeTags = dom.querySelectorAll(\"d-cite\");\n    for (const tag of citeTags) {\n      const keyString = tag.getAttribute(\"key\") || tag.getAttribute(\"bibtex-key\");\n      const keys = keyString.split(\",\").map(k => k.trim());\n      for (const key of keys) {\n        citations.add(key);\n      }\n    }\n    return [...citations];\n  }\n\n  function author_string(ent, template, sep, finalSep) {\n    if (ent.author == null) {\n      return \"\";\n    }\n    var names = ent.author.split(\" and \");\n    let name_strings = names.map(name => {\n      name = name.trim();\n      if (name.indexOf(\",\") != -1) {\n        var last = name.split(\",\")[0].trim();\n        var firsts = name.split(\",\")[1];\n      } else if (name.indexOf(\" \") != -1) {\n        var last = name\n          .split(\" \")\n          .slice(-1)[0]\n          .trim();\n        var firsts = name\n          .split(\" \")\n          .slice(0, -1)\n          .join(\" \");\n      } else {\n        var last = name.trim();\n      }\n      var initials = \"\";\n      if (firsts != undefined) {\n        initials = firsts\n          .trim()\n          .split(\" \")\n          .map(s => s.trim()[0]);\n        initials = initials.join(\".\") + \".\";\n      }\n      return template\n        .replace(\"${F}\", firsts)\n        .replace(\"${L}\", last)\n        .replace(\"${I}\", initials)\n        .trim(); // in case one of first or last was empty\n    });\n    if (names.length > 1) {\n      var str = name_strings.slice(0, names.length - 1).join(sep);\n      str += (finalSep || sep) + name_strings[names.length - 1];\n      return str;\n    } else {\n      return name_strings[0];\n    }\n  }\n\n  function venue_string(ent) {\n    var cite = ent.journal || ent.booktitle || \"\";\n    if (\"volume\" in ent) {\n      var issue = ent.issue || ent.number;\n      issue = issue != undefined ? \"(\" + issue + \")\" : \"\";\n      cite += \", Vol \" + ent.volume + issue;\n    }\n    if (\"pages\" in ent) {\n      cite += \", pp. \" + ent.pages;\n    }\n    if (cite != \"\") cite += \". \";\n    if (\"publisher\" in ent) {\n      cite += ent.publisher;\n      if (cite[cite.length - 1] != \".\") cite += \".\";\n    }\n    return cite;\n  }\n\n  function link_string(ent) {\n    if (\"url\" in ent) {\n      var url = ent.url;\n      var arxiv_match = /arxiv\\.org\\/abs\\/([0-9\\.]*)/.exec(url);\n      if (arxiv_match != null) {\n        url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;\n      }\n\n      if (url.slice(-4) == \".pdf\") {\n        var label = \"PDF\";\n      } else if (url.slice(-5) == \".html\") {\n        var label = \"HTML\";\n      }\n      return ` &ensp;<a href=\"${url}\">[${label || \"link\"}]</a>`;\n    } /* else if (\"doi\" in ent){\n      return ` &ensp;<a href=\"https://doi.org/${ent.doi}\" >[DOI]</a>`;\n    }*/ else {\n      return \"\";\n    }\n  }\n  function doi_string(ent, new_line) {\n    if (\"doi\" in ent) {\n      return `${new_line ? \"<br>\" : \"\"} <a href=\"https://doi.org/${\n      ent.doi\n    }\" style=\"text-decoration:inherit;\">DOI: ${ent.doi}</a>`;\n    } else {\n      return \"\";\n    }\n  }\n\n  function title_string(ent) {\n    return '<span class=\"title\">' + ent.title + \"</span> \";\n  }\n\n  function bibliography_cite(ent, fancy) {\n    if (ent) {\n      var cite = title_string(ent);\n      cite += link_string(ent) + \"<br>\";\n      if (ent.author) {\n        cite += author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n        if (ent.year || ent.date) {\n          cite += \", \";\n        }\n      }\n      if (ent.year || ent.date) {\n        cite += (ent.year || ent.date) + \". \";\n      } else {\n        cite += \". \";\n      }\n      cite += venue_string(ent);\n      cite += doi_string(ent);\n      return cite;\n      /*var cite =  author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n      if (ent.year || ent.date){\n        cite += \", \" + (ent.year || ent.date) + \". \"\n      } else {\n        cite += \". \"\n      }\n      cite += \"<b>\" + ent.title + \"</b>. \";\n      cite += venue_string(ent);\n      cite += doi_string(ent);\n      cite += link_string(ent);\n      return cite*/\n    } else {\n      return \"?\";\n    }\n  }\n\n  function hover_cite(ent) {\n    if (ent) {\n      var cite = \"\";\n      cite += \"<strong>\" + ent.title + \"</strong>\";\n      cite += link_string(ent);\n      cite += \"<br>\";\n\n      var a_str = author_string(ent, \"${I} ${L}\", \", \") + \".\";\n      var v_str =\n        venue_string(ent).trim() + \" \" + ent.year + \". \" + doi_string(ent, true);\n\n      if ((a_str + v_str).length < Math.min(40, ent.title.length)) {\n        cite += a_str + \" \" + v_str;\n      } else {\n        cite += a_str + \"<br>\" + v_str;\n      }\n      return cite;\n    } else {\n      return \"?\";\n    }\n  }\n\n  function domContentLoaded() {\n    return ['interactive', 'complete'].indexOf(document.readyState) !== -1;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function _moveLegacyAffiliationFormatIntoArray(frontMatter) {\n    // authors used to have propoerties \"affiliation\" and \"affiliationURL\".\n    // We now encourage using an array for affiliations containing objects with\n    // properties \"name\" and \"url\".\n    for (let author of frontMatter.authors) {\n      const hasOldStyle = Boolean(author.affiliation);\n      const hasNewStyle = Boolean(author.affiliations);\n      if (!hasOldStyle) continue;\n      if (hasNewStyle) {\n        console.warn(`Author ${author.author} has both old-style (\"affiliation\" & \"affiliationURL\") and new style (\"affiliations\") affiliation information!`);\n      } else {\n        let newAffiliation = {\n          \"name\": author.affiliation\n        };\n        if (author.affiliationURL) newAffiliation.url = author.affiliationURL;\n        author.affiliations = [newAffiliation];\n      }\n    }\n    return frontMatter\n  }\n\n  function parseFrontmatter(element) {\n    const scriptTag = element.firstElementChild;\n    if (scriptTag) {\n      const type = scriptTag.getAttribute('type');\n      if (type.split('/')[1] == 'json') {\n        const content = scriptTag.textContent;\n        const parsed = JSON.parse(content);\n        return _moveLegacyAffiliationFormatIntoArray(parsed);\n      } else {\n        console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.');\n      }\n    } else {\n      console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.');\n    }\n    return {};\n  }\n\n  class FrontMatter$1 extends HTMLElement {\n\n    static get is() { return 'd-front-matter'; }\n\n    constructor() {\n      super();\n\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver( (entries) => {\n        for (const entry of entries) {\n          if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n            const data = parseFrontmatter(this);\n            this.notify(data);\n          }\n        }\n      });\n      observer.observe(this, options);\n    }\n\n    notify(data) {\n      const options = { detail: data, bubbles: true };\n      const event = new CustomEvent('onFrontMatterChanged', options);\n      document.dispatchEvent(event);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // no appendix -> add appendix\n  // title in front, no h1 -> add it\n  // no title in front, h1 -> read and put into frontMatter\n  // footnote -> footnote list\n  // break up bib\n  // if citation, no bib-list -> add citation-list\n\n  // if authors, no byline -> add byline\n\n  function optionalComponents(dom, data) {\n    const body = dom.body;\n    const article = body.querySelector('d-article');\n\n    // If we don't have an article tag, something weird is going on—giving up.\n    if (!article) {\n      console.warn('No d-article tag found; skipping adding optional components!');\n      return;\n    }\n\n    let byline = dom.querySelector('d-byline');\n    if (!byline) {\n      if (data.authors) {\n        byline = dom.createElement('d-byline');\n        body.insertBefore(byline, article);\n      } else {\n        console.warn('No authors found in front matter; please add them before submission!');\n      }\n    }\n\n    let title = dom.querySelector('d-title');\n    if (!title) {\n      title = dom.createElement('d-title');\n      body.insertBefore(title, byline);\n    }\n\n    let h1 = title.querySelector('h1');\n    if (!h1) {\n      h1 = dom.createElement('h1');\n      h1.textContent = data.title;\n      title.insertBefore(h1, title.firstChild);\n    }\n\n    const hasPassword = typeof data.password !== 'undefined';\n    let interstitial = body.querySelector('d-interstitial');\n    if (hasPassword && !interstitial) {\n      const inBrowser = typeof window !== 'undefined';\n      const onLocalhost = inBrowser && window.location.hostname.includes('localhost');\n      if (!inBrowser || !onLocalhost) {\n        interstitial = dom.createElement('d-interstitial');\n        interstitial.password = data.password;\n        body.insertBefore(interstitial, body.firstChild);\n      }\n    } else if (!hasPassword && interstitial) {\n      interstitial.parentElement.removeChild(this);\n    }\n\n    let appendix = dom.querySelector('d-appendix');\n    if (!appendix) {\n      appendix = dom.createElement('d-appendix');\n      dom.body.appendChild(appendix);\n    }\n\n    let footnoteList = dom.querySelector('d-footnote-list');\n    if (!footnoteList) {\n      footnoteList = dom.createElement('d-footnote-list');\n      appendix.appendChild(footnoteList);\n    }\n\n    let citationList = dom.querySelector('d-citation-list');\n    if (!citationList) {\n      citationList = dom.createElement('d-citation-list');\n      appendix.appendChild(citationList);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const frontMatter = new FrontMatter();\n\n  const Controller = {\n    frontMatter: frontMatter,\n    waitingOn: {\n      bibliography: [],\n      citations: []\n    },\n    listeners: {\n      onCiteKeyCreated(event) {\n        const [citeTag, keys] = event.detail;\n\n        // ensure we have citations\n        if (!frontMatter.citationsCollected) {\n          // console.debug('onCiteKeyCreated, but unresolved dependency (\"citations\"). Enqueing.');\n          Controller.waitingOn.citations.push(() =>\n            Controller.listeners.onCiteKeyCreated(event)\n          );\n          return;\n        }\n\n        // ensure we have a loaded bibliography\n        if (!frontMatter.bibliographyParsed) {\n          // console.debug('onCiteKeyCreated, but unresolved dependency (\"bibliography\"). Enqueing.');\n          Controller.waitingOn.bibliography.push(() =>\n            Controller.listeners.onCiteKeyCreated(event)\n          );\n          return;\n        }\n\n        const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n        citeTag.numbers = numbers;\n        const entries = keys.map(key => frontMatter.bibliography.get(key));\n        citeTag.entries = entries;\n      },\n\n      onCiteKeyChanged() {\n        // const [citeTag, keys] = event.detail;\n\n        // update citations\n        frontMatter.citations = collect_citations();\n        frontMatter.citationsCollected = true;\n        for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n          waitingCallback();\n        }\n\n        // update bibliography\n        const citationListTag = document.querySelector(\"d-citation-list\");\n        const bibliographyEntries = new Map(\n          frontMatter.citations.map(citationKey => {\n            return [citationKey, frontMatter.bibliography.get(citationKey)];\n          })\n        );\n        citationListTag.citations = bibliographyEntries;\n\n        const citeTags = document.querySelectorAll(\"d-cite\");\n        for (const citeTag of citeTags) {\n          console.log(citeTag);\n          const keys = citeTag.keys;\n          const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n          citeTag.numbers = numbers;\n          const entries = keys.map(key => frontMatter.bibliography.get(key));\n          citeTag.entries = entries;\n        }\n      },\n\n      onCiteKeyRemoved(event) {\n        Controller.listeners.onCiteKeyChanged(event);\n      },\n\n      onBibliographyChanged(event) {\n        const citationListTag = document.querySelector(\"d-citation-list\");\n\n        const bibliography = event.detail;\n\n        frontMatter.bibliography = bibliography;\n        frontMatter.bibliographyParsed = true;\n        for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n          waitingCallback();\n        }\n\n        // ensure we have citations\n        if (!frontMatter.citationsCollected) {\n          Controller.waitingOn.citations.push(function() {\n            Controller.listeners.onBibliographyChanged({\n              target: event.target,\n              detail: event.detail\n            });\n          });\n          return;\n        }\n\n        if (citationListTag.hasAttribute(\"distill-prerendered\")) {\n          console.debug(\"Citation list was prerendered; not updating it.\");\n        } else {\n          const entries = new Map(\n            frontMatter.citations.map(citationKey => {\n              return [citationKey, frontMatter.bibliography.get(citationKey)];\n            })\n          );\n          citationListTag.citations = entries;\n        }\n      },\n\n      onFootnoteChanged() {\n        // const footnote = event.detail;\n        //TODO: optimize to only update current footnote\n        const footnotesList = document.querySelector(\"d-footnote-list\");\n        if (footnotesList) {\n          const footnotes = document.querySelectorAll(\"d-footnote\");\n          footnotesList.footnotes = footnotes;\n        }\n      },\n\n      onFrontMatterChanged(event) {\n        const data = event.detail;\n        mergeFromYMLFrontmatter(frontMatter, data);\n\n        const interstitial = document.querySelector(\"d-interstitial\");\n        if (interstitial) {\n          if (typeof frontMatter.password !== \"undefined\") {\n            interstitial.password = frontMatter.password;\n          } else {\n            interstitial.parentElement.removeChild(interstitial);\n          }\n        }\n\n        const prerendered = document.body.hasAttribute(\"distill-prerendered\");\n        if (!prerendered && domContentLoaded()) {\n          optionalComponents(document, frontMatter);\n\n          const appendix = document.querySelector(\"distill-appendix\");\n          if (appendix) {\n            appendix.frontMatter = frontMatter;\n          }\n\n          const byline = document.querySelector(\"d-byline\");\n          if (byline) {\n            byline.frontMatter = frontMatter;\n          }\n\n          if (data.katex) {\n            DMath.katexOptions = data.katex;\n          }\n        }\n      },\n\n      DOMContentLoaded() {\n        if (Controller.loaded) {\n          console.warn(\n            \"Controller received DOMContentLoaded but was already loaded!\"\n          );\n          return;\n        } else if (!domContentLoaded()) {\n          console.warn(\n            \"Controller received DOMContentLoaded at document.readyState: \" +\n              document.readyState +\n              \"!\"\n          );\n          return;\n        } else {\n          Controller.loaded = true;\n          console.debug(\"Runlevel 4: Controller running DOMContentLoaded\");\n        }\n\n        const frontMatterTag = document.querySelector(\"d-front-matter\");\n        if (frontMatterTag) {\n          const data = parseFrontmatter(frontMatterTag);\n          Controller.listeners.onFrontMatterChanged({ detail: data });\n        }\n\n        // Resolving \"citations\" dependency due to initial DOM load\n        frontMatter.citations = collect_citations();\n        frontMatter.citationsCollected = true;\n        for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n          waitingCallback();\n        }\n\n        if (frontMatter.bibliographyParsed) {\n          for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n            waitingCallback();\n          }\n        }\n\n        const footnotesList = document.querySelector(\"d-footnote-list\");\n        if (footnotesList) {\n          const footnotes = document.querySelectorAll(\"d-footnote\");\n          footnotesList.footnotes = footnotes;\n        }\n      }\n    } // listeners\n  }; // Controller\n\n  var base = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nhtml {\\n  font-size: 14px;\\n\\tline-height: 1.6em;\\n  /* font-family: \\\"Libre Franklin\\\", \\\"Helvetica Neue\\\", sans-serif; */\\n  font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen, Ubuntu, Cantarell, \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n  /*, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";*/\\n  text-size-adjust: 100%;\\n  -ms-text-size-adjust: 100%;\\n  -webkit-text-size-adjust: 100%;\\n}\\n\\n@media(min-width: 768px) {\\n  html {\\n    font-size: 16px;\\n  }\\n}\\n\\nbody {\\n  margin: 0;\\n}\\n\\na {\\n  color: #004276;\\n}\\n\\nfigure {\\n  margin: 0;\\n}\\n\\ntable {\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th {\\n\\ttext-align: left;\\n}\\n\\ntable thead {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\ntable thead th {\\n  padding-bottom: 0.5em;\\n}\\n\\ntable tbody :first-child td {\\n  padding-top: 0.5em;\\n}\\n\\npre {\\n  overflow: auto;\\n  max-width: 100%;\\n}\\n\\np {\\n  margin-top: 0;\\n  margin-bottom: 1em;\\n}\\n\\nsup, sub {\\n  vertical-align: baseline;\\n  position: relative;\\n  top: -0.4em;\\n  line-height: 1em;\\n}\\n\\nsub {\\n  top: 0.4em;\\n}\\n\\n.kicker,\\n.marker {\\n  font-size: 15px;\\n  font-weight: 600;\\n  color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n/* Headline */\\n\\n@media(min-width: 1024px) {\\n  d-title h1 span {\\n    display: block;\\n  }\\n}\\n\\n/* Figure */\\n\\nfigure {\\n  position: relative;\\n  margin-bottom: 2.5em;\\n  margin-top: 1.5em;\\n}\\n\\nfigcaption+figure {\\n\\n}\\n\\nfigure img {\\n  width: 100%;\\n}\\n\\nfigure svg text,\\nfigure svg tspan {\\n}\\n\\nfigcaption,\\n.figcaption {\\n  color: rgba(0, 0, 0, 0.6);\\n  font-size: 12px;\\n  line-height: 1.5em;\\n}\\n\\n@media(min-width: 1024px) {\\nfigcaption,\\n.figcaption {\\n    font-size: 13px;\\n  }\\n}\\n\\nfigure.external img {\\n  background: white;\\n  border: 1px solid rgba(0, 0, 0, 0.1);\\n  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\\n  padding: 18px;\\n  box-sizing: border-box;\\n}\\n\\nfigcaption a {\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\nfigcaption b,\\nfigcaption strong, {\\n  font-weight: 600;\\n  color: rgba(0, 0, 0, 1.0);\\n}\\n\";\n\n  var layout = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@supports not (display: grid) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    display: block;\\n    padding: 8px;\\n  }\\n}\\n\\n.base-grid,\\ndistill-header,\\nd-title,\\nd-abstract,\\nd-article,\\nd-appendix,\\ndistill-appendix,\\nd-byline,\\nd-footnote-list,\\nd-citation-list,\\ndistill-footer {\\n  display: grid;\\n  justify-items: stretch;\\n  grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\\n  grid-column-gap: 8px;\\n}\\n\\n.grid {\\n  display: grid;\\n  grid-column-gap: 8px;\\n}\\n\\n@media(min-width: 768px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 16px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 16px;\\n  }\\n}\\n\\n@media(min-width: 1000px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 16px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 16px;\\n  }\\n}\\n\\n@media(min-width: 1180px) {\\n  .base-grid,\\n  distill-header,\\n  d-title,\\n  d-abstract,\\n  d-article,\\n  d-appendix,\\n  distill-appendix,\\n  d-byline,\\n  d-footnote-list,\\n  d-citation-list,\\n  distill-footer {\\n    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\\n    grid-column-gap: 32px;\\n  }\\n\\n  .grid {\\n    grid-column-gap: 32px;\\n  }\\n}\\n\\n\\n\\n\\n.base-grid {\\n  grid-column: screen;\\n}\\n\\n/* .l-body,\\nd-article > *  {\\n  grid-column: text;\\n}\\n\\n.l-page,\\nd-title > *,\\nd-figure {\\n  grid-column: page;\\n} */\\n\\n.l-gutter {\\n  grid-column: gutter;\\n}\\n\\n.l-text,\\n.l-body {\\n  grid-column: text;\\n}\\n\\n.l-page {\\n  grid-column: page;\\n}\\n\\n.l-body-outset {\\n  grid-column: middle;\\n}\\n\\n.l-page-outset {\\n  grid-column: page;\\n}\\n\\n.l-screen {\\n  grid-column: screen;\\n}\\n\\n.l-screen-inset {\\n  grid-column: screen;\\n  padding-left: 16px;\\n  padding-left: 16px;\\n}\\n\\n\\n/* Aside */\\n\\nd-article aside {\\n  grid-column: gutter;\\n  font-size: 12px;\\n  line-height: 1.6em;\\n  color: rgba(0, 0, 0, 0.6)\\n}\\n\\n@media(min-width: 768px) {\\n  aside {\\n    grid-column: gutter;\\n  }\\n\\n  .side {\\n    grid-column: gutter;\\n  }\\n}\\n\";\n\n  var print = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@media print {\\n\\n  @page {\\n    size: 8in 11in;\\n    @bottom-right {\\n      content: counter(page) \\\" of \\\" counter(pages);\\n    }\\n  }\\n\\n  html {\\n    /* no general margins -- CSS Grid takes care of those */\\n  }\\n\\n  p, code {\\n    page-break-inside: avoid;\\n  }\\n\\n  h2, h3 {\\n    page-break-after: avoid;\\n  }\\n\\n  d-header {\\n    visibility: hidden;\\n  }\\n\\n  d-footer {\\n    display: none!important;\\n  }\\n\\n}\\n\";\n\n  var byline = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-byline {\\n  contain: style;\\n  overflow: hidden;\\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\\n  font-size: 0.8rem;\\n  line-height: 1.8em;\\n  padding: 1.5rem 0;\\n  min-height: 1.8em;\\n}\\n\\n\\nd-byline .byline {\\n  grid-template-columns: 1fr 1fr;\\n  grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n  d-byline .byline {\\n    grid-template-columns: 1fr 1fr 1fr 1fr;\\n  }\\n}\\n\\nd-byline .authors-affiliations {\\n  grid-column-end: span 2;\\n  grid-template-columns: 1fr 1fr;\\n  margin-bottom: 1em;\\n}\\n\\n@media(min-width: 768px) {\\n  d-byline .authors-affiliations {\\n    margin-bottom: 0;\\n  }\\n}\\n\\nd-byline h3 {\\n  font-size: 0.6rem;\\n  font-weight: 400;\\n  color: rgba(0, 0, 0, 0.5);\\n  margin: 0;\\n  text-transform: uppercase;\\n}\\n\\nd-byline p {\\n  margin: 0;\\n}\\n\\nd-byline a,\\nd-article d-byline a {\\n  color: rgba(0, 0, 0, 0.8);\\n  text-decoration: none;\\n  border-bottom: none;\\n}\\n\\nd-article d-byline a:hover {\\n  text-decoration: underline;\\n  border-bottom: none;\\n}\\n\\nd-byline p.author {\\n  font-weight: 500;\\n}\\n\\nd-byline .affiliations {\\n\\n}\\n\";\n\n  var article = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-article {\\n  contain: layout style;\\n  overflow-x: hidden;\\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\\n  padding-top: 2rem;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article > * {\\n  grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n  d-article {\\n    font-size: 16px;\\n  }\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article {\\n    font-size: 1.06rem;\\n    line-height: 1.7em;\\n  }\\n}\\n\\n\\n/* H2 */\\n\\n\\nd-article .marker {\\n  text-decoration: none;\\n  border: none;\\n  counter-reset: section;\\n  grid-column: kicker;\\n  line-height: 1.7em;\\n}\\n\\nd-article .marker:hover {\\n  border: none;\\n}\\n\\nd-article .marker span {\\n  padding: 0 3px 4px;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n  position: relative;\\n  top: 4px;\\n}\\n\\nd-article .marker:hover span {\\n  color: rgba(0, 0, 0, 0.7);\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.7);\\n}\\n\\nd-article h2 {\\n  font-weight: 600;\\n  font-size: 24px;\\n  line-height: 1.25em;\\n  margin: 2rem 0 1.5rem 0;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n  padding-bottom: 1rem;\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article h2 {\\n    font-size: 36px;\\n  }\\n}\\n\\n/* H3 */\\n\\nd-article h3 {\\n  font-weight: 700;\\n  font-size: 18px;\\n  line-height: 1.4em;\\n  margin-bottom: 1em;\\n  margin-top: 2em;\\n}\\n\\n@media(min-width: 1024px) {\\n  d-article h3 {\\n    font-size: 20px;\\n  }\\n}\\n\\n/* H4 */\\n\\nd-article h4 {\\n  font-weight: 600;\\n  text-transform: uppercase;\\n  font-size: 14px;\\n  line-height: 1.4em;\\n}\\n\\nd-article a {\\n  color: inherit;\\n}\\n\\nd-article p,\\nd-article ul,\\nd-article ol,\\nd-article blockquote {\\n  margin-top: 0;\\n  margin-bottom: 1em;\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\nd-article blockquote {\\n  border-left: 2px solid rgba(0, 0, 0, 0.2);\\n  padding-left: 2em;\\n  font-style: italic;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\nd-article a {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.4);\\n  text-decoration: none;\\n}\\n\\nd-article a:hover {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article .link {\\n  text-decoration: underline;\\n  cursor: pointer;\\n}\\n\\nd-article ul,\\nd-article ol {\\n  padding-left: 24px;\\n}\\n\\nd-article li {\\n  margin-bottom: 0.2em;\\n  margin-left: 0;\\n  padding-left: 0;\\n}\\n\\nd-article li:last-child {\\n  margin-bottom: 0;\\n}\\n\\nd-article pre {\\n  font-size: 14px;\\n  margin-bottom: 20px;\\n}\\n\\nd-article hr {\\n  grid-column: screen;\\n  width: 100%;\\n  border: none;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n  margin-top: 60px;\\n  margin-bottom: 60px;\\n}\\n\\nd-article section {\\n  margin-top: 60px;\\n  margin-bottom: 60px;\\n}\\n\\nd-article span.equation-mimic {\\n  font-family: georgia;\\n  font-size: 115%;\\n  font-style: italic;\\n}\\n\\nd-article > d-code,\\nd-article section > d-code  {\\n  display: block;\\n}\\n\\nd-article > d-math[block],\\nd-article section > d-math[block]  {\\n  display: block;\\n}\\n\\n@media (max-width: 768px) {\\n  d-article > d-code,\\n  d-article section > d-code,\\n  d-article > d-math[block],\\n  d-article section > d-math[block] {\\n      overflow-x: scroll;\\n      -ms-overflow-style: none;  // IE 10+\\n      overflow: -moz-scrollbars-none;  // Firefox\\n  }\\n\\n  d-article > d-code::-webkit-scrollbar,\\n  d-article section > d-code::-webkit-scrollbar,\\n  d-article > d-math[block]::-webkit-scrollbar,\\n  d-article section > d-math[block]::-webkit-scrollbar {\\n    display: none;  // Safari and Chrome\\n  }\\n}\\n\\nd-article .citation {\\n  color: #668;\\n  cursor: pointer;\\n}\\n\\nd-include {\\n  width: auto;\\n  display: block;\\n}\\n\\nd-figure {\\n  contain: layout style;\\n}\\n\\n/* KaTeX */\\n\\n.katex, .katex-prerendered {\\n  contain: style;\\n  display: inline-block;\\n}\\n\\n/* Tables */\\n\\nd-article table {\\n  border-collapse: collapse;\\n  margin-bottom: 1.5rem;\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table th {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table td {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\nd-article table tr:last-of-type td {\\n  border-bottom: none;\\n}\\n\\nd-article table th,\\nd-article table td {\\n  font-size: 15px;\\n  padding: 2px 8px;\\n}\\n\\nd-article table tbody :first-child td {\\n  padding-top: 2px;\\n}\\n\";\n\n  var title = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n *      http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-title {\\n  padding: 2rem 0 1.5rem;\\n  contain: layout style;\\n  overflow-x: hidden;\\n}\\n\\n@media(min-width: 768px) {\\n  d-title {\\n    padding: 4rem 0 1.5rem;\\n  }\\n}\\n\\nd-title h1 {\\n  grid-column: text;\\n  font-size: 40px;\\n  font-weight: 700;\\n  line-height: 1.1em;\\n  margin: 0 0 0.5rem;\\n}\\n\\n@media(min-width: 768px) {\\n  d-title h1 {\\n    font-size: 50px;\\n  }\\n}\\n\\nd-title p {\\n  font-weight: 300;\\n  font-size: 1.2rem;\\n  line-height: 1.55em;\\n  grid-column: text;\\n}\\n\\nd-title .status {\\n  margin-top: 0px;\\n  font-size: 12px;\\n  color: #009688;\\n  opacity: 0.8;\\n  grid-column: kicker;\\n}\\n\\nd-title .status span {\\n  line-height: 1;\\n  display: inline-block;\\n  padding: 6px 0;\\n  border-bottom: 1px solid #80cbc4;\\n  font-size: 11px;\\n  text-transform: uppercase;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles = base + layout + title + byline + article + math + print;\n\n  function makeStyleTag(dom) {\n\n    const styleTagId = 'distill-prerendered-styles';\n    const prerenderedTag = dom.getElementById(styleTagId);\n    if (!prerenderedTag) {\n      const styleTag = dom.createElement('style');\n      styleTag.id = styleTagId;\n      styleTag.type = 'text/css';\n      const cssTextTag = dom.createTextNode(styles);\n      styleTag.appendChild(cssTextTag);\n      const firstScriptTag = dom.head.querySelector('script');\n      dom.head.insertBefore(styleTag, firstScriptTag);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  function addPolyfill(polyfill, polyfillLoadedCallback) {\n    console.debug('Runlevel 0: Polyfill required: ' + polyfill.name);\n    const script = document.createElement('script');\n    script.src = polyfill.url;\n    script.async = false;\n    if (polyfillLoadedCallback) {\n      script.onload = function() { polyfillLoadedCallback(polyfill); };\n    }\n    script.onerror = function() {\n      new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name);\n    };\n    document.head.appendChild(script);\n  }\n\n  const polyfills = [\n    {\n      name: 'WebComponents',\n      support: function() {\n        return 'customElements' in window &&\n               'attachShadow' in Element.prototype &&\n               'getRootNode' in Element.prototype &&\n               'content' in document.createElement('template') &&\n               'Promise' in window &&\n               'from' in Array;\n      },\n      url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js'\n    }, {\n      name: 'IntersectionObserver',\n      support: function() {\n        return 'IntersectionObserver' in window &&\n               'IntersectionObserverEntry' in window;\n      },\n      url: 'https://distill.pub/third-party/polyfills/intersection-observer.js'\n    },\n  ];\n\n  class Polyfills {\n\n    static browserSupportsAllFeatures() {\n      return polyfills.every((poly) => poly.support());\n    }\n\n    static load(callback) {\n      // Define an intermediate callback that checks if all is loaded.\n      const polyfillLoaded = function(polyfill) {\n        polyfill.loaded = true;\n        console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name);\n        // console.debug(window[polyfill.name]);\n        if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {\n          console.debug('Runlevel 0: All required polyfills have finished loading.');\n          console.debug('Runlevel 0->1.');\n          window.distillRunlevel = 1;\n          callback();\n        }\n      };\n      // Add polyfill script tags\n      for (const polyfill of Polyfills.neededPolyfills) {\n        addPolyfill(polyfill, polyfillLoaded);\n      }\n    }\n\n    static get neededPolyfills() {\n      if (!Polyfills._neededPolyfills) {\n        Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());\n      }\n      return Polyfills._neededPolyfills;\n    }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // const marginSmall = 16;\n  // const marginLarge = 3 * marginSmall;\n  // const margin = marginSmall + marginLarge;\n  // const gutter = marginSmall;\n  // const outsetAmount = margin / 2;\n  // const numCols = 4;\n  // const numGutters = numCols - 1;\n  // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;\n  //\n  // const screenwidth = 768;\n  // const pageWidth = screenwidth - 2 * marginLarge;\n  // const bodyWidth = pageWidth - columnWidth - gutter;\n\n  function body(selector) {\n    return `${selector} {\n      grid-column: left / text;\n    }\n  `;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$1 = Template('d-abstract', `\n<style>\n  :host {\n    font-size: 1.25rem;\n    line-height: 1.6em;\n    color: rgba(0, 0, 0, 0.7);\n    -webkit-font-smoothing: antialiased;\n  }\n\n  ::slotted(p) {\n    margin-top: 0;\n    margin-bottom: 1em;\n    grid-column: text-start / middle-end;\n  }\n  ${body('d-abstract')}\n</style>\n\n<slot></slot>\n`);\n\n  class Abstract extends T$1(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$2 = Template('d-appendix', `\n<style>\n\nd-appendix {\n  contain: layout style;\n  font-size: 0.8em;\n  line-height: 1.7em;\n  margin-top: 60px;\n  margin-bottom: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  color: rgba(0,0,0,0.5);\n  padding-top: 60px;\n  padding-bottom: 48px;\n}\n\nd-appendix h3 {\n  grid-column: page-start / text-start;\n  font-size: 15px;\n  font-weight: 500;\n  margin-top: 1em;\n  margin-bottom: 0;\n  color: rgba(0,0,0,0.65);\n}\n\nd-appendix h3 + * {\n  margin-top: 1em;\n}\n\nd-appendix ol {\n  padding: 0 0 0 15px;\n}\n\n@media (min-width: 768px) {\n  d-appendix ol {\n    padding: 0 0 0 30px;\n    margin-left: -30px;\n  }\n}\n\nd-appendix li {\n  margin-bottom: 1em;\n}\n\nd-appendix a {\n  color: rgba(0, 0, 0, 0.6);\n}\n\nd-appendix > * {\n  grid-column: text;\n}\n\nd-appendix > d-footnote-list,\nd-appendix > d-citation-list,\nd-appendix > distill-appendix {\n  grid-column: screen;\n}\n\n</style>\n\n`, false);\n\n  class Appendix extends T$2(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // import { Template } from '../mixins/template';\n  // import { Controller } from '../controller';\n\n  const isOnlyWhitespace = /^\\s*$/;\n\n  class Article extends HTMLElement {\n    static get is() { return 'd-article'; }\n\n    constructor() {\n      super();\n\n      new MutationObserver( (mutations) => {\n        for (const mutation of mutations) {\n          for (const addedNode of mutation.addedNodes) {\n            switch (addedNode.nodeName) {\n            case '#text': { // usually text nodes are only linebreaks.\n              const text = addedNode.nodeValue;\n              if (!isOnlyWhitespace.test(text)) {\n                console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a <span> or <p> tag. We found the following text: ' + text);\n                const wrapper = document.createElement('span');\n                wrapper.innerHTML = addedNode.nodeValue;\n                addedNode.parentNode.insertBefore(wrapper, addedNode);\n                addedNode.parentNode.removeChild(addedNode);\n              }\n            } break;\n            }\n          }\n        }\n      }).observe(this, {childList: true});\n    }\n\n  }\n\n  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n  function createCommonjsModule(fn, module) {\n  \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n  }\n\n  var bibtexParse = createCommonjsModule(function (module, exports) {\n  /* start bibtexParse 0.0.22 */\n\n  //Original work by Henrik Muehe (c) 2010\n  //\n  //CommonJS port by Mikola Lysenko 2013\n  //\n  //Port to Browser lib by ORCID / RCPETERS\n  //\n  //Issues:\n  //no comment handling within strings\n  //no string concatenation\n  //no variable values yet\n  //Grammar implemented here:\n  //bibtex -> (string | preamble | comment | entry)*;\n  //string -> '@STRING' '{' key_equals_value '}';\n  //preamble -> '@PREAMBLE' '{' value '}';\n  //comment -> '@COMMENT' '{' value '}';\n  //entry -> '@' key '{' key ',' key_value_list '}';\n  //key_value_list -> key_equals_value (',' key_equals_value)*;\n  //key_equals_value -> key '=' value;\n  //value -> value_quotes | value_braces | key;\n  //value_quotes -> '\"' .*? '\"'; // not quite\n  //value_braces -> '{' .*? '\"'; // not quite\n  (function(exports) {\n\n      function BibtexParser() {\n\n          this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n          this.notKey = [',','{','}',' ','='];\n          this.pos = 0;\n          this.input = \"\";\n          this.entries = new Array();\n\n          this.currentEntry = \"\";\n\n          this.setInput = function(t) {\n              this.input = t;\n          };\n\n          this.getEntries = function() {\n              return this.entries;\n          };\n\n          this.isWhitespace = function(s) {\n              return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n          };\n\n          this.match = function(s, canCommentOut) {\n              if (canCommentOut == undefined || canCommentOut == null)\n                  canCommentOut = true;\n              this.skipWhitespace(canCommentOut);\n              if (this.input.substring(this.pos, this.pos + s.length) == s) {\n                  this.pos += s.length;\n              } else {\n                  throw \"Token mismatch, expected \" + s + \", found \"\n                          + this.input.substring(this.pos);\n              }            this.skipWhitespace(canCommentOut);\n          };\n\n          this.tryMatch = function(s, canCommentOut) {\n              if (canCommentOut == undefined || canCommentOut == null)\n                  canCommentOut = true;\n              this.skipWhitespace(canCommentOut);\n              if (this.input.substring(this.pos, this.pos + s.length) == s) {\n                  return true;\n              } else {\n                  return false;\n              }        };\n\n          /* when search for a match all text can be ignored, not just white space */\n          this.matchAt = function() {\n              while (this.input.length > this.pos && this.input[this.pos] != '@') {\n                  this.pos++;\n              }\n              if (this.input[this.pos] == '@') {\n                  return true;\n              }            return false;\n          };\n\n          this.skipWhitespace = function(canCommentOut) {\n              while (this.isWhitespace(this.input[this.pos])) {\n                  this.pos++;\n              }            if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n                  while (this.input[this.pos] != \"\\n\") {\n                      this.pos++;\n                  }                this.skipWhitespace(canCommentOut);\n              }        };\n\n          this.value_braces = function() {\n              var bracecount = 0;\n              this.match(\"{\", false);\n              var start = this.pos;\n              var escaped = false;\n              while (true) {\n                  if (!escaped) {\n                      if (this.input[this.pos] == '}') {\n                          if (bracecount > 0) {\n                              bracecount--;\n                          } else {\n                              var end = this.pos;\n                              this.match(\"}\", false);\n                              return this.input.substring(start, end);\n                          }                    } else if (this.input[this.pos] == '{') {\n                          bracecount++;\n                      } else if (this.pos >= this.input.length - 1) {\n                          throw \"Unterminated value\";\n                      }                }                if (this.input[this.pos] == '\\\\' && escaped == false)\n                      escaped = true;\n                  else\n                      escaped = false;\n                  this.pos++;\n              }        };\n\n          this.value_comment = function() {\n              var str = '';\n              var brcktCnt = 0;\n              while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n                  str = str + this.input[this.pos];\n                  if (this.input[this.pos] == '{')\n                      brcktCnt++;\n                  if (this.input[this.pos] == '}')\n                      brcktCnt--;\n                  if (this.pos >= this.input.length - 1) {\n                      throw \"Unterminated value:\" + this.input.substring(start);\n                  }                this.pos++;\n              }            return str;\n          };\n\n          this.value_quotes = function() {\n              this.match('\"', false);\n              var start = this.pos;\n              var escaped = false;\n              while (true) {\n                  if (!escaped) {\n                      if (this.input[this.pos] == '\"') {\n                          var end = this.pos;\n                          this.match('\"', false);\n                          return this.input.substring(start, end);\n                      } else if (this.pos >= this.input.length - 1) {\n                          throw \"Unterminated value:\" + this.input.substring(start);\n                      }                }\n                  if (this.input[this.pos] == '\\\\' && escaped == false)\n                      escaped = true;\n                  else\n                      escaped = false;\n                  this.pos++;\n              }        };\n\n          this.single_value = function() {\n              var start = this.pos;\n              if (this.tryMatch(\"{\")) {\n                  return this.value_braces();\n              } else if (this.tryMatch('\"')) {\n                  return this.value_quotes();\n              } else {\n                  var k = this.key();\n                  if (k.match(\"^[0-9]+$\"))\n                      return k;\n                  else if (this.months.indexOf(k.toLowerCase()) >= 0)\n                      return k.toLowerCase();\n                  else\n                      throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n\n              }        };\n\n          this.value = function() {\n              var values = [];\n              values.push(this.single_value());\n              while (this.tryMatch(\"#\")) {\n                  this.match(\"#\");\n                  values.push(this.single_value());\n              }            return values.join(\"\");\n          };\n\n          this.key = function() {\n              var start = this.pos;\n              while (true) {\n                  if (this.pos >= this.input.length) {\n                      throw \"Runaway key\";\n                  }                                // а-яА-Я is Cyrillic\n                  //console.log(this.input[this.pos]);\n                  if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n                      return this.input.substring(start, this.pos);\n                  } else {\n                      this.pos++;\n\n                  }            }        };\n\n          this.key_equals_value = function() {\n              var key = this.key();\n              if (this.tryMatch(\"=\")) {\n                  this.match(\"=\");\n                  var val = this.value();\n                  return [ key, val ];\n              } else {\n                  throw \"... = value expected, equals sign missing:\"\n                          + this.input.substring(this.pos);\n              }        };\n\n          this.key_value_list = function() {\n              var kv = this.key_equals_value();\n              this.currentEntry['entryTags'] = {};\n              this.currentEntry['entryTags'][kv[0]] = kv[1];\n              while (this.tryMatch(\",\")) {\n                  this.match(\",\");\n                  // fixes problems with commas at the end of a list\n                  if (this.tryMatch(\"}\")) {\n                      break;\n                  }\n                  kv = this.key_equals_value();\n                  this.currentEntry['entryTags'][kv[0]] = kv[1];\n              }        };\n\n          this.entry_body = function(d) {\n              this.currentEntry = {};\n              this.currentEntry['citationKey'] = this.key();\n              this.currentEntry['entryType'] = d.substring(1);\n              this.match(\",\");\n              this.key_value_list();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.directive = function() {\n              this.match(\"@\");\n              return \"@\" + this.key();\n          };\n\n          this.preamble = function() {\n              this.currentEntry = {};\n              this.currentEntry['entryType'] = 'PREAMBLE';\n              this.currentEntry['entry'] = this.value_comment();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.comment = function() {\n              this.currentEntry = {};\n              this.currentEntry['entryType'] = 'COMMENT';\n              this.currentEntry['entry'] = this.value_comment();\n              this.entries.push(this.currentEntry);\n          };\n\n          this.entry = function(d) {\n              this.entry_body(d);\n          };\n\n          this.bibtex = function() {\n              while (this.matchAt()) {\n                  var d = this.directive();\n                  this.match(\"{\");\n                  if (d == \"@STRING\") {\n                      this.string();\n                  } else if (d == \"@PREAMBLE\") {\n                      this.preamble();\n                  } else if (d == \"@COMMENT\") {\n                      this.comment();\n                  } else {\n                      this.entry(d);\n                  }\n                  this.match(\"}\");\n              }        };\n      }\n      exports.toJSON = function(bibtex) {\n          var b = new BibtexParser();\n          b.setInput(bibtex);\n          b.bibtex();\n          return b.entries;\n      };\n\n      /* added during hackathon don't hate on me */\n      exports.toBibtex = function(json) {\n          var out = '';\n          for ( var i in json) {\n              out += \"@\" + json[i].entryType;\n              out += '{';\n              if (json[i].citationKey)\n                  out += json[i].citationKey + ', ';\n              if (json[i].entry)\n                  out += json[i].entry ;\n              if (json[i].entryTags) {\n                  var tags = '';\n                  for (var jdx in json[i].entryTags) {\n                      if (tags.length != 0)\n                          tags += ', ';\n                      tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n                  }\n                  out += tags;\n              }\n              out += '}\\n\\n';\n          }\n          return out;\n\n      };\n\n  })( exports);\n\n  /* end bibtexParse */\n  });\n\n  // Copyright 2018 The Distill Template Authors\n\n  function normalizeTag(string) {\n    return string\n      .replace(/[\\t\\n ]+/g, ' ')\n      .replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)\n      .replace(/{\\\\([a-zA-Z])}/g, (full, char) => char);\n  }\n\n  function parseBibtex(bibtex) {\n    const bibliography = new Map();\n    const parsedEntries = bibtexParse.toJSON(bibtex);\n    for (const entry of parsedEntries) {\n      // normalize tags; note entryTags is an object, not Map\n      for (const [key, value] of Object.entries(entry.entryTags)) {\n        entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n      }\n      entry.entryTags.type = entry.entryType;\n      // add to bibliography\n      bibliography.set(entry.citationKey, entry.entryTags);\n    }\n    return bibliography;\n  }\n\n  function serializeFrontmatterToBibtex(frontMatter) {\n    return `@article{${frontMatter.slug},\n  author = {${frontMatter.bibtexAuthors}},\n  title = {${frontMatter.title}},\n  journal = {${frontMatter.journal.title}},\n  year = {${frontMatter.publishedYear}},\n  note = {${frontMatter.url}},\n  doi = {${frontMatter.doi}}\n}`;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  class Bibliography extends HTMLElement {\n\n    static get is() { return 'd-bibliography'; }\n\n    constructor() {\n      super();\n\n      // set up mutation observer\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver( (entries) => {\n        for (const entry of entries) {\n          if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n            this.parseIfPossible();\n          }\n        }\n      });\n      observer.observe(this, options);\n    }\n\n    connectedCallback() {\n      requestAnimationFrame(() => {\n        this.parseIfPossible();\n      });\n    }\n\n    parseIfPossible() {\n      const scriptTag = this.querySelector('script');\n      if (!scriptTag) return;\n      if (scriptTag.type == 'text/bibtex') {\n        const newBibtex = scriptTag.textContent;\n        if (this.bibtex !== newBibtex) {\n          this.bibtex = newBibtex;\n          const bibliography = parseBibtex(this.bibtex);\n          this.notify(bibliography);\n        }\n      } else if (scriptTag.type == 'text/json') {\n        const bibliography = new Map(JSON.parse(scriptTag.textContent));\n        this.notify(bibliography);\n      } else {\n        console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n      }\n    }\n\n    notify(bibliography) {\n      const options = { detail: bibliography, bubbles: true };\n      const event = new CustomEvent('onBibliographyChanged', options);\n      this.dispatchEvent(event);\n    }\n\n    /* observe 'src' attribute */\n\n    static get observedAttributes() {\n      return ['src'];\n    }\n\n    receivedBibtex(event) {\n      const bibliography = parseBibtex(event.target.response);\n      this.notify(bibliography);\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      var oReq = new XMLHttpRequest();\n      oReq.onload = (e) => this.receivedBibtex(e);\n      oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);\n      oReq.responseType = 'text';\n      oReq.open('GET', newValue, true);\n      oReq.send();\n    }\n\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // import style from '../styles/d-byline.css';\n\n  function bylineTemplate(frontMatter) {\n    return `\n    <div class=\"byline grid\">\n      <div>\n          <h3>Authors</h3>\n          <div>\n              ${frontMatter.authors.map((author, i) => `\n              <span class=\"author\">\n        ${author.personalURL ? `\n          <a class=\"name\" href=\"${author.personalURL}\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</a>` : `\n          <span class=\"name\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</span>`}\n      </span>\n              `).join('')}\n          </div>\n      </div>\n      <div >\n          <h3>Affiliation</h3>\n          <div><a href=\"https://huggingface.co/\">HuggingFace</a>\n          </div>\n      </div>\n      <div >\n          <h3>Published</h3>\n          <div>May 31, 2024</div>\n      </div>\n    </div>\n`;\n  }\n\n  class Byline extends HTMLElement {\n\n    static get is() { return 'd-byline'; }\n\n    set frontMatter(frontMatter) {\n      this.innerHTML = bylineTemplate(frontMatter);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$3 = Template(\n    \"d-cite\",\n    `\n<style>\n\n:host {\n  display: inline-block;\n}\n\n.citation {\n  color: hsla(206, 90%, 20%, 0.7);\n}\n\n.citation-number {\n  cursor: default;\n  white-space: nowrap;\n  font-family: -apple-system, BlinkMacSystemFont, \"Roboto\", Helvetica, sans-serif;\n  font-size: 75%;\n  color: hsla(206, 90%, 20%, 0.7);\n  display: inline-block;\n  line-height: 1.1em;\n  text-align: center;\n  position: relative;\n  top: -2px;\n  margin: 0 2px;\n}\n\nfigcaption .citation-number {\n  font-size: 11px;\n  font-weight: normal;\n  top: -2px;\n  line-height: 1em;\n}\n\nul {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n\nul li {\n  padding: 15px 10px 15px 10px;\n  border-bottom: 1px solid rgba(0,0,0,0.1)\n}\n\nul li:last-of-type {\n  border-bottom: none;\n}\n\n</style>\n\n<d-hover-box id=\"hover-box\"></d-hover-box>\n\n<div id=\"citation-\" class=\"citation\">\n  <span class=\"citation-number\"></span>\n</div>\n`\n  );\n\n  class Cite extends T$3(HTMLElement) {\n    /* Lifecycle */\n    constructor() {\n      super();\n      this._numbers = [];\n      this._entries = [];\n    }\n\n    connectedCallback() {\n      this.outerSpan = this.root.querySelector(\"#citation-\");\n      this.innerSpan = this.root.querySelector(\".citation-number\");\n      this.hoverBox = this.root.querySelector(\"d-hover-box\");\n      window.customElements.whenDefined(\"d-hover-box\").then(() => {\n        this.hoverBox.listen(this);\n      });\n      // in case this component got connected after values were set\n      if (this.numbers) {\n        this.displayNumbers(this.numbers);\n      }\n      if (this.entries) {\n        this.displayEntries(this.entries);\n      }\n    }\n\n    //TODO This causes an infinite loop on firefox with polyfills.\n    // This is only needed for interactive editing so no priority.\n    // disconnectedCallback() {\n    // const options = { detail: [this, this.keys], bubbles: true };\n    // const event = new CustomEvent('onCiteKeyRemoved', options);\n    // document.dispatchEvent(event);\n    // }\n\n    /* observe 'key' attribute */\n\n    static get observedAttributes() {\n      return [\"key\", \"bibtex-key\"];\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      const eventName = oldValue ? \"onCiteKeyChanged\" : \"onCiteKeyCreated\";\n      const keys = newValue.split(\",\").map(k => k.trim());\n      const options = { detail: [this, keys], bubbles: true };\n      const event = new CustomEvent(eventName, options);\n      document.dispatchEvent(event);\n    }\n\n    set key(value) {\n      this.setAttribute(\"key\", value);\n    }\n\n    get key() {\n      return this.getAttribute(\"key\") || this.getAttribute(\"bibtex-key\");\n    }\n\n    get keys() {\n      const result = this.key.split(\",\");\n      console.log(result);\n      return result;\n    }\n\n    /* Setters & Rendering */\n\n    set numbers(numbers) {\n      this._numbers = numbers;\n      this.displayNumbers(numbers);\n    }\n\n    get numbers() {\n      return this._numbers;\n    }\n\n    displayNumbers(numbers) {\n      if (!this.innerSpan) return;\n      const numberStrings = numbers.map(index => {\n        return index == -1 ? \"?\" : index + 1 + \"\";\n      });\n      const textContent = \"[\" + numberStrings.join(\", \") + \"]\";\n      this.innerSpan.textContent = textContent;\n    }\n\n    set entries(entries) {\n      this._entries = entries;\n      this.displayEntries(entries);\n    }\n\n    get entries() {\n      return this._entries;\n    }\n\n    displayEntries(entries) {\n      if (!this.hoverBox) return;\n      this.hoverBox.innerHTML = `<ul>\n      ${entries\n        .map(hover_cite)\n        .map(html => `<li>${html}</li>`)\n        .join(\"\\n\")}\n    </ul>`;\n    }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles$1 = `\nd-citation-list {\n  contain: style;\n}\n\nd-citation-list .references {\n  grid-column: text;\n}\n\nd-citation-list .references .title {\n  font-weight: 500;\n}\n`;\n\n  function renderCitationList(element, entries, dom=document) {\n    if (entries.size > 0) {\n      element.style.display = '';\n      let list = element.querySelector('.references');\n      if (list) {\n        list.innerHTML = '';\n      } else {\n        const stylesTag = dom.createElement('style');\n        stylesTag.innerHTML = styles$1;\n        element.appendChild(stylesTag);\n\n        const heading = dom.createElement('h3');\n        heading.id = 'references';\n        heading.textContent = 'References';\n        element.appendChild(heading);\n\n        list = dom.createElement('ol');\n        list.id = 'references-list';\n        list.className = 'references';\n        element.appendChild(list);\n      }\n\n      for (const [key, entry] of entries) {\n        const listItem = dom.createElement('li');\n        listItem.id = key;\n        listItem.innerHTML = bibliography_cite(entry);\n        list.appendChild(listItem);\n      }\n    } else {\n      element.style.display = 'none';\n    }\n  }\n\n  class CitationList extends HTMLElement {\n\n    static get is() { return 'd-citation-list'; }\n\n    connectedCallback() {\n      if (!this.hasAttribute('distill-prerendered')) {\n        this.style.display = 'none';\n      }\n    }\n\n    set citations(citations) {\n      renderCitationList(this, citations);\n    }\n\n  }\n\n  var prism = createCommonjsModule(function (module) {\n  /* **********************************************\n       Begin prism-core.js\n  ********************************************** */\n\n  var _self = (typeof window !== 'undefined')\n  \t? window   // if in browser\n  \t: (\n  \t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n  \t\t? self // if in worker\n  \t\t: {}   // if in node js\n  \t);\n\n  /**\n   * Prism: Lightweight, robust, elegant syntax highlighting\n   * MIT license http://www.opensource.org/licenses/mit-license.php/\n   * @author Lea Verou http://lea.verou.me\n   */\n\n  var Prism = (function (_self){\n\n  // Private helper vars\n  var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n  var uniqueId = 0;\n\n\n  var _ = {\n  \tmanual: _self.Prism && _self.Prism.manual,\n  \tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n  \tutil: {\n  \t\tencode: function encode(tokens) {\n  \t\t\tif (tokens instanceof Token) {\n  \t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n  \t\t\t} else if (Array.isArray(tokens)) {\n  \t\t\t\treturn tokens.map(encode);\n  \t\t\t} else {\n  \t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n  \t\t\t}\n  \t\t},\n\n  \t\ttype: function (o) {\n  \t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n  \t\t},\n\n  \t\tobjId: function (obj) {\n  \t\t\tif (!obj['__id']) {\n  \t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n  \t\t\t}\n  \t\t\treturn obj['__id'];\n  \t\t},\n\n  \t\t// Deep clone a language definition (e.g. to extend it)\n  \t\tclone: function deepClone(o, visited) {\n  \t\t\tvar clone, id, type = _.util.type(o);\n  \t\t\tvisited = visited || {};\n\n  \t\t\tswitch (type) {\n  \t\t\t\tcase 'Object':\n  \t\t\t\t\tid = _.util.objId(o);\n  \t\t\t\t\tif (visited[id]) {\n  \t\t\t\t\t\treturn visited[id];\n  \t\t\t\t\t}\n  \t\t\t\t\tclone = {};\n  \t\t\t\t\tvisited[id] = clone;\n\n  \t\t\t\t\tfor (var key in o) {\n  \t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n  \t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n\n  \t\t\t\t\treturn clone;\n\n  \t\t\t\tcase 'Array':\n  \t\t\t\t\tid = _.util.objId(o);\n  \t\t\t\t\tif (visited[id]) {\n  \t\t\t\t\t\treturn visited[id];\n  \t\t\t\t\t}\n  \t\t\t\t\tclone = [];\n  \t\t\t\t\tvisited[id] = clone;\n\n  \t\t\t\t\to.forEach(function (v, i) {\n  \t\t\t\t\t\tclone[i] = deepClone(v, visited);\n  \t\t\t\t\t});\n\n  \t\t\t\t\treturn clone;\n\n  \t\t\t\tdefault:\n  \t\t\t\t\treturn o;\n  \t\t\t}\n  \t\t},\n\n  \t\t/**\n  \t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n  \t\t *\n  \t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n  \t\t *\n  \t\t * @param {Element} element\n  \t\t * @returns {string}\n  \t\t */\n  \t\tgetLanguage: function (element) {\n  \t\t\twhile (element && !lang.test(element.className)) {\n  \t\t\t\telement = element.parentElement;\n  \t\t\t}\n  \t\t\tif (element) {\n  \t\t\t\treturn (element.className.match(lang) || [, 'none'])[1].toLowerCase();\n  \t\t\t}\n  \t\t\treturn 'none';\n  \t\t},\n\n  \t\t/**\n  \t\t * Returns the script element that is currently executing.\n  \t\t *\n  \t\t * This does __not__ work for line script element.\n  \t\t *\n  \t\t * @returns {HTMLScriptElement | null}\n  \t\t */\n  \t\tcurrentScript: function () {\n  \t\t\tif (typeof document === 'undefined') {\n  \t\t\t\treturn null;\n  \t\t\t}\n  \t\t\tif ('currentScript' in document) {\n  \t\t\t\treturn document.currentScript;\n  \t\t\t}\n\n  \t\t\t// IE11 workaround\n  \t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n  \t\t\t// this will not work for inline scripts\n\n  \t\t\ttry {\n  \t\t\t\tthrow new Error();\n  \t\t\t} catch (err) {\n  \t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n  \t\t\t\t// A stack will look like this:\n  \t\t\t\t//\n  \t\t\t\t// Error\n  \t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n  \t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n  \t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(err.stack) || [])[1];\n  \t\t\t\tif (src) {\n  \t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n  \t\t\t\t\tfor (var i in scripts) {\n  \t\t\t\t\t\tif (scripts[i].src == src) {\n  \t\t\t\t\t\t\treturn scripts[i];\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\treturn null;\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tlanguages: {\n  \t\textend: function (id, redef) {\n  \t\t\tvar lang = _.util.clone(_.languages[id]);\n\n  \t\t\tfor (var key in redef) {\n  \t\t\t\tlang[key] = redef[key];\n  \t\t\t}\n\n  \t\t\treturn lang;\n  \t\t},\n\n  \t\t/**\n  \t\t * Insert a token before another token in a language literal\n  \t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n  \t\t * we cannot just provide an object, we need an object and a key.\n  \t\t * @param inside The key (or language id) of the parent\n  \t\t * @param before The key to insert before.\n  \t\t * @param insert Object with the key/value pairs to insert\n  \t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n  \t\t */\n  \t\tinsertBefore: function (inside, before, insert, root) {\n  \t\t\troot = root || _.languages;\n  \t\t\tvar grammar = root[inside];\n  \t\t\tvar ret = {};\n\n  \t\t\tfor (var token in grammar) {\n  \t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n  \t\t\t\t\tif (token == before) {\n  \t\t\t\t\t\tfor (var newToken in insert) {\n  \t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n  \t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n  \t\t\t\t\t\t\t}\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n  \t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n  \t\t\t\t\t\tret[token] = grammar[token];\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tvar old = root[inside];\n  \t\t\troot[inside] = ret;\n\n  \t\t\t// Update references in other language definitions\n  \t\t\t_.languages.DFS(_.languages, function(key, value) {\n  \t\t\t\tif (value === old && key != inside) {\n  \t\t\t\t\tthis[key] = ret;\n  \t\t\t\t}\n  \t\t\t});\n\n  \t\t\treturn ret;\n  \t\t},\n\n  \t\t// Traverse a language definition with Depth First Search\n  \t\tDFS: function DFS(o, callback, type, visited) {\n  \t\t\tvisited = visited || {};\n\n  \t\t\tvar objId = _.util.objId;\n\n  \t\t\tfor (var i in o) {\n  \t\t\t\tif (o.hasOwnProperty(i)) {\n  \t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n  \t\t\t\t\tvar property = o[i],\n  \t\t\t\t\t    propertyType = _.util.type(property);\n\n  \t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n  \t\t\t\t\t\tvisited[objId(property)] = true;\n  \t\t\t\t\t\tDFS(property, callback, null, visited);\n  \t\t\t\t\t}\n  \t\t\t\t\telse if (propertyType === 'Array' && !visited[objId(property)]) {\n  \t\t\t\t\t\tvisited[objId(property)] = true;\n  \t\t\t\t\t\tDFS(property, callback, i, visited);\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t},\n  \tplugins: {},\n\n  \thighlightAll: function(async, callback) {\n  \t\t_.highlightAllUnder(document, async, callback);\n  \t},\n\n  \thighlightAllUnder: function(container, async, callback) {\n  \t\tvar env = {\n  \t\t\tcallback: callback,\n  \t\t\tcontainer: container,\n  \t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n  \t\t};\n\n  \t\t_.hooks.run('before-highlightall', env);\n\n  \t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n  \t\t_.hooks.run('before-all-elements-highlight', env);\n\n  \t\tfor (var i = 0, element; element = env.elements[i++];) {\n  \t\t\t_.highlightElement(element, async === true, env.callback);\n  \t\t}\n  \t},\n\n  \thighlightElement: function(element, async, callback) {\n  \t\t// Find language\n  \t\tvar language = _.util.getLanguage(element);\n  \t\tvar grammar = _.languages[language];\n\n  \t\t// Set language on the element, if not present\n  \t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\n  \t\t// Set language on the parent, for styling\n  \t\tvar parent = element.parentNode;\n  \t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n  \t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n  \t\t}\n\n  \t\tvar code = element.textContent;\n\n  \t\tvar env = {\n  \t\t\telement: element,\n  \t\t\tlanguage: language,\n  \t\t\tgrammar: grammar,\n  \t\t\tcode: code\n  \t\t};\n\n  \t\tfunction insertHighlightedCode(highlightedCode) {\n  \t\t\tenv.highlightedCode = highlightedCode;\n\n  \t\t\t_.hooks.run('before-insert', env);\n\n  \t\t\tenv.element.innerHTML = env.highlightedCode;\n\n  \t\t\t_.hooks.run('after-highlight', env);\n  \t\t\t_.hooks.run('complete', env);\n  \t\t\tcallback && callback.call(env.element);\n  \t\t}\n\n  \t\t_.hooks.run('before-sanity-check', env);\n\n  \t\tif (!env.code) {\n  \t\t\t_.hooks.run('complete', env);\n  \t\t\tcallback && callback.call(env.element);\n  \t\t\treturn;\n  \t\t}\n\n  \t\t_.hooks.run('before-highlight', env);\n\n  \t\tif (!env.grammar) {\n  \t\t\tinsertHighlightedCode(_.util.encode(env.code));\n  \t\t\treturn;\n  \t\t}\n\n  \t\tif (async && _self.Worker) {\n  \t\t\tvar worker = new Worker(_.filename);\n\n  \t\t\tworker.onmessage = function(evt) {\n  \t\t\t\tinsertHighlightedCode(evt.data);\n  \t\t\t};\n\n  \t\t\tworker.postMessage(JSON.stringify({\n  \t\t\t\tlanguage: env.language,\n  \t\t\t\tcode: env.code,\n  \t\t\t\timmediateClose: true\n  \t\t\t}));\n  \t\t}\n  \t\telse {\n  \t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n  \t\t}\n  \t},\n\n  \thighlight: function (text, grammar, language) {\n  \t\tvar env = {\n  \t\t\tcode: text,\n  \t\t\tgrammar: grammar,\n  \t\t\tlanguage: language\n  \t\t};\n  \t\t_.hooks.run('before-tokenize', env);\n  \t\tenv.tokens = _.tokenize(env.code, env.grammar);\n  \t\t_.hooks.run('after-tokenize', env);\n  \t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n  \t},\n\n  \ttokenize: function(text, grammar) {\n  \t\tvar rest = grammar.rest;\n  \t\tif (rest) {\n  \t\t\tfor (var token in rest) {\n  \t\t\t\tgrammar[token] = rest[token];\n  \t\t\t}\n\n  \t\t\tdelete grammar.rest;\n  \t\t}\n\n  \t\tvar tokenList = new LinkedList();\n  \t\taddAfter(tokenList, tokenList.head, text);\n\n  \t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n  \t\treturn toArray(tokenList);\n  \t},\n\n  \thooks: {\n  \t\tall: {},\n\n  \t\tadd: function (name, callback) {\n  \t\t\tvar hooks = _.hooks.all;\n\n  \t\t\thooks[name] = hooks[name] || [];\n\n  \t\t\thooks[name].push(callback);\n  \t\t},\n\n  \t\trun: function (name, env) {\n  \t\t\tvar callbacks = _.hooks.all[name];\n\n  \t\t\tif (!callbacks || !callbacks.length) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n  \t\t\t\tcallback(env);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tToken: Token\n  };\n\n  _self.Prism = _;\n\n  function Token(type, content, alias, matchedStr, greedy) {\n  \tthis.type = type;\n  \tthis.content = content;\n  \tthis.alias = alias;\n  \t// Copy of the full string this token was created from\n  \tthis.length = (matchedStr || '').length|0;\n  \tthis.greedy = !!greedy;\n  }\n\n  Token.stringify = function stringify(o, language) {\n  \tif (typeof o == 'string') {\n  \t\treturn o;\n  \t}\n  \tif (Array.isArray(o)) {\n  \t\tvar s = '';\n  \t\to.forEach(function (e) {\n  \t\t\ts += stringify(e, language);\n  \t\t});\n  \t\treturn s;\n  \t}\n\n  \tvar env = {\n  \t\ttype: o.type,\n  \t\tcontent: stringify(o.content, language),\n  \t\ttag: 'span',\n  \t\tclasses: ['token', o.type],\n  \t\tattributes: {},\n  \t\tlanguage: language\n  \t};\n\n  \tvar aliases = o.alias;\n  \tif (aliases) {\n  \t\tif (Array.isArray(aliases)) {\n  \t\t\tArray.prototype.push.apply(env.classes, aliases);\n  \t\t} else {\n  \t\t\tenv.classes.push(aliases);\n  \t\t}\n  \t}\n\n  \t_.hooks.run('wrap', env);\n\n  \tvar attributes = '';\n  \tfor (var name in env.attributes) {\n  \t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n  \t}\n\n  \treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n  };\n\n  /**\n   * @param {string} text\n   * @param {LinkedList<string | Token>} tokenList\n   * @param {any} grammar\n   * @param {LinkedListNode<string | Token>} startNode\n   * @param {number} startPos\n   * @param {boolean} [oneshot=false]\n   * @param {string} [target]\n   */\n  function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n  \tfor (var token in grammar) {\n  \t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n  \t\t\tcontinue;\n  \t\t}\n\n  \t\tvar patterns = grammar[token];\n  \t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n  \t\tfor (var j = 0; j < patterns.length; ++j) {\n  \t\t\tif (target && target == token + ',' + j) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tvar pattern = patterns[j],\n  \t\t\t\tinside = pattern.inside,\n  \t\t\t\tlookbehind = !!pattern.lookbehind,\n  \t\t\t\tgreedy = !!pattern.greedy,\n  \t\t\t\tlookbehindLength = 0,\n  \t\t\t\talias = pattern.alias;\n\n  \t\t\tif (greedy && !pattern.pattern.global) {\n  \t\t\t\t// Without the global flag, lastIndex won't work\n  \t\t\t\tvar flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n  \t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n  \t\t\t}\n\n  \t\t\tpattern = pattern.pattern || pattern;\n\n  \t\t\tfor ( // iterate the token list and keep track of the current token/string position\n  \t\t\t\tvar currentNode = startNode.next, pos = startPos;\n  \t\t\t\tcurrentNode !== tokenList.tail;\n  \t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n  \t\t\t) {\n\n  \t\t\t\tvar str = currentNode.value;\n\n  \t\t\t\tif (tokenList.length > text.length) {\n  \t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tif (str instanceof Token) {\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\n  \t\t\t\tif (greedy && currentNode != tokenList.tail.prev) {\n  \t\t\t\t\tpattern.lastIndex = pos;\n  \t\t\t\t\tvar match = pattern.exec(text);\n  \t\t\t\t\tif (!match) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n\n  \t\t\t\t\tvar from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n  \t\t\t\t\tvar to = match.index + match[0].length;\n  \t\t\t\t\tvar p = pos;\n\n  \t\t\t\t\t// find the node that contains the match\n  \t\t\t\t\tp += currentNode.value.length;\n  \t\t\t\t\twhile (from >= p) {\n  \t\t\t\t\t\tcurrentNode = currentNode.next;\n  \t\t\t\t\t\tp += currentNode.value.length;\n  \t\t\t\t\t}\n  \t\t\t\t\t// adjust pos (and p)\n  \t\t\t\t\tp -= currentNode.value.length;\n  \t\t\t\t\tpos = p;\n\n  \t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n  \t\t\t\t\tif (currentNode.value instanceof Token) {\n  \t\t\t\t\t\tcontinue;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// find the last node which is affected by this match\n  \t\t\t\t\tfor (\n  \t\t\t\t\t\tvar k = currentNode;\n  \t\t\t\t\t\tk !== tokenList.tail && (p < to || (typeof k.value === 'string' && !k.prev.value.greedy));\n  \t\t\t\t\t\tk = k.next\n  \t\t\t\t\t) {\n  \t\t\t\t\t\tremoveCount++;\n  \t\t\t\t\t\tp += k.value.length;\n  \t\t\t\t\t}\n  \t\t\t\t\tremoveCount--;\n\n  \t\t\t\t\t// replace with the new match\n  \t\t\t\t\tstr = text.slice(pos, p);\n  \t\t\t\t\tmatch.index -= pos;\n  \t\t\t\t} else {\n  \t\t\t\t\tpattern.lastIndex = 0;\n\n  \t\t\t\t\tvar match = pattern.exec(str);\n  \t\t\t\t}\n\n  \t\t\t\tif (!match) {\n  \t\t\t\t\tif (oneshot) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\tif (lookbehind) {\n  \t\t\t\t\tlookbehindLength = match[1] ? match[1].length : 0;\n  \t\t\t\t}\n\n  \t\t\t\tvar from = match.index + lookbehindLength,\n  \t\t\t\t\tmatch = match[0].slice(lookbehindLength),\n  \t\t\t\t\tto = from + match.length,\n  \t\t\t\t\tbefore = str.slice(0, from),\n  \t\t\t\t\tafter = str.slice(to);\n\n  \t\t\t\tvar removeFrom = currentNode.prev;\n\n  \t\t\t\tif (before) {\n  \t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n  \t\t\t\t\tpos += before.length;\n  \t\t\t\t}\n\n  \t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n  \t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n  \t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n  \t\t\t\tif (after) {\n  \t\t\t\t\taddAfter(tokenList, currentNode, after);\n  \t\t\t\t}\n\n\n  \t\t\t\tif (removeCount > 1)\n  \t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n\n  \t\t\t\tif (oneshot)\n  \t\t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n  \t}\n  }\n\n  /**\n   * @typedef LinkedListNode\n   * @property {T} value\n   * @property {LinkedListNode<T> | null} prev The previous node.\n   * @property {LinkedListNode<T> | null} next The next node.\n   * @template T\n   */\n\n  /**\n   * @template T\n   */\n  function LinkedList() {\n  \t/** @type {LinkedListNode<T>} */\n  \tvar head = { value: null, prev: null, next: null };\n  \t/** @type {LinkedListNode<T>} */\n  \tvar tail = { value: null, prev: head, next: null };\n  \thead.next = tail;\n\n  \t/** @type {LinkedListNode<T>} */\n  \tthis.head = head;\n  \t/** @type {LinkedListNode<T>} */\n  \tthis.tail = tail;\n  \tthis.length = 0;\n  }\n\n  /**\n   * Adds a new node with the given value to the list.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {T} value\n   * @returns {LinkedListNode<T>} The added node.\n   * @template T\n   */\n  function addAfter(list, node, value) {\n  \t// assumes that node != list.tail && values.length >= 0\n  \tvar next = node.next;\n\n  \tvar newNode = { value: value, prev: node, next: next };\n  \tnode.next = newNode;\n  \tnext.prev = newNode;\n  \tlist.length++;\n\n  \treturn newNode;\n  }\n  /**\n   * Removes `count` nodes after the given node. The given node will not be removed.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {number} count\n   * @template T\n   */\n  function removeRange(list, node, count) {\n  \tvar next = node.next;\n  \tfor (var i = 0; i < count && next !== list.tail; i++) {\n  \t\tnext = next.next;\n  \t}\n  \tnode.next = next;\n  \tnext.prev = node;\n  \tlist.length -= i;\n  }\n  /**\n   * @param {LinkedList<T>} list\n   * @returns {T[]}\n   * @template T\n   */\n  function toArray(list) {\n  \tvar array = [];\n  \tvar node = list.head.next;\n  \twhile (node !== list.tail) {\n  \t\tarray.push(node.value);\n  \t\tnode = node.next;\n  \t}\n  \treturn array;\n  }\n\n\n  if (!_self.document) {\n  \tif (!_self.addEventListener) {\n  \t\t// in Node.js\n  \t\treturn _;\n  \t}\n\n  \tif (!_.disableWorkerMessageHandler) {\n  \t\t// In worker\n  \t\t_self.addEventListener('message', function (evt) {\n  \t\t\tvar message = JSON.parse(evt.data),\n  \t\t\t\tlang = message.language,\n  \t\t\t\tcode = message.code,\n  \t\t\t\timmediateClose = message.immediateClose;\n\n  \t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n  \t\t\tif (immediateClose) {\n  \t\t\t\t_self.close();\n  \t\t\t}\n  \t\t}, false);\n  \t}\n\n  \treturn _;\n  }\n\n  //Get current script and highlight\n  var script = _.util.currentScript();\n\n  if (script) {\n  \t_.filename = script.src;\n\n  \tif (script.hasAttribute('data-manual')) {\n  \t\t_.manual = true;\n  \t}\n  }\n\n  function highlightAutomaticallyCallback() {\n  \tif (!_.manual) {\n  \t\t_.highlightAll();\n  \t}\n  }\n\n  if (!_.manual) {\n  \t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n  \t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n  \t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n  \t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n  \t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n  \t// See https://github.com/PrismJS/prism/issues/2102\n  \tvar readyState = document.readyState;\n  \tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n  \t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n  \t} else {\n  \t\tif (window.requestAnimationFrame) {\n  \t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n  \t\t} else {\n  \t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n  \t\t}\n  \t}\n  }\n\n  return _;\n\n  })(_self);\n\n  if ( module.exports) {\n  \tmodule.exports = Prism;\n  }\n\n  // hack for components to work correctly in node.js\n  if (typeof commonjsGlobal !== 'undefined') {\n  \tcommonjsGlobal.Prism = Prism;\n  }\n\n\n  /* **********************************************\n       Begin prism-markup.js\n  ********************************************** */\n\n  Prism.languages.markup = {\n  \t'comment': /<!--[\\s\\S]*?-->/,\n  \t'prolog': /<\\?[\\s\\S]+?\\?>/,\n  \t'doctype': {\n  \t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n  \t\tgreedy: true\n  \t},\n  \t'cdata': /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n  \t'tag': {\n  \t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'tag': {\n  \t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'punctuation': /^<\\/?/,\n  \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'attr-value': {\n  \t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'punctuation': [\n  \t\t\t\t\t\t/^=/,\n  \t\t\t\t\t\t{\n  \t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n  \t\t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t\t}\n  \t\t\t\t\t]\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'punctuation': /\\/?>/,\n  \t\t\t'attr-name': {\n  \t\t\t\tpattern: /[^\\s>\\/]+/,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t}\n  \t},\n  \t'entity': /&#?[\\da-z]{1,8};/i\n  };\n\n  Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n  \tPrism.languages.markup['entity'];\n\n  // Plugin to make entity title show the real entity, idea by Roman Komarov\n  Prism.hooks.add('wrap', function(env) {\n\n  \tif (env.type === 'entity') {\n  \t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n  \t}\n  });\n\n  Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n  \t/**\n  \t * Adds an inlined language to markup.\n  \t *\n  \t * An example of an inlined language is CSS with `<style>` tags.\n  \t *\n  \t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n  \t * case insensitive.\n  \t * @param {string} lang The language key.\n  \t * @example\n  \t * addInlined('style', 'css');\n  \t */\n  \tvalue: function addInlined(tagName, lang) {\n  \t\tvar includedCdataInside = {};\n  \t\tincludedCdataInside['language-' + lang] = {\n  \t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages[lang]\n  \t\t};\n  \t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n  \t\tvar inside = {\n  \t\t\t'included-cdata': {\n  \t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n  \t\t\t\tinside: includedCdataInside\n  \t\t\t}\n  \t\t};\n  \t\tinside['language-' + lang] = {\n  \t\t\tpattern: /[\\s\\S]+/,\n  \t\t\tinside: Prism.languages[lang]\n  \t\t};\n\n  \t\tvar def = {};\n  \t\tdef[tagName] = {\n  \t\t\tpattern: RegExp(/(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: inside\n  \t\t};\n\n  \t\tPrism.languages.insertBefore('markup', 'cdata', def);\n  \t}\n  });\n\n  Prism.languages.xml = Prism.languages.extend('markup', {});\n  Prism.languages.html = Prism.languages.markup;\n  Prism.languages.mathml = Prism.languages.markup;\n  Prism.languages.svg = Prism.languages.markup;\n\n\n  /* **********************************************\n       Begin prism-css.js\n  ********************************************** */\n\n  (function (Prism) {\n\n  \tvar string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\n  \tPrism.languages.css = {\n  \t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n  \t\t'atrule': {\n  \t\t\tpattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n  \t\t\tinside: {\n  \t\t\t\t'rule': /^@[\\w-]+/,\n  \t\t\t\t'selector-function-argument': {\n  \t\t\t\t\tpattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\talias: 'selector'\n  \t\t\t\t}\n  \t\t\t\t// See rest below\n  \t\t\t}\n  \t\t},\n  \t\t'url': {\n  \t\t\tpattern: RegExp('url\\\\((?:' + string.source + '|[^\\n\\r()]*)\\\\)', 'i'),\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'function': /^url/i,\n  \t\t\t\t'punctuation': /^\\(|\\)$/\n  \t\t\t}\n  \t\t},\n  \t\t'selector': RegExp('[^{}\\\\s](?:[^{};\"\\']|' + string.source + ')*?(?=\\\\s*\\\\{)'),\n  \t\t'string': {\n  \t\t\tpattern: string,\n  \t\t\tgreedy: true\n  \t\t},\n  \t\t'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n  \t\t'important': /!important\\b/i,\n  \t\t'function': /[-a-z0-9]+(?=\\()/i,\n  \t\t'punctuation': /[(){};:,]/\n  \t};\n\n  \tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n  \tvar markup = Prism.languages.markup;\n  \tif (markup) {\n  \t\tmarkup.tag.addInlined('style', 'css');\n\n  \t\tPrism.languages.insertBefore('inside', 'attr-value', {\n  \t\t\t'style-attr': {\n  \t\t\t\tpattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'attr-name': {\n  \t\t\t\t\t\tpattern: /^\\s*style/i,\n  \t\t\t\t\t\tinside: markup.tag.inside\n  \t\t\t\t\t},\n  \t\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n  \t\t\t\t\t'attr-value': {\n  \t\t\t\t\t\tpattern: /.+/i,\n  \t\t\t\t\t\tinside: Prism.languages.css\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\talias: 'language-css'\n  \t\t\t}\n  \t\t}, markup.tag);\n  \t}\n\n  }(Prism));\n\n\n  /* **********************************************\n       Begin prism-clike.js\n  ********************************************** */\n\n  Prism.languages.clike = {\n  \t'comment': [\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true\n  \t\t}\n  \t],\n  \t'string': {\n  \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n  \t\tgreedy: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n  \t\tlookbehind: true,\n  \t\tinside: {\n  \t\t\t'punctuation': /[.\\\\]/\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n  \t'boolean': /\\b(?:true|false)\\b/,\n  \t'function': /\\w+(?=\\()/,\n  \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n  \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n\n  /* **********************************************\n       Begin prism-javascript.js\n  ********************************************** */\n\n  Prism.languages.javascript = Prism.languages.extend('clike', {\n  \t'class-name': [\n  \t\tPrism.languages.clike['class-name'],\n  \t\t{\n  \t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t],\n  \t'keyword': [\n  \t\t{\n  \t\t\tpattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t],\n  \t'number': /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n  \t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n  \t'function': /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n  \t'operator': /--|\\+\\+|\\*\\*=?|=>|&&|\\|\\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?[.?]?|[~:]/\n  });\n\n  Prism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;\n\n  Prism.languages.insertBefore('javascript', 'keyword', {\n  \t'regex': {\n  \t\tpattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n  \t\tlookbehind: true,\n  \t\tgreedy: true\n  \t},\n  \t// This must be declared before keyword because we use \"function\" inside the look-forward\n  \t'function-variable': {\n  \t\tpattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n  \t\talias: 'function'\n  \t},\n  \t'parameter': [\n  \t\t{\n  \t\t\tpattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n  \t\t\tlookbehind: true,\n  \t\t\tinside: Prism.languages.javascript\n  \t\t}\n  \t],\n  \t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n  });\n\n  Prism.languages.insertBefore('javascript', 'string', {\n  \t'template-string': {\n  \t\tpattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'template-punctuation': {\n  \t\t\t\tpattern: /^`|`$/,\n  \t\t\t\talias: 'string'\n  \t\t\t},\n  \t\t\t'interpolation': {\n  \t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'interpolation-punctuation': {\n  \t\t\t\t\t\tpattern: /^\\${|}$/,\n  \t\t\t\t\t\talias: 'punctuation'\n  \t\t\t\t\t},\n  \t\t\t\t\trest: Prism.languages.javascript\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'string': /[\\s\\S]+/\n  \t\t}\n  \t}\n  });\n\n  if (Prism.languages.markup) {\n  \tPrism.languages.markup.tag.addInlined('script', 'javascript');\n  }\n\n  Prism.languages.js = Prism.languages.javascript;\n\n\n  /* **********************************************\n       Begin prism-file-highlight.js\n  ********************************************** */\n\n  (function () {\n  \tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n  \t\treturn;\n  \t}\n\n  \t/**\n  \t * @param {Element} [container=document]\n  \t */\n  \tself.Prism.fileHighlight = function(container) {\n  \t\tcontainer = container || document;\n\n  \t\tvar Extensions = {\n  \t\t\t'js': 'javascript',\n  \t\t\t'py': 'python',\n  \t\t\t'rb': 'ruby',\n  \t\t\t'ps1': 'powershell',\n  \t\t\t'psm1': 'powershell',\n  \t\t\t'sh': 'bash',\n  \t\t\t'bat': 'batch',\n  \t\t\t'h': 'c',\n  \t\t\t'tex': 'latex'\n  \t\t};\n\n  \t\tArray.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n  \t\t\t// ignore if already loaded\n  \t\t\tif (pre.hasAttribute('data-src-loaded')) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\t// load current\n  \t\t\tvar src = pre.getAttribute('data-src');\n\n  \t\t\tvar language, parent = pre;\n  \t\t\tvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n  \t\t\twhile (parent && !lang.test(parent.className)) {\n  \t\t\t\tparent = parent.parentNode;\n  \t\t\t}\n\n  \t\t\tif (parent) {\n  \t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n  \t\t\t}\n\n  \t\t\tif (!language) {\n  \t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n  \t\t\t\tlanguage = Extensions[extension] || extension;\n  \t\t\t}\n\n  \t\t\tvar code = document.createElement('code');\n  \t\t\tcode.className = 'language-' + language;\n\n  \t\t\tpre.textContent = '';\n\n  \t\t\tcode.textContent = 'Loading…';\n\n  \t\t\tpre.appendChild(code);\n\n  \t\t\tvar xhr = new XMLHttpRequest();\n\n  \t\t\txhr.open('GET', src, true);\n\n  \t\t\txhr.onreadystatechange = function () {\n  \t\t\t\tif (xhr.readyState == 4) {\n\n  \t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n  \t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n  \t\t\t\t\t\tPrism.highlightElement(code);\n  \t\t\t\t\t\t// mark as loaded\n  \t\t\t\t\t\tpre.setAttribute('data-src-loaded', '');\n  \t\t\t\t\t}\n  \t\t\t\t\telse if (xhr.status >= 400) {\n  \t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n  \t\t\t\t\t}\n  \t\t\t\t\telse {\n  \t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t};\n\n  \t\t\txhr.send(null);\n  \t\t});\n  \t};\n\n  \tdocument.addEventListener('DOMContentLoaded', function () {\n  \t\t// execute inside handler, for dropping Event as argument\n  \t\tself.Prism.fileHighlight();\n  \t});\n\n  })();\n  });\n\n  Prism.languages.python = {\n  \t'comment': {\n  \t\tpattern: /(^|[^\\\\])#.*/,\n  \t\tlookbehind: true\n  \t},\n  \t'string-interpolation': {\n  \t\tpattern: /(?:f|rf|fr)(?:(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n  \t\tgreedy: true,\n  \t\tinside: {\n  \t\t\t'interpolation': {\n  \t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n  \t\t\t\tpattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'format-spec': {\n  \t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=}$)/,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'conversion-option': {\n  \t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n  \t\t\t\t\t\talias: 'punctuation'\n  \t\t\t\t\t},\n  \t\t\t\t\trest: null\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t'string': /[\\s\\S]+/\n  \t\t}\n  \t},\n  \t'triple-quoted-string': {\n  \t\tpattern: /(?:[rub]|rb|br)?(\"\"\"|''')[\\s\\S]+?\\1/i,\n  \t\tgreedy: true,\n  \t\talias: 'string'\n  \t},\n  \t'string': {\n  \t\tpattern: /(?:[rub]|rb|br)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n  \t\tgreedy: true\n  \t},\n  \t'function': {\n  \t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n  \t\tlookbehind: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\bclass\\s+)\\w+/i,\n  \t\tlookbehind: true\n  \t},\n  \t'decorator': {\n  \t\tpattern: /(^\\s*)@\\w+(?:\\.\\w+)*/im,\n  \t\tlookbehind: true,\n  \t\talias: ['annotation', 'punctuation'],\n  \t\tinside: {\n  \t\t\t'punctuation': /\\./\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n  \t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n  \t'boolean': /\\b(?:True|False|None)\\b/,\n  \t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n  \t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n  Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\n  Prism.languages.py = Prism.languages.python;\n\n  Prism.languages.clike = {\n  \t'comment': [\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t{\n  \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true\n  \t\t}\n  \t],\n  \t'string': {\n  \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n  \t\tgreedy: true\n  \t},\n  \t'class-name': {\n  \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n  \t\tlookbehind: true,\n  \t\tinside: {\n  \t\t\t'punctuation': /[.\\\\]/\n  \t\t}\n  \t},\n  \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n  \t'boolean': /\\b(?:true|false)\\b/,\n  \t'function': /\\w+(?=\\()/,\n  \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n  \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n  \t'punctuation': /[{}[\\];(),.:]/\n  };\n\n  Prism.languages.lua = {\n  \t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n  \t// \\z may be used to skip the following space\n  \t'string': {\n  \t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n  \t\tgreedy: true\n  \t},\n  \t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n  \t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n  \t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n  \t'operator': [\n  \t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n  \t\t{\n  \t\t\t// Match \"..\" but don't break \"...\"\n  \t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t],\n  \t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n  };\n\n  (function(Prism) {\n  \t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n  \t// + LC_ALL, RANDOM, REPLY, SECONDS.\n  \t// + make sure PS1..4 are here as they are not always set,\n  \t// - some useless things.\n  \tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n  \tvar insideString = {\n  \t\t'environment': {\n  \t\t\tpattern: RegExp(\"\\\\$\" + envVars),\n  \t\t\talias: 'constant'\n  \t\t},\n  \t\t'variable': [\n  \t\t\t// [0]: Arithmetic Environment\n  \t\t\t{\n  \t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n  \t\t\t\t\t'variable': [\n  \t\t\t\t\t\t{\n  \t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n  \t\t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t/^\\$\\(\\(/\n  \t\t\t\t\t],\n  \t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n  \t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n  \t\t\t\t\t'operator': /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n  \t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n  \t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t// [1]: Command Substitution\n  \t\t\t{\n  \t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t// [2]: Brace expansion\n  \t\t\t{\n  \t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n  \t\t\t\t\t'punctuation': /[\\[\\]]/,\n  \t\t\t\t\t'environment': {\n  \t\t\t\t\t\tpattern: RegExp(\"(\\\\{)\" + envVars),\n  \t\t\t\t\t\tlookbehind: true,\n  \t\t\t\t\t\talias: 'constant'\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t/\\$(?:\\w+|[#?*!@$])/\n  \t\t],\n  \t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n  \t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/\n  \t};\n\n  \tPrism.languages.bash = {\n  \t\t'shebang': {\n  \t\t\tpattern: /^#!\\s*\\/.*/,\n  \t\t\talias: 'important'\n  \t\t},\n  \t\t'comment': {\n  \t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'function-name': [\n  \t\t\t// a) function foo {\n  \t\t\t// b) foo() {\n  \t\t\t// c) function foo() {\n  \t\t\t// but not “foo {”\n  \t\t\t{\n  \t\t\t\t// a) and c)\n  \t\t\t\tpattern: /(\\bfunction\\s+)\\w+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'function'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// b)\n  \t\t\t\tpattern: /\\b\\w+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n  \t\t\t\talias: 'function'\n  \t\t\t}\n  \t\t],\n  \t\t// Highlight variable names as variables in for and select beginnings.\n  \t\t'for-or-select': {\n  \t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n  \t\t\talias: 'variable',\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t// Highlight variable names as variables in the left-hand part\n  \t\t// of assignments (“=” and “+=”).\n  \t\t'assign-left': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?=\\+?=)/,\n  \t\t\tinside: {\n  \t\t\t\t'environment': {\n  \t\t\t\t\tpattern: RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\" + envVars),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\talias: 'constant'\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\talias: 'variable',\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'string': [\n  \t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n  \t\t\t{\n  \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+?)\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: insideString\n  \t\t\t},\n  \t\t\t// Here-document with quotes around the tag\n  \t\t\t// → No expansion (so no “inside”).\n  \t\t\t{\n  \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true\n  \t\t\t},\n  \t\t\t// “Normal” string\n  \t\t\t{\n  \t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)([\"'])(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|`[^`]+`|(?!\\2)[^\\\\])*\\2/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: insideString\n  \t\t\t}\n  \t\t],\n  \t\t'environment': {\n  \t\t\tpattern: RegExp(\"\\\\$?\" + envVars),\n  \t\t\talias: 'constant'\n  \t\t},\n  \t\t'variable': insideString.variable,\n  \t\t'function': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'keyword': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  \t\t'builtin': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true,\n  \t\t\t// Alias added to make those easier to distinguish from strings.\n  \t\t\talias: 'class-name'\n  \t\t},\n  \t\t'boolean': {\n  \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:true|false)(?=$|[)\\s;|&])/,\n  \t\t\tlookbehind: true\n  \t\t},\n  \t\t'file-descriptor': {\n  \t\t\tpattern: /\\B&\\d\\b/,\n  \t\t\talias: 'important'\n  \t\t},\n  \t\t'operator': {\n  \t\t\t// Lots of redirections here, but not just that.\n  \t\t\tpattern: /\\d?<>|>\\||\\+=|==?|!=?|=~|<<[<-]?|[&\\d]?>>|\\d?[<>]&?|&[>&]?|\\|[&|]?|<=?|>=?/,\n  \t\t\tinside: {\n  \t\t\t\t'file-descriptor': {\n  \t\t\t\t\tpattern: /^\\d/,\n  \t\t\t\t\talias: 'important'\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n  \t\t'number': {\n  \t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n  \t\t\tlookbehind: true\n  \t\t}\n  \t};\n\n  \t/* Patterns in command substitution. */\n  \tvar toBeCopied = [\n  \t\t'comment',\n  \t\t'function-name',\n  \t\t'for-or-select',\n  \t\t'assign-left',\n  \t\t'string',\n  \t\t'environment',\n  \t\t'function',\n  \t\t'keyword',\n  \t\t'builtin',\n  \t\t'boolean',\n  \t\t'file-descriptor',\n  \t\t'operator',\n  \t\t'punctuation',\n  \t\t'number'\n  \t];\n  \tvar inside = insideString.variable[1].inside;\n  \tfor(var i = 0; i < toBeCopied.length; i++) {\n  \t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n  \t}\n\n  \tPrism.languages.shell = Prism.languages.bash;\n  })(Prism);\n\n  Prism.languages.go = Prism.languages.extend('clike', {\n  \t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n  \t'builtin': /\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b/,\n  \t'boolean': /\\b(?:_|iota|nil|true|false)\\b/,\n  \t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n  \t'number': /(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?/i,\n  \t'string': {\n  \t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n  \t\tgreedy: true\n  \t}\n  });\n  delete Prism.languages.go['class-name'];\n\n  (function (Prism) {\n\n  \t// Allow only one line break\n  \tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?!\\n|\\r\\n?))/.source;\n\n  \t/**\n  \t * This function is intended for the creation of the bold or italic pattern.\n  \t *\n  \t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n  \t *\n  \t * _Note:_ Keep in mind that this adds a capturing group.\n  \t *\n  \t * @param {string} pattern\n  \t * @param {boolean} starAlternative Whether to also add an alternative where all `_`s are replaced with `*`s.\n  \t * @returns {RegExp}\n  \t */\n  \tfunction createInline(pattern, starAlternative) {\n  \t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n  \t\tif (starAlternative) {\n  \t\t\tpattern = pattern + '|' + pattern.replace(/_/g, '\\\\*');\n  \t\t}\n  \t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n  \t}\n\n\n  \tvar tableCell = /(?:\\\\.|``.+?``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n  \tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|$)/.source.replace(/__/g, function () { return tableCell; });\n  \tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n  \tPrism.languages.markdown = Prism.languages.extend('markup', {});\n  \tPrism.languages.insertBefore('markdown', 'prolog', {\n  \t\t'blockquote': {\n  \t\t\t// > ...\n  \t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'table': {\n  \t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n  \t\t\tinside: {\n  \t\t\t\t'table-data-rows': {\n  \t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'table-data': {\n  \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n  \t\t\t\t\t\t\tinside: Prism.languages.markdown\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t'punctuation': /\\|/\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\t'table-line': {\n  \t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n  \t\t\t\t\t}\n  \t\t\t\t},\n  \t\t\t\t'table-header-row': {\n  \t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n  \t\t\t\t\tinside: {\n  \t\t\t\t\t\t'table-header': {\n  \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n  \t\t\t\t\t\t\talias: 'important',\n  \t\t\t\t\t\t\tinside: Prism.languages.markdown\n  \t\t\t\t\t\t},\n  \t\t\t\t\t\t'punctuation': /\\|/\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t'code': [\n  \t\t\t{\n  \t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n  \t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'keyword'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// `code`\n  \t\t\t\t// ``code``\n  \t\t\t\tpattern: /``.+?``|`[^`\\r\\n]+`/,\n  \t\t\t\talias: 'keyword'\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// ```optional language\n  \t\t\t\t// code block\n  \t\t\t\t// ```\n  \t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n  \t\t\t\tgreedy: true,\n  \t\t\t\tinside: {\n  \t\t\t\t\t'code-block': {\n  \t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'code-language': {\n  \t\t\t\t\t\tpattern: /^(```).+/,\n  \t\t\t\t\t\tlookbehind: true\n  \t\t\t\t\t},\n  \t\t\t\t\t'punctuation': /```/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t],\n  \t\t'title': [\n  \t\t\t{\n  \t\t\t\t// title 1\n  \t\t\t\t// =======\n\n  \t\t\t\t// title 2\n  \t\t\t\t// -------\n  \t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n  \t\t\t\talias: 'important',\n  \t\t\t\tinside: {\n  \t\t\t\t\tpunctuation: /==+$|--+$/\n  \t\t\t\t}\n  \t\t\t},\n  \t\t\t{\n  \t\t\t\t// # title 1\n  \t\t\t\t// ###### title 6\n  \t\t\t\tpattern: /(^\\s*)#+.+/m,\n  \t\t\t\tlookbehind: true,\n  \t\t\t\talias: 'important',\n  \t\t\t\tinside: {\n  \t\t\t\t\tpunctuation: /^#+|#+$/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t],\n  \t\t'hr': {\n  \t\t\t// ***\n  \t\t\t// ---\n  \t\t\t// * * *\n  \t\t\t// -----------\n  \t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n  \t\t\tlookbehind: true,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'list': {\n  \t\t\t// * item\n  \t\t\t// + item\n  \t\t\t// - item\n  \t\t\t// 1. item\n  \t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n  \t\t\tlookbehind: true,\n  \t\t\talias: 'punctuation'\n  \t\t},\n  \t\t'url-reference': {\n  \t\t\t// [id]: http://example.com \"Optional title\"\n  \t\t\t// [id]: http://example.com 'Optional title'\n  \t\t\t// [id]: http://example.com (Optional title)\n  \t\t\t// [id]: <http://example.com> \"Optional title\"\n  \t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n  \t\t\tinside: {\n  \t\t\t\t'variable': {\n  \t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n  \t\t\t\t\tlookbehind: true\n  \t\t\t\t},\n  \t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n  \t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n  \t\t\t},\n  \t\t\talias: 'url'\n  \t\t},\n  \t\t'bold': {\n  \t\t\t// **strong**\n  \t\t\t// __strong__\n\n  \t\t\t// allow one nested instance of italic text using the same delimiter\n  \t\t\tpattern: createInline(/__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__/.source, true),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /\\*\\*|__/\n  \t\t\t}\n  \t\t},\n  \t\t'italic': {\n  \t\t\t// *em*\n  \t\t\t// _em_\n\n  \t\t\t// allow one nested instance of bold text using the same delimiter\n  \t\t\tpattern: createInline(/_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_/.source, true),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /[*_]/\n  \t\t\t}\n  \t\t},\n  \t\t'strike': {\n  \t\t\t// ~~strike through~~\n  \t\t\t// ~strike~\n  \t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+?\\2/.source, false),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'punctuation': /~~?/\n  \t\t\t}\n  \t\t},\n  \t\t'url': {\n  \t\t\t// [example](http://example.com \"Optional title\")\n  \t\t\t// [example][id]\n  \t\t\t// [example] [id]\n  \t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[(?:(?!\\])<inner>)+\\])/.source, false),\n  \t\t\tlookbehind: true,\n  \t\t\tgreedy: true,\n  \t\t\tinside: {\n  \t\t\t\t'variable': {\n  \t\t\t\t\tpattern: /(\\[)[^\\]]+(?=\\]$)/,\n  \t\t\t\t\tlookbehind: true\n  \t\t\t\t},\n  \t\t\t\t'content': {\n  \t\t\t\t\tpattern: /(^!?\\[)[^\\]]+(?=\\])/,\n  \t\t\t\t\tlookbehind: true,\n  \t\t\t\t\tinside: {} // see below\n  \t\t\t\t},\n  \t\t\t\t'string': {\n  \t\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t});\n\n  \t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n  \t\t['url', 'bold', 'italic', 'strike'].forEach(function (inside) {\n  \t\t\tif (token !== inside) {\n  \t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n  \t\t\t}\n  \t\t});\n  \t});\n\n  \tPrism.hooks.add('after-tokenize', function (env) {\n  \t\tif (env.language !== 'markdown' && env.language !== 'md') {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tfunction walkTokens(tokens) {\n  \t\t\tif (!tokens || typeof tokens === 'string') {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n  \t\t\t\tvar token = tokens[i];\n\n  \t\t\t\tif (token.type !== 'code') {\n  \t\t\t\t\twalkTokens(token.content);\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\t/*\n  \t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n  \t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n  \t\t\t\t *\n  \t\t\t\t * token.content = [\n  \t\t\t\t *     <span class=\"punctuation\">```</span>,\n  \t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n  \t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n  \t\t\t\t *     <span class=\"code-block\">...</span>,\n  \t\t\t\t *     '\\n', // exactly one new lines again\n  \t\t\t\t *     <span class=\"punctuation\">```</span>\n  \t\t\t\t * ];\n  \t\t\t\t */\n\n  \t\t\t\tvar codeLang = token.content[1];\n  \t\t\t\tvar codeBlock = token.content[3];\n\n  \t\t\t\tif (codeLang && codeBlock &&\n  \t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n  \t\t\t\t\ttypeof codeLang.content === 'string') {\n\n  \t\t\t\t\t// this might be a language that Prism does not support\n\n  \t\t\t\t\t// do some replacements to support C++, C#, and F#\n  \t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n  \t\t\t\t\t// only use the first word\n  \t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n  \t\t\t\t\tvar alias = 'language-' + lang;\n\n  \t\t\t\t\t// add alias\n  \t\t\t\t\tif (!codeBlock.alias) {\n  \t\t\t\t\t\tcodeBlock.alias = [alias];\n  \t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n  \t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n  \t\t\t\t\t} else {\n  \t\t\t\t\t\tcodeBlock.alias.push(alias);\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\twalkTokens(env.tokens);\n  \t});\n\n  \tPrism.hooks.add('wrap', function (env) {\n  \t\tif (env.type !== 'code-block') {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar codeLang = '';\n  \t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n  \t\t\tvar cls = env.classes[i];\n  \t\t\tvar match = /language-(.+)/.exec(cls);\n  \t\t\tif (match) {\n  \t\t\t\tcodeLang = match[1];\n  \t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n\n  \t\tvar grammar = Prism.languages[codeLang];\n\n  \t\tif (!grammar) {\n  \t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n  \t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n  \t\t\t\tenv.attributes['id'] = id;\n\n  \t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n  \t\t\t\t\tvar ele = document.getElementById(id);\n  \t\t\t\t\tif (ele) {\n  \t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n  \t\t\t\t\t}\n  \t\t\t\t});\n  \t\t\t}\n  \t\t} else {\n  \t\t\t// reverse Prism.util.encode\n  \t\t\tvar code = env.content.replace(/&lt;/g, '<').replace(/&amp;/g, '&');\n\n  \t\t\tenv.content = Prism.highlight(code, grammar, codeLang);\n  \t\t}\n  \t});\n\n  \tPrism.languages.md = Prism.languages.markdown;\n\n  }(Prism));\n\n  Prism.languages.julia= {\n  \t'comment': {\n  \t\tpattern: /(^|[^\\\\])#.*/,\n  \t\tlookbehind: true\n  \t},\n  \t'string': /(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2/,\n  \t'keyword' : /\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,\n  \t'boolean' : /\\b(?:true|false)\\b/,\n  \t'number' : /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+\\.?\\d*|\\.\\d+)(?:[efp][+-]?\\d+)?j?/i,\n  \t'operator': /[-+*^%÷&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥]/,\n  \t'punctuation' : /[{}[\\];(),.:]/,\n  \t'constant': /\\b(?:(?:NaN|Inf)(?:16|32|64)?)\\b/\n  };\n\n  var css = \"/**\\n * prism.js default theme for JavaScript, CSS and HTML\\n * Based on dabblet (http://dabblet.com)\\n * @author Lea Verou\\n */\\n\\ncode[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tcolor: black;\\n\\tbackground: none;\\n\\ttext-shadow: 0 1px white;\\n\\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\\n\\tfont-size: 1em;\\n\\ttext-align: left;\\n\\twhite-space: pre;\\n\\tword-spacing: normal;\\n\\tword-break: normal;\\n\\tword-wrap: normal;\\n\\tline-height: 1.5;\\n\\n\\t-moz-tab-size: 4;\\n\\t-o-tab-size: 4;\\n\\ttab-size: 4;\\n\\n\\t-webkit-hyphens: none;\\n\\t-moz-hyphens: none;\\n\\t-ms-hyphens: none;\\n\\thyphens: none;\\n}\\n\\npre[class*=\\\"language-\\\"]::-moz-selection, pre[class*=\\\"language-\\\"] ::-moz-selection,\\ncode[class*=\\\"language-\\\"]::-moz-selection, code[class*=\\\"language-\\\"] ::-moz-selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\npre[class*=\\\"language-\\\"]::selection, pre[class*=\\\"language-\\\"] ::selection,\\ncode[class*=\\\"language-\\\"]::selection, code[class*=\\\"language-\\\"] ::selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\n@media print {\\n\\tcode[class*=\\\"language-\\\"],\\n\\tpre[class*=\\\"language-\\\"] {\\n\\t\\ttext-shadow: none;\\n\\t}\\n}\\n\\n/* Code blocks */\\npre[class*=\\\"language-\\\"] {\\n\\tpadding: 1em;\\n\\tmargin: .5em 0;\\n\\toverflow: auto;\\n}\\n\\n:not(pre) > code[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tbackground: #f5f2f0;\\n}\\n\\n/* Inline code */\\n:not(pre) > code[class*=\\\"language-\\\"] {\\n\\tpadding: .1em;\\n\\tborder-radius: .3em;\\n\\twhite-space: normal;\\n}\\n\\n.token.comment,\\n.token.prolog,\\n.token.doctype,\\n.token.cdata {\\n\\tcolor: slategray;\\n}\\n\\n.token.punctuation {\\n\\tcolor: #999;\\n}\\n\\n.token.namespace {\\n\\topacity: .7;\\n}\\n\\n.token.property,\\n.token.tag,\\n.token.boolean,\\n.token.number,\\n.token.constant,\\n.token.symbol,\\n.token.deleted {\\n\\tcolor: #905;\\n}\\n\\n.token.selector,\\n.token.attr-name,\\n.token.string,\\n.token.char,\\n.token.builtin,\\n.token.inserted {\\n\\tcolor: #690;\\n}\\n\\n.token.operator,\\n.token.entity,\\n.token.url,\\n.language-css .token.string,\\n.style .token.string {\\n\\tcolor: #9a6e3a;\\n\\tbackground: hsla(0, 0%, 100%, .5);\\n}\\n\\n.token.atrule,\\n.token.attr-value,\\n.token.keyword {\\n\\tcolor: #07a;\\n}\\n\\n.token.function,\\n.token.class-name {\\n\\tcolor: #DD4A68;\\n}\\n\\n.token.regex,\\n.token.important,\\n.token.variable {\\n\\tcolor: #e90;\\n}\\n\\n.token.important,\\n.token.bold {\\n\\tfont-weight: bold;\\n}\\n.token.italic {\\n\\tfont-style: italic;\\n}\\n\\n.token.entity {\\n\\tcursor: help;\\n}\\n\";\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$4 = Template('d-code', `\n<style>\n\ncode {\n  white-space: nowrap;\n  background: rgba(0, 0, 0, 0.04);\n  border-radius: 2px;\n  padding: 4px 7px;\n  font-size: 15px;\n  color: rgba(0, 0, 0, 0.6);\n}\n\npre code {\n  display: block;\n  border-left: 2px solid rgba(0, 0, 0, .1);\n  padding: 0 0 0 36px;\n}\n\n${css}\n</style>\n\n<code id=\"code-container\"></code>\n\n`);\n\n  class Code extends Mutating(T$4(HTMLElement)) {\n\n    renderContent() {\n\n      // check if language can be highlighted\n      this.languageName = this.getAttribute('language');\n      if (!this.languageName) {\n        console.warn('You need to provide a language attribute to your <d-code> block to let us know how to highlight your code; e.g.:\\n <d-code language=\"python\">zeros = np.zeros(shape)</d-code>.');\n        return;\n      }\n      const language = prism.languages[this.languageName];\n      if (language == undefined) {\n        console.warn(`Distill does not yet support highlighting your code block in \"${this.languageName}'.`);\n        return;\n      }\n\n      let content = this.textContent;\n      const codeTag = this.shadowRoot.querySelector('#code-container');\n\n      if (this.hasAttribute('block')) {\n        // normalize the tab indents\n        content = content.replace(/\\n/, '');\n        const tabs = content.match(/\\s*/);\n        content = content.replace(new RegExp('\\n' + tabs, 'g'), '\\n');\n        content = content.trim();\n        // wrap code block in pre tag if needed\n        if (codeTag.parentNode instanceof ShadowRoot) {\n          const preTag = document.createElement('pre');\n          this.shadowRoot.removeChild(codeTag);\n          preTag.appendChild(codeTag);\n          this.shadowRoot.appendChild(preTag);\n        }\n\n      }\n\n      codeTag.className = `language-${this.languageName}`;\n      codeTag.innerHTML = prism.highlight(content, language);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$5 = Template('d-footnote', `\n<style>\n\nd-math[block] {\n  display: block;\n}\n\n:host {\n\n}\n\nsup {\n  line-height: 1em;\n  font-size: 0.75em;\n  position: relative;\n  top: -.5em;\n  vertical-align: baseline;\n}\n\nspan {\n  color: hsla(206, 90%, 20%, 0.7);\n  cursor: default;\n}\n\n.footnote-container {\n  padding: 10px;\n}\n\n</style>\n\n<d-hover-box>\n  <div class=\"footnote-container\">\n    <slot id=\"slot\"></slot>\n  </div>\n</d-hover-box>\n\n<sup>\n  <span id=\"fn-\" data-hover-ref=\"\"></span>\n</sup>\n\n`);\n\n  class Footnote extends T$5(HTMLElement) {\n\n    constructor() {\n      super();\n\n      const options = {childList: true, characterData: true, subtree: true};\n      const observer = new MutationObserver(this.notify);\n      observer.observe(this, options);\n    }\n\n    notify() {\n      const options = { detail: this, bubbles: true };\n      const event = new CustomEvent('onFootnoteChanged', options);\n      document.dispatchEvent(event);\n    }\n\n    connectedCallback() {\n      // listen and notify about changes to slotted content\n      // const slot = this.shadowRoot.querySelector('#slot');\n      // console.warn(slot.textContent);\n      // slot.addEventListener('slotchange', this.notify);\n      this.hoverBox = this.root.querySelector('d-hover-box');\n      window.customElements.whenDefined('d-hover-box').then(() => {\n        this.hoverBox.listen(this);\n      });\n      // create numeric ID\n      Footnote.currentFootnoteId += 1;\n      const IdString = Footnote.currentFootnoteId.toString();\n      this.root.host.id = 'd-footnote-' + IdString;\n\n      // set up hidden hover box\n      const id = 'dt-fn-hover-box-' + IdString;\n      this.hoverBox.id = id;\n\n      // set up visible footnote marker\n      const span = this.root.querySelector('#fn-');\n      span.setAttribute('id', 'fn-' + IdString);\n      span.setAttribute('data-hover-ref', id);\n      span.textContent = IdString;\n    }\n\n  }\n\n  Footnote.currentFootnoteId = 0;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$6 = Template('d-footnote-list', `\n<style>\n\nd-footnote-list {\n  contain: layout style;\n}\n\nd-footnote-list > * {\n  grid-column: text;\n}\n\nd-footnote-list a.footnote-backlink {\n  color: rgba(0,0,0,0.3);\n  padding-left: 0.5em;\n}\n\n</style>\n\n<h3>Footnotes</h3>\n<ol></ol>\n`, false);\n\n  class FootnoteList extends T$6(HTMLElement) {\n\n    connectedCallback() {\n      super.connectedCallback();\n\n      this.list = this.root.querySelector('ol');\n      // footnotes list is initially hidden\n      this.root.style.display = 'none';\n      // look through document and register existing footnotes\n      // Store.subscribeTo('footnotes', (footnote) => {\n      //   this.renderFootnote(footnote);\n      // });\n    }\n\n    // TODO: could optimize this to accept individual footnotes?\n    set footnotes(footnotes) {\n      this.list.innerHTML = '';\n      if (footnotes.length) {\n        // ensure footnote list is visible\n        this.root.style.display = '';\n\n        for (const footnote of footnotes) {\n          // construct and append list item to show footnote\n          const listItem = document.createElement('li');\n          listItem.id = footnote.id + '-listing';\n          listItem.innerHTML = footnote.innerHTML;\n\n          const backlink = document.createElement('a');\n          backlink.setAttribute('class', 'footnote-backlink');\n          backlink.setAttribute('target', '_self');\n          backlink.textContent = '[↩]';\n          backlink.href = '#' + footnote.id;\n\n          listItem.appendChild(backlink);\n          this.list.appendChild(listItem);\n        }\n      } else {\n        // ensure footnote list is invisible\n        this.root.style.display = 'none';\n      }\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$7 = Template('d-hover-box', `\n<style>\n\n:host {\n  position: absolute;\n  width: 100%;\n  left: 0px;\n  z-index: 10000;\n  display: none;\n  white-space: normal\n}\n\n.container {\n  position: relative;\n  width: 704px;\n  max-width: 100vw;\n  margin: 0 auto;\n}\n\n.panel {\n  position: absolute;\n  font-size: 1rem;\n  line-height: 1.5em;\n  top: 0;\n  left: 0;\n  width: 100%;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  background-color: rgba(250, 250, 250, 0.95);\n  box-shadow: 0 0 7px rgba(0, 0, 0, 0.1);\n  border-radius: 4px;\n  box-sizing: border-box;\n\n  backdrop-filter: blur(2px);\n  -webkit-backdrop-filter: blur(2px);\n}\n\n</style>\n\n<div class=\"container\">\n  <div class=\"panel\">\n    <slot></slot>\n  </div>\n</div>\n`);\n\n  class HoverBox extends T$7(HTMLElement) {\n\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n\n    }\n\n    listen(element) {\n      // console.log(element)\n      this.bindDivEvents(this);\n      this.bindTriggerEvents(element);\n      // this.style.display = \"block\";\n    }\n\n    bindDivEvents(element) {\n      // For mice, same behavior as hovering on links\n      element.addEventListener('mouseover', () => {\n        if (!this.visible) this.showAtNode(element);\n        this.stopTimeout();\n      });\n      element.addEventListener('mouseout', () => {\n        this.extendTimeout(500);\n      });\n      // Don't trigger body touchstart event when touching within box\n      element.addEventListener('touchstart', (event) => {\n        event.stopPropagation();\n      }, {passive: true});\n      // Close box when touching outside box\n      document.body.addEventListener('touchstart', () => {\n        this.hide();\n      }, {passive: true});\n    }\n\n    bindTriggerEvents(node) {\n      node.addEventListener('mouseover', () => {\n        if (!this.visible) {\n          this.showAtNode(node);\n        }\n        this.stopTimeout();\n      });\n\n      node.addEventListener('mouseout', () => {\n        this.extendTimeout(300);\n      });\n\n      node.addEventListener('touchstart', (event) => {\n        if (this.visible) {\n          this.hide();\n        } else {\n          this.showAtNode(node);\n        }\n        // Don't trigger body touchstart event when touching link\n        event.stopPropagation();\n      }, {passive: true});\n    }\n\n    show(position) {\n      this.visible = true;\n      this.style.display = 'block';\n      // 10px extra offset from element\n      this.style.top = Math.round(position[1] + 10) + 'px';\n    }\n\n    showAtNode(node) {\n      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n      const bbox = node.getBoundingClientRect();\n      this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);\n    }\n\n    hide() {\n      this.visible = false;\n      this.style.display = 'none';\n      this.stopTimeout();\n    }\n\n    stopTimeout() {\n      if (this.timeout) {\n        clearTimeout(this.timeout);\n      }\n    }\n\n    extendTimeout(time) {\n      this.stopTimeout();\n      this.timeout = setTimeout(() => {\n        this.hide();\n      }, time);\n    }\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  class Title extends HTMLElement {\n    static get is() { return 'd-title'; }\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$8 = Template('d-references', `\n<style>\nd-references {\n  display: block;\n}\n</style>\n`, false);\n\n  class References extends T$8(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  class TOC extends HTMLElement {\n\n    static get is() { return 'd-toc'; }\n\n    connectedCallback() {\n      if (!this.getAttribute('prerendered')) {\n        window.onload = () => {\n          const article = document.querySelector('d-article');\n          const headings = article.querySelectorAll('h2, h3');\n          renderTOC(this, headings);\n        };\n      }\n    }\n\n  }\n\n  function renderTOC(element, headings) {\n\n    let ToC =`\n  <style>\n\n  d-toc {\n    contain: layout style;\n    display: block;\n  }\n\n  d-toc ul {\n    padding-left: 0;\n  }\n\n  d-toc ul > ul {\n    padding-left: 24px;\n  }\n\n  d-toc a {\n    border-bottom: none;\n    text-decoration: none;\n  }\n\n  </style>\n  <nav role=\"navigation\" class=\"table-of-contents\"></nav>\n  <h2>Table of contents</h2>\n  <ul>`;\n\n    for (const el of headings) {\n      // should element be included in TOC?\n      const isInTitle = el.parentElement.tagName == 'D-TITLE';\n      const isException = el.getAttribute('no-toc');\n      if (isInTitle || isException) continue;\n      // create TOC entry\n      const title = el.textContent;\n      const link = '#' + el.getAttribute('id');\n\n      let newLine = '<li>' + '<a href=\"' + link + '\">' + title + '</a>' + '</li>';\n      if (el.tagName == 'H3') {\n        newLine = '<ul>' + newLine + '</ul>';\n      } else {\n        newLine += '<br>';\n      }\n      ToC += newLine;\n\n    }\n\n    ToC += '</ul></nav>';\n    element.innerHTML = ToC;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n  //\n  // Licensed under the Apache License, Version 2.0 (the \"License\");\n  // you may not use this file except in compliance with the License.\n  // You may obtain a copy of the License at\n  //\n  //      http://www.apache.org/licenses/LICENSE-2.0\n  //\n  // Unless required by applicable law or agreed to in writing, software\n  // distributed under the License is distributed on an \"AS IS\" BASIS,\n  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  // See the License for the specific language governing permissions and\n  // limitations under the License.\n\n  // Figure\n  //\n  // d-figure provides a state-machine of visibility events:\n  //\n  //                         scroll out of view\n  //                         +----------------+\n  //   *do work here*        |                |\n  // +----------------+    +-+---------+    +-v---------+\n  // | ready          +----> onscreen  |    | offscreen |\n  // +----------------+    +---------^-+    +---------+-+\n  //                                 |                |\n  //                                 +----------------+\n  //                                  scroll into view\n  //\n\n  class Figure extends HTMLElement {\n\n    static get is() { return 'd-figure'; }\n\n    static get readyQueue() {\n      if (!Figure._readyQueue) {\n        Figure._readyQueue = [];\n      }\n      return Figure._readyQueue;\n    }\n\n    static addToReadyQueue(figure) {\n      if (Figure.readyQueue.indexOf(figure) === -1) {\n        Figure.readyQueue.push(figure);\n        Figure.runReadyQueue();\n      }\n    }\n\n    static runReadyQueue() {\n      // console.log(\"Checking to run readyQueue, length: \" + Figure.readyQueue.length + \", scrolling: \" + Figure.isScrolling);\n      // if (Figure.isScrolling) return;\n      // console.log(\"Running ready Queue\");\n      const figure = Figure.readyQueue\n        .sort((a,b) => a._seenOnScreen - b._seenOnScreen )\n        .filter((figure) => !figure._ready)\n        .pop();\n      if (figure) {\n        figure.ready();\n        requestAnimationFrame(Figure.runReadyQueue);\n      }\n\n    }\n\n    constructor() {\n      super();\n      // debugger\n      this._ready = false;\n      this._onscreen = false;\n      this._offscreen = true;\n    }\n\n    connectedCallback() {\n      this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling');\n      Figure.marginObserver.observe(this);\n      Figure.directObserver.observe(this);\n    }\n\n    disconnectedCallback() {\n      Figure.marginObserver.unobserve(this);\n      Figure.directObserver.unobserve(this);\n    }\n\n    // We use two separate observers:\n    // One with an extra 1000px margin to warn if the viewpoint gets close,\n    // And one for the actual on/off screen events\n\n    static get marginObserver() {\n      if (!Figure._marginObserver) {\n        // if (!('IntersectionObserver' in window)) {\n        //   throw new Error('no interscetionobbserver!');\n        // }\n        const viewportHeight = window.innerHeight;\n        const margin = Math.floor(2 * viewportHeight);\n        const options = {rootMargin: margin + 'px 0px ' + margin + 'px 0px', threshold: 0.01};\n        const callback = Figure.didObserveMarginIntersection;\n        const observer = new IntersectionObserver(callback, options);\n        Figure._marginObserver = observer;\n      }\n      return Figure._marginObserver;\n    }\n\n    static didObserveMarginIntersection(entries) {\n      for (const entry of entries) {\n        const figure = entry.target;\n        if (entry.isIntersecting && !figure._ready) {\n          Figure.addToReadyQueue(figure);\n        }\n      }\n    }\n\n    static get directObserver() {\n      if (!Figure._directObserver) {\n        Figure._directObserver = new IntersectionObserver(\n          Figure.didObserveDirectIntersection, {\n            rootMargin: '0px', threshold: [0, 1.0],\n          }\n        );\n      }\n      return Figure._directObserver;\n    }\n\n    static didObserveDirectIntersection(entries) {\n      for (const entry of entries) {\n        const figure = entry.target;\n        if (entry.isIntersecting) {\n          figure._seenOnScreen = new Date();\n          // if (!figure._ready) { figure.ready(); }\n          if (figure._offscreen) { figure.onscreen(); }\n        } else {\n          if (figure._onscreen) { figure.offscreen(); }\n        }\n      }\n    }\n\n    // Notify listeners that registered late, too:\n\n    addEventListener(eventName, callback) {\n      super.addEventListener(eventName, callback);\n      // if we had already dispatched something while presumingly no one was listening, we do so again\n      // debugger\n      if (eventName === 'ready') {\n        if (Figure.readyQueue.indexOf(this) !== -1) {\n          this._ready = false;\n          Figure.runReadyQueue();\n        }\n      }\n      if (eventName === 'onscreen') {\n        this.onscreen();\n      }\n    }\n\n    // Custom Events\n\n    ready() {\n      // debugger\n      this._ready = true;\n      Figure.marginObserver.unobserve(this);\n      const event = new CustomEvent('ready');\n      this.dispatchEvent(event);\n    }\n\n    onscreen() {\n      this._onscreen = true;\n      this._offscreen = false;\n      const event = new CustomEvent('onscreen');\n      this.dispatchEvent(event);\n    }\n\n    offscreen() {\n      this._onscreen = false;\n      this._offscreen = true;\n      const event = new CustomEvent('offscreen');\n      this.dispatchEvent(event);\n    }\n\n  }\n\n  if (typeof window !== 'undefined') {\n\n    Figure.isScrolling = false;\n    let timeout;\n    const resetTimer = () => {\n      Figure.isScrolling = true;\n      clearTimeout(timeout);\n      timeout = setTimeout(() => {\n        Figure.isScrolling = false;\n        Figure.runReadyQueue();\n      }, 500);\n    };\n    window.addEventListener('scroll', resetTimer, true);\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  // This overlay is not secure.\n  // It is only meant as a social deterrent.\n\n  const productionHostname = 'distill.pub';\n  const T$9 = Template('d-interstitial', `\n<style>\n\n.overlay {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  background: white;\n\n  opacity: 1;\n  visibility: visible;\n\n  display: flex;\n  flex-flow: column;\n  justify-content: center;\n  z-index: 2147483647 /* MaxInt32 */\n\n}\n\n.container {\n  position: relative;\n  margin-left: auto;\n  margin-right: auto;\n  max-width: 420px;\n  padding: 2em;\n}\n\nh1 {\n  text-decoration: underline;\n  text-decoration-color: hsl(0,100%,40%);\n  -webkit-text-decoration-color: hsl(0,100%,40%);\n  margin-bottom: 1em;\n  line-height: 1.5em;\n}\n\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  -webkit-border-radius: none;\n  -moz-border-radius: none;\n  -ms-border-radius: none;\n  -o-border-radius: none;\n  border-radius: none;\n  outline: none;\n\n  font-size: 18px;\n  background: none;\n  width: 25%;\n  padding: 10px;\n  border: none;\n  border-bottom: solid 2px #999;\n  transition: border .3s;\n}\n\ninput[type=\"password\"]:focus {\n  border-bottom: solid 2px #333;\n}\n\ninput[type=\"password\"].wrong {\n  border-bottom: solid 2px hsl(0,100%,40%);\n}\n\np small {\n  color: #888;\n}\n\n.logo {\n  position: relative;\n  font-size: 1.5em;\n  margin-bottom: 3em;\n}\n\n.logo svg {\n  width: 36px;\n  position: relative;\n  top: 6px;\n  margin-right: 2px;\n}\n\n.logo svg path {\n  fill: none;\n  stroke: black;\n  stroke-width: 2px;\n}\n\n</style>\n\n<div class=\"overlay\">\n  <div class=\"container\">\n    <h1>This article is in review.</h1>\n    <p>Do not share this URL or the contents of this article. Thank you!</p>\n    <input id=\"interstitial-password-input\" type=\"password\" name=\"password\" autofocus/>\n    <p><small>Enter the password we shared with you as part of the review process to view the article.</small></p>\n  </div>\n</div>\n`);\n\n  class Interstitial extends T$9(HTMLElement) {\n\n    connectedCallback() {\n      if (this.shouldRemoveSelf()) {\n        this.parentElement.removeChild(this);\n      } else {\n        const passwordInput = this.root.querySelector('#interstitial-password-input');\n        passwordInput.oninput = (event) => this.passwordChanged(event);\n      }\n    }\n\n    passwordChanged(event) {\n      const entered = event.target.value;\n      if (entered === this.password) {\n        console.log('Correct password entered.');\n        this.parentElement.removeChild(this);\n        if (typeof(Storage) !== 'undefined') {\n          console.log('Saved that correct password was entered.');\n          localStorage.setItem(this.localStorageIdentifier(), 'true');\n        }\n      }\n    }\n\n    shouldRemoveSelf() {\n      // should never be visible in production\n      if (window && window.location.hostname === productionHostname) {\n        console.warn('Interstitial found on production, hiding it.');\n        return true\n      }\n      // should only have to enter password once\n      if (typeof(Storage) !== 'undefined') {\n        if (localStorage.getItem(this.localStorageIdentifier()) === 'true') {\n          console.log('Loaded that correct password was entered before; skipping interstitial.');\n          return true;\n        }\n      }\n      // otherwise, leave visible\n      return false;\n    }\n\n    localStorageIdentifier() {\n      const prefix = 'distill-drafts';\n      const suffix = 'interstitial-password-correct';\n      return prefix + (window ? window.location.pathname : '-') + suffix\n    }\n\n  }\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50),\n      e5 = Math.sqrt(10),\n      e2 = Math.sqrt(2);\n\n  function ticks(start, stop, count) {\n    var reverse,\n        i = -1,\n        n,\n        ticks,\n        step;\n\n    stop = +stop, start = +start, count = +count;\n    if (start === stop && count > 0) return [start];\n    if (reverse = stop < start) n = start, start = stop, stop = n;\n    if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n    if (step > 0) {\n      start = Math.ceil(start / step);\n      stop = Math.floor(stop / step);\n      ticks = new Array(n = Math.ceil(stop - start + 1));\n      while (++i < n) ticks[i] = (start + i) * step;\n    } else {\n      start = Math.floor(start * step);\n      stop = Math.ceil(stop * step);\n      ticks = new Array(n = Math.ceil(start - stop + 1));\n      while (++i < n) ticks[i] = (start - i) / step;\n    }\n\n    if (reverse) ticks.reverse();\n\n    return ticks;\n  }\n\n  function tickIncrement(start, stop, count) {\n    var step = (stop - start) / Math.max(0, count),\n        power = Math.floor(Math.log(step) / Math.LN10),\n        error = step / Math.pow(10, power);\n    return power >= 0\n        ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n        : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function initRange(domain, range) {\n    switch (arguments.length) {\n      case 0: break;\n      case 1: this.range(domain); break;\n      default: this.range(range).domain(domain); break;\n    }\n    return this;\n  }\n\n  function define(constructor, factory, prototype) {\n    constructor.prototype = factory.prototype = prototype;\n    prototype.constructor = constructor;\n  }\n\n  function extend(parent, definition) {\n    var prototype = Object.create(parent.prototype);\n    for (var key in definition) prototype[key] = definition[key];\n    return prototype;\n  }\n\n  function Color() {}\n\n  var darker = 0.7;\n  var brighter = 1 / darker;\n\n  var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n      reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n      reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n      reHex = /^#([0-9a-f]{3,8})$/,\n      reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n      reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n      reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n      reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n      reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n      reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\n  var named = {\n    aliceblue: 0xf0f8ff,\n    antiquewhite: 0xfaebd7,\n    aqua: 0x00ffff,\n    aquamarine: 0x7fffd4,\n    azure: 0xf0ffff,\n    beige: 0xf5f5dc,\n    bisque: 0xffe4c4,\n    black: 0x000000,\n    blanchedalmond: 0xffebcd,\n    blue: 0x0000ff,\n    blueviolet: 0x8a2be2,\n    brown: 0xa52a2a,\n    burlywood: 0xdeb887,\n    cadetblue: 0x5f9ea0,\n    chartreuse: 0x7fff00,\n    chocolate: 0xd2691e,\n    coral: 0xff7f50,\n    cornflowerblue: 0x6495ed,\n    cornsilk: 0xfff8dc,\n    crimson: 0xdc143c,\n    cyan: 0x00ffff,\n    darkblue: 0x00008b,\n    darkcyan: 0x008b8b,\n    darkgoldenrod: 0xb8860b,\n    darkgray: 0xa9a9a9,\n    darkgreen: 0x006400,\n    darkgrey: 0xa9a9a9,\n    darkkhaki: 0xbdb76b,\n    darkmagenta: 0x8b008b,\n    darkolivegreen: 0x556b2f,\n    darkorange: 0xff8c00,\n    darkorchid: 0x9932cc,\n    darkred: 0x8b0000,\n    darksalmon: 0xe9967a,\n    darkseagreen: 0x8fbc8f,\n    darkslateblue: 0x483d8b,\n    darkslategray: 0x2f4f4f,\n    darkslategrey: 0x2f4f4f,\n    darkturquoise: 0x00ced1,\n    darkviolet: 0x9400d3,\n    deeppink: 0xff1493,\n    deepskyblue: 0x00bfff,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1e90ff,\n    firebrick: 0xb22222,\n    floralwhite: 0xfffaf0,\n    forestgreen: 0x228b22,\n    fuchsia: 0xff00ff,\n    gainsboro: 0xdcdcdc,\n    ghostwhite: 0xf8f8ff,\n    gold: 0xffd700,\n    goldenrod: 0xdaa520,\n    gray: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xadff2f,\n    grey: 0x808080,\n    honeydew: 0xf0fff0,\n    hotpink: 0xff69b4,\n    indianred: 0xcd5c5c,\n    indigo: 0x4b0082,\n    ivory: 0xfffff0,\n    khaki: 0xf0e68c,\n    lavender: 0xe6e6fa,\n    lavenderblush: 0xfff0f5,\n    lawngreen: 0x7cfc00,\n    lemonchiffon: 0xfffacd,\n    lightblue: 0xadd8e6,\n    lightcoral: 0xf08080,\n    lightcyan: 0xe0ffff,\n    lightgoldenrodyellow: 0xfafad2,\n    lightgray: 0xd3d3d3,\n    lightgreen: 0x90ee90,\n    lightgrey: 0xd3d3d3,\n    lightpink: 0xffb6c1,\n    lightsalmon: 0xffa07a,\n    lightseagreen: 0x20b2aa,\n    lightskyblue: 0x87cefa,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xb0c4de,\n    lightyellow: 0xffffe0,\n    lime: 0x00ff00,\n    limegreen: 0x32cd32,\n    linen: 0xfaf0e6,\n    magenta: 0xff00ff,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66cdaa,\n    mediumblue: 0x0000cd,\n    mediumorchid: 0xba55d3,\n    mediumpurple: 0x9370db,\n    mediumseagreen: 0x3cb371,\n    mediumslateblue: 0x7b68ee,\n    mediumspringgreen: 0x00fa9a,\n    mediumturquoise: 0x48d1cc,\n    mediumvioletred: 0xc71585,\n    midnightblue: 0x191970,\n    mintcream: 0xf5fffa,\n    mistyrose: 0xffe4e1,\n    moccasin: 0xffe4b5,\n    navajowhite: 0xffdead,\n    navy: 0x000080,\n    oldlace: 0xfdf5e6,\n    olive: 0x808000,\n    olivedrab: 0x6b8e23,\n    orange: 0xffa500,\n    orangered: 0xff4500,\n    orchid: 0xda70d6,\n    palegoldenrod: 0xeee8aa,\n    palegreen: 0x98fb98,\n    paleturquoise: 0xafeeee,\n    palevioletred: 0xdb7093,\n    papayawhip: 0xffefd5,\n    peachpuff: 0xffdab9,\n    peru: 0xcd853f,\n    pink: 0xffc0cb,\n    plum: 0xdda0dd,\n    powderblue: 0xb0e0e6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xff0000,\n    rosybrown: 0xbc8f8f,\n    royalblue: 0x4169e1,\n    saddlebrown: 0x8b4513,\n    salmon: 0xfa8072,\n    sandybrown: 0xf4a460,\n    seagreen: 0x2e8b57,\n    seashell: 0xfff5ee,\n    sienna: 0xa0522d,\n    silver: 0xc0c0c0,\n    skyblue: 0x87ceeb,\n    slateblue: 0x6a5acd,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xfffafa,\n    springgreen: 0x00ff7f,\n    steelblue: 0x4682b4,\n    tan: 0xd2b48c,\n    teal: 0x008080,\n    thistle: 0xd8bfd8,\n    tomato: 0xff6347,\n    turquoise: 0x40e0d0,\n    violet: 0xee82ee,\n    wheat: 0xf5deb3,\n    white: 0xffffff,\n    whitesmoke: 0xf5f5f5,\n    yellow: 0xffff00,\n    yellowgreen: 0x9acd32\n  };\n\n  define(Color, color, {\n    copy: function(channels) {\n      return Object.assign(new this.constructor, this, channels);\n    },\n    displayable: function() {\n      return this.rgb().displayable();\n    },\n    hex: color_formatHex, // Deprecated! Use color.formatHex.\n    formatHex: color_formatHex,\n    formatHsl: color_formatHsl,\n    formatRgb: color_formatRgb,\n    toString: color_formatRgb\n  });\n\n  function color_formatHex() {\n    return this.rgb().formatHex();\n  }\n\n  function color_formatHsl() {\n    return hslConvert(this).formatHsl();\n  }\n\n  function color_formatRgb() {\n    return this.rgb().formatRgb();\n  }\n\n  function color(format) {\n    var m, l;\n    format = (format + \"\").trim().toLowerCase();\n    return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n        : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n        : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n        : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n        : null) // invalid hex\n        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n        : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n        : null;\n  }\n\n  function rgbn(n) {\n    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n  }\n\n  function rgba(r, g, b, a) {\n    if (a <= 0) r = g = b = NaN;\n    return new Rgb(r, g, b, a);\n  }\n\n  function rgbConvert(o) {\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Rgb;\n    o = o.rgb();\n    return new Rgb(o.r, o.g, o.b, o.opacity);\n  }\n\n  function rgb(r, g, b, opacity) {\n    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n  }\n\n  function Rgb(r, g, b, opacity) {\n    this.r = +r;\n    this.g = +g;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Rgb, rgb, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    rgb: function() {\n      return this;\n    },\n    displayable: function() {\n      return (-0.5 <= this.r && this.r < 255.5)\n          && (-0.5 <= this.g && this.g < 255.5)\n          && (-0.5 <= this.b && this.b < 255.5)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n    formatHex: rgb_formatHex,\n    formatRgb: rgb_formatRgb,\n    toString: rgb_formatRgb\n  }));\n\n  function rgb_formatHex() {\n    return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n  }\n\n  function rgb_formatRgb() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"rgb(\" : \"rgba(\")\n        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n\n  function hex(value) {\n    value = Math.max(0, Math.min(255, Math.round(value) || 0));\n    return (value < 16 ? \"0\" : \"\") + value.toString(16);\n  }\n\n  function hsla(h, s, l, a) {\n    if (a <= 0) h = s = l = NaN;\n    else if (l <= 0 || l >= 1) h = s = NaN;\n    else if (s <= 0) h = NaN;\n    return new Hsl(h, s, l, a);\n  }\n\n  function hslConvert(o) {\n    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Hsl;\n    if (o instanceof Hsl) return o;\n    o = o.rgb();\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        min = Math.min(r, g, b),\n        max = Math.max(r, g, b),\n        h = NaN,\n        s = max - min,\n        l = (max + min) / 2;\n    if (s) {\n      if (r === max) h = (g - b) / s + (g < b) * 6;\n      else if (g === max) h = (b - r) / s + 2;\n      else h = (r - g) / s + 4;\n      s /= l < 0.5 ? max + min : 2 - max - min;\n      h *= 60;\n    } else {\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new Hsl(h, s, l, o.opacity);\n  }\n\n  function hsl(h, s, l, opacity) {\n    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hsl(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hsl, hsl, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = this.h % 360 + (this.h < 0) * 360,\n          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n          l = this.l,\n          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n          m1 = 2 * l - m2;\n      return new Rgb(\n        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n        hsl2rgb(h, m1, m2),\n        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n        this.opacity\n      );\n    },\n    displayable: function() {\n      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n          && (0 <= this.l && this.l <= 1)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    formatHsl: function() {\n      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n      return (a === 1 ? \"hsl(\" : \"hsla(\")\n          + (this.h || 0) + \", \"\n          + (this.s || 0) * 100 + \"%, \"\n          + (this.l || 0) * 100 + \"%\"\n          + (a === 1 ? \")\" : \", \" + a + \")\");\n    }\n  }));\n\n  /* From FvD 13.37, CSS Color Module Level 3 */\n  function hsl2rgb(h, m1, m2) {\n    return (h < 60 ? m1 + (m2 - m1) * h / 60\n        : h < 180 ? m2\n        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n        : m1) * 255;\n  }\n\n  var deg2rad = Math.PI / 180;\n  var rad2deg = 180 / Math.PI;\n\n  // https://observablehq.com/@mbostock/lab-and-rgb\n  var K = 18,\n      Xn = 0.96422,\n      Yn = 1,\n      Zn = 0.82521,\n      t0 = 4 / 29,\n      t1 = 6 / 29,\n      t2 = 3 * t1 * t1,\n      t3 = t1 * t1 * t1;\n\n  function labConvert(o) {\n    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n    if (o instanceof Hcl) return hcl2lab(o);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = rgb2lrgb(o.r),\n        g = rgb2lrgb(o.g),\n        b = rgb2lrgb(o.b),\n        y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n    if (r === g && g === b) x = z = y; else {\n      x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n      z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n    }\n    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n  }\n\n  function lab(l, a, b, opacity) {\n    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n  }\n\n  function Lab(l, a, b, opacity) {\n    this.l = +l;\n    this.a = +a;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Lab, lab, extend(Color, {\n    brighter: function(k) {\n      return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    darker: function(k) {\n      return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    rgb: function() {\n      var y = (this.l + 16) / 116,\n          x = isNaN(this.a) ? y : y + this.a / 500,\n          z = isNaN(this.b) ? y : y - this.b / 200;\n      x = Xn * lab2xyz(x);\n      y = Yn * lab2xyz(y);\n      z = Zn * lab2xyz(z);\n      return new Rgb(\n        lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n        lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n        lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n        this.opacity\n      );\n    }\n  }));\n\n  function xyz2lab(t) {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n  }\n\n  function lab2xyz(t) {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n  }\n\n  function lrgb2rgb(x) {\n    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n  }\n\n  function rgb2lrgb(x) {\n    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n  }\n\n  function hclConvert(o) {\n    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n    if (!(o instanceof Lab)) o = labConvert(o);\n    if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n    var h = Math.atan2(o.b, o.a) * rad2deg;\n    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n  }\n\n  function hcl(h, c, l, opacity) {\n    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hcl(h, c, l, opacity) {\n    this.h = +h;\n    this.c = +c;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  function hcl2lab(o) {\n    if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n    var h = o.h * deg2rad;\n    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n  }\n\n  define(Hcl, hcl, extend(Color, {\n    brighter: function(k) {\n      return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n    },\n    darker: function(k) {\n      return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n    },\n    rgb: function() {\n      return hcl2lab(this).rgb();\n    }\n  }));\n\n  var A = -0.14861,\n      B = +1.78277,\n      C = -0.29227,\n      D = -0.90649,\n      E = +1.97294,\n      ED = E * D,\n      EB = E * B,\n      BC_DA = B * C - D * A;\n\n  function cubehelixConvert(o) {\n    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n        bl = b - l,\n        k = (E * (g - l) - C * bl) / D,\n        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n  }\n\n  function cubehelix(h, s, l, opacity) {\n    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Cubehelix(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Cubehelix, cubehelix, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n          l = +this.l,\n          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n          cosh = Math.cos(h),\n          sinh = Math.sin(h);\n      return new Rgb(\n        255 * (l + a * (A * cosh + B * sinh)),\n        255 * (l + a * (C * cosh + D * sinh)),\n        255 * (l + a * (E * cosh)),\n        this.opacity\n      );\n    }\n  }));\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function linear(a, d) {\n    return function(t) {\n      return a + t * d;\n    };\n  }\n\n  function exponential(a, b, y) {\n    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n      return Math.pow(a + t * b, y);\n    };\n  }\n\n  function gamma(y) {\n    return (y = +y) === 1 ? nogamma : function(a, b) {\n      return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n    };\n  }\n\n  function nogamma(a, b) {\n    var d = b - a;\n    return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n  }\n\n  var rgb$1 = (function rgbGamma(y) {\n    var color = gamma(y);\n\n    function rgb$1(start, end) {\n      var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n          g = color(start.g, end.g),\n          b = color(start.b, end.b),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.r = r(t);\n        start.g = g(t);\n        start.b = b(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    rgb$1.gamma = rgbGamma;\n\n    return rgb$1;\n  })(1);\n\n  function numberArray(a, b) {\n    if (!b) b = [];\n    var n = a ? Math.min(b.length, a.length) : 0,\n        c = b.slice(),\n        i;\n    return function(t) {\n      for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n      return c;\n    };\n  }\n\n  function isNumberArray(x) {\n    return ArrayBuffer.isView(x) && !(x instanceof DataView);\n  }\n\n  function genericArray(a, b) {\n    var nb = b ? b.length : 0,\n        na = a ? Math.min(nb, a.length) : 0,\n        x = new Array(na),\n        c = new Array(nb),\n        i;\n\n    for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n    for (; i < nb; ++i) c[i] = b[i];\n\n    return function(t) {\n      for (i = 0; i < na; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n\n  function date(a, b) {\n    var d = new Date;\n    return a = +a, b = +b, function(t) {\n      return d.setTime(a * (1 - t) + b * t), d;\n    };\n  }\n\n  function interpolateNumber(a, b) {\n    return a = +a, b = +b, function(t) {\n      return a * (1 - t) + b * t;\n    };\n  }\n\n  function object(a, b) {\n    var i = {},\n        c = {},\n        k;\n\n    if (a === null || typeof a !== \"object\") a = {};\n    if (b === null || typeof b !== \"object\") b = {};\n\n    for (k in b) {\n      if (k in a) {\n        i[k] = interpolate(a[k], b[k]);\n      } else {\n        c[k] = b[k];\n      }\n    }\n\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n\n  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n      reB = new RegExp(reA.source, \"g\");\n\n  function zero(b) {\n    return function() {\n      return b;\n    };\n  }\n\n  function one(b) {\n    return function(t) {\n      return b(t) + \"\";\n    };\n  }\n\n  function string(a, b) {\n    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n        am, // current match in a\n        bm, // current match in b\n        bs, // string preceding current number in b, if any\n        i = -1, // index in s\n        s = [], // string constants and placeholders\n        q = []; // number interpolators\n\n    // Coerce inputs to strings.\n    a = a + \"\", b = b + \"\";\n\n    // Interpolate pairs of numbers in a & b.\n    while ((am = reA.exec(a))\n        && (bm = reB.exec(b))) {\n      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; // coalesce with previous string\n        else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n        if (s[i]) s[i] += bm; // coalesce with previous string\n        else s[++i] = bm;\n      } else { // interpolate non-matching numbers\n        s[++i] = null;\n        q.push({i: i, x: interpolateNumber(am, bm)});\n      }\n      bi = reB.lastIndex;\n    }\n\n    // Add remains of b.\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n\n    // Special optimization for only a single match.\n    // Otherwise, interpolate each of the numbers and rejoin the string.\n    return s.length < 2 ? (q[0]\n        ? one(q[0].x)\n        : zero(b))\n        : (b = q.length, function(t) {\n            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n            return s.join(\"\");\n          });\n  }\n\n  function interpolate(a, b) {\n    var t = typeof b, c;\n    return b == null || t === \"boolean\" ? constant(b)\n        : (t === \"number\" ? interpolateNumber\n        : t === \"string\" ? ((c = color(b)) ? (b = c, rgb$1) : string)\n        : b instanceof color ? rgb$1\n        : b instanceof Date ? date\n        : isNumberArray(b) ? numberArray\n        : Array.isArray(b) ? genericArray\n        : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n        : interpolateNumber)(a, b);\n  }\n\n  function interpolateRound(a, b) {\n    return a = +a, b = +b, function(t) {\n      return Math.round(a * (1 - t) + b * t);\n    };\n  }\n\n  function constant$1(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  var unit = [0, 1];\n\n  function identity(x) {\n    return x;\n  }\n\n  function normalize(a, b) {\n    return (b -= (a = +a))\n        ? function(x) { return (x - a) / b; }\n        : constant$1(isNaN(b) ? NaN : 0.5);\n  }\n\n  function clamper(a, b) {\n    var t;\n    if (a > b) t = a, a = b, b = t;\n    return function(x) { return Math.max(a, Math.min(b, x)); };\n  }\n\n  // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n  // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n  function bimap(domain, range, interpolate) {\n    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n    if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n    else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n    return function(x) { return r0(d0(x)); };\n  }\n\n  function polymap(domain, range, interpolate) {\n    var j = Math.min(domain.length, range.length) - 1,\n        d = new Array(j),\n        r = new Array(j),\n        i = -1;\n\n    // Reverse descending domains.\n    if (domain[j] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n\n    while (++i < j) {\n      d[i] = normalize(domain[i], domain[i + 1]);\n      r[i] = interpolate(range[i], range[i + 1]);\n    }\n\n    return function(x) {\n      var i = bisectRight(domain, x, 1, j) - 1;\n      return r[i](d[i](x));\n    };\n  }\n\n  function copy(source, target) {\n    return target\n        .domain(source.domain())\n        .range(source.range())\n        .interpolate(source.interpolate())\n        .clamp(source.clamp())\n        .unknown(source.unknown());\n  }\n\n  function transformer() {\n    var domain = unit,\n        range = unit,\n        interpolate$1 = interpolate,\n        transform,\n        untransform,\n        unknown,\n        clamp = identity,\n        piecewise,\n        output,\n        input;\n\n    function rescale() {\n      var n = Math.min(domain.length, range.length);\n      if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n      piecewise = n > 2 ? polymap : bimap;\n      output = input = null;\n      return scale;\n    }\n\n    function scale(x) {\n      return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));\n    }\n\n    scale.invert = function(y) {\n      return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range = Array.from(_), interpolate$1 = interpolateRound, rescale();\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n    };\n\n    scale.interpolate = function(_) {\n      return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;\n    };\n\n    scale.unknown = function(_) {\n      return arguments.length ? (unknown = _, scale) : unknown;\n    };\n\n    return function(t, u) {\n      transform = t, untransform = u;\n      return rescale();\n    };\n  }\n\n  function continuous() {\n    return transformer()(identity, identity);\n  }\n\n  // Computes the decimal coefficient and exponent of the specified number x with\n  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n  // For example, formatDecimal(1.23) returns [\"123\", 0].\n  function formatDecimal(x, p) {\n    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n    var i, coefficient = x.slice(0, i);\n\n    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n    return [\n      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n      +x.slice(i + 1)\n    ];\n  }\n\n  function exponent(x) {\n    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n  }\n\n  function formatGroup(grouping, thousands) {\n    return function(value, width) {\n      var i = value.length,\n          t = [],\n          j = 0,\n          g = grouping[0],\n          length = 0;\n\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = grouping[j = (j + 1) % grouping.length];\n      }\n\n      return t.reverse().join(thousands);\n    };\n  }\n\n  function formatNumerals(numerals) {\n    return function(value) {\n      return value.replace(/[0-9]/g, function(i) {\n        return numerals[+i];\n      });\n    };\n  }\n\n  // [[fill]align][sign][symbol][0][width][,][.precision][~][type]\n  var re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\n  function formatSpecifier(specifier) {\n    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n    var match;\n    return new FormatSpecifier({\n      fill: match[1],\n      align: match[2],\n      sign: match[3],\n      symbol: match[4],\n      zero: match[5],\n      width: match[6],\n      comma: match[7],\n      precision: match[8] && match[8].slice(1),\n      trim: match[9],\n      type: match[10]\n    });\n  }\n\n  formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\n  function FormatSpecifier(specifier) {\n    this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n    this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n    this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n    this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n    this.zero = !!specifier.zero;\n    this.width = specifier.width === undefined ? undefined : +specifier.width;\n    this.comma = !!specifier.comma;\n    this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n    this.trim = !!specifier.trim;\n    this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n  }\n\n  FormatSpecifier.prototype.toString = function() {\n    return this.fill\n        + this.align\n        + this.sign\n        + this.symbol\n        + (this.zero ? \"0\" : \"\")\n        + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n        + (this.comma ? \",\" : \"\")\n        + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n        + (this.trim ? \"~\" : \"\")\n        + this.type;\n  };\n\n  // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n  function formatTrim(s) {\n    out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n      switch (s[i]) {\n        case \".\": i0 = i1 = i; break;\n        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n        default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n      }\n    }\n    return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n  }\n\n  var prefixExponent;\n\n  function formatPrefixAuto(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1],\n        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n        n = coefficient.length;\n    return i === n ? coefficient\n        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n  }\n\n  function formatRounded(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1];\n    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n  }\n\n  var formatTypes = {\n    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n    \"b\": function(x) { return Math.round(x).toString(2); },\n    \"c\": function(x) { return x + \"\"; },\n    \"d\": function(x) { return Math.round(x).toString(10); },\n    \"e\": function(x, p) { return x.toExponential(p); },\n    \"f\": function(x, p) { return x.toFixed(p); },\n    \"g\": function(x, p) { return x.toPrecision(p); },\n    \"o\": function(x) { return Math.round(x).toString(8); },\n    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n    \"r\": formatRounded,\n    \"s\": formatPrefixAuto,\n    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n    \"x\": function(x) { return Math.round(x).toString(16); }\n  };\n\n  function identity$1(x) {\n    return x;\n  }\n\n  var map = Array.prototype.map,\n      prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n  function formatLocale(locale) {\n    var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n        currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n        currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n        decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n        numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),\n        percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n        minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n        nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n    function newFormat(specifier) {\n      specifier = formatSpecifier(specifier);\n\n      var fill = specifier.fill,\n          align = specifier.align,\n          sign = specifier.sign,\n          symbol = specifier.symbol,\n          zero = specifier.zero,\n          width = specifier.width,\n          comma = specifier.comma,\n          precision = specifier.precision,\n          trim = specifier.trim,\n          type = specifier.type;\n\n      // The \"n\" type is an alias for \",g\".\n      if (type === \"n\") comma = true, type = \"g\";\n\n      // The \"\" type, and any invalid type, is an alias for \".12~g\".\n      else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n      // If zero fill is specified, padding goes after sign and before digits.\n      if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n      // Compute the prefix and suffix.\n      // For SI-prefix, the suffix is lazily computed.\n      var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n          suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n      // What format function should we use?\n      // Is this an integer type?\n      // Can this type generate exponential notation?\n      var formatType = formatTypes[type],\n          maybeSuffix = /[defgprs%]/.test(type);\n\n      // Set the default precision if not specified,\n      // or clamp the specified precision to the supported range.\n      // For significant precision, it must be in [1, 21].\n      // For fixed precision, it must be in [0, 20].\n      precision = precision === undefined ? 6\n          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n          : Math.max(0, Math.min(20, precision));\n\n      function format(value) {\n        var valuePrefix = prefix,\n            valueSuffix = suffix,\n            i, n, c;\n\n        if (type === \"c\") {\n          valueSuffix = formatType(value) + valueSuffix;\n          value = \"\";\n        } else {\n          value = +value;\n\n          // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n          var valueNegative = value < 0 || 1 / value < 0;\n\n          // Perform the initial formatting.\n          value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n          // Trim insignificant zeros.\n          if (trim) value = formatTrim(value);\n\n          // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n          if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n          // Compute the prefix and suffix.\n          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n          valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n          // Break the formatted value into the integer “value” part that can be\n          // grouped, and fractional or exponential “suffix” part that is not.\n          if (maybeSuffix) {\n            i = -1, n = value.length;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n                value = value.slice(0, i);\n                break;\n              }\n            }\n          }\n        }\n\n        // If the fill character is not \"0\", grouping is applied before padding.\n        if (comma && !zero) value = group(value, Infinity);\n\n        // Compute the padding.\n        var length = valuePrefix.length + value.length + valueSuffix.length,\n            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n        // If the fill character is \"0\", grouping is applied after padding.\n        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n        // Reconstruct the final output based on the desired alignment.\n        switch (align) {\n          case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n          case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n          case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n          default: value = padding + valuePrefix + value + valueSuffix; break;\n        }\n\n        return numerals(value);\n      }\n\n      format.toString = function() {\n        return specifier + \"\";\n      };\n\n      return format;\n    }\n\n    function formatPrefix(specifier, value) {\n      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n          e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n          k = Math.pow(10, -e),\n          prefix = prefixes[8 + e / 3];\n      return function(value) {\n        return f(k * value) + prefix;\n      };\n    }\n\n    return {\n      format: newFormat,\n      formatPrefix: formatPrefix\n    };\n  }\n\n  var locale;\n  var format;\n  var formatPrefix;\n\n  defaultLocale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [3],\n    currency: [\"$\", \"\"],\n    minus: \"-\"\n  });\n\n  function defaultLocale(definition) {\n    locale = formatLocale(definition);\n    format = locale.format;\n    formatPrefix = locale.formatPrefix;\n    return locale;\n  }\n\n  function precisionFixed(step) {\n    return Math.max(0, -exponent(Math.abs(step)));\n  }\n\n  function precisionPrefix(step, value) {\n    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n  }\n\n  function precisionRound(step, max) {\n    step = Math.abs(step), max = Math.abs(max) - step;\n    return Math.max(0, exponent(max) - exponent(step)) + 1;\n  }\n\n  function tickFormat(start, stop, count, specifier) {\n    var step = tickStep(start, stop, count),\n        precision;\n    specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n    switch (specifier.type) {\n      case \"s\": {\n        var value = Math.max(Math.abs(start), Math.abs(stop));\n        if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n        return formatPrefix(specifier, value);\n      }\n      case \"\":\n      case \"e\":\n      case \"g\":\n      case \"p\":\n      case \"r\": {\n        if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n        break;\n      }\n      case \"f\":\n      case \"%\": {\n        if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n        break;\n      }\n    }\n    return format(specifier);\n  }\n\n  function linearish(scale) {\n    var domain = scale.domain;\n\n    scale.ticks = function(count) {\n      var d = domain();\n      return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      var d = domain();\n      return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n    };\n\n    scale.nice = function(count) {\n      if (count == null) count = 10;\n\n      var d = domain(),\n          i0 = 0,\n          i1 = d.length - 1,\n          start = d[i0],\n          stop = d[i1],\n          step;\n\n      if (stop < start) {\n        step = start, start = stop, stop = step;\n        step = i0, i0 = i1, i1 = step;\n      }\n\n      step = tickIncrement(start, stop, count);\n\n      if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n        step = tickIncrement(start, stop, count);\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n        step = tickIncrement(start, stop, count);\n      }\n\n      if (step > 0) {\n        d[i0] = Math.floor(start / step) * step;\n        d[i1] = Math.ceil(stop / step) * step;\n        domain(d);\n      } else if (step < 0) {\n        d[i0] = Math.ceil(start * step) / step;\n        d[i1] = Math.floor(stop * step) / step;\n        domain(d);\n      }\n\n      return scale;\n    };\n\n    return scale;\n  }\n\n  function linear$1() {\n    var scale = continuous();\n\n    scale.copy = function() {\n      return copy(scale, linear$1());\n    };\n\n    initRange.apply(scale, arguments);\n\n    return linearish(scale);\n  }\n\n  var t0$1 = new Date,\n      t1$1 = new Date;\n\n  function newInterval(floori, offseti, count, field) {\n\n    function interval(date) {\n      return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n    }\n\n    interval.floor = function(date) {\n      return floori(date = new Date(+date)), date;\n    };\n\n    interval.ceil = function(date) {\n      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n    };\n\n    interval.round = function(date) {\n      var d0 = interval(date),\n          d1 = interval.ceil(date);\n      return date - d0 < d1 - date ? d0 : d1;\n    };\n\n    interval.offset = function(date, step) {\n      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n    };\n\n    interval.range = function(start, stop, step) {\n      var range = [], previous;\n      start = interval.ceil(start);\n      step = step == null ? 1 : Math.floor(step);\n      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n      do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n      while (previous < start && start < stop);\n      return range;\n    };\n\n    interval.filter = function(test) {\n      return newInterval(function(date) {\n        if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n      }, function(date, step) {\n        if (date >= date) {\n          if (step < 0) while (++step <= 0) {\n            while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n          } else while (--step >= 0) {\n            while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n          }\n        }\n      });\n    };\n\n    if (count) {\n      interval.count = function(start, end) {\n        t0$1.setTime(+start), t1$1.setTime(+end);\n        floori(t0$1), floori(t1$1);\n        return Math.floor(count(t0$1, t1$1));\n      };\n\n      interval.every = function(step) {\n        step = Math.floor(step);\n        return !isFinite(step) || !(step > 0) ? null\n            : !(step > 1) ? interval\n            : interval.filter(field\n                ? function(d) { return field(d) % step === 0; }\n                : function(d) { return interval.count(0, d) % step === 0; });\n      };\n    }\n\n    return interval;\n  }\n\n  var millisecond = newInterval(function() {\n    // noop\n  }, function(date, step) {\n    date.setTime(+date + step);\n  }, function(start, end) {\n    return end - start;\n  });\n\n  // An optimized implementation for this simple case.\n  millisecond.every = function(k) {\n    k = Math.floor(k);\n    if (!isFinite(k) || !(k > 0)) return null;\n    if (!(k > 1)) return millisecond;\n    return newInterval(function(date) {\n      date.setTime(Math.floor(date / k) * k);\n    }, function(date, step) {\n      date.setTime(+date + step * k);\n    }, function(start, end) {\n      return (end - start) / k;\n    });\n  };\n\n  var durationSecond = 1e3;\n  var durationMinute = 6e4;\n  var durationHour = 36e5;\n  var durationDay = 864e5;\n  var durationWeek = 6048e5;\n\n  var second = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds());\n  }, function(date, step) {\n    date.setTime(+date + step * durationSecond);\n  }, function(start, end) {\n    return (end - start) / durationSecond;\n  }, function(date) {\n    return date.getUTCSeconds();\n  });\n\n  var minute = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getMinutes();\n  });\n\n  var hour = newInterval(function(date) {\n    date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getHours();\n  });\n\n  var day = newInterval(function(date) {\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n\n  function weekday(i) {\n    return newInterval(function(date) {\n      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setDate(date.getDate() + step * 7);\n    }, function(start, end) {\n      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n    });\n  }\n\n  var sunday = weekday(0);\n  var monday = weekday(1);\n  var tuesday = weekday(2);\n  var wednesday = weekday(3);\n  var thursday = weekday(4);\n  var friday = weekday(5);\n  var saturday = weekday(6);\n\n  var month = newInterval(function(date) {\n    date.setDate(1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setMonth(date.getMonth() + step);\n  }, function(start, end) {\n    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n  }, function(date) {\n    return date.getMonth();\n  });\n\n  var year = newInterval(function(date) {\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step);\n  }, function(start, end) {\n    return end.getFullYear() - start.getFullYear();\n  }, function(date) {\n    return date.getFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  year.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n      date.setMonth(0, 1);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setFullYear(date.getFullYear() + step * k);\n    });\n  };\n\n  var utcMinute = newInterval(function(date) {\n    date.setUTCSeconds(0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getUTCMinutes();\n  });\n\n  var utcHour = newInterval(function(date) {\n    date.setUTCMinutes(0, 0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getUTCHours();\n  });\n\n  var utcDay = newInterval(function(date) {\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step);\n  }, function(start, end) {\n    return (end - start) / durationDay;\n  }, function(date) {\n    return date.getUTCDate() - 1;\n  });\n\n  function utcWeekday(i) {\n    return newInterval(function(date) {\n      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCDate(date.getUTCDate() + step * 7);\n    }, function(start, end) {\n      return (end - start) / durationWeek;\n    });\n  }\n\n  var utcSunday = utcWeekday(0);\n  var utcMonday = utcWeekday(1);\n  var utcTuesday = utcWeekday(2);\n  var utcWednesday = utcWeekday(3);\n  var utcThursday = utcWeekday(4);\n  var utcFriday = utcWeekday(5);\n  var utcSaturday = utcWeekday(6);\n\n  var utcMonth = newInterval(function(date) {\n    date.setUTCDate(1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCMonth(date.getUTCMonth() + step);\n  }, function(start, end) {\n    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n  }, function(date) {\n    return date.getUTCMonth();\n  });\n\n  var utcYear = newInterval(function(date) {\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step);\n  }, function(start, end) {\n    return end.getUTCFullYear() - start.getUTCFullYear();\n  }, function(date) {\n    return date.getUTCFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  utcYear.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n      date.setUTCMonth(0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n    });\n  };\n\n  function localDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n      date.setFullYear(d.y);\n      return date;\n    }\n    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n  }\n\n  function utcDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n      date.setUTCFullYear(d.y);\n      return date;\n    }\n    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n  }\n\n  function newDate(y, m, d) {\n    return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n  }\n\n  function formatLocale$1(locale) {\n    var locale_dateTime = locale.dateTime,\n        locale_date = locale.date,\n        locale_time = locale.time,\n        locale_periods = locale.periods,\n        locale_weekdays = locale.days,\n        locale_shortWeekdays = locale.shortDays,\n        locale_months = locale.months,\n        locale_shortMonths = locale.shortMonths;\n\n    var periodRe = formatRe(locale_periods),\n        periodLookup = formatLookup(locale_periods),\n        weekdayRe = formatRe(locale_weekdays),\n        weekdayLookup = formatLookup(locale_weekdays),\n        shortWeekdayRe = formatRe(locale_shortWeekdays),\n        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n        monthRe = formatRe(locale_months),\n        monthLookup = formatLookup(locale_months),\n        shortMonthRe = formatRe(locale_shortMonths),\n        shortMonthLookup = formatLookup(locale_shortMonths);\n\n    var formats = {\n      \"a\": formatShortWeekday,\n      \"A\": formatWeekday,\n      \"b\": formatShortMonth,\n      \"B\": formatMonth,\n      \"c\": null,\n      \"d\": formatDayOfMonth,\n      \"e\": formatDayOfMonth,\n      \"f\": formatMicroseconds,\n      \"H\": formatHour24,\n      \"I\": formatHour12,\n      \"j\": formatDayOfYear,\n      \"L\": formatMilliseconds,\n      \"m\": formatMonthNumber,\n      \"M\": formatMinutes,\n      \"p\": formatPeriod,\n      \"q\": formatQuarter,\n      \"Q\": formatUnixTimestamp,\n      \"s\": formatUnixTimestampSeconds,\n      \"S\": formatSeconds,\n      \"u\": formatWeekdayNumberMonday,\n      \"U\": formatWeekNumberSunday,\n      \"V\": formatWeekNumberISO,\n      \"w\": formatWeekdayNumberSunday,\n      \"W\": formatWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatYear,\n      \"Y\": formatFullYear,\n      \"Z\": formatZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var utcFormats = {\n      \"a\": formatUTCShortWeekday,\n      \"A\": formatUTCWeekday,\n      \"b\": formatUTCShortMonth,\n      \"B\": formatUTCMonth,\n      \"c\": null,\n      \"d\": formatUTCDayOfMonth,\n      \"e\": formatUTCDayOfMonth,\n      \"f\": formatUTCMicroseconds,\n      \"H\": formatUTCHour24,\n      \"I\": formatUTCHour12,\n      \"j\": formatUTCDayOfYear,\n      \"L\": formatUTCMilliseconds,\n      \"m\": formatUTCMonthNumber,\n      \"M\": formatUTCMinutes,\n      \"p\": formatUTCPeriod,\n      \"q\": formatUTCQuarter,\n      \"Q\": formatUnixTimestamp,\n      \"s\": formatUnixTimestampSeconds,\n      \"S\": formatUTCSeconds,\n      \"u\": formatUTCWeekdayNumberMonday,\n      \"U\": formatUTCWeekNumberSunday,\n      \"V\": formatUTCWeekNumberISO,\n      \"w\": formatUTCWeekdayNumberSunday,\n      \"W\": formatUTCWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatUTCYear,\n      \"Y\": formatUTCFullYear,\n      \"Z\": formatUTCZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var parses = {\n      \"a\": parseShortWeekday,\n      \"A\": parseWeekday,\n      \"b\": parseShortMonth,\n      \"B\": parseMonth,\n      \"c\": parseLocaleDateTime,\n      \"d\": parseDayOfMonth,\n      \"e\": parseDayOfMonth,\n      \"f\": parseMicroseconds,\n      \"H\": parseHour24,\n      \"I\": parseHour24,\n      \"j\": parseDayOfYear,\n      \"L\": parseMilliseconds,\n      \"m\": parseMonthNumber,\n      \"M\": parseMinutes,\n      \"p\": parsePeriod,\n      \"q\": parseQuarter,\n      \"Q\": parseUnixTimestamp,\n      \"s\": parseUnixTimestampSeconds,\n      \"S\": parseSeconds,\n      \"u\": parseWeekdayNumberMonday,\n      \"U\": parseWeekNumberSunday,\n      \"V\": parseWeekNumberISO,\n      \"w\": parseWeekdayNumberSunday,\n      \"W\": parseWeekNumberMonday,\n      \"x\": parseLocaleDate,\n      \"X\": parseLocaleTime,\n      \"y\": parseYear,\n      \"Y\": parseFullYear,\n      \"Z\": parseZone,\n      \"%\": parseLiteralPercent\n    };\n\n    // These recursive directive definitions must be deferred.\n    formats.x = newFormat(locale_date, formats);\n    formats.X = newFormat(locale_time, formats);\n    formats.c = newFormat(locale_dateTime, formats);\n    utcFormats.x = newFormat(locale_date, utcFormats);\n    utcFormats.X = newFormat(locale_time, utcFormats);\n    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n    function newFormat(specifier, formats) {\n      return function(date) {\n        var string = [],\n            i = -1,\n            j = 0,\n            n = specifier.length,\n            c,\n            pad,\n            format;\n\n        if (!(date instanceof Date)) date = new Date(+date);\n\n        while (++i < n) {\n          if (specifier.charCodeAt(i) === 37) {\n            string.push(specifier.slice(j, i));\n            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n            else pad = c === \"e\" ? \" \" : \"0\";\n            if (format = formats[c]) c = format(date, pad);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n\n        string.push(specifier.slice(j, i));\n        return string.join(\"\");\n      };\n    }\n\n    function newParse(specifier, Z) {\n      return function(string) {\n        var d = newDate(1900, undefined, 1),\n            i = parseSpecifier(d, specifier, string += \"\", 0),\n            week, day$1;\n        if (i != string.length) return null;\n\n        // If a UNIX timestamp is specified, return it.\n        if (\"Q\" in d) return new Date(d.Q);\n        if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n        // If this is utcParse, never use the local timezone.\n        if (Z && !(\"Z\" in d)) d.Z = 0;\n\n        // The am-pm flag is 0 for AM, and 1 for PM.\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n        // If the month was not specified, inherit from the quarter.\n        if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n        // Convert day-of-week and week-of-year to day-of-year.\n        if (\"V\" in d) {\n          if (d.V < 1 || d.V > 53) return null;\n          if (!(\"w\" in d)) d.w = 1;\n          if (\"Z\" in d) {\n            week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();\n            week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n            week = utcDay.offset(week, (d.V - 1) * 7);\n            d.y = week.getUTCFullYear();\n            d.m = week.getUTCMonth();\n            d.d = week.getUTCDate() + (d.w + 6) % 7;\n          } else {\n            week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();\n            week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);\n            week = day.offset(week, (d.V - 1) * 7);\n            d.y = week.getFullYear();\n            d.m = week.getMonth();\n            d.d = week.getDate() + (d.w + 6) % 7;\n          }\n        } else if (\"W\" in d || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n          day$1 = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n          d.m = 0;\n          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;\n        }\n\n        // If a time zone is specified, all fields are interpreted as UTC and then\n        // offset according to the specified time zone.\n        if (\"Z\" in d) {\n          d.H += d.Z / 100 | 0;\n          d.M += d.Z % 100;\n          return utcDate(d);\n        }\n\n        // Otherwise, all fields are in local time.\n        return localDate(d);\n      };\n    }\n\n    function parseSpecifier(d, specifier, string, j) {\n      var i = 0,\n          n = specifier.length,\n          m = string.length,\n          c,\n          parse;\n\n      while (i < n) {\n        if (j >= m) return -1;\n        c = specifier.charCodeAt(i++);\n        if (c === 37) {\n          c = specifier.charAt(i++);\n          parse = parses[c in pads ? specifier.charAt(i++) : c];\n          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n\n      return j;\n    }\n\n    function parsePeriod(d, string, i) {\n      var n = periodRe.exec(string.slice(i));\n      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortWeekday(d, string, i) {\n      var n = shortWeekdayRe.exec(string.slice(i));\n      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseWeekday(d, string, i) {\n      var n = weekdayRe.exec(string.slice(i));\n      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortMonth(d, string, i) {\n      var n = shortMonthRe.exec(string.slice(i));\n      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseMonth(d, string, i) {\n      var n = monthRe.exec(string.slice(i));\n      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseLocaleDateTime(d, string, i) {\n      return parseSpecifier(d, locale_dateTime, string, i);\n    }\n\n    function parseLocaleDate(d, string, i) {\n      return parseSpecifier(d, locale_date, string, i);\n    }\n\n    function parseLocaleTime(d, string, i) {\n      return parseSpecifier(d, locale_time, string, i);\n    }\n\n    function formatShortWeekday(d) {\n      return locale_shortWeekdays[d.getDay()];\n    }\n\n    function formatWeekday(d) {\n      return locale_weekdays[d.getDay()];\n    }\n\n    function formatShortMonth(d) {\n      return locale_shortMonths[d.getMonth()];\n    }\n\n    function formatMonth(d) {\n      return locale_months[d.getMonth()];\n    }\n\n    function formatPeriod(d) {\n      return locale_periods[+(d.getHours() >= 12)];\n    }\n\n    function formatQuarter(d) {\n      return 1 + ~~(d.getMonth() / 3);\n    }\n\n    function formatUTCShortWeekday(d) {\n      return locale_shortWeekdays[d.getUTCDay()];\n    }\n\n    function formatUTCWeekday(d) {\n      return locale_weekdays[d.getUTCDay()];\n    }\n\n    function formatUTCShortMonth(d) {\n      return locale_shortMonths[d.getUTCMonth()];\n    }\n\n    function formatUTCMonth(d) {\n      return locale_months[d.getUTCMonth()];\n    }\n\n    function formatUTCPeriod(d) {\n      return locale_periods[+(d.getUTCHours() >= 12)];\n    }\n\n    function formatUTCQuarter(d) {\n      return 1 + ~~(d.getUTCMonth() / 3);\n    }\n\n    return {\n      format: function(specifier) {\n        var f = newFormat(specifier += \"\", formats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      parse: function(specifier) {\n        var p = newParse(specifier += \"\", false);\n        p.toString = function() { return specifier; };\n        return p;\n      },\n      utcFormat: function(specifier) {\n        var f = newFormat(specifier += \"\", utcFormats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      utcParse: function(specifier) {\n        var p = newParse(specifier += \"\", true);\n        p.toString = function() { return specifier; };\n        return p;\n      }\n    };\n  }\n\n  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n      numberRe = /^\\s*\\d+/, // note: ignores next directive\n      percentRe = /^%/,\n      requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n  function pad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\",\n        string = (sign ? -value : value) + \"\",\n        length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n\n  function requote(s) {\n    return s.replace(requoteRe, \"\\\\$&\");\n  }\n\n  function formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n  }\n\n  function formatLookup(names) {\n    var map = {}, i = -1, n = names.length;\n    while (++i < n) map[names[i].toLowerCase()] = i;\n    return map;\n  }\n\n  function parseWeekdayNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.w = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekdayNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.u = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.U = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberISO(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.V = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.W = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseFullYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 4));\n    return n ? (d.y = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n  }\n\n  function parseZone(d, string, i) {\n    var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n  }\n\n  function parseQuarter(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n  }\n\n  function parseMonthNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n  }\n\n  function parseDayOfMonth(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseDayOfYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseHour24(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.H = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMinutes(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.M = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.S = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMilliseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.L = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMicroseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 6));\n    return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n  }\n\n  function parseLiteralPercent(d, string, i) {\n    var n = percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n\n  function parseUnixTimestamp(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.Q = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseUnixTimestampSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.s = +n[0], i + n[0].length) : -1;\n  }\n\n  function formatDayOfMonth(d, p) {\n    return pad(d.getDate(), p, 2);\n  }\n\n  function formatHour24(d, p) {\n    return pad(d.getHours(), p, 2);\n  }\n\n  function formatHour12(d, p) {\n    return pad(d.getHours() % 12 || 12, p, 2);\n  }\n\n  function formatDayOfYear(d, p) {\n    return pad(1 + day.count(year(d), d), p, 3);\n  }\n\n  function formatMilliseconds(d, p) {\n    return pad(d.getMilliseconds(), p, 3);\n  }\n\n  function formatMicroseconds(d, p) {\n    return formatMilliseconds(d, p) + \"000\";\n  }\n\n  function formatMonthNumber(d, p) {\n    return pad(d.getMonth() + 1, p, 2);\n  }\n\n  function formatMinutes(d, p) {\n    return pad(d.getMinutes(), p, 2);\n  }\n\n  function formatSeconds(d, p) {\n    return pad(d.getSeconds(), p, 2);\n  }\n\n  function formatWeekdayNumberMonday(d) {\n    var day = d.getDay();\n    return day === 0 ? 7 : day;\n  }\n\n  function formatWeekNumberSunday(d, p) {\n    return pad(sunday.count(year(d) - 1, d), p, 2);\n  }\n\n  function formatWeekNumberISO(d, p) {\n    var day = d.getDay();\n    d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n    return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n  }\n\n  function formatWeekdayNumberSunday(d) {\n    return d.getDay();\n  }\n\n  function formatWeekNumberMonday(d, p) {\n    return pad(monday.count(year(d) - 1, d), p, 2);\n  }\n\n  function formatYear(d, p) {\n    return pad(d.getFullYear() % 100, p, 2);\n  }\n\n  function formatFullYear(d, p) {\n    return pad(d.getFullYear() % 10000, p, 4);\n  }\n\n  function formatZone(d) {\n    var z = d.getTimezoneOffset();\n    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n        + pad(z / 60 | 0, \"0\", 2)\n        + pad(z % 60, \"0\", 2);\n  }\n\n  function formatUTCDayOfMonth(d, p) {\n    return pad(d.getUTCDate(), p, 2);\n  }\n\n  function formatUTCHour24(d, p) {\n    return pad(d.getUTCHours(), p, 2);\n  }\n\n  function formatUTCHour12(d, p) {\n    return pad(d.getUTCHours() % 12 || 12, p, 2);\n  }\n\n  function formatUTCDayOfYear(d, p) {\n    return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n  }\n\n  function formatUTCMilliseconds(d, p) {\n    return pad(d.getUTCMilliseconds(), p, 3);\n  }\n\n  function formatUTCMicroseconds(d, p) {\n    return formatUTCMilliseconds(d, p) + \"000\";\n  }\n\n  function formatUTCMonthNumber(d, p) {\n    return pad(d.getUTCMonth() + 1, p, 2);\n  }\n\n  function formatUTCMinutes(d, p) {\n    return pad(d.getUTCMinutes(), p, 2);\n  }\n\n  function formatUTCSeconds(d, p) {\n    return pad(d.getUTCSeconds(), p, 2);\n  }\n\n  function formatUTCWeekdayNumberMonday(d) {\n    var dow = d.getUTCDay();\n    return dow === 0 ? 7 : dow;\n  }\n\n  function formatUTCWeekNumberSunday(d, p) {\n    return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n  }\n\n  function formatUTCWeekNumberISO(d, p) {\n    var day = d.getUTCDay();\n    d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n    return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n  }\n\n  function formatUTCWeekdayNumberSunday(d) {\n    return d.getUTCDay();\n  }\n\n  function formatUTCWeekNumberMonday(d, p) {\n    return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n  }\n\n  function formatUTCYear(d, p) {\n    return pad(d.getUTCFullYear() % 100, p, 2);\n  }\n\n  function formatUTCFullYear(d, p) {\n    return pad(d.getUTCFullYear() % 10000, p, 4);\n  }\n\n  function formatUTCZone() {\n    return \"+0000\";\n  }\n\n  function formatLiteralPercent() {\n    return \"%\";\n  }\n\n  function formatUnixTimestamp(d) {\n    return +d;\n  }\n\n  function formatUnixTimestampSeconds(d) {\n    return Math.floor(+d / 1000);\n  }\n\n  var locale$1;\n  var timeFormat;\n  var timeParse;\n  var utcFormat;\n  var utcParse;\n\n  defaultLocale$1({\n    dateTime: \"%x, %X\",\n    date: \"%-m/%-d/%Y\",\n    time: \"%-I:%M:%S %p\",\n    periods: [\"AM\", \"PM\"],\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n  });\n\n  function defaultLocale$1(definition) {\n    locale$1 = formatLocale$1(definition);\n    timeFormat = locale$1.format;\n    timeParse = locale$1.parse;\n    utcFormat = locale$1.utcFormat;\n    utcParse = locale$1.utcParse;\n    return locale$1;\n  }\n\n  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n  function formatIsoNative(date) {\n    return date.toISOString();\n  }\n\n  var formatIso = Date.prototype.toISOString\n      ? formatIsoNative\n      : utcFormat(isoSpecifier);\n\n  function parseIsoNative(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  }\n\n  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n      ? parseIsoNative\n      : utcParse(isoSpecifier);\n\n  var noop = {value: function() {}};\n\n  function dispatch() {\n    for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n      if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n      _[t] = [];\n    }\n    return new Dispatch(_);\n  }\n\n  function Dispatch(_) {\n    this._ = _;\n  }\n\n  function parseTypenames(typenames, types) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n      return {type: t, name: name};\n    });\n  }\n\n  Dispatch.prototype = dispatch.prototype = {\n    constructor: Dispatch,\n    on: function(typename, callback) {\n      var _ = this._,\n          T = parseTypenames(typename + \"\", _),\n          t,\n          i = -1,\n          n = T.length;\n\n      // If no callback was specified, return the callback of the given type and name.\n      if (arguments.length < 2) {\n        while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n        return;\n      }\n\n      // If a type was specified, set the callback for the given type and name.\n      // Otherwise, if a null callback was specified, remove callbacks of the given name.\n      if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n      while (++i < n) {\n        if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n        else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n      }\n\n      return this;\n    },\n    copy: function() {\n      var copy = {}, _ = this._;\n      for (var t in _) copy[t] = _[t].slice();\n      return new Dispatch(copy);\n    },\n    call: function(type, that) {\n      if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    },\n    apply: function(type, that, args) {\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    }\n  };\n\n  function get(type, name) {\n    for (var i = 0, n = type.length, c; i < n; ++i) {\n      if ((c = type[i]).name === name) {\n        return c.value;\n      }\n    }\n  }\n\n  function set(type, name, callback) {\n    for (var i = 0, n = type.length; i < n; ++i) {\n      if (type[i].name === name) {\n        type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n        break;\n      }\n    }\n    if (callback != null) type.push({name: name, value: callback});\n    return type;\n  }\n\n  var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n  var namespaces = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: xhtml,\n    xlink: \"http://www.w3.org/1999/xlink\",\n    xml: \"http://www.w3.org/XML/1998/namespace\",\n    xmlns: \"http://www.w3.org/2000/xmlns/\"\n  };\n\n  function namespace(name) {\n    var prefix = name += \"\", i = prefix.indexOf(\":\");\n    if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n    return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n  }\n\n  function creatorInherit(name) {\n    return function() {\n      var document = this.ownerDocument,\n          uri = this.namespaceURI;\n      return uri === xhtml && document.documentElement.namespaceURI === xhtml\n          ? document.createElement(name)\n          : document.createElementNS(uri, name);\n    };\n  }\n\n  function creatorFixed(fullname) {\n    return function() {\n      return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n    };\n  }\n\n  function creator(name) {\n    var fullname = namespace(name);\n    return (fullname.local\n        ? creatorFixed\n        : creatorInherit)(fullname);\n  }\n\n  function none() {}\n\n  function selector(selector) {\n    return selector == null ? none : function() {\n      return this.querySelector(selector);\n    };\n  }\n\n  function selection_select(select) {\n    if (typeof select !== \"function\") select = selector(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          subgroup[i] = subnode;\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function empty() {\n    return [];\n  }\n\n  function selectorAll(selector) {\n    return selector == null ? empty : function() {\n      return this.querySelectorAll(selector);\n    };\n  }\n\n  function selection_selectAll(select) {\n    if (typeof select !== \"function\") select = selectorAll(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          subgroups.push(select.call(node, node.__data__, i, group));\n          parents.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, parents);\n  }\n\n  function matcher(selector) {\n    return function() {\n      return this.matches(selector);\n    };\n  }\n\n  function selection_filter(match) {\n    if (typeof match !== \"function\") match = matcher(match);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n          subgroup.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function sparse(update) {\n    return new Array(update.length);\n  }\n\n  function selection_enter() {\n    return new Selection(this._enter || this._groups.map(sparse), this._parents);\n  }\n\n  function EnterNode(parent, datum) {\n    this.ownerDocument = parent.ownerDocument;\n    this.namespaceURI = parent.namespaceURI;\n    this._next = null;\n    this._parent = parent;\n    this.__data__ = datum;\n  }\n\n  EnterNode.prototype = {\n    constructor: EnterNode,\n    appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n    insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n    querySelector: function(selector) { return this._parent.querySelector(selector); },\n    querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n  };\n\n  function constant$2(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n  function bindIndex(parent, group, enter, update, exit, data) {\n    var i = 0,\n        node,\n        groupLength = group.length,\n        dataLength = data.length;\n\n    // Put any non-null nodes that fit into update.\n    // Put any null nodes into enter.\n    // Put any remaining data into enter.\n    for (; i < dataLength; ++i) {\n      if (node = group[i]) {\n        node.__data__ = data[i];\n        update[i] = node;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Put any non-null nodes that don’t fit into exit.\n    for (; i < groupLength; ++i) {\n      if (node = group[i]) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function bindKey(parent, group, enter, update, exit, data, key) {\n    var i,\n        node,\n        nodeByKeyValue = {},\n        groupLength = group.length,\n        dataLength = data.length,\n        keyValues = new Array(groupLength),\n        keyValue;\n\n    // Compute the key for each node.\n    // If multiple nodes have the same key, the duplicates are added to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if (node = group[i]) {\n        keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n        if (keyValue in nodeByKeyValue) {\n          exit[i] = node;\n        } else {\n          nodeByKeyValue[keyValue] = node;\n        }\n      }\n    }\n\n    // Compute the key for each datum.\n    // If there a node associated with this key, join and add it to update.\n    // If there is not (or the key is a duplicate), add it to enter.\n    for (i = 0; i < dataLength; ++i) {\n      keyValue = keyPrefix + key.call(parent, data[i], i, data);\n      if (node = nodeByKeyValue[keyValue]) {\n        update[i] = node;\n        node.__data__ = data[i];\n        nodeByKeyValue[keyValue] = null;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Add any remaining nodes that were not bound to data to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function selection_data(value, key) {\n    if (!value) {\n      data = new Array(this.size()), j = -1;\n      this.each(function(d) { data[++j] = d; });\n      return data;\n    }\n\n    var bind = key ? bindKey : bindIndex,\n        parents = this._parents,\n        groups = this._groups;\n\n    if (typeof value !== \"function\") value = constant$2(value);\n\n    for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n      var parent = parents[j],\n          group = groups[j],\n          groupLength = group.length,\n          data = value.call(parent, parent && parent.__data__, j, parents),\n          dataLength = data.length,\n          enterGroup = enter[j] = new Array(dataLength),\n          updateGroup = update[j] = new Array(dataLength),\n          exitGroup = exit[j] = new Array(groupLength);\n\n      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n      // Now connect the enter nodes to their following update node, such that\n      // appendChild can insert the materialized enter node before this node,\n      // rather than at the end of the parent node.\n      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n        if (previous = enterGroup[i0]) {\n          if (i0 >= i1) i1 = i0 + 1;\n          while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n          previous._next = next || null;\n        }\n      }\n    }\n\n    update = new Selection(update, parents);\n    update._enter = enter;\n    update._exit = exit;\n    return update;\n  }\n\n  function selection_exit() {\n    return new Selection(this._exit || this._groups.map(sparse), this._parents);\n  }\n\n  function selection_join(onenter, onupdate, onexit) {\n    var enter = this.enter(), update = this, exit = this.exit();\n    enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n    if (onupdate != null) update = onupdate(update);\n    if (onexit == null) exit.remove(); else onexit(exit);\n    return enter && update ? enter.merge(update).order() : update;\n  }\n\n  function selection_merge(selection) {\n\n    for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group0[i] || group1[i]) {\n          merge[i] = node;\n        }\n      }\n    }\n\n    for (; j < m0; ++j) {\n      merges[j] = groups0[j];\n    }\n\n    return new Selection(merges, this._parents);\n  }\n\n  function selection_order() {\n\n    for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n      for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n        if (node = group[i]) {\n          if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function selection_sort(compare) {\n    if (!compare) compare = ascending$1;\n\n    function compareNode(a, b) {\n      return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n    }\n\n    for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          sortgroup[i] = node;\n        }\n      }\n      sortgroup.sort(compareNode);\n    }\n\n    return new Selection(sortgroups, this._parents).order();\n  }\n\n  function ascending$1(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function selection_call() {\n    var callback = arguments[0];\n    arguments[0] = this;\n    callback.apply(null, arguments);\n    return this;\n  }\n\n  function selection_nodes() {\n    var nodes = new Array(this.size()), i = -1;\n    this.each(function() { nodes[++i] = this; });\n    return nodes;\n  }\n\n  function selection_node() {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n\n    return null;\n  }\n\n  function selection_size() {\n    var size = 0;\n    this.each(function() { ++size; });\n    return size;\n  }\n\n  function selection_empty() {\n    return !this.node();\n  }\n\n  function selection_each(callback) {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n        if (node = group[i]) callback.call(node, node.__data__, i, group);\n      }\n    }\n\n    return this;\n  }\n\n  function attrRemove(name) {\n    return function() {\n      this.removeAttribute(name);\n    };\n  }\n\n  function attrRemoveNS(fullname) {\n    return function() {\n      this.removeAttributeNS(fullname.space, fullname.local);\n    };\n  }\n\n  function attrConstant(name, value) {\n    return function() {\n      this.setAttribute(name, value);\n    };\n  }\n\n  function attrConstantNS(fullname, value) {\n    return function() {\n      this.setAttributeNS(fullname.space, fullname.local, value);\n    };\n  }\n\n  function attrFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttribute(name);\n      else this.setAttribute(name, v);\n    };\n  }\n\n  function attrFunctionNS(fullname, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n      else this.setAttributeNS(fullname.space, fullname.local, v);\n    };\n  }\n\n  function selection_attr(name, value) {\n    var fullname = namespace(name);\n\n    if (arguments.length < 2) {\n      var node = this.node();\n      return fullname.local\n          ? node.getAttributeNS(fullname.space, fullname.local)\n          : node.getAttribute(fullname);\n    }\n\n    return this.each((value == null\n        ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n        ? (fullname.local ? attrFunctionNS : attrFunction)\n        : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n  }\n\n  function defaultView(node) {\n    return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n        || (node.document && node) // node is a Window\n        || node.defaultView; // node is a Document\n  }\n\n  function styleRemove(name) {\n    return function() {\n      this.style.removeProperty(name);\n    };\n  }\n\n  function styleConstant(name, value, priority) {\n    return function() {\n      this.style.setProperty(name, value, priority);\n    };\n  }\n\n  function styleFunction(name, value, priority) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.style.removeProperty(name);\n      else this.style.setProperty(name, v, priority);\n    };\n  }\n\n  function selection_style(name, value, priority) {\n    return arguments.length > 1\n        ? this.each((value == null\n              ? styleRemove : typeof value === \"function\"\n              ? styleFunction\n              : styleConstant)(name, value, priority == null ? \"\" : priority))\n        : styleValue(this.node(), name);\n  }\n\n  function styleValue(node, name) {\n    return node.style.getPropertyValue(name)\n        || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n  }\n\n  function propertyRemove(name) {\n    return function() {\n      delete this[name];\n    };\n  }\n\n  function propertyConstant(name, value) {\n    return function() {\n      this[name] = value;\n    };\n  }\n\n  function propertyFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) delete this[name];\n      else this[name] = v;\n    };\n  }\n\n  function selection_property(name, value) {\n    return arguments.length > 1\n        ? this.each((value == null\n            ? propertyRemove : typeof value === \"function\"\n            ? propertyFunction\n            : propertyConstant)(name, value))\n        : this.node()[name];\n  }\n\n  function classArray(string) {\n    return string.trim().split(/^|\\s+/);\n  }\n\n  function classList(node) {\n    return node.classList || new ClassList(node);\n  }\n\n  function ClassList(node) {\n    this._node = node;\n    this._names = classArray(node.getAttribute(\"class\") || \"\");\n  }\n\n  ClassList.prototype = {\n    add: function(name) {\n      var i = this._names.indexOf(name);\n      if (i < 0) {\n        this._names.push(name);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    remove: function(name) {\n      var i = this._names.indexOf(name);\n      if (i >= 0) {\n        this._names.splice(i, 1);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    contains: function(name) {\n      return this._names.indexOf(name) >= 0;\n    }\n  };\n\n  function classedAdd(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.add(names[i]);\n  }\n\n  function classedRemove(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.remove(names[i]);\n  }\n\n  function classedTrue(names) {\n    return function() {\n      classedAdd(this, names);\n    };\n  }\n\n  function classedFalse(names) {\n    return function() {\n      classedRemove(this, names);\n    };\n  }\n\n  function classedFunction(names, value) {\n    return function() {\n      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n    };\n  }\n\n  function selection_classed(name, value) {\n    var names = classArray(name + \"\");\n\n    if (arguments.length < 2) {\n      var list = classList(this.node()), i = -1, n = names.length;\n      while (++i < n) if (!list.contains(names[i])) return false;\n      return true;\n    }\n\n    return this.each((typeof value === \"function\"\n        ? classedFunction : value\n        ? classedTrue\n        : classedFalse)(names, value));\n  }\n\n  function textRemove() {\n    this.textContent = \"\";\n  }\n\n  function textConstant(value) {\n    return function() {\n      this.textContent = value;\n    };\n  }\n\n  function textFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_text(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? textRemove : (typeof value === \"function\"\n            ? textFunction\n            : textConstant)(value))\n        : this.node().textContent;\n  }\n\n  function htmlRemove() {\n    this.innerHTML = \"\";\n  }\n\n  function htmlConstant(value) {\n    return function() {\n      this.innerHTML = value;\n    };\n  }\n\n  function htmlFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_html(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? htmlRemove : (typeof value === \"function\"\n            ? htmlFunction\n            : htmlConstant)(value))\n        : this.node().innerHTML;\n  }\n\n  function raise() {\n    if (this.nextSibling) this.parentNode.appendChild(this);\n  }\n\n  function selection_raise() {\n    return this.each(raise);\n  }\n\n  function lower() {\n    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n  }\n\n  function selection_lower() {\n    return this.each(lower);\n  }\n\n  function selection_append(name) {\n    var create = typeof name === \"function\" ? name : creator(name);\n    return this.select(function() {\n      return this.appendChild(create.apply(this, arguments));\n    });\n  }\n\n  function constantNull() {\n    return null;\n  }\n\n  function selection_insert(name, before) {\n    var create = typeof name === \"function\" ? name : creator(name),\n        select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n    return this.select(function() {\n      return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n    });\n  }\n\n  function remove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n\n  function selection_remove() {\n    return this.each(remove);\n  }\n\n  function selection_cloneShallow() {\n    var clone = this.cloneNode(false), parent = this.parentNode;\n    return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n  }\n\n  function selection_cloneDeep() {\n    var clone = this.cloneNode(true), parent = this.parentNode;\n    return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n  }\n\n  function selection_clone(deep) {\n    return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n  }\n\n  function selection_datum(value) {\n    return arguments.length\n        ? this.property(\"__data__\", value)\n        : this.node().__data__;\n  }\n\n  var filterEvents = {};\n\n  var event = null;\n\n  if (typeof document !== \"undefined\") {\n    var element = document.documentElement;\n    if (!(\"onmouseenter\" in element)) {\n      filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n    }\n  }\n\n  function filterContextListener(listener, index, group) {\n    listener = contextListener(listener, index, group);\n    return function(event) {\n      var related = event.relatedTarget;\n      if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n        listener.call(this, event);\n      }\n    };\n  }\n\n  function contextListener(listener, index, group) {\n    return function(event1) {\n      var event0 = event; // Events can be reentrant (e.g., focus).\n      event = event1;\n      try {\n        listener.call(this, this.__data__, index, group);\n      } finally {\n        event = event0;\n      }\n    };\n  }\n\n  function parseTypenames$1(typenames) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      return {type: t, name: name};\n    });\n  }\n\n  function onRemove(typename) {\n    return function() {\n      var on = this.__on;\n      if (!on) return;\n      for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n        if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n        } else {\n          on[++i] = o;\n        }\n      }\n      if (++i) on.length = i;\n      else delete this.__on;\n    };\n  }\n\n  function onAdd(typename, value, capture) {\n    var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n    return function(d, i, group) {\n      var on = this.__on, o, listener = wrap(value, i, group);\n      if (on) for (var j = 0, m = on.length; j < m; ++j) {\n        if ((o = on[j]).type === typename.type && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n          this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n          o.value = value;\n          return;\n        }\n      }\n      this.addEventListener(typename.type, listener, capture);\n      o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n      if (!on) this.__on = [o];\n      else on.push(o);\n    };\n  }\n\n  function selection_on(typename, value, capture) {\n    var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n    if (arguments.length < 2) {\n      var on = this.node().__on;\n      if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n        for (i = 0, o = on[j]; i < n; ++i) {\n          if ((t = typenames[i]).type === o.type && t.name === o.name) {\n            return o.value;\n          }\n        }\n      }\n      return;\n    }\n\n    on = value ? onAdd : onRemove;\n    if (capture == null) capture = false;\n    for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n    return this;\n  }\n\n  function customEvent(event1, listener, that, args) {\n    var event0 = event;\n    event1.sourceEvent = event;\n    event = event1;\n    try {\n      return listener.apply(that, args);\n    } finally {\n      event = event0;\n    }\n  }\n\n  function dispatchEvent(node, type, params) {\n    var window = defaultView(node),\n        event = window.CustomEvent;\n\n    if (typeof event === \"function\") {\n      event = new event(type, params);\n    } else {\n      event = window.document.createEvent(\"Event\");\n      if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n      else event.initEvent(type, false, false);\n    }\n\n    node.dispatchEvent(event);\n  }\n\n  function dispatchConstant(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params);\n    };\n  }\n\n  function dispatchFunction(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params.apply(this, arguments));\n    };\n  }\n\n  function selection_dispatch(type, params) {\n    return this.each((typeof params === \"function\"\n        ? dispatchFunction\n        : dispatchConstant)(type, params));\n  }\n\n  var root = [null];\n\n  function Selection(groups, parents) {\n    this._groups = groups;\n    this._parents = parents;\n  }\n\n  function selection() {\n    return new Selection([[document.documentElement]], root);\n  }\n\n  Selection.prototype = selection.prototype = {\n    constructor: Selection,\n    select: selection_select,\n    selectAll: selection_selectAll,\n    filter: selection_filter,\n    data: selection_data,\n    enter: selection_enter,\n    exit: selection_exit,\n    join: selection_join,\n    merge: selection_merge,\n    order: selection_order,\n    sort: selection_sort,\n    call: selection_call,\n    nodes: selection_nodes,\n    node: selection_node,\n    size: selection_size,\n    empty: selection_empty,\n    each: selection_each,\n    attr: selection_attr,\n    style: selection_style,\n    property: selection_property,\n    classed: selection_classed,\n    text: selection_text,\n    html: selection_html,\n    raise: selection_raise,\n    lower: selection_lower,\n    append: selection_append,\n    insert: selection_insert,\n    remove: selection_remove,\n    clone: selection_clone,\n    datum: selection_datum,\n    on: selection_on,\n    dispatch: selection_dispatch\n  };\n\n  function select(selector) {\n    return typeof selector === \"string\"\n        ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n        : new Selection([[selector]], root);\n  }\n\n  function sourceEvent() {\n    var current = event, source;\n    while (source = current.sourceEvent) current = source;\n    return current;\n  }\n\n  function point(node, event) {\n    var svg = node.ownerSVGElement || node;\n\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n\n    var rect = node.getBoundingClientRect();\n    return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n  }\n\n  function mouse(node) {\n    var event = sourceEvent();\n    if (event.changedTouches) event = event.changedTouches[0];\n    return point(node, event);\n  }\n\n  function touch(node, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n    for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return point(node, touch);\n      }\n    }\n\n    return null;\n  }\n\n  function nopropagation() {\n    event.stopImmediatePropagation();\n  }\n\n  function noevent() {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n\n  function nodrag(view) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", noevent, true);\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", noevent, true);\n    } else {\n      root.__noselect = root.style.MozUserSelect;\n      root.style.MozUserSelect = \"none\";\n    }\n  }\n\n  function yesdrag(view, noclick) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", null);\n    if (noclick) {\n      selection.on(\"click.drag\", noevent, true);\n      setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n    }\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", null);\n    } else {\n      root.style.MozUserSelect = root.__noselect;\n      delete root.__noselect;\n    }\n  }\n\n  function constant$3(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n    this.target = target;\n    this.type = type;\n    this.subject = subject;\n    this.identifier = id;\n    this.active = active;\n    this.x = x;\n    this.y = y;\n    this.dx = dx;\n    this.dy = dy;\n    this._ = dispatch;\n  }\n\n  DragEvent.prototype.on = function() {\n    var value = this._.on.apply(this._, arguments);\n    return value === this._ ? this : value;\n  };\n\n  // Ignore right-click, since that should open the context menu.\n  function defaultFilter() {\n    return !event.ctrlKey && !event.button;\n  }\n\n  function defaultContainer() {\n    return this.parentNode;\n  }\n\n  function defaultSubject(d) {\n    return d == null ? {x: event.x, y: event.y} : d;\n  }\n\n  function defaultTouchable() {\n    return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n  }\n\n  function drag() {\n    var filter = defaultFilter,\n        container = defaultContainer,\n        subject = defaultSubject,\n        touchable = defaultTouchable,\n        gestures = {},\n        listeners = dispatch(\"start\", \"drag\", \"end\"),\n        active = 0,\n        mousedownx,\n        mousedowny,\n        mousemoving,\n        touchending,\n        clickDistance2 = 0;\n\n    function drag(selection) {\n      selection\n          .on(\"mousedown.drag\", mousedowned)\n        .filter(touchable)\n          .on(\"touchstart.drag\", touchstarted)\n          .on(\"touchmove.drag\", touchmoved)\n          .on(\"touchend.drag touchcancel.drag\", touchended)\n          .style(\"touch-action\", \"none\")\n          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n    }\n\n    function mousedowned() {\n      if (touchending || !filter.apply(this, arguments)) return;\n      var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n      if (!gesture) return;\n      select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n      nodrag(event.view);\n      nopropagation();\n      mousemoving = false;\n      mousedownx = event.clientX;\n      mousedowny = event.clientY;\n      gesture(\"start\");\n    }\n\n    function mousemoved() {\n      noevent();\n      if (!mousemoving) {\n        var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n        mousemoving = dx * dx + dy * dy > clickDistance2;\n      }\n      gestures.mouse(\"drag\");\n    }\n\n    function mouseupped() {\n      select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n      yesdrag(event.view, mousemoving);\n      noevent();\n      gestures.mouse(\"end\");\n    }\n\n    function touchstarted() {\n      if (!filter.apply(this, arguments)) return;\n      var touches = event.changedTouches,\n          c = container.apply(this, arguments),\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n          nopropagation();\n          gesture(\"start\");\n        }\n      }\n    }\n\n    function touchmoved() {\n      var touches = event.changedTouches,\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          noevent();\n          gesture(\"drag\");\n        }\n      }\n    }\n\n    function touchended() {\n      var touches = event.changedTouches,\n          n = touches.length, i, gesture;\n\n      if (touchending) clearTimeout(touchending);\n      touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          nopropagation();\n          gesture(\"end\");\n        }\n      }\n    }\n\n    function beforestart(id, container, point, that, args) {\n      var p = point(container, id), s, dx, dy,\n          sublisteners = listeners.copy();\n\n      if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n        if ((event.subject = s = subject.apply(that, args)) == null) return false;\n        dx = s.x - p[0] || 0;\n        dy = s.y - p[1] || 0;\n        return true;\n      })) return;\n\n      return function gesture(type) {\n        var p0 = p, n;\n        switch (type) {\n          case \"start\": gestures[id] = gesture, n = active++; break;\n          case \"end\": delete gestures[id], --active; // nobreak\n          case \"drag\": p = point(container, id), n = active; break;\n        }\n        customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n      };\n    }\n\n    drag.filter = function(_) {\n      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : filter;\n    };\n\n    drag.container = function(_) {\n      return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$3(_), drag) : container;\n    };\n\n    drag.subject = function(_) {\n      return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$3(_), drag) : subject;\n    };\n\n    drag.touchable = function(_) {\n      return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : touchable;\n    };\n\n    drag.on = function() {\n      var value = listeners.on.apply(listeners, arguments);\n      return value === listeners ? drag : value;\n    };\n\n    drag.clickDistance = function(_) {\n      return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n    };\n\n    return drag;\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$a = Template('d-slider', `\n<style>\n  :host {\n    position: relative;\n    display: inline-block;\n  }\n\n  :host(:focus) {\n    outline: none;\n  }\n\n  .background {\n    padding: 9px 0;\n    color: white;\n    position: relative;\n  }\n\n  .track {\n    height: 3px;\n    width: 100%;\n    border-radius: 2px;\n    background-color: hsla(0, 0%, 0%, 0.2);\n  }\n\n  .track-fill {\n    position: absolute;\n    top: 9px;\n    height: 3px;\n    border-radius: 4px;\n    background-color: hsl(24, 100%, 50%);\n  }\n\n  .knob-container {\n    position: absolute;\n    top: 10px;\n  }\n\n  .knob {\n    position: absolute;\n    top: -6px;\n    left: -6px;\n    width: 13px;\n    height: 13px;\n    background-color: hsl(24, 100%, 50%);\n    border-radius: 50%;\n    transition-property: transform;\n    transition-duration: 0.18s;\n    transition-timing-function: ease;\n  }\n  .mousedown .knob {\n    transform: scale(1.5);\n  }\n\n  .knob-highlight {\n    position: absolute;\n    top: -6px;\n    left: -6px;\n    width: 13px;\n    height: 13px;\n    background-color: hsla(0, 0%, 0%, 0.1);\n    border-radius: 50%;\n    transition-property: transform;\n    transition-duration: 0.18s;\n    transition-timing-function: ease;\n  }\n\n  .focus .knob-highlight {\n    transform: scale(2);\n  }\n\n  .ticks {\n    position: absolute;\n    top: 16px;\n    height: 4px;\n    width: 100%;\n    z-index: -1;\n  }\n\n  .ticks .tick {\n    position: absolute;\n    height: 100%;\n    border-left: 1px solid hsla(0, 0%, 0%, 0.2);\n  }\n\n</style>\n\n  <div class='background'>\n    <div class='track'></div>\n    <div class='track-fill'></div>\n    <div class='knob-container'>\n      <div class='knob-highlight'></div>\n      <div class='knob'></div>\n    </div>\n    <div class='ticks'></div>\n  </div>\n`);\n\n  // ARIA\n  // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.\n  // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.\n\n  const keyCodes = {\n    left: 37,\n    up: 38,\n    right: 39,\n    down: 40,\n    pageUp: 33,\n    pageDown: 34,\n    end: 35,\n    home: 36\n  };\n\n  class Slider extends T$a(HTMLElement) {\n\n\n    connectedCallback() {\n      this.connected = true;\n      this.setAttribute('role', 'slider');\n      // Makes the element tab-able.\n      if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', 0); }\n\n      // Keeps track of keyboard vs. mouse interactions for focus rings\n      this.mouseEvent = false;\n\n      // Handles to shadow DOM elements\n      this.knob = this.root.querySelector('.knob-container');\n      this.background = this.root.querySelector('.background');\n      this.trackFill = this.root.querySelector('.track-fill');\n      this.track = this.root.querySelector('.track');\n\n      // Default values for attributes\n      this.min = this.min ? this.min : 0;\n      this.max = this.max ? this.max : 100;\n      this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);\n\n      this.origin = this.origin !== undefined ? this.origin : this.min;\n      this.step = this.step ? this.step : 1;\n      this.update(this.value ? this.value : 0);\n\n      this.ticks = this.ticks ? this.ticks : false;\n      this.renderTicks();\n\n      this.drag = drag()\n        .container(this.background)\n        .on('start', () => {\n          this.mouseEvent = true;\n          this.background.classList.add('mousedown');\n          this.changeValue = this.value;\n          this.dragUpdate();\n        })\n        .on('drag', () => {\n          this.dragUpdate();\n        })\n        .on('end', () => {\n          this.mouseEvent = false;\n          this.background.classList.remove('mousedown');\n          this.dragUpdate();\n          if (this.changeValue !== this.value) this.dispatchChange();\n          this.changeValue = this.value;\n        });\n      this.drag(select(this.background));\n\n      this.addEventListener('focusin', () => {\n        if(!this.mouseEvent) {\n          this.background.classList.add('focus');\n        }\n      });\n      this.addEventListener('focusout', () => {\n        this.background.classList.remove('focus');\n      });\n      this.addEventListener('keydown', this.onKeyDown);\n\n    }\n\n    static get observedAttributes() {return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels']; }\n\n    attributeChangedCallback(attr, oldValue, newValue) {\n      if (isNaN(newValue) || newValue === undefined || newValue === null) return;\n      if (attr == 'min') {\n        this.min = +newValue;\n        this.setAttribute('aria-valuemin', this.min);\n      }\n      if (attr == 'max') {\n        this.max = +newValue;\n        this.setAttribute('aria-valuemax', this.max);\n      }\n      if (attr == 'value') {\n        this.update(+newValue);\n      }\n      if (attr == 'origin') {\n        this.origin = +newValue;\n        // this.update(this.value);\n      }\n      if (attr == 'step') {\n        if (newValue > 0) {\n          this.step = +newValue;\n        }\n      }\n      if (attr == 'ticks') {\n        this.ticks = (newValue === '' ? true : newValue);\n      }\n    }\n\n    onKeyDown(event) {\n      this.changeValue = this.value;\n      let stopPropagation = false;\n      switch (event.keyCode) {\n      case keyCodes.left:\n      case keyCodes.down:\n        this.update(this.value - this.step);\n        stopPropagation = true;\n        break;\n      case keyCodes.right:\n      case keyCodes.up:\n        this.update(this.value + this.step);\n        stopPropagation = true;\n        break;\n      case keyCodes.pageUp:\n        this.update(this.value + this.step * 10);\n        stopPropagation = true;\n        break;\n\n      case keyCodes.pageDown:\n        this.update(this.value + this.step * 10);\n        stopPropagation = true;\n        break;\n      case keyCodes.home:\n        this.update(this.min);\n        stopPropagation = true;\n        break;\n      case keyCodes.end:\n        this.update(this.max);\n        stopPropagation = true;\n        break;\n      }\n      if (stopPropagation) {\n        this.background.classList.add('focus');\n        event.preventDefault();\n        event.stopPropagation();\n        if (this.changeValue !== this.value) this.dispatchChange();\n      }\n    }\n\n    validateValueRange(min, max, value) {\n      return Math.max(Math.min(max, value), min);\n    }\n\n    quantizeValue(value, step) {\n      return Math.round(value / step) * step;\n    }\n\n    dragUpdate() {\n      const bbox = this.background.getBoundingClientRect();\n      const x = event.x;\n      const width = bbox.width;\n      this.update(this.scale.invert(x / width));\n    }\n\n    update(value) {\n      let v = value;\n      if (this.step !== 'any') {\n        v = this.quantizeValue(value, this.step);\n      }\n      v = this.validateValueRange(this.min, this.max, v);\n      if (this.connected) {\n        this.knob.style.left = this.scale(v) * 100 + '%';\n        this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%';\n        this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%';\n      }\n      if (this.value !== v) {\n        this.value = v;\n        this.setAttribute('aria-valuenow', this.value);\n        this.dispatchInput();\n      }\n    }\n\n    // Dispatches only on a committed change (basically only on mouseup).\n    dispatchChange() {\n      const e = new Event('change');\n      this.dispatchEvent(e, {});\n    }\n\n    // Dispatches on each value change.\n    dispatchInput() {\n      const e = new Event('input');\n      this.dispatchEvent(e, {});\n    }\n\n    renderTicks() {\n      const ticksContainer = this.root.querySelector('.ticks');\n      if (this.ticks !== false) {\n        let tickData = [];\n        if (this.ticks > 0) {\n          tickData = this.scale.ticks(this.ticks);\n        } else if (this.step === 'any') {\n          tickData = this.scale.ticks();\n        } else {\n          tickData = range(this.min, this.max + 1e-6, this.step);\n        }\n        tickData.forEach(d => {\n          const tick = document.createElement('div');\n          tick.classList.add('tick');\n          tick.style.left = this.scale(d) * 100 + '%';\n          ticksContainer.appendChild(tick);\n        });\n      } else {\n        ticksContainer.style.display = 'none';\n      }\n    }\n  }\n\n  var logo = \"<svg viewBox=\\\"-607 419 64 64\\\">\\n  <path d=\\\"M-573.4,478.9c-8,0-14.6-6.4-14.6-14.5s14.6-25.9,14.6-40.8c0,14.9,14.6,32.8,14.6,40.8S-565.4,478.9-573.4,478.9z\\\"/>\\n</svg>\\n\";\n\n  const headerTemplate = `\n<style>\ndistill-header {\n  position: relative;\n  height: 60px;\n  background-color: hsl(200, 60%, 15%);\n  width: 100%;\n  box-sizing: border-box;\n  z-index: 2;\n  color: rgba(0, 0, 0, 0.8);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n  box-shadow: 0 1px 6px rgba(0, 0, 0, 0.05);\n}\ndistill-header .content {\n  height: 70px;\n  grid-column: page;\n}\ndistill-header a {\n  font-size: 16px;\n  height: 60px;\n  line-height: 60px;\n  text-decoration: none;\n  color: rgba(255, 255, 255, 0.8);\n  padding: 22px 0;\n}\ndistill-header a:hover {\n  color: rgba(255, 255, 255, 1);\n}\ndistill-header svg {\n  width: 24px;\n  position: relative;\n  top: 4px;\n  margin-right: 2px;\n}\n@media(min-width: 1080px) {\n  distill-header {\n    height: 70px;\n  }\n  distill-header a {\n    height: 70px;\n    line-height: 70px;\n    padding: 28px 0;\n  }\n  distill-header .logo {\n  }\n}\ndistill-header svg path {\n  fill: none;\n  stroke: rgba(255, 255, 255, 0.8);\n  stroke-width: 3px;\n}\ndistill-header .logo {\n  font-size: 17px;\n  font-weight: 200;\n}\ndistill-header .nav {\n  float: right;\n  font-weight: 300;\n}\ndistill-header .nav a {\n  font-size: 12px;\n  margin-left: 24px;\n  text-transform: uppercase;\n}\n</style>\n<div class=\"content\">\n  <a href=\"/\" class=\"logo\">\n    ${logo}\n    Distill\n  </a>\n  <nav class=\"nav\">\n    <a href=\"/about/\">About</a>\n    <a href=\"/prize/\">Prize</a>\n    <a href=\"/journal/\">Submit</a>\n  </nav>\n</div>\n`;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$b = Template('distill-header', headerTemplate, false);\n\n  class DistillHeader extends T$b(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  const styles$2 = `\n<style>\n  distill-appendix {\n    contain: layout style;\n  }\n\n  distill-appendix .citation {\n    font-size: 11px;\n    line-height: 15px;\n    border-left: 1px solid rgba(0, 0, 0, 0.1);\n    padding-left: 18px;\n    border: 1px solid rgba(0,0,0,0.1);\n    background: rgba(0, 0, 0, 0.02);\n    padding: 10px 18px;\n    border-radius: 3px;\n    color: rgba(150, 150, 150, 1);\n    overflow: hidden;\n    margin-top: -12px;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n  }\n\n  distill-appendix > * {\n    grid-column: text;\n  }\n</style>\n`;\n\n  function appendixTemplate(frontMatter) {\n    let html = styles$2;\n\n    if (typeof frontMatter.githubUrl !== 'undefined') {\n      html += `\n    <h3 id=\"updates-and-corrections\">Updates and Corrections</h3>\n    <p>`;\n      if (frontMatter.githubCompareUpdatesUrl) {\n        html += `<a href=\"${frontMatter.githubCompareUpdatesUrl}\">View all changes</a> to this article since it was first published.`;\n      }\n      html += `\n    If you see mistakes or want to suggest changes, please <a href=\"${frontMatter.githubUrl + '/issues/new'}\">create an issue on GitHub</a>. </p>\n    `;\n    }\n\n    const journal = frontMatter.journal;\n    if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n      html += `\n    <h3 id=\"reuse\">Reuse</h3>\n    <p>Diagrams and text are licensed under Creative Commons Attribution <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC-BY 4.0</a> with the <a class=\"github\" href=\"${frontMatter.githubUrl}\">source available on GitHub</a>, unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.</p>\n    `;\n    }\n\n    if (typeof frontMatter.publishedDate !== 'undefined') {\n      html += `\n    <h3 id=\"citation\">Citation</h3>\n    <p>For attribution in academic contexts, please cite this work as</p>\n    <pre class=\"citation short\">${frontMatter.concatenatedAuthors}, \"${frontMatter.title}\", Distill, ${frontMatter.publishedYear}.</pre>\n    <p>BibTeX citation</p>\n    <pre class=\"citation long\">${serializeFrontmatterToBibtex(frontMatter)}</pre>\n    `;\n    }\n\n    return html;\n  }\n\n  class DistillAppendix extends HTMLElement {\n\n    static get is() { return 'distill-appendix'; }\n\n    set frontMatter(frontMatter) {\n      this.innerHTML = appendixTemplate(frontMatter);\n    }\n\n  }\n\n  const footerTemplate = `\n<style>\n\n:host {\n  color: rgba(255, 255, 255, 0.5);\n  font-weight: 300;\n  padding: 2rem 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  background-color: hsl(180, 5%, 15%); /*hsl(200, 60%, 15%);*/\n  text-align: left;\n  contain: content;\n}\n\n.footer-container .logo svg {\n  width: 24px;\n  position: relative;\n  top: 4px;\n  margin-right: 2px;\n}\n\n.footer-container .logo svg path {\n  fill: none;\n  stroke: rgba(255, 255, 255, 0.8);\n  stroke-width: 3px;\n}\n\n.footer-container .logo {\n  font-size: 17px;\n  font-weight: 200;\n  color: rgba(255, 255, 255, 0.8);\n  text-decoration: none;\n  margin-right: 6px;\n}\n\n.footer-container {\n  grid-column: text;\n}\n\n.footer-container .nav {\n  font-size: 0.9em;\n  margin-top: 1.5em;\n}\n\n.footer-container .nav a {\n  color: rgba(255, 255, 255, 0.8);\n  margin-right: 6px;\n  text-decoration: none;\n}\n\n</style>\n\n<div class='footer-container'>\n\n  <a href=\"/\" class=\"logo\">\n    ${logo}\n    Distill\n  </a> is dedicated to clear explanations of machine learning\n\n  <div class=\"nav\">\n    <a href=\"https://distill.pub/about/\">About</a>\n    <a href=\"https://distill.pub/journal/\">Submit</a>\n    <a href=\"https://distill.pub/prize/\">Prize</a>\n    <a href=\"https://distill.pub/archive/\">Archive</a>\n    <a href=\"https://distill.pub/rss.xml\">RSS</a>\n    <a href=\"https://github.com/distillpub\">GitHub</a>\n    <a href=\"https://twitter.com/distillpub\">Twitter</a>\n    &nbsp;&nbsp;&nbsp;&nbsp; ISSN 2476-0757\n  </div>\n\n</div>\n\n`;\n\n  // Copyright 2018 The Distill Template Authors\n\n  const T$c = Template('distill-footer', footerTemplate);\n\n  class DistillFooter extends T$c(HTMLElement) {\n\n  }\n\n  // Copyright 2018 The Distill Template Authors\n\n  let templateIsLoading = false;\n  let runlevel = 0;\n  const initialize = function() {\n    if (window.distill.runlevel < 1) {\n      throw new Error(\"Insufficient Runlevel for Distill Template!\");\n    }\n\n    /* 1. Flag that we're being loaded */\n    if (\"distill\" in window && window.distill.templateIsLoading) {\n      throw new Error(\n        \"Runlevel 1: Distill Template is getting loaded more than once, aborting!\"\n      );\n    } else {\n      window.distill.templateIsLoading = true;\n      console.debug(\"Runlevel 1: Distill Template has started loading.\");\n    }\n\n    /* 2. Add styles if they weren't added during prerendering */\n    makeStyleTag(document);\n    console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n    console.debug(\"Runlevel 1->2.\");\n    window.distill.runlevel += 1;\n\n    /* 3. Register Controller listener functions */\n    /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n    for (const [functionName, callback] of Object.entries(Controller.listeners)) {\n      if (typeof callback === \"function\") {\n        document.addEventListener(functionName, callback);\n      } else {\n        console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n      }\n    }\n    console.debug(\"Runlevel 2: We can now listen to controller events.\");\n    console.debug(\"Runlevel 2->3.\");\n    window.distill.runlevel += 1;\n\n    /* 4. Register components */\n    const components = [\n      Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code,\n      Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure,\n      Slider, Interstitial\n    ];\n\n    const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n\n    if (window.distill.runlevel < 2) {\n      throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n    }\n    const allComponents = components.concat(distillComponents);\n    for (const component of allComponents) {\n      console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n      customElements.define(component.is, component);\n    }\n\n    console.debug(\n      \"Runlevel 3: Distill Template finished registering custom elements.\"\n    );\n    console.debug(\"Runlevel 3->4.\");\n    window.distill.runlevel += 1;\n\n    // If template was added after DOMContentLoaded we may have missed that event.\n    // Controller will check for that case, so trigger the event explicitly:\n    if (domContentLoaded()) {\n      Controller.listeners.DOMContentLoaded();\n    }\n\n    console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n    window.distill.templateIsLoading = false;\n    window.distill.templateHasLoaded = true;\n  };\n\n  window.distill = { runlevel, initialize, templateIsLoading };\n\n  /* 0. Check browser feature support; synchronously polyfill if needed */\n  if (Polyfills.browserSupportsAllFeatures()) {\n    console.debug(\"Runlevel 0: No need for polyfills.\");\n    console.debug(\"Runlevel 0->1.\");\n    window.distill.runlevel += 1;\n    window.distill.initialize();\n  } else {\n    console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n    Polyfills.load(window.distill.initialize);\n  }\n\n})));\n//# sourceMappingURL=template.v2.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(792);\n"],"names":["define","days","months","zeroPad","n","RFC","date","day","getDay","substring","paddedDate","getDate","month","getMonth","year","getFullYear","toString","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","concat","Author","_createClass","object","_classCallCheck","this","name","author","personalURL","authorURL","affiliation","affiliationURL","affiliations","key","get","names","split","slice","length","join","FrontMatter","title","description","authors","bibliography","Map","bibliographyParsed","citations","citationsCollected","journal","katex","doi","undefined","publishedDate","_url","distillPath","url","set","value","githubPath","_previewURL","updatedDate","toISOString","volume","publishedYear","Error","lastName","map","firstName","slug","toLowerCase","_this","citationKey","_bibliography","_typeof","property","hasOwnProperty","mapFromObject","target","Object","assign","Array","from","reduce","_ref","_ref2","_slicedToArray","objectFromMap","bibliographyEntries","githubUrl","previewURL","issue","publishedDateRFC","publishedMonth","publishedDay","publishedMonthPadded","publishedDayPadded","updatedDateRFC","concatenatedAuthors","bibtexAuthors","source","frontMatter","Mutating","superclass","_superclass","_class","_this2","_callSuper","options","childList","characterData","subtree","observer","MutationObserver","disconnect","renderIfPossible","observe","_inherits","_superPropGet","textContent","root","renderContent","console","error","constructor","Template","templateString","useShadow","arguments","template","document","createElement","innerHTML","window","ShadyCSS","prepareTemplate","_superclass2","_class2","_this3","clone","importNode","content","attachShadow","mode","shadowRoot","appendChild","hasAttribute","styleElement","insertBefore","firstChild","query","querySelector","querySelectorAll","math","findEndOfMath","delimiter","text","startIndex","index","braceLevel","delimLength","character","splitAtDelimiters","startData","leftDelim","rightDelim","display","finalData","i","type","data","lookingForLeft","currIndex","nextIndex","indexOf","push","rawData","renderMathInText","optionsCopy","delimiters","left","right","splitWithDelimiters","fragment","createDocumentFragment","createTextNode","tag","displayMode","setAttribute","e","ParseError","errorCallback","renderElem","elem","childNodes","childNode","nodeType","mightHaveMath","frag","replaceChild","ignoredTags","nodeName","defaultAutoRenderOptions","msg","err","katexCSSTag","DMath","_Mutating","localOptions","katexOptions","katexAdded","addKatex","container","render","_katexOptions","katexLoadedCallback","_step","_iterator","_createForOfIteratorHelper","s","done","f","delimiterStrings","flatMap","d","some","renderMathInElement","body","head","insertAdjacentHTML","scriptTag","src","async","onload","crossorigin","T","HTMLElement","collect_citations","_step2","dom","Set","_iterator2","_step3","_iterator3","getAttribute","k","trim","add","author_string","ent","sep","finalSep","name_strings","last","firsts","initials","replace","venue_string","cite","booktitle","number","pages","publisher","link_string","arxiv_match","exec","label","doi_string","new_line","bibliography_cite","fancy","title_string","hover_cite","a_str","v_str","Math","min","domContentLoaded","readyState","parseFrontmatter","element","firstElementChild","_step4","_iterator4","hasOldStyle","Boolean","hasNewStyle","warn","newAffiliation","_moveLegacyAffiliationFormatIntoArray","JSON","parse","inlineMathRendered","FrontMatter$1","_HTMLElement","_this4","entries","_step5","_iterator5","entry","notify","event","CustomEvent","detail","bubbles","dispatchEvent","_wrapNativeSuper","Controller","waitingOn","listeners","onCiteKeyCreated","_event$detail","citeTag","keys","numbers","onCiteKeyChanged","_step6","_iterator6","waitingCallback","citationListTag","_step7","_iterator7","log","onCiteKeyRemoved","onBibliographyChanged","_step8","_iterator8","debug","onFootnoteChanged","footnotesList","footnotes","onFrontMatterChanged","published","Date","String","authorObject","password","interstitial","parentElement","removeChild","article","byline","h1","hasPassword","inBrowser","onLocalhost","location","hostname","includes","appendix","footnoteList","citationList","optionalComponents","DOMContentLoaded","loaded","frontMatterTag","_step9","_iterator9","_step10","_iterator10","styles","base","addPolyfill","polyfill","polyfillLoadedCallback","script","onerror","polyfills","support","Element","prototype","Polyfills","every","poly","callback","_step11","polyfillLoaded","neededPolyfills","distillRunlevel","_iterator11","_neededPolyfills","filter","Abstract","_T$","selector","T$1","Appendix","_T$2","T$2","isOnlyWhitespace","Article","_HTMLElement2","_this5","mutations","_step12","_iterator12","_step13","_iterator13","addedNodes","addedNode","nodeValue","test","wrapper","parentNode","commonjsGlobal","globalThis","global","self","createCommonjsModule","fn","module","exports","bibtexParse","BibtexParser","notKey","pos","input","currentEntry","setInput","t","getEntries","isWhitespace","match","canCommentOut","skipWhitespace","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","values","key_equals_value","key_value_list","kv","entry_body","directive","preamble","comment","bibtex","string","toJSON","b","toBibtex","json","out","entryType","entryTags","tags","jdx","normalizeTag","full","x","char","parseBibtex","_step14","_iterator14","_i","_Object$entries","_Object$entries$_i","Bibliography","_HTMLElement3","_this6","_step15","_iterator15","parseIfPossible","_this7","requestAnimationFrame","newBibtex","response","oldValue","newValue","_this8","oReq","XMLHttpRequest","receivedBibtex","responseType","open","send","Byline","_HTMLElement4","bylineTemplate","Cite","_T$3","_this9","_numbers","_entries","_this10","outerSpan","innerSpan","hoverBox","customElements","whenDefined","then","listen","displayNumbers","displayEntries","eventName","result","html","T$3","CitationList","_HTMLElement5","style","size","list","stylesTag","heading","id","className","_step16","_iterator16","_step16$value","listItem","renderCitationList","prism","Prism","_self","lang","uniqueId","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","alias","isArray","o","call","objId","obj","defineProperty","deepClone","visited","forEach","v","getLanguage","currentScript","stack","scripts","getElementsByTagName","languages","extend","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","propertyType","plugins","highlightAll","highlightAllUnder","env","hooks","run","elements","apply","highlightElement","language","parent","code","insertHighlightedCode","highlightedCode","Worker","worker","filename","onmessage","evt","postMessage","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","matchGrammar","array","node","next","tail","toArray","all","callbacks","matchedStr","greedy","startNode","startPos","oneshot","patterns","j","pattern","lookbehind","lookbehindLength","flags","RegExp","currentNode","removeCount","prev","lastIndex","to","p","after","removeFrom","removeRange","newNode","count","classes","attributes","aliases","addEventListener","message","close","highlightAutomaticallyCallback","defer","setTimeout","WorkerGlobalScope","markup","tagName","includedCdataInside","def","xml","mathml","svg","css","addInlined","clike","javascript","js","fileHighlight","Extensions","pre","extension","xhr","onreadystatechange","status","responseText","statusText","python","py","lua","envVars","insideString","bash","variable","toBeCopied","shell","go","inner","createInline","starAlternative","tableCell","tableRow","tableLine","markdown","punctuation","walkTokens","l","codeLang","codeBlock","cls","autoloader","valueOf","floor","random","loadLanguages","ele","getElementById","md","julia","Code","_Mutating2","languageName","codeTag","tabs","ShadowRoot","preTag","T$4","Footnote","_T$4","_this11","_this12","currentFootnoteId","IdString","host","span","T$5","FootnoteList","_T$5","_step17","_iterator17","footnote","backlink","href","T$6","HoverBox","_T$6","bindDivEvents","bindTriggerEvents","_this13","visible","showAtNode","stopTimeout","extendTimeout","stopPropagation","passive","hide","_this14","position","top","round","bbox","getBoundingClientRect","show","offsetLeft","width","offsetTop","height","timeout","clearTimeout","time","_this15","T$7","Title","_HTMLElement6","References","_T$7","T$8","TOC","_HTMLElement7","_this16","headings","_step18","ToC","_iterator18","el","isInTitle","isException","newLine","renderTOC","Figure","_HTMLElement8","_this17","_ready","_onscreen","_offscreen","loadsWhileScrolling","marginObserver","directObserver","unobserve","readyQueue","runReadyQueue","onscreen","_readyQueue","figure","sort","a","_seenOnScreen","pop","ready","_marginObserver","viewportHeight","innerHeight","margin","rootMargin","threshold","didObserveMarginIntersection","IntersectionObserver","_step19","_iterator19","isIntersecting","addToReadyQueue","_directObserver","didObserveDirectIntersection","_step20","_iterator20","offscreen","isScrolling","Interstitial","_T$8","_this18","shouldRemoveSelf","oninput","passwordChanged","Storage","localStorage","setItem","localStorageIdentifier","getItem","pathname","T$9","ascending","NaN","compare","bisectRight","lo","hi","mid","e10","sqrt","e5","e2","tickIncrement","stop","step","max","power","LN10","pow","initRange","domain","range","factory","definition","create","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","m","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","h","Hsl","hslConvert","hsl2rgb","m1","m2","copy","channels","displayable","formatHsl","deg2rad","PI","rad2deg","Xn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","z","rgb2lrgb","y","xyz2lab","lab2xyz","lrgb2rgb","c","cos","sin","atan2","hclConvert","A","B","C","D","E","ED","EB","BC_DA","Cubehelix","constant","gamma","nogamma","exponential","linear","bl","cubehelixConvert","cosh","sinh","rgb$1","rgbGamma","numberArray","genericArray","nb","na","interpolate","setTime","interpolateNumber","reA","reB","am","bm","bs","bi","q","one","zero","ArrayBuffer","isView","DataView","interpolateRound","unit","identity","normalize","bimap","d0","d1","r0","r1","polymap","reverse","transformer","transform","untransform","unknown","piecewise","output","interpolate$1","clamp","rescale","scale","invert","rangeRound","u","formatDecimal","toExponential","coefficient","exponent","abs","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","formatRounded","formatTypes","toFixed","toPrecision","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","i1","i0","formatTrim","charCodeAt","Infinity","padding","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","ceil","nice","linear$1","t0$1","t1$1","newInterval","floori","offseti","field","interval","offset","previous","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","getMilliseconds","getSeconds","getMinutes","getHours","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","thursday","setMonth","setFullYear","setUTCSeconds","setUTCMinutes","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcYear","setUTCMonth","getUTCMonth","getUTCFullYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","locale$1","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","day$1","X","formatLocale$1","defaultLocale$1","isoSpecifier","noop","dispatch","Dispatch","on","typename","types","that","args","xhtml","namespaces","xlink","xmlns","namespace","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","empty","sparse","update","EnterNode","datum","_next","_parent","__data__","child","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending$1","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","splice","contains","filterEvents","filterContextListener","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","customEvent","sourceEvent","params","createEvent","initEvent","cancelable","dispatchConstant","dispatchFunction","mouseenter","mouseleave","Selection","groups","parents","_groups","_parents","select","current","point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","clientLeft","clientTop","mouse","changedTouches","touch","touches","identifier","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$3","DragEvent","subject","active","dx","dy","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","selection","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","noclick","yesdrag","sublisteners","p0","clickDistance","subgroups","subnode","subgroup","selectAll","selectorAll","matches","matcher","each","bind","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","classed","deep","typenames","parseTypenames$1","T$a","keyCodes","Slider","_T$a","_this19","connected","mouseEvent","knob","background","trackFill","track","origin","renderTicks","changeValue","dragUpdate","dispatchChange","onKeyDown","keyCode","quantizeValue","validateValueRange","dispatchInput","Event","_this20","ticksContainer","tick","logo","DistillHeader","_T$b","T$b","DistillAppendix","_HTMLElement9","githubCompareUpdatesUrl","serializeFrontmatterToBibtex","appendixTemplate","DistillFooter","_T$c","T$c","distill","runlevel","initialize","templateIsLoading","styleTagId","styleTag","cssTextTag","firstScriptTag","makeStyleTag","_i2","_Object$entries2","_Object$entries2$_i","functionName","components","distillComponents","_step21","_iterator21","component","is","templateHasLoaded","browserSupportsAllFeatures","load","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","Function"],"sourceRoot":""}
\ No newline at end of file