Full Code of Qiskit/qiskit-textbook for AI

main 0ae905083ec3 cached
406 files
229.5 MB
12.9M tokens
3301 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (52,126K chars total). Download the full file to get everything.
Repository: Qiskit/qiskit-textbook
Branch: main
Commit: 0ae905083ec3
Files: 406
Total size: 229.5 MB

Directory structure:
gitextract_pegolp8v/

├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── content-problem---.yaml
│   │   ├── enhancement-request---.yaml
│   │   ├── new-content-suggestion-----.yaml
│   │   ├── software-bug---.yaml
│   │   └── something-else---.yaml
│   ├── issue_template.md
│   ├── pull_request_template.md
│   └── workflows/
│       └── deploy.workflow.yml
├── .gitignore
├── .qiskit/
│   └── settings.conf
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Gemfile
├── Guardfile
├── LICENSE.txt
├── Makefile
├── README.md
├── _config.yml
├── _data/
│   ├── demostoc.yml
│   ├── ja/
│   │   ├── messages.yml
│   │   └── toc.yml
│   ├── messages.yml
│   └── toc.yml
├── _includes/
│   ├── banner.html
│   ├── buttons/
│   │   ├── binder.html
│   │   ├── download.html
│   │   ├── jupyterhub.html
│   │   ├── nbinteract.html
│   │   └── thebelab.html
│   ├── buttons.html
│   ├── coursemap_img.html
│   ├── css_entry.scss
│   ├── fb_tags.html
│   ├── footer.html
│   ├── google_analytics.html
│   ├── head.html
│   ├── hotjar.html
│   ├── js/
│   │   ├── interact-update.html
│   │   ├── nbinteract.html
│   │   ├── print.html
│   │   ├── thebelab-cell-button.html
│   │   ├── thebelab-page-config.html
│   │   └── thebelab.html
│   ├── mathjax.html
│   ├── metadata.json
│   ├── page-nav.html
│   ├── qiskit_navbar.html
│   ├── search/
│   │   └── lunr/
│   │       ├── lunr-en.js
│   │       └── lunr-store.js
│   ├── segment.html
│   ├── sidebar.html
│   └── topbar.html
├── _layouts/
│   └── default.html
├── _sass/
│   ├── components/
│   │   ├── _components.book__layout.scss
│   │   ├── _components.book__topbar.scss
│   │   ├── _components.images.scss
│   │   ├── _components.interact-button.scss
│   │   ├── _components.iqx.scss
│   │   ├── _components.page__banner.scss
│   │   ├── _components.page__footer.scss
│   │   ├── _components.page__nav.scss
│   │   ├── _components.page__onthispage.scss
│   │   ├── _components.qiskit__navbar.scss
│   │   ├── _components.search.scss
│   │   └── _components.thebelab.scss
│   ├── hamburgers/
│   │   ├── _base.scss
│   │   ├── hamburgers.scss
│   │   └── types/
│   │       └── _arrowalt.scss
│   ├── main.scss
│   ├── objects/
│   │   └── _objects.thebelab-in-cell-button.scss
│   └── page/
│       ├── components/
│       │   ├── _components.hidecells.scss
│       │   ├── _components.page.scss
│       │   └── _components.sidebar-right.scss
│       ├── elements/
│       │   ├── _elements.links.scss
│       │   ├── _elements.syntax-highlighting.scss
│       │   ├── _elements.tables.scss
│       │   ├── _elements.typography.scss
│       │   └── _elements.variables.scss
│       ├── generic/
│       │   └── _generic.phone-scrolling.scss
│       ├── inuitcss/
│       │   ├── elements/
│       │   │   ├── _elements.headings.scss
│       │   │   ├── _elements.images.scss
│       │   │   ├── _elements.page.scss
│       │   │   └── _elements.tables.scss
│       │   ├── generic/
│       │   │   ├── _generic.box-sizing.scss
│       │   │   ├── _generic.normalize.scss
│       │   │   ├── _generic.reset.scss
│       │   │   └── _generic.shared.scss
│       │   ├── objects/
│       │   │   ├── _objects.block.scss
│       │   │   ├── _objects.box.scss
│       │   │   ├── _objects.crop.scss
│       │   │   ├── _objects.flag.scss
│       │   │   ├── _objects.layout.scss
│       │   │   ├── _objects.list-bare.scss
│       │   │   ├── _objects.list-inline.scss
│       │   │   ├── _objects.media.scss
│       │   │   ├── _objects.pack.scss
│       │   │   ├── _objects.ratio.scss
│       │   │   ├── _objects.table.scss
│       │   │   └── _objects.wrapper.scss
│       │   ├── settings/
│       │   │   ├── _example.settings.config.scss
│       │   │   ├── _example.settings.global.scss
│       │   │   └── _settings.core.scss
│       │   ├── tools/
│       │   │   ├── _tools.clearfix.scss
│       │   │   ├── _tools.font-size.scss
│       │   │   ├── _tools.hidden.scss
│       │   │   └── _tools.mq.scss
│       │   └── utilities/
│       │       ├── _utilities.clearfix.scss
│       │       ├── _utilities.headings.scss
│       │       ├── _utilities.hide.scss
│       │       ├── _utilities.print.scss
│       │       ├── _utilities.responsive-spacings.scss
│       │       ├── _utilities.spacings.scss
│       │       └── _utilities.widths.scss
│       ├── main.scss
│       ├── objects/
│       │   ├── _objects.copy-button.scss
│       │   └── _objects.tooltip.scss
│       └── settings/
│           └── settings.global.scss
├── assets/
│   ├── css/
│   │   └── styles.scss
│   ├── custom/
│   │   ├── custom.css
│   │   ├── custom.css.backup
│   │   └── custom.js
│   ├── html/
│   │   ├── index.html
│   │   └── search_form.html
│   ├── js/
│   │   ├── page/
│   │   │   ├── anchors.js
│   │   │   ├── copy-button.js
│   │   │   ├── documentSelectors.js
│   │   │   ├── dom-update.js
│   │   │   ├── hide-cell.js
│   │   │   └── tocbot.js
│   │   └── scripts.js
│   └── vendor/
│       └── thebelab/
│           ├── 0.index.js
│           ├── 1.index.js
│           ├── 2.index.js
│           ├── 3.index.js
│           ├── 4.index.js
│           └── index.js
├── build.sh
├── content/
│   ├── LICENSE.md
│   ├── about.ipynb
│   ├── ch-algorithms/
│   │   ├── bernstein-vazirani.ipynb
│   │   ├── defining-quantum-circuits.ipynb
│   │   ├── deutsch-jozsa.ipynb
│   │   ├── grover.ipynb
│   │   ├── hidden-shift-problem.ipynb
│   │   ├── images/
│   │   │   └── .gitkeep
│   │   ├── index.md
│   │   ├── quantum-counting.ipynb
│   │   ├── quantum-fourier-transform.ipynb
│   │   ├── quantum-key-distribution.ipynb
│   │   ├── quantum-phase-estimation.ipynb
│   │   ├── quantum-walk-search-algorithm.ipynb
│   │   ├── shor.ipynb
│   │   ├── simon.ipynb
│   │   ├── superdense-coding.ipynb
│   │   └── teleportation.ipynb
│   ├── ch-appendix/
│   │   ├── index.md
│   │   ├── linear_algebra.ipynb
│   │   └── qiskit.ipynb
│   ├── ch-applications/
│   │   ├── .gitkeep
│   │   ├── advanced-quantum-algs-index.md
│   │   ├── algs_for_apps_index.md
│   │   ├── algs_index.md
│   │   ├── apps_index.md
│   │   ├── datasets/
│   │   │   └── FFHQ/
│   │   │       ├── happy/
│   │   │       │   ├── 00001_landmarks.json
│   │   │       │   ├── 00011_landmarks.json
│   │   │       │   ├── 00017_landmarks.json
│   │   │       │   ├── 00018_landmarks.json
│   │   │       │   ├── 00019_landmarks.json
│   │   │       │   ├── 00022_landmarks.json
│   │   │       │   ├── 00023_landmarks.json
│   │   │       │   ├── 00025_landmarks.json
│   │   │       │   ├── 00036_landmarks.json
│   │   │       │   └── 00489_landmarks.json
│   │   │       └── sad/
│   │   │           ├── 00109_landmarks.json
│   │   │           ├── 00111_landmarks.json
│   │   │           ├── 00112_landmarks.json
│   │   │           ├── 00142_landmarks.json
│   │   │           ├── 00154_landmarks.json
│   │   │           ├── 00220_landmarks.json
│   │   │           ├── 00269_landmarks.json
│   │   │           ├── 00303_landmarks.json
│   │   │           ├── 00412_landmarks.json
│   │   │           └── 00477_landmarks.json
│   │   ├── examples/
│   │   │   └── 3sat.dimacs
│   │   ├── facial-expression-recognition.ipynb
│   │   ├── hhl_tutorial.ipynb
│   │   ├── image-processing-frqi-neqr.ipynb
│   │   ├── images/
│   │   │   └── .gitkeep
│   │   ├── imp_index.md
│   │   ├── qaoa.ipynb
│   │   ├── quantum-edge-detection.ipynb
│   │   ├── satisfiability-grover.ipynb
│   │   └── vqe-molecules.ipynb
│   ├── ch-demos/
│   │   ├── .gitignore
│   │   ├── chsh.ipynb
│   │   ├── coin-game.ipynb
│   │   ├── first-quantum-game.ipynb
│   │   ├── index.md
│   │   ├── piday-code.ipynb
│   │   └── variational-quantum-regression.ipynb
│   ├── ch-ex/
│   │   ├── Solutions/
│   │   │   ├── Exercise for 2.4.ipynb
│   │   │   └── Exercise for 2.5.ipynb
│   │   ├── ex1.ipynb
│   │   ├── ex2.ipynb
│   │   ├── ex3.ipynb
│   │   ├── hello-qiskit.ipynb
│   │   ├── hello-qiskit.ipynb.orig
│   │   └── index.md
│   ├── ch-gates/
│   │   ├── fun-matrices.ipynb
│   │   ├── introduction.ipynb
│   │   ├── more-circuit-identities.ipynb
│   │   ├── multiple-qubits-entangled-states.ipynb
│   │   ├── oracles.ipynb
│   │   ├── phase-kickback.ipynb
│   │   ├── proving-universality.ipynb
│   │   ├── quantum-gates.ipynb
│   │   └── standard-gate-set.ipynb
│   ├── ch-labs/
│   │   ├── Lab01_QuantumCircuits.ipynb
│   │   ├── Lab02_QuantumMeasurement.ipynb
│   │   ├── Lab03_AccuracyQPE.ipynb
│   │   ├── Lab04_IterativePhaseEstimation.ipynb
│   │   ├── Lab05_Scalable_Shor_Algorithm.ipynb
│   │   ├── Lab06_Grover_search_with_an_unknown_number_of_solutions.ipynb
│   │   ├── Lab07_QuantumSimulationSearchAlgorithm.ipynb
│   │   ├── Lab08_QEC.ipynb
│   │   └── index.md
│   ├── ch-machine-learning/
│   │   ├── data/
│   │   │   └── MNIST/
│   │   │       ├── processed/
│   │   │       │   ├── test.pt
│   │   │       │   └── training.pt
│   │   │       └── raw/
│   │   │           ├── t10k-images-idx3-ubyte
│   │   │           ├── t10k-labels-idx1-ubyte
│   │   │           ├── train-images-idx3-ubyte
│   │   │           └── train-labels-idx1-ubyte
│   │   └── machine-learning-qiskit-pytorch.ipynb
│   ├── ch-paper-implementations/
│   │   ├── tsp.ipynb
│   │   └── vqls.ipynb
│   ├── ch-prerequisites/
│   │   ├── python-and-jupyter-notebooks.ipynb
│   │   └── setting-the-environment.ipynb
│   ├── ch-quantum-hardware/
│   │   ├── Jaynes-Cummings-model.ipynb
│   │   ├── Open-quantum-systems.ipynb
│   │   ├── ac-Stark-shift.ipynb
│   │   ├── accessing_higher_energy_states.ipynb
│   │   ├── cQED-JC-SW.ipynb
│   │   ├── calibrating-qubits-pulse.ipynb
│   │   ├── cliffords2.pickle
│   │   ├── density-matrix.ipynb
│   │   ├── error-correction-repetition-code.ipynb
│   │   ├── hamiltonian-tomography.ipynb
│   │   ├── index-circuits.md
│   │   ├── index-pulses.md
│   │   ├── measurement-error-mitigation.ipynb
│   │   ├── measuring-quantum-volume.ipynb
│   │   ├── randomized-benchmarking.ipynb
│   │   ├── results/
│   │   │   ├── gate_probs_ibmq_16_melbourne.txt
│   │   │   ├── logical_prob_match_ibmq_16_melbourne.txt
│   │   │   ├── probs_ibmq_16_melbourne.txt
│   │   │   └── raw_results_ibmq_16_melbourne.txt
│   │   ├── transmon-physics.ipynb
│   │   └── transpiling-quantum-circuits.ipynb
│   ├── ch-states/
│   │   ├── atoms-computation.ipynb
│   │   ├── case-for-quantum.ipynb
│   │   ├── introduction.ipynb
│   │   ├── old-states-many-qubits.ipynb
│   │   ├── old-unique-properties-qubits.ipynb
│   │   ├── old-writing-down-qubit-states.ipynb
│   │   ├── representing-qubit-states.ipynb
│   │   └── single-qubit-gates.ipynb
│   ├── ch-upcoming/
│   │   └── 0.ipynb
│   ├── preface.ipynb
│   ├── qiskit-textbook.bib
│   ├── upcoming.ipynb
│   ├── using-the-textbook.ipynb
│   ├── what-is-quantum.ipynb
│   └── widgets-index.ipynb
├── deploy.sh
├── environment.yml
├── i18n/
│   ├── LOCALIZATION_CONTRIBUTORS
│   ├── config.i18n.yml
│   └── locales/
│       └── ja/
│           ├── LICENSE.md
│           ├── about.ipynb
│           ├── ch-algorithms/
│           │   ├── bernstein-vazirani.ipynb
│           │   ├── defining-quantum-circuits.ipynb
│           │   ├── deutsch-jozsa.ipynb
│           │   ├── grover.ipynb
│           │   ├── images/
│           │   │   └── .gitkeep
│           │   ├── index.md
│           │   ├── quantum-counting.ipynb
│           │   ├── quantum-fourier-transform.ipynb
│           │   ├── quantum-key-distribution.ipynb
│           │   ├── quantum-phase-estimation.ipynb
│           │   ├── quantum-walk-search-algorithm.ipynb
│           │   ├── shor.ipynb
│           │   ├── simon.ipynb
│           │   ├── superdense-coding.ipynb
│           │   └── teleportation.ipynb
│           ├── ch-appendix/
│           │   ├── index.md
│           │   ├── linear_algebra.ipynb
│           │   └── qiskit.ipynb
│           ├── ch-applications/
│           │   ├── .gitkeep
│           │   ├── QIP/
│           │   │   ├── frqi.ipynb
│           │   │   ├── neqr.ipynb
│           │   │   ├── qip_index.ipynb
│           │   │   └── review-classical-image-proc.ipynb
│           │   ├── advanced-quantum-algs-index.md
│           │   ├── algs_for_apps_index.md
│           │   ├── algs_index.md
│           │   ├── apps_index.md
│           │   ├── hhl_tutorial.ipynb
│           │   ├── image-processing-frqi-neqr.ipynb
│           │   ├── images/
│           │   │   └── .gitkeep
│           │   ├── imp_index.md
│           │   ├── qaoa.ipynb
│           │   ├── satisfiability-grover.ipynb
│           │   └── vqe-molecules.ipynb
│           ├── ch-demos/
│           │   ├── .gitignore
│           │   ├── index.md
│           │   └── piday-code.ipynb
│           ├── ch-ex/
│           │   ├── Solutions/
│           │   │   ├── Exercise for 1.1.ipynb
│           │   │   ├── Exercise for 2.4.ipynb
│           │   │   └── Exercise for 2.5.ipynb
│           │   ├── ex1.ipynb
│           │   ├── ex2.ipynb
│           │   ├── ex3.ipynb
│           │   ├── hello-qiskit.ipynb
│           │   └── index.md
│           ├── ch-gates/
│           │   ├── basic-circuit-identities.ipynb
│           │   ├── fun-matrices.ipynb
│           │   ├── introduction.ipynb
│           │   ├── more-circuit-identities.ipynb
│           │   ├── multiple-qubits-entangled-states.ipynb
│           │   ├── oracles.ipynb
│           │   ├── phase-kickback.ipynb
│           │   ├── proving-universality.ipynb
│           │   ├── quantum-gates.ipynb
│           │   └── standard-gate-set.ipynb
│           ├── ch-labs/
│           │   ├── Lab01_QuantumCircuits.ipynb
│           │   ├── Lab02_QuantumMeasurement.ipynb
│           │   └── index.md
│           ├── ch-machine-learning/
│           │   ├── data/
│           │   │   └── MNIST/
│           │   │       ├── processed/
│           │   │       │   ├── test.pt
│           │   │       │   └── training.pt
│           │   │       └── raw/
│           │   │           ├── t10k-images-idx3-ubyte
│           │   │           ├── t10k-labels-idx1-ubyte
│           │   │           ├── train-images-idx3-ubyte
│           │   │           └── train-labels-idx1-ubyte
│           │   └── machine-learning-qiskit-pytorch.ipynb
│           ├── ch-paper-implementations/
│           │   └── vqls.ipynb
│           ├── ch-prerequisites/
│           │   ├── python-and-jupyter-notebooks.ipynb
│           │   └── setting-the-environment.ipynb
│           ├── ch-quantum-hardware/
│           │   ├── accessing_higher_energy_states.ipynb
│           │   ├── cQED-JC-SW.ipynb
│           │   ├── calibrating-qubits-openpulse.ipynb
│           │   ├── calibrating-qubits-pulse.ipynb
│           │   ├── cliffords2.pickle
│           │   ├── error-correction-repetition-code.ipynb
│           │   ├── index-circuits.md
│           │   ├── index-pulses.md
│           │   ├── measurement-error-mitigation.ipynb
│           │   ├── measuring-quantum-volume.ipynb
│           │   ├── randomized-benchmarking.ipynb
│           │   ├── results/
│           │   │   ├── gate_probs_ibmq_16_melbourne.txt
│           │   │   ├── logical_prob_match_ibmq_16_melbourne.txt
│           │   │   ├── probs_ibmq_16_melbourne.txt
│           │   │   └── raw_results_ibmq_16_melbourne.txt
│           │   ├── transmon-physics.ipynb
│           │   └── transpiling-quantum-circuits.ipynb
│           ├── ch-states/
│           │   ├── atoms-computation.ipynb
│           │   ├── case-for-quantum.ipynb
│           │   ├── introduction.ipynb
│           │   ├── old-states-many-qubits.ipynb
│           │   ├── old-unique-properties-qubits.ipynb
│           │   ├── old-writing-down-qubit-states.ipynb
│           │   ├── pauli-matrices-bloch-sphere.ipynb
│           │   ├── representing-qubit-states.ipynb
│           │   ├── single-qubit-gates.ipynb
│           │   ├── states-many-qubits.ipynb
│           │   ├── unique-properties-qubits.ipynb
│           │   └── writing-down-qubit-states.ipynb
│           ├── ch-upcoming/
│           │   └── 0.ipynb
│           ├── guideline-ja.md
│           ├── preface-old.md
│           ├── preface.ipynb
│           ├── preface.md
│           ├── qiskit-textbook.bib
│           ├── upcoming.ipynb
│           ├── using-the-textbook.ipynb
│           ├── what-is-quantum.ipynb
│           └── widgets-index.ipynb
├── qiskit-textbook-src/
│   ├── qiskit_textbook/
│   │   ├── __init__.py
│   │   ├── games/
│   │   │   ├── __init__.py
│   │   │   ├── hello_quantum.py
│   │   │   └── qiskit_game_engine.py
│   │   ├── problems/
│   │   │   └── __init__.py
│   │   ├── tools/
│   │   │   └── __init__.py
│   │   └── widgets/
│   │       ├── __init__.py
│   │       └── _helpers.py
│   └── setup.py
├── rclone.conf.enc
├── requirements-dev.txt
├── requirements.txt
├── runtime.txt
└── scripts/
    ├── clean.py
    ├── create_redirections.py
    ├── postprocess_html.py
    ├── replace_code_cells.py
    ├── run_notebooks.py
    └── run_notebooks_soft.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/CODEOWNERS
================================================
# This file defines the persons that will be assigned as reviewers for PRs that
# modify a particular file in the repo.

# Generic rule for the repository. This pattern is actually the one that will
# apply unless specialized by a later rule
* @frankharkins @delapuente @1ucian0 @vabarbosa

# Individual folders on root directory
/content    @frankharkins @HwajungKang @vabarbosa @kUmezawa @kifumi @nkanazawa1989
/i18n       @kifumi


================================================
FILE: .github/ISSUE_TEMPLATE/content-problem---.yaml
================================================
name: Content Problem 😮
description: There is an inaccuracy / inconsistency with the content of the textbook.
title: '[Chapter-number]'
labels:
  - content bug
body:
  - type: textarea
    attributes:
      label: Describe the issue
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe what you expect to see
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/enhancement-request---.yaml
================================================
name: Enhancement Request 💅
description: Suggest an improvement to content currently covered in the textbook.
title: '[Chapter number]'
labels:
  - enhancement
body:
  - type: textarea
    attributes:
      label: Is your feature request related to a problem? Please describe.
      description: >-
        A clear and concise description of what the problem is. E.g. "The
        explanation of X is [...]"
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe the solution you'd like
      description: >-
        A clear and concise description of what you want to happen, and how it
        fits with the existing content.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe alternatives you've considered
      description: >-
        A clear and concise description of any alternative solutions you've
        considered, e.g. linking to external resources.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Additional context
      description: Add any other context or screenshots about the request here.


================================================
FILE: .github/ISSUE_TEMPLATE/new-content-suggestion-----.yaml
================================================
name: New Content Suggestion ✒️ 📄
description: Propose new sections or chapters for the textbook
title: '[]'
labels:
  - New Content Suggestion 
body:
  - type: textarea
    attributes:
      label: What should the reader gain from this new content?
    validations:
      required: true
  - type: textarea
    attributes:
      label: Where do you expect this new content to fit in with the current content?
    validations:
      required: true
  - type: textarea
    attributes:
      label: What material should this new content be based on?
    validations:
      required: true
  - type: input
    attributes:
      label: Are you proposing to write this new content? (y/n)
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/software-bug---.yaml
================================================
name: Software Bug 🐛
description: Something is wrong with the website or code examples.
title: '[Chapter number]'
labels:
  - code bug
body:
  - type: textarea
    attributes:
      label: Describe the bug
      description: A clear and concise description of what the bug is.
    validations:
      required: true
  - type: textarea
    attributes:
      label: To Reproduce
      description: 'Steps to reproduce the behaviour:'
    validations:
      required: true
  - type: textarea
    attributes:
      label: Expected behavior
      description: A clear and concise description of what you expected to happen.
    validations:
      required: true
  - type: markdown
    attributes:
      value: |-
        For qiskit problems, please provide the output of:
        ```
        import qiskit
        qiskit.__qiskit_version__
        ```
  - type: textarea
    attributes:
      label: Version info
    validations:
      required: true
  - type: input
    attributes:
      label: For website problems please state device / OS / browser.
  - type: textarea
    attributes:
      label: Screenshots
      description: If applicable, add screenshots to help explain your problem.
  - type: textarea
    attributes:
      label: Additional context
      description: Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/something-else---.yaml
================================================
name: Something else
description: The issue does not fall into any of the above categories.
title: '[]'
body:
  - type: textarea
    attributes:
      label: Describe the problem
    validations:
      required: true
  - type: textarea
    attributes:
      label: Describe the expected solution
    validations:
      required: true


================================================
FILE: .github/issue_template.md
================================================
## Describe the Issue

## Expected Solution

## Anything else we should know?


================================================
FILE: .github/pull_request_template.md
================================================
<!--- 
Your PR title should start with the number of the chapter(s) 
your PR affects. E.g "[4.5, 6.3] Fixed misspelling of 'transform'"
The exception is if you change a large number of chapters or none
at all.

If you are contributing any new content, you must link the issue you
created beforehand by typing "Resolves #issue-number"
--->
# Changes made
<!--- Please state what you did --->

# Justification
<!--- Please explain why this change is necessary. If changing technical
details / equations, do not assume the justification is obvious --->


================================================
FILE: .github/workflows/deploy.workflow.yml
================================================
name: build and deploy

on:
  # run when action is manually triggered
  workflow_dispatch:
    inputs:
      deploy:
        description: 'Deploy ?'
        required: false
        default: 'false'
  # run when a pull request is made
  pull_request:
  # run on pushes to main or stable branch
  push:
    branches: [ main, stable ]

jobs:
  # job id/key
  build-and-deploy:
    # job name
    name: Build and Deploy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.7
        
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7.7

      - name: Install Python dependencies
        run: |
          python -m pip install --upgrade pip
          pip install scipy
          pip install -r requirements.txt
          pip install -r requirements-dev.txt

      - name: Install Ruby dependencies
        run: |
          gem update --system
          gem install bundler

      - run: make install
      - run: make book
      - run: make site

      - name: Deploy
        if: ${{ github.event_name == 'push'|| github.event.inputs.deploy == 'true' }}
        run: ./deploy.sh
        shell: bash
        env:
          encrypted_rclone_iv: ${{ secrets.ENCRYPTED_RCLONE_IV }}
          encrypted_rclone_key: ${{ secrets.ENCRYPTED_RCLONE_KEY }}
          GITHUB_BRANCH: ${{ github.ref }}


================================================
FILE: .gitignore
================================================
# Created by https://www.gitignore.io/api/python
# Edit at https://www.gitignore.io/?templates=python

### Mac OS ###
.DS_Store

### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# pyenv
.python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# Mr Developer
.mr.developer.cfg
.project
.pydevproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/


### VirtualEnv ###
# Virtualenv
# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
pyvenv.cfg
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
pip-selfcheck.json

### Jekyll ###
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata

### Sass ###
.sass-cache/
*.css.map
*.sass.map
*.scss.map

### JupyterNotebooks ###
.ipynb_checkpoints
*/.ipynb_checkpoints/*

# IPython
profile_default/
ipython_config.py

# End of https://www.gitignore.io/api/python

## Jupyter Book
_build/
_repo/

## IDEs
.vscode
.idea


================================================
FILE: .qiskit/settings.conf
================================================
[default]
circuit_drawer = mpl


================================================
FILE: CODE_OF_CONDUCT.md
================================================
<!-- Copyright Contributors to the Qiskit project. -->

# Code of Conduct
All members of this project agree to adhere to the Qiskit Code of Conduct listed at [https://github.com/Qiskit/qiskit/blob/master/CODE_OF_CONDUCT.md](https://github.com/Qiskit/qiskit/blob/master/CODE_OF_CONDUCT.md)

----

License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/),
Copyright Contributors to Qiskit.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributors Guide

## General Guidelines

We love contributions and need them to ensure the textbook is a high-quality resource. 
To avoid duplication of effort and to ensure all discussion happens in the same place, 
always check the existing issues and pull requests to see if the problem has already been addressed. 
It is worth removing the `is:open` filter to search through closed / merged issues too.

- If you notice any spelling / grammar errors and want to fix them, then feel free to go ahead and make a pull request. 
- If you want to correct a scientific / mathematical / code error, make an issue first so we can discuss the changes.
- Please make one pull request (using separate branches) for each issue.

### If you want to contribute original content:

We appreciate offers to contribute to the textbook, but unfortunately we can't accept new content at this time. We still think community-driven content is really valuable, and we're working to create an appropriate place for it within the textbook platform. Until then, we highly encourage you to continue to share your work through other channels.

## How to Edit the Textbook

The textbook uses jupyter book to generate the site from jupyter notebooks. To edit the pages you will first need to install jupyter and Qiskit, you can use the links below to help you do this:

- [Install Qiskit](https://qiskit.org/documentation/install.html)
- [Install Jupyter](https://jupyter.org/install)

If you are unfamiliar with git, you can follow this guide to making contributions:

- [Github Desktop Tutorial](https://github.com/firstcontributions/first-contributions/blob/master/gui-tool-tutorials/github-desktop-tutorial.md)

You will need to fork the textbook, make changes in your own branch, then submit a pull request which we will review before merging. You must use jupyter notebook to edit the pages. If you change any code, please re-run the notebook (you can do this using the ⏭  button at the top of the notebook editor) to update the cell outputs.

**Important:** The notebooks to edit are inside the `content` folder.

## Tags in Qiskit Textbook Notebooks

After writing your chapter, you must add a few tags to your cells (You can see the tags using `view > tags`).

- If you include the chapter's title in your notebook, move this to its own cell and add a `remove_cell` tag to avoid duplicate titles on the website. This is only for the title that will appear in the sidebar.
- If you intentionally raise an exception in a cell, add a `raises-exception` tag to that code cell so our checking script knows this is intentional.
- Any code cell that uses IBM hardware, or relies on the results from such a cell needs a `uses-hardware` tag to alert the user this cannot be run on the website through [thebelab](https://thebelab.readthedocs.io/en/latest/).
- When creating graphs, you can hide the code that generated your graph on the website using the `remove_input` tag. The code and graph will not be interactive, essentially embedding a static image. The pro is that this enables future editors to modify it.
- Finally, after adding these tags, go to `view > none` and save your notebook to stop the tags from showing automatically when a reader opens the notebook.

For a list of contributors, see the [.bib](https://github.com/qiskit-community/qiskit-textbook/blob/main/content/qiskit-textbook.bib) file.

## Translation Guidelines
First of all, thank you for showing your interest in translating (localizing) Qiskit Textbook! This helps make the textbook more accessible and available to our global community.
If you are interested in contributing to translations, please follow the instructions below. For detailed guidelines, please check [here](./i18n/Translation-Guidelines.pdf).
1. If you want to add a new language and become a translation lead, you can open a GitHub issue to start a discussion with the Qiskit community team and recruit translation project members. Please refer to the [criteria](#What-is-the-criteria-for-adding-a-new-language) below to receive official support from the administrators for new languages.
2. Open the [LOCALIZATION_CONTRIBUTORS](./i18n/LOCALIZATION_CONTRIBUTORS) file. Look for the language header that you'd like to contribute to and sign up under there. If you do not find the language, please add it by yourself.
3. Create a pull request (PR) to add your name to the list. Make sure to follow the template to open a Pull Request.
    - Each contributor has to create their own PR and sign the CLA (see #4 below).
    - If you have an open issue for a language request, add the issue link to the PR.
4. If you have not contributed to Qiskit before, you will be prompted to sign the Qiskit Contributors License Agreement (CLA) in your PR.
5. After you meet the criteria below, the administrator will make a new branch for the new language so that you can start translation.
    - The documents in the [`content` folder of `stable` branch](https://github.com/qiskit-community/qiskit-textbook/tree/stable/content) are the latest original English documents. Please translate the latest documents and save them in the [`i18n/locales/xx` folder](./i18n/locales/) of your language branch with the same directory structure. 
    - Please also translate `messages.yml` and `toc.yml` in the `_data/xx` folder.
6. When 80% of the translation is completed on your language branch, you can send a merge Pull Request to the `main` branch.

### What is the criteria for adding a new language?

We want to make sure that translated languages have enough community support to ensure quality and consistency. 
1. A minimum of three contributors is necessary for any new languages to be added and receive official support from the administrators of the localization project.
2. In addition to translators, we will need dedicated proof-readers to review the translations and approve accuracy of content in that language, to ensure the translations can be released in that language.
3. Among the group of contributors, a translation lead must be identified to serve as a liaison with the administrators of the localization project. The lead must contact Kifumi Numata (kifumi@jp.ibm.com) by email.

If you have further questions, please feel free to contact Kifumi Numata. Thank you.

### Contributing Guidelines to the [Japanese edition of Qiskit Textbook](https://qiskit.org/textbook/ja/preface.html)
 [日本語翻訳のガイドライン](./i18n/locales/ja/guideline-ja.md)

When new content is added to the original textbook, you can contribute to translating it to Japanese by:
- Find the corresponding original file under the [`content` folder of the `main` branch](https://github.com/qiskit-community/qiskit-textbook/tree/main/content).
- Translate it to Japanese.
- Add the translated file under the [`i18n/locales/ja` folder of the `master-ja` branch](https://github.com/qiskit-community/qiskit-textbook/tree/master-ja/i18n/locales/ja) by sending Pull resquest.
- For detailed guidelines, please check [here](./i18n/locales/ja/guideline-ja.md).


================================================
FILE: Gemfile
================================================
source 'https://rubygems.org'

group :jekyll_plugins do
  gem 'github-pages'
  gem 'jekyll-feed', '~> 0.6'

  # Textbook plugins
  gem 'jekyll-redirect-from'
  gem 'jekyll-scholar'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

# Performance-booster for watching directories on Windows
gem 'wdm', '~> 0.1.0' if Gem.win_platform?

# Development tools
gem 'guard', '~> 2.14.2'
gem 'guard-jekyll-plus', '~> 2.0.2'
gem 'guard-livereload', '~> 2.5.2'


================================================
FILE: Guardfile
================================================
guard 'jekyll-plus', serve: true do
  watch /.*/
  ignore /^_site/
end

guard 'livereload' do
  watch /.*/
end


================================================
FILE: LICENSE.txt
================================================
                    Copyright 2019 IBM and its contributors

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2019 IBM and its contributors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: Makefile
================================================
.PHONY: help book clean serve

BUILD_DIR := "./_build"
# space delimited list of available languages, e.g., LOCALES:=ja es pt
LOCALES:=ja

help:
	@echo "Please use 'make <target>' where <target> is one of:"
	@echo "  install     to install the necessary dependencies for jupyter-book to build"
	@echo "  book        to convert the content/ folder into Jekyll markdown in _build/"
	@echo "  clean       to clean out site build files"
	@echo "  runall      to run all notebooks in-place, capturing outputs with the notebook"
	@echo "  serve       to serve the repository locally with Jekyll"
	@echo "  build       to build the site HTML and store in _site/"
	@echo "  site        to build the site HTML, store in _site/, and serve with Jekyll"


install:
	jupyter-book install ./

book:
	jupyter-book build ./
	python3 scripts/create_redirections.py $(BUILD_DIR)
	python3 scripts/postprocess_html.py $(BUILD_DIR)

	for l in $(LOCALES); \
	do \
		$(call BUILD_LOCALE_BOOK,$$l); \
	done

runall:
	jupyter-book run ./content

clean:
	python scripts/clean.py

serve:
	bundle exec guard

build:
	jupyter-book build ./ --overwrite
	python3 scripts/create_redirections.py $(BUILD_DIR)
	python3 scripts/postprocess_html.py $(BUILD_DIR)

	for l in $(LOCALES); \
	do \
		$(call BUILD_LOCALE_BOOK,$$l,--overwrite); \
	done

site: build
	bundle exec jekyll build
	touch _site/.nojekyll

define BUILD_LOCALE_BOOK
	echo "Building '$1' book" && \
	jupyter-book build --config ./i18n/config.i18n.yml --toc ./_data/$1/toc.yml ./ $2 && \
	python3 scripts/create_redirections.py $(BUILD_DIR)/$1 && \
	python3 scripts/postprocess_html.py $(BUILD_DIR)/$1
endef


================================================
FILE: README.md
================================================
# Qiskit Textbook Source Code

> :warning: This repo is for an old version of the textbook and is now deprecated. For the latest version of the textbook, make your issue / PR at https://github.com/Qiskit/textbook.

# License
The materials and associated source code of this open-source textbook are licensed under [Apache License 2.0](http://github.com/qiskit-community/qiskit-textbook/blob/main/LICENSE.txt).

# Contact
For any issues, please contact Frank Harkins in the [Qiskit Slack workspace](https://ibm.co/joinqiskitslack). You can also email Frank Harkins (francis.harkins@ibm.com).


================================================
FILE: _config.yml
================================================
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.

# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.

#######################################################################################
# Jekyll site settings
title: Qiskit Textbook
author: The Qiskit Team
description: >- # this means to ignore newlines until "baseurl:"
  A university quantum algorithms/computation course supplement based on Qiskit

baseurl: "/textbook" # the subpath of your site, e.g. /blog. If there is no subpath for your site, use an empty string ""
url: "https://community.qiskit.org" # the base hostname & protocol for your site, e.g. http://example.com
port: 80

#######################################################################################
# Jupyter Book settings

# Main page settings
footer_text               : This page was created by <a href="https://github.com/jupyter/jupyter-book/graphs/contributors">The Jupyter Book Community</a>

# Sidebar settings
sidebar_title             : 'Learn Quantum Computation using Qiskit'
show_sidebar              : true  # Show the sidebar. Only set to false if your only wish to host a single page.
collapse_inactive_chapters: true  # Whether to collapse the inactive chapters in the sidebar
collapse_inactive_sections: true  # Whether to collapse the sub-sections within a non-active section in the sidebar
textbook_logo             : images/preface_illustration.svg  # A logo to be displayed at the top of your textbook sidebar. Should be square
textbook_logo_link        : https://qiskit.org/  # A link for the logo.
sidebar_footer_text       : 'Powered by <a href="https://github.com/jupyter/jupyter-book">Jupyter Book</a>'
number_toc_chapters       : true  # Whether to add numbers to chapterse in your Table of Contents. If true, you can control this at the Chapter level in _data/toc.yml

# Search settings
search_max_words_in_content : 100  # In the search function, use at most this many words (too many words will make search slow)

# Controlling page information
page_titles                    : infer  # Either `None`, `infer`, or `toc`
page_authors                   : None  # Either `None` or `infer`
filename_title_split_character : '_'  # If inferring titles based on filename, splt on this character.

# Math settings
number_equations               : false  # Whether to automatically number all block equations with MathJax

#######################################################################################
# Interact link settings

# General interact settings
use_jupyterlab                   : true  # If 'true', interact links will use JupyterLab as the interface

# Jupyterhub link settings
use_jupyterhub_button            : false  # If 'true', display a button that will direct users to a JupyterHub (that you provide)
jupyterhub_url                   : ""  # The URL for your JupyterHub. If no URL, use ""
jupyterhub_interact_text         : "Interact on IBM Quantum Experience"  # The text that interact buttons will contain.

# Binder link settings
use_binder_button                : true  # If 'true', add a binder button for interactive links
binderhub_url                    : "https://mybinder.org"  # The URL for your BinderHub. If no URL, use ""
iqx_url                          : "https://quantum-computing.ibm.com/jupyter/user/qiskit-textbook" # Link to IQX
binder_repo_base                 : "https://github.com/"  # The site on which the textbook repository is hosted
binder_repo_org                  : "qiskit-community"  # The username or organization that owns this repository
binder_repo_name                 : "qiskit-textbook"  # The name of the repository on the web
binder_repo_branch               : "thebe-stable"  # The branch on which your textbook is hosted.
binderhub_interact_text          : "Interact on IBM Quantum Experience"  # The text that interact buttons will contain.

# Thebelab settings
use_thebelab_button              : true  # If 'true', display a button to allow in-page running code cells with Thebelab
thebelab_button_text             : "Interact Here"  # The text to display inside the Thebelab initialization button
hardware_warning_message         : "This cell uses quantum hardware. To run it in your browser, please " # message to display above hardware-using cells
hardware_warning_linktxt         : "click here to go to the IBM Quantum Experience." # text to appear in the link next to the warning
codemirror_theme                 : "abcdef"  # Theme for codemirror cells, for options see https://codemirror.net/doc/manual.html#config

# nbinteract settings
use_show_widgets_button              : true  # If 'true', display a button to allow in-page running code cells with nbinteract

# Download settings
use_download_button              : true  # If 'true', display a button to download a zip file for the notebook
download_button_text             : "Download" # The text that download buttons will contain
download_page_header             : "Made with Jupyter Book" # A header that will be displayed at the top of and PDF-printed page

#######################################################################################
# Jupyter book extensions and additional features

# Bibliography and citation settings. See https://github.com/inukshuk/jekyll-scholar#configuration for options
scholar:
  style: apa

#######################################################################################
# Option to add a Goggle analytics tracking code

# Navigate to https://analytics.google.com, add a new property for your jupyter book and copy the tracking id here.
google_analytics:
  mytrackingcode:

#######################################################################################
# Jupyter book settings you probably don't need to change

content_folder_name       : "content"  # The folder where your raw content (notebooks/markdown files) are located
images_url                : "/assets/images" # Path to static image files
css_url                   : "/assets/css" # Path to static CSS files
js_url                    : "/assets/js" # Path to JS files
custom_static_url         : "/assets/custom" # Path to user's custom CSS/JS files
vendor_url                : "/assets/vendor" # Path to 3rd party libs


#######################################################################################
# Jekyll build settings (only modify if you know what you're doing)

# Site settings
defaults:
  - scope:
      path: ""
    values:
      layout: "default"
      toc: true
      toc_label: "  On this page"
      toc_icon: "list-ul"
      excerpt: ''
  - scope:
      path: "*/ja"
    values:
      locale: "ja"

favicon_path: "images/logo/favicon.ico"

include: ['*.bib']

# Markdown Processing
markdown: kramdown
kramdown:
  input: GFM
  syntax_highlighter: rouge

sass:
  style: compressed

collections:
  build:
    output: true
    permalink: /:path.html

# Exclude from processing.
# The following items will not be processed, by default. Create a custom list
# to override the default setting.
exclude:
  - scripts/
  - Gemfile
  - Gemfile.lock
  - node_modules
  - vendor/bundle/
  - vendor/cache/
  - vendor/gems/
  - vendor/ruby/

plugins:
  - jekyll-redirect-from
  - jekyll-scholar

# Jupyter Book version - DO NOT CHANGE THIS. It is generated when a new book is created
jupyter_book_version: "0.6.4"


================================================
FILE: _data/demostoc.yml
================================================
# Keep your titles and descriptions below 75 characters 
# Frank wrote the css, so check the page still looks fine
# at different screen sizes before you commit

- title: Hello Qiskit Game
  url: /ch-ex/hello-qiskit.html
  description: Simple puzzles to get started with qubits and quantum games

- title: Estimating Pi Using QPE
  url: /ch-demos/piday-code.html
  description: Use the quantum phase estimation algorithm to estimate π


================================================
FILE: _data/ja/messages.yml
================================================
sidebar_title: Qiskitを使った量子計算の学習

download_notebook: Jupyter Notebookのダウンロード

contribute_github: Githubに貢献する

open_quantum: IBM Quantum Labを開く

on_this_page: On This Page

nav_documentation: Documentation
nav_community: Community
nav_learn: Learn

beta_testing: Try the new textbook beta

deprecation_warning_1: On April 11, this site will be replaced with the new
deprecation_warning_link_text: Qiskit Textbook
deprecation_warning_2: You will still be able to access these pages through the new platform.


================================================
FILE: _data/ja/toc.yml
================================================
# Each entry has the following schema:
#
# - title: mytitle   # Title of chapter or section.
#   url: /myurl  # URL of section relative to the /content/ folder.
#   sections:  # Contains a list of more entries that make up the chapter's sections
#   not_numbered: true  # if the section shouldn't have a number in the sidebar
#     (e.g. Introduction or appendices)
#   expand_sections: true  # if you'd like the sections of this chapter to always
#     be expanded in the sidebar.
#   external: true  # Whether the URL is an external link or points to content in the book
#
# Below are some special values that trigger specific behavior:
# - search: true  # Will provide a link to a search page
# - divider: true  # Will insert a divider in the sidebar
# - header: My Header  # Will insert a header with no link in the sidebar

#
# ==============================
# AUTOMATICALLY GENERATED TOC FILE.
# You should review the contents of this file, re-order items as you wish,
# and nest chapters in sections if you wish. The ======= symbols represent
# folder breaks.
#
# See the demo `toc.yml` for the right structure to follow. You can
# generate a demo book by running `jupyter-book create mybook --demo`
# ==============================

- title: Qiskit を使った量子計算の学習
  not_numbered: true
  url: /ja/preface

- title: 量子とは?
  url: /ja/what-is-quantum
  not_numbered: true

- title: 前提条件
  url: /ja/ch-prerequisites/setting-the-environment.html
  external: true
  sections:
    - title: Qiskitテキストブックで作業するための環境設定ガイド
      url: /ja/ch-prerequisites/setting-the-environment
    - title: Python 及び Jupyter notebook 入門
      url: /ja/ch-prerequisites/python-and-jupyter-notebooks

- title: 量子状態と量子ビット
  url: /ja/ch-states/introduction.html
  external: true
  expand_sections: true
  sections:
    - title: はじめに
      url: /ja/ch-states/introduction
    - title: 計算の原子
      url: /ja/ch-states/atoms-computation
    - title: 量子ビット状態を表現する
      url: /ja/ch-states/representing-qubit-states
    - title: 単一量子ビットゲート 
      url: /ja/ch-states/single-qubit-gates
    - title: 量子コンピューターの場合
      url: /ja/ch-states/case-for-quantum

- title: 複数量子ビットともつれ状態 
  url: /ja/ch-gates/introduction.html
  external: true
  expand_sections: true
  sections:
    - title: はじめに
      url: /ja/ch-gates/introduction
    - title: 複数量子ビットともつれ状態 
      url: /ja/ch-gates/multiple-qubits-entangled-states
    - title: 位相キックバック
      url: /ja/ch-gates/phase-kickback
    - title: さらなる回路の等価性
      url: /ja/ch-gates/more-circuit-identities
    - title: 普遍性の証明
      url: /ja/ch-gates/proving-universality
    - title: 量子コンピューター上の古典計算
      url: /ja/ch-gates/oracles


- title: 量子プロトコルと量子アルゴリズム
  url: /ja/ch-algorithms/index
  expand_sections: true
  sections:
    - title: 量子回路
      url: /ja/ch-algorithms/defining-quantum-circuits
    - title: ドイチ-ジョサのアルゴリズム
      url: /ja/ch-algorithms/deutsch-jozsa
    - title: ベルンシュタイン・ヴァジラニ アルゴリズム 
      url: /ja/ch-algorithms/bernstein-vazirani
    - title: サイモンのアルゴリズム
      url: /ja/ch-algorithms/simon
    - title: 量子フーリエ変換
      url: /ja/ch-algorithms/quantum-fourier-transform
    - title: 量子位相推定
      url: /ja/ch-algorithms/quantum-phase-estimation
    - title: ショアのアルゴリズム
      url: /ja/ch-algorithms/shor
    - title: グローバーのアルゴリズム
      url: /ja/ch-algorithms/grover
    - title: 量子数え上げ
      url: /ja/ch-algorithms/quantum-counting
    - title: 量子ウォークによる探索アルゴリズム
      url: /ja/ch-algorithms/quantum-walk-search-algorithm
    - title: 量子テレポーテーション
      url: /ja/ch-algorithms/teleportation
    - title: 超密度符号化
      url: /ja/ch-algorithms/superdense-coding
    - title: 量子鍵配送
      url: /ja/ch-algorithms/quantum-key-distribution

- title: 量子アプリケーションのアルゴリズム
  url: /ja/ch-applications/algs_for_apps_index
  expand_sections: true
  sections:
    - title: 量子アルゴリズムの応用
      url: /ja/ch-applications/apps_index
      expand_subsections: true
      subsections:
         - title: HHL を利用して線形方程式系を解きQiskit で実装する
           url: /ja/ch-applications/hhl_tutorial
         - title: VQE を利用しての分子シミュレーションを行う
           url: /ja/ch-applications/vqe-molecules
         - title: QAOA を利用して、組合せ最適化問題を解く
           url: /ja/ch-applications/qaoa
         - title: Groverのアルゴリズムを用いた充足可能性問題の解法
           url: /ja/ch-applications/satisfiability-grover
         - title: PyTorchとQiskitを用いた量子古典ハイブリッド・ニューラル・ネットワーク 
           url: /ja/ch-machine-learning/machine-learning-qiskit-pytorch
    - title: 最近の量子アルゴリズムの実装
      url: /ja/ch-applications/imp_index
      expand_subsections: true
      subsections:
         - title: 量子変分線型ソルバー
           url: /ja/ch-paper-implementations/vqls
         - title: 量子画像処理 - FRQIとNEQRによる画像表現
           url: /ja/ch-applications/image-processing-frqi-neqr

- title: 量子回路による量子ハードウェアの探究
  url: /ja/ch-quantum-hardware/index-circuits
  expand_sections: true
  sections:
    - title: 反復符号による量子エラー訂正の導入
      url: /ja/ch-quantum-hardware/error-correction-repetition-code
    - title: 測定エラーの軽減
      url: /ja/ch-quantum-hardware/measurement-error-mitigation
    - title: ランダマイズド・ベンチマーキング
      url: /ja/ch-quantum-hardware/randomized-benchmarking
    - title: 量子ボリュームの測定
      url: /ja/ch-quantum-hardware/measuring-quantum-volume

- title: マイクロ波パルスによる量子ハードウェアの探究
  url: /ja/ch-quantum-hardware/index-pulses
  expand_sections: true
  sections:
    - title: Qiskit Pulseによる量子ビットの較正 
      url: /ja/ch-quantum-hardware/calibrating-qubits-pulse
    - title: Qiskit Pulseによる高エネルギー状態へのアクセス
      url: /ja/ch-quantum-hardware/accessing_higher_energy_states
    - title: トランズモン物理入門
      url: /ja/ch-quantum-hardware/transmon-physics
    - title: 回路量子電磁力学
      url: /ja/ch-quantum-hardware/cQED-JC-SW

- title: 練習問題
  url: /ja/ch-ex/index
  expand_sections: true
  sections:
    - title: Set 1. 量子回路による古典論理ゲートの実現
      url: /ja/ch-ex/ex1
      not_numbered: true
    - title: Set 2. 1量子ビットゲートの合成の基礎 
      url: /ja/ch-ex/ex2
      not_numbered: true
    - title: Set 3. ベストなANDゲートの構築 
      url: /ja/ch-ex/ex3
      not_numbered: true

- title: 量子計算実験
  url: /ja/ch-labs/index
  expand_sections: true
  sections:
    - title: 実験 1. 量子回路
      url: /ja/ch-labs/Lab01_QuantumCircuits
      not_numbered: true
    - title: 実験 2. 量子測定
      url: /ja/ch-labs/Lab02_QuantumMeasurement
      not_numbered: true

- title: Appendix(付録)
  url: /ja/ch-appendix/index
  expand_sections: false
  sections:
    - title: 線形代数入門
      url: /ja/ch-appendix/linear_algebra
    - title: Qiskitの文法の基礎
      url: /ja/ch-appendix/qiskit

- title: ゲームとデモ
  url: /ja/ch-demos/index
  expand_sections: true
  sections:
    - title: Hello Qiskitゲーム
      url: /ja/ch-ex/hello-qiskit
      not_numbered: true
    - title: 量子位相推定を使った円周率の推定
      url: /ja/ch-demos/piday-code
      not_numbered: true
    - title: インタラクティブ・ウィジェットのデモ
      url: /ja/widgets-index
      not_numbered: true



================================================
FILE: _data/messages.yml
================================================
sidebar_title: Learn Quantum Computation using Qiskit

download_notebook: Download as Jupyter Notebook

contribute_github: Contribute on Github

open_quantum: Open in IBM Quantum Lab

on_this_page: On This Page

nav_documentation: Documentation
nav_community: Community
nav_learn: Learn

beta_testing: Try the new textbook beta

deprecation_warning_1: On April 11, this site will be replaced with the new
deprecation_warning_link_text: Qiskit Textbook
deprecation_warning_2: You will still be able to access these pages through the new platform.


================================================
FILE: _data/toc.yml
================================================
# Each entry has the following schema:
#
# - title: mytitle   # Title of chapter or section.
#   url: /myurl  # URL of section relative to the /content/ folder.
#   sections:  # Contains a list of more entries that make up the chapter's sections
#   not_numbered: true  # if the section shouldn't have a number in the sidebar
#     (e.g. Introduction or appendices)
#   expand_sections: true  # if you'd like the sections of this chapter to always
#     be expanded in the sidebar.
#   external: true  # Whether the URL is an external link or points to content in the book
#
# Below are some special values that trigger specific behavior:
# - search: true  # Will provide a link to a search page
# - divider: true  # Will insert a divider in the sidebar
# - header: My Header  # Will insert a header with no link in the sidebar

#
# ==============================
# AUTOMATICALLY GENERATED TOC FILE.
# You should review the contents of this file, re-order items as you wish,
# and nest chapters in sections if you wish. The ======= symbols represent
# folder breaks.
#
# See the demo `toc.yml` for the right structure to follow. You can
# generate a demo book by running `jupyter-book create mybook --demo`
# ==============================

- title: Learn Quantum Computation using Qiskit
  not_numbered: true
  url: /preface

- title: What is Quantum?
  url: /what-is-quantum
  not_numbered: true

- title: Prerequisites
  url: /ch-prerequisites/setting-the-environment.html
  external: true
  sections:
    - title: Setting Up Your Environment
      url: /ch-prerequisites/setting-the-environment
    - title: Python and Jupyter Notebooks
      url: /ch-prerequisites/python-and-jupyter-notebooks

- title: Quantum States and Qubits
  url: /ch-states/introduction.html
  external: true
  expand_sections: true
  sections:
    - title: Introduction
      url: /ch-states/introduction
    - title: The Atoms of Computation
      url: /ch-states/atoms-computation
    - title: Representing Qubit States
      url : /ch-states/representing-qubit-states
    - title: Single Qubit Gates
      url: /ch-states/single-qubit-gates
    - title: The Case for Quantum
      url: /ch-states/case-for-quantum

- title: Multiple Qubits and Entanglement
  url: /ch-gates/introduction.html
  external: true
  expand_sections: true
  sections:
    - title: Introduction
      url: /ch-gates/introduction
    - title: Multiple Qubits and Entangled States
      url: /ch-gates/multiple-qubits-entangled-states
    - title: Phase Kickback
      url: /ch-gates/phase-kickback
    - title: More Circuit Identities
      url: /ch-gates/more-circuit-identities
    - title: Proving Universality
      url: /ch-gates/proving-universality
    - title: Classical Computation on a Quantum Computer
      url: /ch-gates/oracles


- title: Quantum Protocols and Quantum Algorithms
  url: /ch-algorithms/index
  expand_sections: true
  sections:
    - title: Defining Quantum Circuits
      url: /ch-algorithms/defining-quantum-circuits
    - title: Deutsch-Jozsa Algorithm
      url: /ch-algorithms/deutsch-jozsa
    - title: Bernstein-Vazirani Algorithm
      url: /ch-algorithms/bernstein-vazirani
    - title: Simon's Algorithm
      url: /ch-algorithms/simon
    - title: Quantum Fourier Transform
      url: /ch-algorithms/quantum-fourier-transform
    - title: Quantum Phase Estimation
      url: /ch-algorithms/quantum-phase-estimation
    - title: Shor's Algorithm
      url: /ch-algorithms/shor
    - title: Grover's Algorithm
      url: /ch-algorithms/grover
    - title: Quantum Counting
      url: /ch-algorithms/quantum-counting
    - title: Quantum Walk Search Algorithm
      url: /ch-algorithms/quantum-walk-search-algorithm
    - title: Quantum Teleportation
      url: /ch-algorithms/teleportation
    - title: Superdense Coding
      url: /ch-algorithms/superdense-coding
    - title: Quantum Key Distribution
      url: /ch-algorithms/quantum-key-distribution

- title: Quantum Algorithms for Applications
  url: /ch-applications/algs_for_apps_index
  expand_sections: true
  sections:
    - title: Applied Quantum Algorithms
      url: /ch-applications/apps_index
      expand_subsections: true
      subsections:
         - title: Solving Linear Systems of Equations using HHL
           url: /ch-applications/hhl_tutorial
         - title: Simulating Molecules using VQE
           url: /ch-applications/vqe-molecules
         - title: Solving combinatorial optimization problems using QAOA
           url: /ch-applications/qaoa
         - title: Solving Satisfiability Problems using Grover's Algorithm
           url: /ch-applications/satisfiability-grover
         - title: Hybrid quantum-classical Neural Networks with PyTorch and Qiskit
           url: /ch-machine-learning/machine-learning-qiskit-pytorch
    - title: Implementations of Recent Quantum Algorithms
      url: /ch-applications/imp_index
      expand_subsections: true
      subsections:
         - title: Variational Quantum Linear Solver
           url: /ch-paper-implementations/vqls
         - title: Quantum Image Processing - FRQI and NEQR Image Representations
           url: /ch-applications/image-processing-frqi-neqr
         - title: Quantum Edge Detection - QHED Algorithm on Small and Large Images
           url: /ch-applications/quantum-edge-detection
         - title: Solving the Travelling Salesman Problem using Phase Estimation
           url: /ch-paper-implementations/tsp

- title: Investigating Quantum Hardware Using Quantum Circuits
  url: /ch-quantum-hardware/index-circuits
  expand_sections: true
  sections:
    - title: Introduction to Quantum Error Correction using Repetition Codes
      url: /ch-quantum-hardware/error-correction-repetition-code
    - title: Measurement Error Mitigation
      url: /ch-quantum-hardware/measurement-error-mitigation
    - title: Randomized Benchmarking
      url: /ch-quantum-hardware/randomized-benchmarking
    - title: Measuring Quantum Volume
      url: /ch-quantum-hardware/measuring-quantum-volume
    - title: The Density Matrix & Mixed States
      url: /ch-quantum-hardware/density-matrix

- title: Investigating Quantum Hardware Using Microwave Pulses
  url: /ch-quantum-hardware/index-pulses
  expand_sections: true
  sections:
    - title: Calibrating Qubits with Qiskit Pulse
      url: /ch-quantum-hardware/calibrating-qubits-pulse
    - title: Accessing Higher Energy States
      url: /ch-quantum-hardware/accessing_higher_energy_states
    - title: Introduction to Transmon Physics
      url: /ch-quantum-hardware/transmon-physics
    - title: Circuit Quantum Electrodynamics
      url: /ch-quantum-hardware/cQED-JC-SW
    - title: Exploring the Jaynes-Cummings Hamiltonian with Qiskit Pulse
      url: /ch-quantum-hardware/Jaynes-Cummings-model
    - title: Measuring the Qubit ac-Stark Shift
      url: /ch-quantum-hardware/ac-Stark-shift
    - title: Hamiltonian Tomography
      url: /ch-quantum-hardware/hamiltonian-tomography


- title: Quantum Computing Labs
  url: /ch-labs/index
  expand_sections: true
  sections:
    - title: Lab 1. Quantum Circuits
      url: /ch-labs/Lab01_QuantumCircuits
      not_numbered: true
    - title: Lab 2. Quantum Measurement
      url: /ch-labs/Lab02_QuantumMeasurement
      not_numbered: true
    - title: Lab 3. Accuracy of Quantum Phase Estimation
      url: /ch-labs/Lab03_AccuracyQPE
      not_numbered: true
    - title: Lab 4. Iterative Quantum Phase Estimation
      url: /ch-labs/Lab04_IterativePhaseEstimation
      not_numbered: true
    - title: Lab 5. Scalable Shor’s Algorithm
      url: /ch-labs/Lab05_Scalable_Shor_Algorithm
      not_numbered: true
    - title: Lab 6. Grover's search with an unknown number of solutions
      url: /ch-labs/Lab06_Grover_search_with_an_unknown_number_of_solutions
      not_numbered: true
    - title: Lab 7. Quantum Simulation as a Search Algorithm
      url: /ch-labs/Lab07_QuantumSimulationSearchAlgorithm
      not_numbered: true
    - title: Lab 8. Quantum Error Correction 
      url: /ch-labs/Lab08_QEC
      not_numbered: true
      
      

- title: Appendix
  url: /ch-appendix/index
  expand_sections: false
  sections:
    - title: Linear Algebra
      url: /ch-appendix/linear_algebra
    - title: Qiskit
      url: /ch-appendix/qiskit

- title: Games & Demos
  url: /ch-demos/index
  expand_sections: true
  sections:
    - title: Hello Qiskit Game
      url: /ch-ex/hello-qiskit
      not_numbered: true
    - title: Estimating Pi Using Quantum Phase Estimation Algorithm
      url: /ch-demos/piday-code
      not_numbered: true
    - title: Local Reality and the CHSH Inequality
      url: /ch-demos/chsh
      not_numbered: true
    - title: Quantum Coin Game
      url: /ch-demos/coin-game
      not_numbered: true
    - title: Variational Quantum Regression
      url: /ch-demos/variational-quantum-regression
      not_numbered: true
    - title: Interactivity Index
      url: /widgets-index
      not_numbered: true



================================================
FILE: _includes/banner.html
================================================
{% if site.data[page.locale] %}
{% assign messages = site.data[page.locale].messages %}
{% else %}
{% assign messages = site.data.messages %}
{% endif %}

<div id="textbook-banner" class="page__banner">
  {{ messages.deprecation_warning_1 }}
  <a href="https://qiskit.org/textbook-beta" target="_blank">
    {{ messages.deprecation_warning_link_text }}</a>.
  {{ messages.deprecation_warning_2 }}
</div>


================================================
FILE: _includes/buttons/binder.html
================================================
{% if site.use_binder_button %}

{% if site.use_jupyterlab %}
    {% assign binder_interact_prefix="urlpath=lab/tree/" %}
{% else %}
    {% assign binder_interact_prefix="filepath=" %}
{% endif %}

{% capture interact_url_iqx %}{{ page.interact_link | relative_url }}{% endcapture %}
{% comment %}
# Removed the image for now
{% capture interact_icon_qiskit %}{{ site.images_url | relative_url }}/logo_qiskit.svg{% endcapture %}
{% endcomment %}

<a href="{{ site.iqx_url }}/{{ page.interact_link }}" target="_blank"><button class="interact-button" id="interact-button-binder">
		<!--- <img class="interact-button-logo" src="{{ interact_icon_qiskit }}" alt="Interact" /> --->
		{{ site.binderhub_interact_text }}</button></a>
<script>
    (function () {
        'use strict'
        const interactButton = document.getElementById('interact-button-binder');
        interactButton.addEventListener('click', () => {
            window.trackCta('Interact');
        });
    }());
</script>

{%- endif %}


================================================
FILE: _includes/buttons/download.html
================================================
{% if site.use_download_button -%}
<div class="download-buttons-dropdown">
    <button id="dropdown-button-trigger" class="interact-button"><img src="{{ site.images_url | relative_url }}/download-solid.svg" alt="Download" /></button>
    <div class="download-buttons">
        {% if page.interact_link -%}
        <a href="{{ page.interact_link | relative_url }}" download>
        <button id="interact-button-download" class="interact-button">{{ page.suffix | capitalize }}</button>
        </a>
        {% endif %}
        <a id="interact-button-print"><button id="interact-button-download" class="interact-button">.pdf</button></a>
    </div>
</div>
{%- endif %}


================================================
FILE: _includes/buttons/jupyterhub.html
================================================
{% if site.use_jupyterhub_button %}

{% if site.use_jupyterlab %}
    {% assign hub_app="lab" %}
{% else %}
    {% assign hub_app="notebook" %}
{% endif %}

{% capture interact_url_jupyterhub %}hub/user-redirect/git-pull?repo={{ site.binder_repo_base }}/{{ site.binder_repo_org }}/{{ site.binder_repo_name }}&amp;branch={{ site.binder_repo_branch }}&amp;subPath={{ page.interact_link | url_encode }}&amp;app={{ hub_app }}{% endcapture %}
{% capture interact_icon_jupyterhub %}{{ site.images_url | relative_url }}/logo_jupyterhub.svg{% endcapture %}
<a href="{{ site.jupyterhub_url }}/{{ interact_url_jupyterhub }}"><button class="interact-button" id="interact-button-jupyterhub"><img class="interact-button-logo" src="{{ interact_icon_jupyterhub }}" alt="Interact" />{{ site.jupyterhub_interact_text }}</button></a>

{% endif %}


================================================
FILE: _includes/buttons/nbinteract.html
================================================
{% if site.use_show_widgets_button and page.has_widgets -%}
<button id="interact-button-show-widgets" class="interact-button js-nbinteract-widget">Show Widgets</button>
{% endif %}

================================================
FILE: _includes/buttons/thebelab.html
================================================
{% if site.use_thebelab_button -%}
<button id="interact-button-thebelab" class="interact-button">{{ site.thebelab_button_text }}</button>
{% endif %}

================================================
FILE: _includes/buttons.html
================================================
<div class="buttons">
{% include buttons/download.html %}
{% if page.interact_link %}
  {% include buttons/thebelab.html %}
  {% include buttons/nbinteract.html %}
  {% include buttons/binder.html %}
  {% include buttons/jupyterhub.html %}
{% endif %}
</div>


================================================
FILE: _includes/coursemap_img.html
================================================
<img id="Coursemap" 
     src="images/coursemaps/coursemap_all.png" 
     style="max-width: 600px; margin: 50px;">

<p>Course Focus (Click for Suggested Path):</p>
<br>

<button onclick="document.getElementById('Coursemap').src='images/coursemaps/coursemap_A.png'"
        style="
              border: none;
              padding: 7px 16px;
              text-align: center;
              text-decoration: none;
              display: inline-block;
              font-size: 16px;
              margin: 5px;
              margin-left: 65px;"
        >Quantum Algorithms
        </button>
<button onclick="document.getElementById('Coursemap').src='images/coursemaps/coursemap_B.png'"
        style="
              border: none;
              padding: 7px 16px;
              text-align: center;
              text-decoration: none;
              display: inline-block;
              font-size: 16px;
              margin: 5px;">Quantum Programming
</button>
<button onclick="document.getElementById('Coursemap').src='images/coursemaps/coursemap_C.png'"
        style="
              border: none;
              padding: 7px 16px;
              text-align: center;
              text-decoration: none;
              display: inline-block;
              font-size: 16px;
              margin: 5px;">Quantum Hardware
</button>


================================================
FILE: _includes/css_entry.scss
================================================
@import 'inuitcss/settings/settings.core';
@import 'settings/settings.global.scss';

@import 'inuitcss/tools/tools.font-size';
@import 'inuitcss/tools/tools.clearfix';
@import 'inuitcss/tools/tools.hidden';
@import 'inuitcss/tools/tools.mq';

@import 'inuitcss/elements/elements.page';
@import 'inuitcss/elements/elements.headings';
@import 'inuitcss/elements/elements.images';
@import 'inuitcss/elements/elements.tables';
@import 'elements/elements.typography';
@import 'elements/elements.syntax-highlighting';
@import 'elements/elements.tables';
@import 'elements/elements.links';

@import 'components/components.textbook__page';


================================================
FILE: _includes/fb_tags.html
================================================
<meta property="og:url"         content="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url  | relative_url }}" />
<meta property="og:type"        content="article" />
<meta property="og:title"       content="{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}" />
<meta property="og:description" content="{{ site.description }}" />
<meta property="og:image"       content="{{ site.textbook_logo | absolute_url }}" />

<meta name="twitter:card" content="summary">


================================================
FILE: _includes/footer.html
================================================
<footer>
  <p class="footer">{{ site.footer_text }}</p>
</footer>


================================================
FILE: _includes/google_analytics.html
================================================
{% if site.google_analytics.mytrackingcode %}
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics.mytrackingcode }}"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', '{{ site.google_analytics.mytrackingcode }}');
</script>
{% endif %}


================================================
FILE: _includes/head.html
================================================
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,minimum-scale=1">

  <title>{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}</title>
  <meta name="description" content="{{ site.description }}">

  <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | relative_url }}">
  <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url | relative_url }}">

  {% if page.locale == "" %}
    {% assign page_url = page.url | replace:'/en','' %}
  {% else %}
    {% assign page_locale = '/' | append: page.locale | append: '/' %}
    {% assign page_url = page.url | replace: page_locale, '/' %}
  {% endif %}

  <link rel="alternate" hreflang="en" href="{{ page_url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | relative_url }}" />
  <link rel="alternate" hreflang="ja" href="{{ page_url | replace:'index.html','' | prepend: '/ja' | prepend: site.baseurl | prepend: site.url | relative_url }}" />
  <link rel="alternate" hreflang="x-default" href="{{ page_url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | relative_url }}" />

  {% include fb_tags.html %}

  <script type="application/ld+json">
  {% include metadata.json %}
  </script>
  <link id="theme-style" rel="stylesheet" href="{{ site.css_url | relative_url }}/styles.css">

  <!-- <link rel="manifest" href="/manifest.json"> -->
  <!-- <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#efae0a"> -->
  <meta name="msapplication-TileColor" content="#da532c">
  <meta name="msapplication-TileImage" content="/mstile-144x144.png">
  <meta name="theme-color" content="#233947">

  <!-- Favicon -->
  <link rel="shortcut icon" type="image/x-icon" href="{{ site.favicon_path | relative_url }}">

  <!-- MathJax Config -->
  {% include mathjax.html %}

  <!-- DOM updating function -->
  <script src="{{ site.js_url | relative_url }}/page/dom-update.js"></script>

  <!-- Selectors for elements on the page -->
  <script src="{{ site.js_url | relative_url }}/page/documentSelectors.js"></script>

  <!-- Define some javascript variables that will be useful in other javascript -->
  <script>
    const site_basename = '{{ site.baseurl | strip / }}';
  </script>

  <!-- Add AnchorJS to let headers be linked -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.0/anchor.min.js" async></script>
  <script src="{{ site.js_url | relative_url }}/page/anchors.js" async></script>

  <!-- Include Turbolinks to make page loads fast -->
  <!-- https://github.com/turbolinks/turbolinks -->
  <!-- Turbolinks were causing problems with equations in details tags, I have
	  removed them for now as I didn't notice a siginificant difference in
	  loading time, but maybe someone more knowledgeable than me can sort
	  the problem properly and re-enable -Frank
  <script src="https://cdnjs.cloudflare.com/ajax/libs/turbolinks/5.2.0/turbolinks.js" async></script>
  <meta name="turbolinks-cache-control" content="no-cache">
  -->

  <!-- Load nbinteract for widgets -->
  {% include js/nbinteract.html %}

  <!-- Load Thebelab for interactive widgets -->
  {% include js/thebelab.html %}

  <!-- Load the auto-generating TOC (non-async otherwise the TOC won't load w/ turbolinks) -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.8.1/tocbot.min.js" async></script>
  <script src="{{ site.js_url | relative_url }}/page/tocbot.js"></script>

  <!-- Google analytics -->
  {% include google_analytics.html %}

  <!-- Segment analytics -->
  {% include segment.html %}

  <!-- Hotjar -->
  {% include hotjar.html %}

  <!-- Clipboard copy button -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js" async></script>

  <!-- Load custom website scripts -->
  <script src="{{ site.js_url | relative_url }}/scripts.js" async></script>

  <!-- Load custom user CSS and JS  -->
  <script src="{{ site.custom_static_url | relative_url }}/custom.js" async></script>
  <link id="custom-style" rel="stylesheet" href="{{ site.custom_static_url | relative_url }}/custom.css">

  <!-- Update interact links w/ REST param, is defined in includes so we can use templates -->
  {% include js/interact-update.html %}

  <!-- Lunr search code - will only be executed on the /search page -->
  <script>{% include search/lunr/lunr-en.js %}</script>

  <!-- Load JS that depends on site variables -->
  <script src="{{ site.js_url | relative_url }}/page/copy-button.js" async></script>

  <!-- Hide cell code -->
  <script src="{{ site.js_url | relative_url }}/page/hide-cell.js" async></script>

  <!-- Printing the screen -->
  {% include js/print.html %}
</head>


================================================
FILE: _includes/hotjar.html
================================================
<script>
  (function(h,o,t,j,a,r){
    h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
    h._hjSettings={hjid:1586421,hjsv:6};
    a=o.getElementsByTagName('head')[0];
    r=o.createElement('script');r.async=1;
    r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
    a.appendChild(r);
  })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script>


================================================
FILE: _includes/js/interact-update.html
================================================
{% if site.use_jupyterhub_button or site.use_binder_button %}
<script>
/**
  * To auto-embed hub URLs in interact links if given in a RESTful fashion
 */

function getJsonFromUrl(url) {
  var query = url.split('?');
  if (query.length < 2) {
    // No queries so just return false
    return false;
  }
  query = query[1];
  // Collect REST params into a dictionary
  var result = {};
  query.split("&").forEach(function(part) {
    var item = part.split("=");
    result[item[0]] = decodeURIComponent(item[1]);
  });
  return result;
}
    
function dict2param(dict) {
    params = Object.keys(dict).map(function(k) {
        return encodeURIComponent(k) + '=' + encodeURIComponent(dict[k])
    });
    return params.join('&')
}

// Parse a Binder URL, converting it to the string needed for JupyterHub
function binder2Jupyterhub(url) {
  newUrl = {};
  parts = url.split('v2/gh/')[1];
  // Grab the base repo information
  repoinfo = parts.split('?')[0];
  var [org, repo, ref] = repoinfo.split('/');
  newUrl['repo'] = ['https://github.com', org, repo].join('/');
  newUrl['branch'] = ref
  // Grab extra parameters passed
  params = getJsonFromUrl(url);
  if (params['filepath'] !== undefined) {
    newUrl['subPath'] = params['filepath']
  }
  return dict2param(newUrl);
}

// Filter out potentially unsafe characters to prevent xss
function safeUrl(url)
{
   return String(encodeURIComponent(url))
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}

function addParamToInternalLinks(hub) {
  var links = document.querySelectorAll("a").forEach(function(link) {
    var href = link.href;
    // If the link is an internal link...
    if (href.search("{{ site.url }}") !== -1 || href.startsWith('/') || href.search("127.0.0.1:") !== -1) {
      // Assume we're an internal link, add the hub param to it
      var params = getJsonFromUrl(href);
      if (params !== false) {
        // We have REST params, so append a new one
        params['jupyterhub'] = hub;
      } else {
        // Create the REST params
        params = {'jupyterhub': hub};
      }
      // Update the link
      var newHref = href.split('?')[0] + '?' + dict2param(params);
      link.setAttribute('href', decodeURIComponent(newHref));
    }
  });
  return false;
}


// Update interact links
function updateInteractLink() {
    // hack to make this work since it expects a ? in the URL
    rest = getJsonFromUrl("?" + location.search.substr(1));
    jupyterHubUrl = rest['jupyterhub'];
    var hubType = null;
    var hubUrl = null;
    if (jupyterHubUrl !== undefined) {
      hubType = 'jupyterhub';
      hubUrl = jupyterHubUrl;
    }

    if (hubType !== null) {
      // Sanitize the hubUrl
      hubUrl = safeUrl(hubUrl);

      // Add HTTP text if omitted
      if (hubUrl.indexOf('http') < 0) {hubUrl = 'http://' + hubUrl;}
      var interactButtons = document.querySelectorAll("button.interact-button")
      var lastButton = interactButtons[interactButtons.length-1];
      var link = lastButton.parentElement;

      // If we've already run this, skip the link updating
      if (link.nextElementSibling !== null) {
        return;
      }

      // Update the link and add context div
      var href = link.getAttribute('href');
      if (lastButton.id === 'interact-button-binder') {
        // If binder links exist, we need to re-work them for jupyterhub
        if (hubUrl.indexOf('http%3A%2F%2Flocalhost') > -1) {
          // If localhost, assume we're working from a local Jupyter server and remove `/hub`
          first = [hubUrl, 'git-sync'].join('/')
        } else {
          first = [hubUrl, 'hub', 'user-redirect', 'git-sync'].join('/')
        }
        href = first + '?' + binder2Jupyterhub(href);
      } else {
        // If interact button isn't binderhub, assume it's jupyterhub
        // If JupyterHub links, we only need to replace the hub url
        href = href.replace("{{ site.jupyterhub_url }}", hubUrl);
        if (hubUrl.indexOf('http%3A%2F%2Flocalhost') > -1) {
          // Assume we're working from a local Jupyter server and remove `/hub`
          href = href.replace("/hub/user-redirect", "");
        }
      }
      link.setAttribute('href', decodeURIComponent(href));

      // Add text after interact link saying where we're launching
      hubUrlNoHttp = decodeURIComponent(hubUrl).replace('http://', '').replace('https://', '');
      link.insertAdjacentHTML('afterend', '<div class="interact-context">on ' + hubUrlNoHttp + '</div>');

      // Update internal links so we retain the hub url
      addParamToInternalLinks(hubUrl);
    }
}

runWhenDOMLoaded(updateInteractLink)
document.addEventListener('turbolinks:load', updateInteractLink)
</script>
{% endif %}

================================================
FILE: _includes/js/nbinteract.html
================================================
{% if site.use_show_widgets_button and page.has_widgets %}
<!-- Include nbinteract for interactive widgets -->
<script src="https://unpkg.com/nbinteract-core" async></script>

<script>
let interact

const initializeNbinteract = () => {
  // If NbInteract hasn't loaded, wait one second and try again
  if (window.NbInteract === undefined) {
    setTimeout(initializeNbinteract, 1000)
    return
  }

  if (interact === undefined) {
    console.log('Initializing nbinteract...')
    interact = new window.NbInteract({
      baseUrl: 'https://mybinder.org',
      spec: '{{ site.binder_repo_org }}/{{ site.binder_repo_name }}/{{ site.binder_repo_branch }}',
      provider: 'gh',
    })
    window.interact = interact
  } else {
    console.log("nbinteract already initialized...")
  }

  interact.prepare()
}

// Initialize nbinteract
initFunction(initializeNbinteract);
</script>
{% endif %}

================================================
FILE: _includes/js/print.html
================================================
<!-- Include nbinteract for interactive widgets -->
<script src="https://printjs-4de6.kxcdn.com/print.min.js" async></script>
<script>
printContent = () => {
    // MathJax displays a second version of any math for assistive devices etc.
    // This prevents double-rendering in the PDF output.
    var ignoreAssistList = [];
    assistives = document.querySelectorAll('.MathJax_Display span.MJX_Assistive_MathML').forEach((element, index) => {
        var thisId = 'MathJax-assistive-' + index.toString();
        element.setAttribute('id', thisId);
        ignoreAssistList.push(thisId)
    });

    // Print the actual content object
    printJS({
        printable: 'textbook_content',
        type: 'html',
        css: "{{ site.css_url | relative_url }}/styles.css",
        style: "#textbook_content {padding-top: 40px};",
        scanStyles: false,
        targetStyles: ["*"],
        ignoreElements: ignoreAssistList,
        documentTitle: "{{ site.download_page_header }}"
    })
};

initPrint = () => {
    document.querySelector('#interact-button-print').addEventListener('click', printContent)
}

initFunction(initPrint)
</script>


================================================
FILE: _includes/js/thebelab-cell-button.html
================================================
{% if site.use_thebelab_button -%}
<script>
/**
 * Set up thebelab button for code blocks
 */

const thebelabCellButton = id =>
  `<a id="thebelab-cell-button-${id}" class="btn thebebtn">
    <button>try</button>
  </a>`


const addThebelabButtonToCodeCells =  () => {

  const codeCells = document.querySelectorAll('div.input_area > div.highlight:not(.output) pre')
  codeCells.forEach((codeCell, index) => {
    const id = codeCellId(index)
    codeCell.setAttribute('id', id)
    if (document.getElementById("thebelab-cell-button-" + id) == null) {
      codeCell.insertAdjacentHTML('afterend', thebelabCellButton(id));
    }
  })
}

initFunction(addThebelabButtonToCodeCells);
</script>
{% endif %}


================================================
FILE: _includes/js/thebelab-page-config.html
================================================
<script type="text/x-thebe-config">
{%- if page.kernel_name %}
    {% assign kernelName = page.kernel_name %}
{% else %}
    {% assign kernelName = "python3" %}
{% endif -%}

{%- if page.kernel_name %}
    {% if page.kernel_name contains "python" %}
        {% assign cm_language="python" %}
    {% else %}
        {% assign cm_language={{ page.kernel_name }} %}
    {% endif %}
{% else %}
    {% assign cm_language="python" %}
{% endif -%}
{
    requestKernel: true,
    binderOptions: {
    repo: "{{ site.binder_repo_org }}/{{ site.binder_repo_name }}",
    ref: "{{ site.binder_repo_branch }}",
    },
    codeMirrorConfig: {
    theme: "{{ site.codemirror_theme }}",
    mode: "{{ cm_language }}"
    },
    kernelOptions: {
    kernelName: "{{ kernelName }}",
    path: "{{ page.kernel_path }}"
    }
}
</script>

================================================
FILE: _includes/js/thebelab.html
================================================
<!-- Include Thebelab for interactive code if it's enabled -->
{% if site.use_thebelab_button %}

<!-- Display Thebelab button in each code cell -->
{% include js/thebelab-cell-button.html %}

<script>
    /**
     * Thebelab loads "reset CSS" after the theme styles load and so,
     * it invalidates part of the theme rules. To make the theme CSS to take
     * the correct precedence, we listen for Thebelab to finish loading, then
     * relocate the theme CSS and start Thebelab.
     */
    const thebeLabScript = document.createElement('script');
    thebeLabScript.src = "{{ site.vendor_url | relative_url }}/thebelab/index.js"
    thebeLabScript.async = true
    thebeLabScript.onload = () => {
        setTimeout(() => {
            document.head.append(
                ...document.querySelectorAll('#theme-style, #custom-style'))
        })
        initFunction(initThebelab)
    }
    document.head.append(thebeLabScript);

    /**
     * Add attributes to Thebelab blocks
     */
    function initThebelab() {
        const addThebelabToCodeCells = () => {
            console.log("Adding thebelab to code cells...");
            // If Thebelab hasn't loaded, wait a bit and try again. This
            // happens because we load ClipboardJS asynchronously.
            if (window.thebelab === undefined) {
                setTimeout(addThebelabToCodeCells, 250)
            return
            }

            // If we already detect a Thebelab cell, don't re-run
            if (document.querySelectorAll('div.thebelab-cell').length > 0) {
                return;
            }

            // Find all non-hardware, code cells, replace with Thebelab interactive code cells
            const hardwareTag = 'uses-hardware'
            const hardwareQuery = `.jb_cell.tag_${hardwareTag}`
            const noHardwareQuery = `.jb_cell:not(.tag_${hardwareTag})`
            const codeCells = document.querySelectorAll(`${noHardwareQuery} pre[id^="codecell"]`)
            codeCells.forEach((codeCell, index) => {
                const id = codeCellId(index)

                // Clean up the language to make it work w/ CodeMirror and add it to the cell
                dataLanguage = "{{ kernelName }}"
                dataLanguage = detectLanguage(dataLanguage);
                codeCell.setAttribute('data-language', dataLanguage)
                codeCell.setAttribute('data-executable', 'true')

                // If the code cell is hidden, show it
                var inputCheckbox = document.querySelector(`input#hidebtn${codeCell.id}`);
                if (inputCheckbox !== null) {
                    setCodeCellVisibility(inputCheckbox, 'visible');
                }
            });

            // Create link to IQX and hardware notice template
            const currentPath = window.location.pathname
            const contentPath = currentPath.slice('{{ site.baseurl }}'.length)
            const notebookPath = contentPath.replace(/\.html$/, '.ipynb')
            const iqxUrl = `{{ site.iqx_url }}/content${notebookPath}`

            const usesHardwareNotice = document.createElement('template')
            usesHardwareNotice.innerHTML = `
            <div class="uses-hardware-notice">
                {{ site.hardware_warning_message }}
                <a href="${iqxUrl}" target="_blank">{{ site.hardware_warning_linktxt }}</a>
            </div>
            `

            // Add warning and link to IQX on uses-hardware cells
            const hardwareCells = document.querySelectorAll(hardwareQuery)
            hardwareCells.forEach((cell) => {
                cell.prepend(usesHardwareNotice.content.cloneNode(true))
                cell.querySelector('a').addEventListener('click', (evt) => {
                    try {
                        window.trackCta(`Hardware Cell ${getInputCell(evt.target)}`)
                    } catch {}
                    return true;
                })
            });

            // Remove the event listener from the page so keyboard press doesn't
            // Change page
            document.removeEventListener('keydown', initPageNav)
            keyboardListener = false;

            // Init thebelab
            thebelab.bootstrap();

            // Remove copy buttons since they won't work anymore
            const copyAndThebeButtons = document.querySelectorAll(`${noHardwareQuery} .copybtn, .thebebtn`)
            copyAndThebeButtons.forEach((button, index) => {
                button.remove();
            });

            // Remove outputs since they'll be stale (ignore outputs with removed inputs)
            const outputs = document.querySelectorAll(':not(.tag_remove_input) > .output_wrapper')
            outputs.forEach((output, index) => {
                output.remove();
            });

            // Find any cells with an initialization tag and ask ThebeLab to run them when ready
            var thebeInitCells = document.querySelectorAll('div.tag_thebelab-init');
            thebeInitCells.forEach((cell) => {
                console.log("Initializing ThebeLab with cell: " + cell.id);
                cell.querySelector('.thebelab-run-button').click();
            });

            // Add analytics per cell
            const thebelabRunButtons = document.querySelectorAll('.thebelab-run-button');
            thebelabRunButtons.forEach((runButton) => {
                runButton.addEventListener('click', (evt) => {
                    window.trackCta(`Run ${getInputCell(evt.target)}`)
                })
            });
        }

        // Add event listener for the function to modify code cells
        const thebelabButtons = document.querySelectorAll('[id^=thebelab], [id$=thebelab]')
        thebelabButtons.forEach((thebelabButton,index) => {
            if (thebelabButton === null) {
                setTimeout(initThebelab, 250)
                return
            };
            thebelabButton.addEventListener('click', addThebelabToCodeCells);
            // Add segment analytics
            thebelabButton.addEventListener('click', () => {
                window.trackCta('Make Interactive');
            });
        });

        function getInputCell(button) {
            const parent = button.parentElement;
            if (parent === null) {
                return 'unknown';
            }
            if (parent.id.startsWith('inputcell')) {
                return parent.id;
            }
            return getInputCell(parent);
        }
    }

// Helper function to munge the language name
var detectLanguage = (language) => {
    if (language.indexOf('python') > -1) {
        language = "python";
    }
    return language;
}
</script>
{% endif %}


================================================
FILE: _includes/mathjax.html
================================================
<!-- Allow inline math using $ and automatically break long math lines -->
<!-- (mostly) copied from nbconvert configuration -->
<!-- https://github.com/jupyter/nbconvert/blob/master/nbconvert/templates/html/mathjax.tpl -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true,
        processEnvironments: true
    },
    // Center justify equations in code and markdown cells. Elsewhere
    // we use CSS to left justify single line equations in code cells.
    displayAlign: 'center',
    "HTML-CSS": {
        styles: {'.MathJax_Display': {"margin": 0}},
        linebreaks: { automatic: true },
    },
    {% if site.number_equations %}
    // Number LaTeX-style equations
    "TeX": {
        equationNumbers: {
          autoNumber: "all"
        }
    }
    {% endif %}
});
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-MML-AM_CHTML-full,Safe' async></script>


================================================
FILE: _includes/metadata.json
================================================
{
  "@context": "http://schema.org",
  "@type": "NewsArticle",
  "mainEntityOfPage": "{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}",
  "headline": "{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}",
  "datePublished": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}",
  "dateModified": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}",
  "description": "{{ page.content | strip_html | strip_newlines | truncate: 160 }}",
  "author": {
    "@type": "Person",
    "name": "{{ site.author }}"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Data 100 at UC Berkeley",
    "logo": {
      "@type": "ImageObject",
      "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}",
      "width": 60,
      "height": 60
    }
  },
  "image": {
    "@type": "ImageObject",
    "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}",
    "height": 60,
    "width": 60
  }
}


================================================
FILE: _includes/page-nav.html
================================================
{% comment %}
Only the URLs from the TOC are used here. The title for
prev/next is pulled from the respective page's metadata.
We loop through the "build" collection to determine the
page title based on the *current* page's next/prev URL.
{% endcomment %}
<nav class="c-page__nav">
  {% if page.prev_page %}
    {% for build_page in site.build %}
      {% if build_page.url == page.prev_page.url %}
        {% assign prev_title = build_page.title %}
      {% endif %}
    {%- endfor %}
    {% if prev_title | size > 40 %}
      {% assign prev_title = prev_title | truncate: 37 %}
    {% endif %}

    <a id="js-page__nav__prev" class="c-page__nav__prev" href="{{ page.prev_page.url | relative_url }}">
      〈 <span class="u-margin-right-tiny"></span> {{ prev_title }}
    </a>
  {% endif %}

  {% if page.next_page %}
    {% for build_page in site.build %}
      {% if build_page.url == page.next_page.url %}
        {% assign next_title = build_page.title %}
      {% endif %}
    {%- endfor %}

    {% if next_title | size > 40 %}
      {% assign next_title = next_title | truncate: 37 %}
    {% endif %}
    <a id="js-page__nav__next" class="c-page__nav__next" href="{{ page.next_page.url | relative_url }}">
      {{ next_title }} <span class="u-margin-right-tiny"></span> 〉
    </a>
  {% endif %}
</nav>


================================================
FILE: _includes/qiskit_navbar.html
================================================

{% if site.data[page.locale] %}
    {% assign messages = site.data[page.locale].messages %}
{% else %}
    {% assign messages = site.data.messages %}
{% endif %}

<ul class="qiskit-navbar">
    <li class="left navbar__logo">
	    <a href="https://qiskit.org/">
	    <img src="/textbook/assets/images/logo_qiskit_purple_new.svg">
	    </a>
    </li>
    <li class="qiskit-navbar__icons"><a href="/textbook/search.html"><img src="/textbook/assets/images/search-solid-purple.svg"></a></li>
    <li><a href="https://qiskit.org/documentation/">{{ messages.nav_documentation }}</a></li>
    <li><a href="https://qiskit.org/events">{{ messages.nav_community }}</a></li>
    <li class="entry__active"><a href="https://qiskit.org/education">{{ messages.nav_learn }}</a></li>
    <li><a href="https://qiskit.org/overview">Overview</a></li>
 </ul>



================================================
FILE: _includes/search/lunr/lunr-en.js
================================================
var initQuery = function() {
  // See if we have a search box
  var searchInput = document.querySelector('input#lunr_search');
  if (searchInput === null) {
    return;
  }

  // Function to parse our lunr cache
  var idx = lunr(function () {
    this.field('title')
    this.field('excerpt')
    this.field('categories')
    this.field('tags')
    this.ref('id')

    this.pipeline.remove(lunr.trimmer)

    for (var item in store) {
      this.add({
        title: store[item].title,
        excerpt: store[item].excerpt,
        categories: store[item].categories,
        tags: store[item].tags,
        id: item
      })
    }
  });

  // Run search upon keyup
  searchInput.addEventListener('keyup', function () {
    var resultdiv = document.querySelector('#results');
    var query = document.querySelector("input#lunr_search").value.toLowerCase();
    var result =
      idx.query(function (q) {
        query.split(lunr.tokenizer.separator).forEach(function (term) {
          q.term(term, { boost: 100 })
          if(query.lastIndexOf(" ") != query.length-1){
            q.term(term, {  usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 })
          }
          if (term != ""){
            q.term(term, {  usePipeline: false, editDistance: 1, boost: 1 })
          }
        })
      });

      // Empty the results div
      while (resultdiv.firstChild) {
        resultdiv.removeChild(resultdiv.firstChild);
      }

    resultdiv.insertAdjacentHTML('afterbegin', '<p class="results__found">'+result.length+' Result(s) found</p>');
    for (var item in result) {
      var ref = result[item].ref;
      if(store[ref].teaser){
        var searchitem =
          '<div class="list__item">'+
            '<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">'+
              '<h2 class="archive__item-title" itemprop="headline">'+
                '<a href="'+store[ref].url+'" rel="permalink">'+store[ref].title+'</a>'+
              '</h2>'+
              '<div class="archive__item-teaser">'+
                '<img src="'+store[ref].teaser+'" alt="">'+
              '</div>'+
              '<p class="archive__item-excerpt" itemprop="description">'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...</p>'+
            '</article>'+
          '</div>';
      }
      else{
    	  var searchitem =
          '<div class="list__item">'+
            '<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">'+
              '<h2 class="archive__item-title" itemprop="headline">'+
                '<a href="'+store[ref].url+'" rel="permalink">'+store[ref].title+'</a>'+
              '</h2>'+
              '<p class="archive__item-excerpt" itemprop="description">'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...</p>'+
            '</article>'+
          '</div>';
      }
      resultdiv.insertAdjacentHTML('beforeend', searchitem);
    }
  });
};

// Fills in the search input with the query in the url
var prepopulateSearchInput = function () {
  var searchInput = document.getElementById('lunr_search');
  if (!searchInput) { return }

  var params = new URLSearchParams(window.location.search)
  var searchValue = params.get('search')
  if (!searchValue) { return }
  searchInput.value = searchValue.trim()
}

// Simulate a 'keyup' event to trigger a search
var triggerSearch = function () {
  var searchInput = document.getElementById('lunr_search');
  if (!searchInput || !searchInput.value.trim()) { return }

  searchInput.focus();
  var enterEvent = document.createEvent('Event');
  enterEvent.initEvent('keyup');
  searchInput.dispatchEvent(enterEvent);
}

initFunction(prepopulateSearchInput)

loadAsyncScript('https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.6/lunr.min.js')
.then(() => {
  initFunction(initQuery)
  initFunction(triggerSearch)
})
.catch((err) => console.error('Cannot load lunr search engine:', err))


================================================
FILE: _includes/search/lunr/lunr-store.js
================================================
var store = [
  {%- for c in site.collections -%}
    {%- if forloop.last -%}
      {%- assign l = true -%}
    {%- endif -%}
    {%- assign docs = c.docs | where_exp:'doc','doc.search != false' -%}
    {%- for doc in docs -%}
      {%- if doc.header.teaser -%}
        {%- capture teaser -%}{{ doc.header.teaser }}{%- endcapture -%}
      {%- else -%}
        {%- assign teaser = site.teaser -%}
      {%- endif -%}
      {
        "title": {{ doc.title | jsonify }},
        {% assign truncateWords=site.search_max_words_in_content %}
        "excerpt": {{ doc.search | jsonify }},
        "categories": {{ doc.categories | jsonify }},
        "tags": {{ doc.tags | jsonify }},
        "url": {{ doc.url | absolute_url | jsonify }},
        "teaser":
          {%- if teaser contains "://" -%}
            {{ teaser | jsonify }}
          {%- else -%}
            {{ teaser | absolute_url | jsonify }}
          {%- endif -%}
      }{%- unless forloop.last and l -%},{%- endunless -%}
    {%- endfor -%}
  {%- endfor -%}]


================================================
FILE: _includes/segment.html
================================================
<script>
(function () {
  'use strict'
  window._analytics = {
    segment_key: 'ffdYLviQze3kzomaINXNk6NwpY9LlXcw',
    coremetrics: false,
    optimizely: false,
    googleAddServices: false,
    fullStory: false,
    autoPageEventSpa: false,
    autoFormEvents: false,
    autoPageView: false
  }

  window.digitalData = {
    page: {
      pageInfo: {
        productTitle: 'IBM Q Experience',
        analytics: {
          category: 'Qiskit.org'
        }
      }
    }
  }

  loadAsyncScript('https://cloud.ibm.com/analytics/build/bluemix-analytics.min.js')
  .then(() => {
    if (!window.bluemixAnalytics || !window.digitalData) { return }

    const category = window.digitalData.page.pageInfo.analytics.category
    const productTitle = window.digitalData.page.pageInfo.productTitle
    const routeName = 'qiskit-textbook'

    window.bluemixAnalytics.pageEvent(category, routeName, {
      navigationType: 'pushState',
      productTitle: productTitle,
      title: document.title
    })
  })
  .catch((err) => {
    console.warn('Error loading Bluemix Analytics script:', err)
  })

  window.trackCta = (action) => {
    if (!window.bluemixAnalytics || !window.digitalData) { return }

    const category = window.digitalData.page.pageInfo.analytics.category
    const productTitle = window.digitalData.page.pageInfo.productTitle

    window.bluemixAnalytics.trackEvent('CTA Clicked', {
      productTitle,
      category,
      CTA: action
    })
  }

}());
</script>

================================================
FILE: _includes/sidebar.html
================================================
{% comment %}
Partial for the textbook sidebar. Renders each chapter and its sections from
_data/toc.yml .

Much of the logic here is to add active classes to the currently active
section. The currently active section / chapter should be highlighted in the
sidebar.

If a chapter or any of its sections are the current page, we should display the
chapter's sections. Otherwise, we hide the sections to keep the sidebar short.

We also prefix the sidebar entries with the chapter/section number. We assume
a 1-level nesting; we will label 1.2, but not 1.2.1.

Textbook numbering starts in Chapter 0.
{% endcomment %}

{% if page.locale %}
  {% assign page_locale = '/' | append: page.locale %}
{% else %}
  {% assign page_locale = '' %}
{% endif %}

{% assign chapter_num = 0 %}
{% if site.data[page.locale] %}
  {% assign messages = site.data[page.locale].messages %}
{% else %}
  {% assign messages = site.data.messages %}
{% endif %}

<nav id="js-sidebar" class="c-textbook__sidebar">
  <a href="/textbook{{ page_locale }}/preface.html"><h2 class="c-sidebar__title">{{ messages.sidebar_title }}</h2></a>
  <ul class="c-sidebar__chapters">
    {% if site.data[page.locale] %}
      {% assign toc_data = site.data[page.locale].toc %}
      {% assign locale_prefix = '/' | append: page.locale %}
    {% else %}
      {% assign toc_data = site.data.toc %}
      {% assign locale_prefix = '' %}
    {% endif %}
    {% for chapter in toc_data %}
      {% comment %}
      If the entry is a divider, render a divider and move to next entry.
      {% endcomment %}
      {% if chapter.divider %}
        <li class="c-sidebar__divider"></li>
        {% continue %}
      {% elsif chapter.header %}
        <li><h2 class="c-sidebar__title">{{ chapter.header }}</li>
        {% continue %}
      {% endif %}

      {% comment %}
      Find the title for this chapter
      {% endcomment %}
      {% assign chapter_url_html = chapter.url | append: '.html' %}
      {% for build_page in site.build %}
        {% if build_page.url == chapter_url_html %}
          {% assign chapter_title = build_page.title %}
        {% endif %}
      {%- endfor %}
      {% if chapter.external == true %}{% assign chapter_title = chapter.title  %}{% endif %}

      {% assign topUrl = chapter.url | relative_url %}
      {% unless chapter.external == true %}
        {% assign topUrl = topUrl | append: '.html'  %}
      {% endunless %}
      <li class="c-sidebar__chapter" data-url="{{ chapter.url }}">
        <a class="c-sidebar__entry"
          href="{{ topUrl }}"
        >
          {% unless chapter.not_numbered or site.number_toc_chapters != true %}
            {{ chapter_num }}.
          {% endunless %}
          {{ chapter_title }}
        </a>
      </li>

      {% comment %}
      Flags for whether we hide all inactive sections or sub-sections
      {% endcomment %}
      {% if site.collapse_inactive_chapters == true %}
        {% assign sectionsHideClass = " u-hidden-visually" %}
      {% else %}
        {% assign sectionsHideClass = "" %}
      {% endif %}

      {% if site.collapse_inactive_sections == true %}
        {% assign subSectionsHideClass = " u-hidden-visually" %}
      {% else %}
        {% assign subSectionsHideClass = "" %}
      {% endif %}

      {% comment %}Per-chapter overrides from TOC data{% endcomment %}
      {% if chapter.expand_sections == true %}
        {% assign sectionsHideClass = "" %}
      {% endif %}

      {% if chapter.sections %}
        {% comment %}
        By default, all sections are hidden. We show a chapter's sections
        if the chapter or any of its sections are the current page.
        {% endcomment %}

        {% assign section_num = 1 %}

        <ul class="c-sidebar__sections{{ sectionsHideClass }}">
          {% for section in chapter.sections %}
            {% comment %}Per-section overrides from TOC data{% endcomment %}
            {% if section.expand_subsections == true %}
              {% assign subSectionsHideClass = "" %}
            {% endif %}

            {% comment %}
            Find the title for this chapter
            {% endcomment %}
            {% assign section_url_html = section.url | append: '.html' %}
            {% for build_page in site.build %}
              {% if build_page.url == section_url_html %}
                {% assign section_title = build_page.title %}
              {% endif %}
            {%- endfor %}
            {% if section.external == true %}{% assign section_title = section.title  %}{% endif %}

            <li class="c-sidebar__section" data-url="{{ section.url }}">
              <a class="c-sidebar__entry"
                href="{{ section.url  | relative_url | append: '.html'}}"
              >
                {% unless chapter.not_numbered or section.not_numbered or site.number_toc_chapters != true %}
                  {{ chapter_num }}.{{ section_num }}
                {% endunless %}
                {{ section_title }}
              </a>
            </li>
            {% if section.subsections %}
              {% assign subsection_num = 1 %}
              <ul class='c-sidebar__subsections{{ subSectionsHideClass }}'>
              {% for subsection in section.subsections %}
                {% comment %}
                Find the title for this sub-section
                {% endcomment %}
                {% assign subsection_url_html = subsection.url | append: '.html' %}
                {% for build_page in site.build %}
                  {% if build_page.url == subsection_url_html %}
                    {% assign subsection_title = build_page.title %}
                  {% endif %}
                {%- endfor %}
                {% if subsection.external == true %}{% assign subsection_title = subsection.title  %}{% endif %}
                <li class="c-sidebar__subsection" data-url="{{ subsection.url }}">
                  <a class="c-sidebar__entry"
                    href="{{ subsection.url | relative_url | append: '.html'}}"
                  >
                    {% unless chapter.not_numbered or section.not_numbered or subsection.not_numbered or site.number_toc_chapters != true %}
                      {{ chapter_num }}.{{ section_num }}.{{ subsection_num }}
                      {% assign subsection_num = subsection_num | plus: 1 %}
                    {% endunless %}
                    {{ subsection_title }}
                  </a>
                </li>
              {% endfor %}
              </ul>
            {% endif %}
            {% unless chapter.not_numbered or section.not_numbered %}
              {% assign section_num = section_num | plus: 1 %}
            {% endunless %}
          {% endfor %}
        </ul>
      {% endif %}

      {% unless chapter.not_numbered %}
        {% assign chapter_num = chapter_num | plus: 1 %}
      {% endunless %}
    {% endfor %}
  </ul>
  <div class="sidebar_footer">
    <!-- {{ site.sidebar_footer_text }} -->
    
    <div class="language_switcher">
      <select name="preferred_language" onchange="changeLocale('{{ page.locale }}', this.value)">
        <option value="en" {% if page.locale == "" || page.locale == "en" %}selected{% endif %}>English</option>
        <option value="ja" {% if page.locale == "ja" %}selected{% endif %}>Japanese</option>
      </select>
    </div>

  </div>
</nav>


================================================
FILE: _includes/topbar.html
================================================
{% if site.data[page.locale] %}
{% assign messages = site.data[page.locale].messages %}
{% else %}
{% assign messages = site.data.messages %}
{% endif %}

<div class="c-topbar" id="top-navbar">
  <!-- We show the sidebar by default so we use .is-active -->
  <!-- Empty sidebar placeholder that we'll auto-fill with javascript -->
  <aside class="hamburger__left">
    <span id="js-sidebar-toggle" class="hamburger is-active">
	    <img class="sidebar_closed_img" src="/textbook/assets/images/rightarrow_purple.svg" title="Show Contents">
	    <img class="sidebar_open_img" src="/textbook/assets/images/leftarrow_purple.svg" title="Hide Contents">
    </span>
  </aside>
  {% if page.id contains "preface" %}
  <aside class="sidebar__right preface">
  {% else %}
  <aside class="sidebar__right">
  {% endif %}
    <!-- Search form -->
    <header>
      <form action="{{ '/search.html' | relative_url }}" method="GET">
        <button type="submit" id="submit">
          <img src="{{ site.images_url | relative_url }}/search-solid.svg" alt="Search">
        </button>
        <input type="text" id="siderbar-search-input" name="search">
      </form>
    </header>

    {% unless page.id contains "preface" %}
    <div class="onthispage__title">{{ messages.on_this_page }}</div>
    <nav class="onthispage">
    </nav>
    <!-- Chapter formats -->
    <div>
      {% unless page.title == "What is Quantum?" %}
      <a
        href="https://quantum-computing.ibm.com/jupyter/user/qiskit-textbook/{{ page.interact_link }}"
        target="_blank"
        rel="noopener"
	onclick="window.trackCta('Open in IBM Quantum Experience')"
      >
      <button class="interact-button">{{ messages.open_quantum }}</button>
      </a>
    </div>
    <div>
      <a
        href="{{ '/' | append: page.interact_link | relative_url }}"
        rel="noopener"
        class="download__link"
      >
        {{ messages.download_notebook }}
        <img src="{{ site.images_url | relative_url }}/download-solid.svg" class="download-button">
      </a>
    </div>
   <div>
      <a
	href="https://github.com/qiskit-community/qiskit-textbook/tree/main/{{ page.interact_link }}"
	class="download__link"
      >
      {{ messages.contribute_github }}
      <img src="{{ site.images_url | relative_url }}/launch.svg" class="download-button">
      </a>
    </div>
     <div>
      <a
	href="https://qiskit.org/textbook-beta"
	class="download__link"
      >
      {{ messages.beta_testing }}
      <img src="{{ site.images_url | relative_url }}/launch.svg" class="download-button">
      </a>
    </div>
    {% endunless %}
  {% endunless %}
  </aside>
  <!--
  <a href="{{ '/search.html' | relative_url }}" class="topbar-right-button" id="search-button">
    <img src="{{ site.images_url | relative_url }}/search-solid.svg" alt="Search" />
  </a>
  -->
</div>


================================================
FILE: _layouts/default.html
================================================
<!DOCTYPE html>

{% if page.locale %}
  {% assign page_locale = page.locale %}
{% else %}
  {% assign page_locale = 'en' %}
{% endif %}

<html lang="{{ page_locale }}">
  {% include head.html %}
  <body>
    <!-- Include the ThebeLab config so it gets reloaded on each page -->
    {% include js/thebelab-page-config.html %}
    <!-- .js-show-sidebar shows sidebar by default -->
    <div id="js-textbook" class="c-textbook {% if site.show_sidebar %}js-show-sidebar{% endif %}">
    <div id="qiskit-navbar" class="qiskit__navbar">
    {% include qiskit_navbar.html %}
    </div>

      {% include sidebar.html %}
      {% if page.search_page != true %}
      {% endif %}
      {% include topbar.html %}
      <main class="c-textbook__page" tabindex="-1">
            {% include banner.html %}
            <div class="c-textbook__content" id="textbook_content">
              {{ content }}
            </div>
            <div class="c-textbook__footer" id="textbook_footer">
              {% include page-nav.html %}
              {% include footer.html %}
            </div>

        </div>
      </main>
    </div>
  </body>
</html>


================================================
FILE: _sass/components/_components.book__layout.scss
================================================
/**
 * The website contains two main components: the sidebar and the textbook page.
 * This file specifies the layout and includes classes to show/hide the sidebar
 * on small screens.
 *
 * The actual styling for the sidebar and page are located in their respective
 * component SCSS files. This file manages the layout and width only.
 *
 * By default, the sidebar is not visible.
 *
 * [1]: The entire page is positioned relative so that when the page overflows
 *   (e.g. sidebar open on small screens) the user can't scroll left/right.
 * [2]: The sidebar and the textbook page are positioned absolute so that we
 *   can use translate() on the textbook page to reveal the sidebar.
 * [3]: Setting the background color hides the sidebar when it's behind the
 *   page (otherwise the page is transparent).
 *
 * When the sidebar is visible:
 *
 * [4]: Shift the textbook page over to the left. On small screens, the page
 *   will overflow since the sidebar takes up most of the screen.
 * [5]: On larger screens, the page and sidebar have enough room to read them
 *   simultaneously, so make sure that the page doesn't overflow.
 */

$left-sidebar-width: 340px;
$page-max-width: 1600px;
$right-sidebar-width: 330px;
$topbar-height: 60px;

.c-textbook {
  /* [1] */
  position: relative;
  height: 100vh;
  overflow: hidden;
  margin: 0 0 0 auto;
  top: 0;
}

div.qiskit__navbar {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	z-index: 999;
}

.c-topbar {
  background-color: transparent;
  position: fixed;
  top: $qiskit-navbar-height + $textbook-banner-height;
  height: 0;
  width: 100%;
  left: 0;
  padding: $spacing-unit-small $spacing-unit-small 0 $spacing-unit-med * 2;
  z-index: 1;
  transition: top 250ms, transform 250ms ease; // For animations
}

@include mq($until: tablet) {
  .c-topbar.hidetop {
    // At desktop, we stop hiding the navbar
    top: -250px;
  }
}

.c-textbook__sidebar,
.c-textbook__page {
  /* [2] */
  height: 100vh;
  overflow: auto;
  position: fixed;
  top: $qiskit-navbar-height;
  background-color: $book-background-color; /* [3] */
}

.c-textbook__sidebar {
  width: $left-sidebar-width;
  top: $qiskit-navbar-height;
  left: 0;
  background-color: $color-dark-gray;
  direction: rtl;

  @include mq($until: $left-sidebar-width + $spacing-unit-small * 5) {
    width: calc(100vw - #{$spacing-unit-small * 5});
  }

  .c-sidebar__chapters {
    padding-bottom: 125px;
  }
}

@include mq($until: 400px) {
	.c-topbar {
		top: $qiskit-navbar-height + $textbook-banner-height * 2;
	}
}

.c-sidebar__chapters {
	direction: ltr;
}

.c-textbook__page {

  width: $textbook-page-width;
  transition: transform 250ms ease;
  left: 0;
  padding: 0 $spacing-unit $spacing-unit-small $spacing-unit-small * 5;
  overflow-x: visible;

  &:focus {
    /* [2] */
    outline: none;
  }
}

.sidebar__right {
  // By default we hide the sidebar
  display: none;

  // Spacing for the sidebar
  width: $right-sidebar-width - $spacing-unit-small; // To account for the small margin on the right
  position: relative;
  float: right;
  z-index: 1; // Keep sidebar under page content
  padding: 0.5em;


  @include mq($from: tablet) {
    // Show right TOC at laptop size
    display: block;
  }
}

.js-show-sidebar {
  .c-textbook__page, .c-topbar {
    /* [4] */
    transform: translate($left-sidebar-width, 0);

    @include mq($until: $left-sidebar-width + $spacing-unit-small * 5) {
      transform: translateX(100vw) translateX(-$spacing-unit-small * 5);
    }

    @include mq($from: tablet) {
      /* [5] */
      width: calc(100% - #{$left-sidebar-width});
    }
  }
}

.c-textbook__content {
  clear: both;
  padding-top: 60px;
  width: 95%;
}

.c-textbook__content, .c-textbook__footer {
  max-width: $page-max-width;
}

.c-textbook__footer {
	padding-bottom: $qiskit-navbar-height;
}

.c-page__nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 30px;
}

// Make sure that the bottom content has the same width as non-sidebar content
.footer, .c-page__nav {
  @include mq($from: laptop) {
    width: $textbook-page-with-sidebar-width;
  }
}

// Scrollbar width
::-webkit-scrollbar {
  width: 5px;
  background: #f1f1f1;
}

::-webkit-scrollbar-thumb {
  background: #c1c1c1;
}

main, nav {
  scrollbar-width: thin;
}


================================================
FILE: _sass/components/_components.book__topbar.scss
================================================
.c-topbar__label {
  @include inuit-font-size(12px);
  display: inline-block;
  margin-left: $spacing-unit-tiny;
  vertical-align: middle;
  text-transform: uppercase;
}

.c-topbar {
  .hamburger, .buttons {
    float: left;
  }

  #js-sidebar-toggle {
    margin-right: 5px;
    padding-top: 4px;
  }

  span.hamburger {
    cursor: pointer;
    margin-left: -($spacing-unit-tiny + 6px);
    margin-top: -4px;
  }

  .c-topbar__buttons {
    @include mq($from: tablet) {
      width: calc(100% - #{$right-sidebar-width} - 20px)
    }
  }

  .topbar-right-button {
    display: block;
    float: right;
    padding: 0 1rem;

    img {
      width: 20px;
      margin-top: 4px;
    }
  }
}

// Download buttons

.download-buttons {
  display: none;
  position: absolute;

  button {
    min-width: 100px !important;
    border: 1px solid #212121;
    border-radius: 0 !important;
    margin-top: 4px;
    margin-left: 0px;
  }
}

.download-buttons-dropdown {
  position: relative;
  display: inline-block;

  &:hover div.download-buttons {
    display: block;
  }

  img {
    height: 18px;
  }
}


================================================
FILE: _sass/components/_components.images.scss
================================================
svg {
  width: 100%;
  height: auto;
}

================================================
FILE: _sass/components/_components.interact-button.scss
================================================
/**
 * Stylings for Interact and Show Widget buttons.
 *
 * [1]: We abuse CSS selector specificity here since the buttons at the top of
 *   the notebook might have both .interact-button and .js=nbinteract-widget.
 * [2]: We want the top buttons to be large.
 * [3]: However, a .js=nbinteract-widget appearing alone midway through the
 *   notebook should be small.
 *
 */

$color-interact-button: #6929C4 !default;

%interact-button {
  @include inuit-font-size(14px);
  background-color: white;
  border: 1px solid $color-interact-button;
  color:  $color-interact-button;
  cursor: pointer;
  display: inline-block;
  font-weight: 700;
  /* [2] */
  padding: $spacing-unit-tiny $spacing-unit-med;
  text-decoration: none;

  &:hover {
	  background-color: $color-interact-button;
	  color: white;
  }
  &:focus {
    text-decoration: none;
  }
}

.interact-button-logo {
  height: 1.35em;
  padding-right: 10px;
  margin-left: -5px;
}

.buttons {
  margin-bottom: $spacing-unit;

  /* [1] */
  .interact-button {
    @extend %interact-button;
  }
}

.js-nbinteract-widget {
  @extend %interact-button;

  /* [3] */
  padding: $spacing-unit-tiny $spacing-unit;
  margin-bottom: $spacing-unit-small;
}

// If the interact button link is changed with a REST param
div.interact-context {
  display: inline;
  padding-left: 1em;
}


================================================
FILE: _sass/components/_components.iqx.scss
================================================
.uses-hardware-notice {
        background-color: white;
        border: 1px solid #ccc;
        margin-bottom: 0;
        padding: .4em .6em;
}


================================================
FILE: _sass/components/_components.page__banner.scss
================================================
.page__banner {
    background-color: $background-color-accent;
    color: #FFFFFF;
    height: $textbook-banner-height;
    font-size: 14px;
    letter-spacing: 0.16px;
    line-height: 20px;
    margin-left: -($spacing-unit-small * 5);
    padding-left: $spacing-unit;
    padding-top: 7px;
    position: relative;
    width: calc(100% + #{$spacing-unit + $spacing-unit-small * 5});

    a {
        &:visited,
        &:active,
        &:hover {
            color: #FFFFFF;
        }

        color: #FFFFFF;
        text-decoration: underline;
    }
}

@include mq($until: 400px) {
	.page__banner {
		height: $textbook-banner-height-mobile;
	}
}


================================================
FILE: _sass/components/_components.page__footer.scss
================================================
.footer {
    text-align: center;
    font-size: 14px;
    padding: 20px;
    opacity: 0.7;
    margin-bottom: 0px;
}


================================================
FILE: _sass/components/_components.page__nav.scss
================================================
/**
 * Styling for the Next Page / Previous Page links at the bottom of textbook
 * pages.
 */

$color-nav-links: $color-buttons;

.c-page__nav__prev,
.c-page__nav__next {
  flex: 1;
  max-width: 380px;
  margin: auto;
  color: $color-nav-links;
  border: 1px solid $color-nav-links;
  padding: $spacing-unit-small 0;
  &:hover {
	  text-decoration: none;
  }
}

.c-page__nav__next {
  text-align: right;
  background-color: $color-nav-links;
  color: white !important;
}


================================================
FILE: _sass/components/_components.page__onthispage.scss
================================================
/**
 * Styling for the onthispage elements.
 *
 * [1]: The sidebar is implemented as ul and li elements so we need to remove
 *   the bullets and margins. Also make chapter fonts a bit bigger.
 * [2]: The entries are <a> tags so we need to remove the default styling.
 * [3]: The sidebar divider is just an empty element with a border.
 * [4]: The current section needs a higher specificity to override the :hover
 *   selectors used previously.
 * [5]: The logo displayed above the sidebar
 * [6]: The footer at the bottom of the sidebar
 */
$color-sidebar-bg: $color-dark-gray !default;
$color-sidebar-entry: #121619 !default;
$color-sidebar-entry--active: $color-links;
$color-sidebar-divider: #121619 !default;

.c-textbook__sidebar {
  background-color: $color-sidebar-bg;
  padding: $spacing-unit-small $spacing-unit;
  scrollbar-color: $color-dark-gray $color-dark-gray;
  transition: scrollbar-color 0.2s ease-in-out;
  @include inuit-font-size(14px);
  border-right: 1px solid rgba(0, 0, 0, 0.07);

  &:hover {
  	scrollbar-color: #B3B3B3 $color-dark-gray;
  }
}

/* [1] */
.c-sidebar__chapters {
  list-style: none;
  margin-left: 0;
  margin-bottom: 0;
}

li.c-sidebar__chapter > a {
  font-size: 1.1em;
  font-weight: bold;
}

/* [1] */
.c-sidebar__sections, .c-sidebar__subsections {
  list-style: none;
  margin-bottom: 0;
}

.c-sidebar__sections {
  margin-left: $spacing-unit-small;
  margin-bottom: 12px;
}

.c-sidebar__subsections {
  margin-left: 20px;
}

/* [2] */
.c-sidebar__entry {
  display: block;

  padding: $spacing-unit-tiny/2;

  color: $color-sidebar-entry;
  text-decoration: none;

  &:hover {
    text-decoration: underline;
  }

  &:visited {
    color: $color-sidebar-entry;
  }
}

/* [4] */
.c-sidebar__entry--active.c-sidebar__entry--active {
  color: $color-sidebar-entry--active;
}

/* [3] */
.c-sidebar__divider {
  border-top: 1px solid $color-sidebar-divider;
  margin: $spacing-unit-tiny;
}

/* [5] */
img.textbook_logo {
  margin-top: 20px;
  max-height: 100px;
  margin: 0px auto 20px auto;
  display: block;
}

/* [6] */
div.sidebar_footer {
  text-align: center;
  padding: 10px 20px 0px 0px;
  font-size: .9em;
}


================================================
FILE: _sass/components/_components.qiskit__navbar.scss
================================================
div.qiskit__navbar {
        height: $qiskit-navbar-height;
	background-color: white;
	border-bottom: 1px solid rgba(0,0,0,0.07);
	font-size: 1em;
	li > a {
		color: #393939;
	}
	li.entry__active > a {
		color: #6929c4;
	}

	ul{
		padding: 0px;
		padding-right: 30px;
	}
	li {
        	display: block;
        	float: right;
		margin-right: 32px;
		padding-top: 18px;
		&.left {
        		float: left;
			font-size: 18px;
			margin-left: 0px;
			margin-right: 8px;
			padding-top: 14px;
			&.navbar__logo {
				padding-top: 15px;
				width: 4.2em;
				margin-left: 10px;
			}
		}
		&.qiskit-navbar__icons {
			display: none;
			cursor: pointer;
		}
	}
}

@media only screen and (max-width: 1250px) {
	div.qiskit__navbar li {
		&.qiskit-navbar__icons {
			display: block;
		}
	}
}
@media only screen and (max-width: 525px) {
	div.qiskit__navbar li {
		display: none;
		margin-right: 0px;
		margin-left: 24px;
		&.left{
			display: block;
		}
	}
}


================================================
FILE: _sass/components/_components.search.scss
================================================
/* ==========================================================================
   SEARCH
   ========================================================================== */
  // Taken from https://github.com/mmistakes/minimal-mistakes
  //  Variables
  $large: 1024px !default;
  $x-large: 1280px !default;
  $type-size-1: 2.441em !default;
  $type-size-2: 1.953em !default;
  $type-size-3: 1.563em !default;
  $type-size-6: 0.75em !default;
  $intro-transition: intro 0.3s both !default;

  // Rules
  .layout--search {
    .archive__item-teaser {
      margin-bottom: 0.25em;
    }
  }

  .search__toggle {
    margin-left: 1rem;
    margin-right: 1rem;
    border: 0;
    outline: none;
    color: #393e46;
    background-color: transparent;
    cursor: pointer;
    -webkit-transition: 0.2s;
    transition: 0.2s;

    &:hover {
      color: #000;
    }
  }

  .search-icon {
    width: 100%;
    height: 100%;
  }

  .search-content {
    //display: none;
    //visibility: hidden;
    padding-top: 1em;
    padding-bottom: 1em;

    &__inner-wrap {
      width: 100%;
      margin-left: auto;
      margin-right: auto;
      padding-left: 1em;
      padding-right: 1em;
      -webkit-animation: $intro-transition;
      animation: $intro-transition;
      -webkit-animation-delay: 0.15s;
      animation-delay: 0.15s;

      .search-input {
        display: block;
        margin-bottom: 0;
        padding: 0;
        border: none;
        outline: none;
        box-shadow: none;
        background-color: transparent;
        font-size: $type-size-3;
        }
    }

    &.is--visible {
      display: block;
      visibility: visible;

      &::after {
        content: "";
        display: block;
      }
    }

    .results__found {
      margin-top: 0.5em;
      font-size: $type-size-6;
    }

    .archive__item {
      margin-bottom: 2em;
    }

    .archive__item-title {
      margin-top: 0;
    }

    .archive__item-excerpt {
      margin-bottom: 0;
    }
  }

================================================
FILE: _sass/components/_components.thebelab.scss
================================================

.thebelab-cell {
    // To ensure that thebelab cells are always the top of the Z-stack
    position: relative;
    z-index: 999;
    border: 1px solid #DDE1E6;
    background-color: #F2F4F8;
    border-radius: 0px;
    &:focus-within {
	border-color: $color-buttons;
    }
}

.thebelab-input {
	padding: 12px;
	padding-top: 14px;
}

.thebelab-button {
    z-index: 999;
    display: inline-block;
    padding: 6px 16px; 
    margin: 0;
    margin-right: 4px;
    box-sizing:  border-box;
    text-decoration: none;
    font-weight: 300;
    text-align: center;
    transition: all 0.2s;
    background-color: #DDE1E6;
    border: none;
    color: #121619;
}

.thebelab-button:hover{
    background-color: #21272A;
    color: white;
}

.thebelab-button:active{
	background-color: white;
	color: #121619;
}

.CodeMirror {
	font-family: "IBM Plex Mono";
	font-size: 0.9em;
}

div.jp-OutputArea-output {
    padding: 18px;
}

.jp-OutputArea-child {
	background-color: white;
	padding: 18px;
}


================================================
FILE: _sass/hamburgers/_base.scss
================================================
// Hamburger
// ==================================================
.hamburger {
  padding: $hamburger-padding-y $hamburger-padding-x;
  display: inline-block;
  cursor: pointer;

  transition-property: opacity, filter;
  transition-duration: $hamburger-hover-transition-duration;
  transition-timing-function: $hamburger-hover-transition-timing-function;

  // Normalize (<button>)
  font: inherit;
  color: inherit;
  text-transform: none;
  background-color: transparent;
  border: 0;
  margin: 0;
  overflow: visible;

  &:hover {
    @if $hamburger-hover-use-filter == true {
      filter: $hamburger-hover-filter;
    } @else {
      opacity: $hamburger-hover-opacity;
    }
  }
}

.hamburger-box {
  width: $hamburger-layer-width;
  height: $hamburger-layer-height * 3 + $hamburger-layer-spacing * 2;
  display: inline-block;
  position: relative;
  vertical-align: middle;
}

.hamburger-inner {
  display: block;
  top: 50%;
  margin-top: $hamburger-layer-height / -2;

  &,
  &::before,
  &::after {
    width: $hamburger-layer-width;
    height: $hamburger-layer-height;
    background-color: $hamburger-layer-color;
    border-radius: $hamburger-layer-border-radius;
    position: absolute;
    transition-property: transform;
    transition-duration: 0.15s;
    transition-timing-function: ease;
  }

  &::before,
  &::after {
    content: '';
    display: block;
  }

  &::before {
    top: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
  }

  &::after {
    bottom: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
  }
}


================================================
FILE: _sass/hamburgers/hamburgers.scss
================================================
@charset "UTF-8";
/*!
 * Hamburgers
 * @description Tasty CSS-animated hamburgers
 * @author Jonathan Suh @jonsuh
 * @site https://jonsuh.com/hamburgers
 * @link https://github.com/jonsuh/hamburgers
 */

// Settings
// ==================================================
$hamburger-padding-x: 15px !default;
$hamburger-padding-y: 15px !default;
$hamburger-layer-width: 40px !default;
$hamburger-layer-height: 4px !default;
$hamburger-layer-spacing: 6px !default;
$hamburger-layer-color: #000 !default;
$hamburger-layer-border-radius: 4px !default;
$hamburger-hover-opacity: 0.7 !default;
$hamburger-hover-transition-duration: 0.15s !default;
$hamburger-hover-transition-timing-function: linear !default;

// To use CSS filters as the hover effect instead of opacity,
// set $hamburger-hover-use-filter as true and
// change the value of $hamburger-hover-filter accordingly.
$hamburger-hover-use-filter: false !default;
$hamburger-hover-filter: opacity(50%) !default;

// Types (Remove or comment out what you don’t need)
// ==================================================
$hamburger-types: (
    3dx,
    3dx-r,
    3dy,
    3dy-r,
    3dxy,
    3dxy-r,
    arrow,
    arrow-r,
    arrowalt,
    arrowalt-r,
    arrowturn,
    arrowturn-r,
    boring,
    collapse,
    collapse-r,
    elastic,
    elastic-r,
    emphatic,
    emphatic-r,
    minus,
    slider,
    slider-r,
    spin,
    spin-r,
    spring,
    spring-r,
    stand,
    stand-r,
    squeeze,
    vortex,
    vortex-r
  )
  !default;

// Base Hamburger (We need this)
// ==================================================
@import 'base';

// Hamburger types
// ==================================================
// @import "types/3dx";
// @import "types/3dx-r";
// @import "types/3dy";
// @import "types/3dy-r";
// @import "types/3dxy";
// @import "types/3dxy-r";
// @import "types/arrow";
// @import "types/arrow-r";
@import 'types/arrowalt';
// @import "types/arrowalt-r";
// @import "types/arrowturn";
// @import "types/arrowturn-r";
// @import "types/boring";
// @import "types/collapse";
// @import "types/collapse-r";
// @import "types/elastic";
// @import "types/elastic-r";
// @import "types/emphatic";
// @import "types/emphatic-r";
// @import "types/minus";
// @import "types/slider";
// @import "types/slider-r";
// @import "types/spin";
// @import "types/spin-r";
// @import "types/spring";
// @import "types/spring-r";
// @import "types/stand";
// @import "types/stand-r";
// @import "types/squeeze";
// @import "types/vortex";
// @import "types/vortex-r";

// ==================================================
// Cooking up additional types:
//
// The Sass for each hamburger type should be nested
// inside an @if directive to check whether or not
// it exists in $hamburger-types so only the CSS for
// included types are generated.
//
// e.g. hamburgers/types/_new-type.scss
//
// @if index($hamburger-types, new-type) {
//   .hamburger--new-type {
//     ...
//   }
// }


================================================
FILE: _sass/hamburgers/types/_arrowalt.scss
================================================
@if index($hamburger-types, arrowalt) {
  /*
   * Arrow Alt
   */
  .hamburger--arrowalt {
    .hamburger-inner {
      &::before {
        transition: top 0.1s 0.1s ease,
                    transform 0.1s cubic-bezier(0.165, 0.84, 0.44, 1);
      }

      &::after {
        transition: bottom 0.1s 0.1s ease,
                    transform 0.1s cubic-bezier(0.165, 0.84, 0.44, 1);
      }
    }

    &.is-active {
      .hamburger-inner {
        &::before {
          top: 0;
          transform: translate3d($hamburger-layer-width * -0.2, $hamburger-layer-width * -0.25, 0) rotate(-45deg) scale(0.7, 1);
          transition: top 0.1s ease,
                      transform 0.1s 0.1s cubic-bezier(0.895, 0.03, 0.685, 0.22);
        }

        &::after {
          bottom: 0;
          transform: translate3d($hamburger-layer-width * -0.2, $hamburger-layer-width * 0.25, 0) rotate(45deg) scale(0.7, 1);
          transition: bottom 0.1s ease,
                      transform 0.1s 0.1s cubic-bezier(0.895, 0.03, 0.685, 0.22);
        }
      }
    }
  }
}


================================================
FILE: _sass/main.scss
================================================
/**
  Most of Jupyter Book's CSS is defined in the single-page CSS
  folder. This CSS adds some book-specific CSS rules on top of it.
 */

 // Base page CSS
@import 'page/main';

// OBJECTS (some of these override defaults)
$inuit-wrapper-width: 800px;
$hamburger-padding-x: 0;
$hamburger-padding-y: 8px;
$hamburger-layer-width: 20px;
$hamburger-layer-height: 3px;
$hamburger-layer-spacing: 3px;
$hamburger-layer-color: $color-text;
$hamburger-types: (arrowalt);
@import 'hamburgers/hamburgers';
@import 'objects/objects.thebelab-in-cell-button';

// COMPONENTS
@import 'components/components.book__layout';
@import 'components/components.book__topbar';
@import 'components/components.page__onthispage';
@import 'components/components.page__nav';
@import 'components/components.page__banner';
@import 'components/components.page__footer';
@import 'components/components.interact-button';
@import 'components/components.thebelab';
@import 'components/components.search';
@import 'components/components.iqx';
@import 'components/components.qiskit__navbar';

// FONTS
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&family=IBM+Plex+Sans&display=swap');


================================================
FILE: _sass/objects/_objects.thebelab-in-cell-button.scss
================================================
/* in-cell thebelab buttons */
.thebebtn {

  position: absolute;
  left: 0;
  bottom: 0;
  border: none;

  i {
    font-style: normal;
    color: #777777
  }
  
  button {
    background-color: #DDE1E6;
    border: none;
    padding: 6px 16px;
    cursor: pointer;
    font-size: 0.9rem;
    transition: background-color .2s linear, color .2s linear;
    &:hover {
	color: white;
	background-color: #21272A;
    }
    &:active {
	    background-color: white;
	    color: #121619;
    }
  }
}

.input_area .highlight {
  position: relative;
}

// Hide code buttons
div.jb_input div.input {
  position: relative;
}


================================================
FILE: _sass/page/components/_components.hidecells.scss
================================================
// Mixins and variables
@mixin transition($in) {
	transition:$in;
	-webkit-transition:$in;
	-moz-transition:$in;
	-o-transition:$in;
	-ms-transition:$in;
}

@mixin transform($in) {
	transform:$in;
	-webkit-transform:$in;
	-moz-transform:$in;
	-o-transform:$in;
	-ms-transform:$in;
}

$plusminus-height: 2.5px;
$plusminus-anim-length: .25s;

// All hidden elements
.hidden {
    visibility: hidden;
    opacity: 0;
    height: 10px;
    padding: 0px !important;
}

// Plusminus buttons
// Adapted from https://codepen.io/FluidOfInsanity/pen/EyQGgw

input[type="checkbox"] {
    display: none;
}

.plusminus {
    display: block;
    position: absolute;
    top: 9px;
    right: -30px;
    padding: .3em;

    width: 20px;
    height: 20px;
    background: #d4d4d4;
    border-radius: 25px;
    @include transition(0.25s);
}

div.cell:hover .plusminus {
    background: rgb(122, 130, 136);
    @include transition(0.25s);
}

.plusminus span {
    display: block;
    position: absolute;
    border-radius: 3px;
    background: #f2f2f2;
    @include transition(all $plusminus-anim-length ease);

    margin: 0% 15%;
    height: $plusminus-height;
    width: 70%;

    /*- half the width*/
    left: 0px;
    bottom:0px;
    right:0px;
    top: calc(50% - #{$plusminus-height} / 2);
}

input:checked ~ .plusminus span.pm_v {
    @include transform(rotate(-90deg));
}


================================================
FILE: _sass/page/components/_components.page.scss
================================================
/**
 * Styling for textbook pages. Jupyter notebooks generate their own HTML markup
 * which we style under the #ipython-notebook selector.
 *
 * Most of the textbook content is styled using this component.
 *
 * [1]: Within-textbook__page layout
 * [2]: Since we use JS to focus the page on load, hide the outline to avoid
 *   visual cruft.
 *
 * Notebook styling:
 *
 * [4]: Some tables are too wide for the page on smaller screens so we let the
 *   user scroll horizontally.
 * [5]: Inline code snippets (usually variable names) should have a gray bg.
 */

/**
 * [1] Within-textbook__page layout
*/

div.jb_cell {
  width: 100%;

  @include mq($from: laptop) {
    width: $textbook-page-with-sidebar-width;
  }

  // Add some empty space before headers for anchor links
  h1, h2, h3, h4, h5 {
    &:before {
      display: block;
      content: " ";
      margin-top: -80px;
      height: 80px;
      visibility: hidden;
      pointer-events: none;
    }
  }
}


#page-title {
  font-size: 3.3em;
  font-weight: lighter;
  line-height: 1em;
}

#page-author {
  font-size: 1.4em;
  font-style: italic;
  font-weight: lighter;
}

#page-info {
  margin-bottom: 20px;
  max-width: $textbook-page-with-sidebar-width;
}

// Right margin
div.jb_cell {
  &.tag_popout {
    .cell {
      border-left: 3px solid #c3c3c3;
      padding-left: 5%
    }

    // On laptops, pop out to the right instead of in-line
    @include mq($from: laptop) {
      z-index: 999;
      width: calc(100% - #{$textbook-page-with-sidebar-width});
      font-size: .8em;
      position: relative;
      float: right;
      padding-left: $spacing-unit-large * .8;
      clear: both;

      h1, h2, h3, h4, h5, h6 {
          margin: .5em 0px 0px 0px;
      }

      // This prevents *sequential* popouts from creating a bunch of white-space when stacked
      & + div.tag_popout {
        height: 0px;
      }

      // Remove the border when we pop-out to the right
      .cell {
        border-left: none;
        padding-left: 0;
      }
    }
  }

  &.tag_full_width {
      width: 100%;
      div.input {
          // Input sections of cells should stay the same width, only outputs are wide
          width: 70%;
      }

    img {
      max-width: 100%;
    }
  }
    
  &.tag_output_scroll div.output_wrapper {
      max-height: 24em;
      overflow-y: auto;
  }
}



/**
 * Jupyter notebook styling
 */

div.highlighter-rouge {
  // Ensures that items within this div can be positioned absolutely
  position: relative;
}

div.inner_cell > div > div > pre,
div.inner_cell > div > pre
div.output_wrapper pre {
  background-color: $color-code-cell;
  border: 1px solid $color-code-cell-border;
  font-size: 0.9em;
  padding: $spacing-unit-med;
  padding-bottom: 2.5*$spacing-unit-med;
  overflow-x: auto;
}

// If we've got intentionally non-highlighted markup, make sure that the lines wrap
pre code.language-no-highlight {
  white-space: pre-wrap;
}

div.output_wrapper {
  position: relative;
  margin: $spacing-unit-med;
  margin-bottom: $spacing-unit-large;
}

div.output_wrapper pre {
  border: None !important;
  background-color: white !important;
  font-size: 0.9em;
}

.output_html {
  /* [4] */
  overflow-x: auto;
}

/* [5] */
code {
  padding: 1px;
  background: white;
  font-size: 0.9em;
}

pre > code {
    padding: 0px;
}

pre.highlight code {
  display: block;
}

h1, h2, h3, h4, h5, h6 {
  code {
    font-size: inherit;
  }
}

/* Outputs */
.output_stream,
.output_data_text,
.output_traceback_line {
  margin-left: 2% !important;
  border: none !important;
  border-radius: 4px !important;
  background-color: #fafafa !important;
  box-shadow: none !important;
}

.output_stream:before,
.output_data_text:before,
.output_traceback_line:before {
  content: none !important;
}

.output_text pre {
  background-color: #f8f8fb !important;
}

.output_html,
.output_png::before {
  padding: 1em 1.5em !important;
}

// Images that are on their own should be centered
// For text cells, only apply to images that are in their own <p>
.output_png img,
div.text_cell_render > p > img,
div.text_cell_render > p > a > img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}


.hl-ipython3 pre::before,
.output_subarea pre::before,
.output_html::before,
.output_png::before {
  color: #ccc !important;
  float: left !important;
  margin-bottom: 0.25em !important;
  width: 100% !important;
}

/**
  * nbinteract styling
  */
.cell.nbinteract-left {
  width: 50%;
  float: left;
}

.cell.nbinteract-right {
  width: 50%;
  float: right;
}

.cell.nbinteract-hide_in > .input {
  display: none;
}

.cell.nbinteract-hide_out > .output_wrapper {
  display: none;
}

.cell:after {
  content: '';
  display: table;
  clear: both;
}

div.output_subarea {
  max-width: initial;
}

.jp-OutputPrompt {
  display: none;
}

// Quotation cells

// Default
blockquote {
  margin: $spacing-unit-small;
  border-left: 4px solid $color-dark-gray;
  padding: $spacing-unit-tiny $spacing-unit-med;

  p {
    margin-bottom: $spacing-unit-small;
  }

  ul, ol {
    margin-bottom: $spacing-unit-tiny;
  }

  // This should only trigger if the last child of a blockquote is an ul/ol
  > :last-child li {
    text-align: right;
    list-style-type: none;
    margin: none;
    padding-right: 5%;

    &:before {
      content: "—";
      padding-right: 10px;
    }
  }
}

// Epigraph adds new styling
div.jb_cell.tag_epigraph blockquote {

  font-style: italic;
  font-size: 1.2em;
  width: 90%;
  margin-left: auto;
  margin-right: auto;
  border-left: none;

  ul {
    font-style: normal;
  }
}

// MathJax blocks

.MathJax_Display {
  padding: 20px 0px;
}


================================================
FILE: _sass/page/components/_components.sidebar-right.scss
================================================
/**
 * Styling for within-page navigation.
 *
 * [1]: When the screen is large enough to hold the sidebar, place the sidebar
 *   offset a bit off the right side of the screen.
 *
 * [2]: When the screen is large enough that the page content itself starts
 *   having margins, use a semi-hack to position the sidebar just the right
 *   offset from the center of the screen to be in the correct spot. We're
 *   aiming to have the sidebar positioned just to the right of the page
 *   content which means we take the page width without the sidebar, divide it
 *   by 2, and add padding.
 */

/* [2] */
.sidebar__right > * {
    direction: ltr;
}

aside.sidebar__right {
    padding-bottom: 0.75em;
    // Positioning
    overflow-x: hidden;
    background-color: $book-background-color;
    overflow-y: auto;
    max-height: 90vh; // Required for scrolling to work properly
    scrollbar-width: thin;
    direction: rtl;

    // Font and look
    color: #7a8288;
    border-left: 1px solid $divider-color;

    div.onthispage__title {
	font-size: 0.9em;
	padding-left: 0.5em;
	padding-bottom: 0;
	display: none;
    }

    // Icon
    img {
        width: 15px;
        padding-bottom: 2px;
    }

    // Show/hide navbar underneath
    nav {
        transition: opacity .25s ease-in-out, height .25s ease-in-out;
        -moz-transition: opacity .25s ease-in-out, height .25s ease-in-out;
        -webkit-transition: opacity .25s ease-in-out, height .25s ease-in-out;
        overflow-y: hidden;
        opacity: 0;
        height: 0px;

        @include mq($from: desktop) {
            opacity: 100;
            height: auto;
        }

        @media only screen and (min-width: 1050px) {
            &.no_sidebar_content {
              opacity: 100;
              height: auto;
            }
        }
    }

    &:hover nav {
        opacity: 100;
        height: auto;
    }
}


h4.nav__title {
    color: #7a8288;
    margin: 0;
    padding: 0.5rem 1rem;
    font-size: 0.8em;
}

ul.toc__menu {
    margin: 0;
    padding: 0;
    width: 100%;
    list-style: none;
    font-size: 1rem;
}

ul.toc__menu a {
    display: block;
    padding: 0 .5rem;
    color: #4D5358;
    font-size: 0.8em;
    line-height: 1.5;
}

.toc__menu ul {
    margin-left: 0px;
}

.toc__menu li ul {
    li {
        list-style-type: none;
        padding-left: 18px;
    }

    a {
        font-weight: normal;
        padding: 0 .5rem;
    }
}

aside.sidebar__right div {
	display: block;
	margin: 0px;
	padding-bottom: 0.25em
}

aside.sidebar__right button.interact-button {
	color: white;
	background-color: $color-buttons;
	border: 1px solid $color-buttons;
	padding: 14px;
	padding-left: 16px;
	text-align: left;
	width: 90%;
	font-size: 0.9rem;
	margin-top: 1.5rem;
	margin-bottom: 0.8rem;
	margin-left: 8px;
	cursor: pointer;
}

aside.sidebar__right a.download__link {
	font-size: 0.8rem;
	color: $color-buttons;
	margin-left: 10px;
	img {
		margin-left: 6px;
		height: 1rem;
	}
}

aside.sidebar__right header {
	margin-bottom: 0.5rem;
	text-align: left;
	width: 90%;
	margin-right: 10%;

	& form {
		padding: 0 0.4rem 0.6rem;
		border-bottom: solid 1px #4D5358;
	}

	& input {
		width: 80%;
		margin-left: 2px;
		margin-top: 5px;
		font-family: "IBM Plex Sans","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;
		font-size: 1rem;
		border: none;
		color: #4D5358;
	}

	& button {
		border: none;
		background-color: white;
		padding: 0;
	}

	h2 {
		display: none;
		margin-top: 0px;
		font-size: 14px;
	}
}

@media only screen and (max-width: 1310px) {
	aside.sidebar__right {
		header form {
			display: none;
		}

		button {
			display: none;
		}

		a.download__link {
			display: none;
		}

		header h2 {
			display: block;
		}
		div.onthispage__title {
			display: block;
		}
	}
}

@media only screen and (max-width: 1310px) {
	aside.sidebar__right {
		border-bottom: 1px solid $divider-color;
		opacity: 90%;
		width: 200px;
		padding-bottom: 0;
		&:hover{
			opacity: 100%;
		}
		header {
			margin-bottom: 0;
			border-bottom: none;
		}
	}
}

// Active sidebar entries
nav.onthispage li.active a {
    color: $color-buttons;
    font-weight: bold;
}

li.active {
    border-left: 1px solid #0077d8;
    margin-left: -1px;
}


================================================
FILE: _sass/page/elements/_elements.links.scss
================================================
/**
 * Styling for links
 */

a,
a:visited {
  color: $color-links;
  text-decoration: none;
}

// Anchor links
// Uncomment this after https://github.com/jupyter/nbconvert/pull/1101 is released
// main.jupyter-page {
//   a.anchor-link {
//     visibility: hidden;
//     font-size: 15px;
//     padding-left: 5px;

//     i {
//       font-style: normal;
//     }
//   }

//   h2, h3, h4, h5 {
//     &:hover a.anchor-link {
//       visibility: visible;
//     }
//   }
// }

================================================
FILE: _sass/page/elements/_elements.syntax-highlighting.scss
================================================
/**
 * Syntax highlighting for code cells
 */

pre.highlight {
    overflow-x: auto;
    padding: .5em;
}
.highlight {

    .c     { color: #998; font-style: italic } // Comment
    .err   { color: #a61717; background-color: #e3d2d2 } // Error
    .k     { font-weight: bold } // Keyword
    .o     { font-weight: bold } // Operator
    .cm    { color: #998; font-style: italic } // Comment.Multiline
    .cp    { color: #999; font-weight: bold } // Comment.Preproc
    .c1    { color: #998; font-style: italic } // Comment.Single
    .cs    { color: #999; font-weight: bold; font-style: italic } // Comment.Special
    .gd    { color: #000; background-color: #fdd } // Generic.Deleted
    .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
    .ge    { font-style: italic } // Generic.Emph
    .gr    { color: #a00 } // Generic.Error
    .gh    { color: #999 } // Generic.Heading
    .gi    { color: #000; background-color: #dfd } // Generic.Inserted
    .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
    .go    { color: #888 } // Generic.Output
    .gp    { color: #555 } // Generic.Prompt
    .gs    { font-weight: bold } // Generic.Strong
    .gu    { color: #aaa } // Generic.Subheading
    .gt    { color: #a00 } // Generic.Traceback
    .kc    { font-weight: bold } // Keyword.Constant
    .kd    { font-weight: bold } // Keyword.Declaration
    .kp    { font-weight: bold } // Keyword.Pseudo
    .kr    { font-weight: bold } // Keyword.Reserved
    .kt    { color: #458; font-weight: bold } // Keyword.Type
    .m     { color: #0000DD } // Literal.Number
    .s     { color: #d14 } // Literal.String
    .na    { color: #008080 } // Name.Attribute
    .nb    { color: #0086B3 } // Name.Builtin
    .nc    { color: #458; font-weight: bold } // Name.Class
    .no    { color: #008080 } // Name.Constant
    .ni    { color: #800080 } // Name.Entity
    .ne    { color: #900; font-weight: bold } // Name.Exception
    .nf    { color: #900; font-weight: bold } // Name.Function
    .nn    { color: #555 } // Name.Namespace
    .nt    { color: #000080 } // Name.Tag
    .nv    { color: #008080 } // Name.Variable
    .ow    { font-weight: bold } // Operator.Word
    .w     { color: #bbb } // Text.Whitespace
    .mf    { color: #0000DD } // Literal.Number.Float
    .mh    { color: #0000DD } // Literal.Number.Hex
    .mi    { color: #0000DD } // Literal.Number.Integer
    .mo    { color: #0000DD } // Literal.Number.Oct
    .sb    { color: #d14 } // Literal.String.Backtick
    .sc    { color: #d14 } // Literal.String.Char
    .sd    { color: #d14 } // Literal.String.Doc
    .s2    { color: #d14 } // Literal.String.Double
    .se    { color: #d14 } // Literal.String.Escape
    .sh    { color: #d14 } // Literal.String.Heredoc
    .si    { color: #d14 } // Literal.String.Interpol
    .sx    { color: #d14 } // Literal.String.Other
    .sr    { color: #009926 } // Literal.String.Regex
    .s1    { color: #d14 } // Literal.String.Single
    .ss    { color: #990073 } // Literal.String.Symbol
    .bp    { color: #999 } // Name.Builtin.Pseudo
    .vc    { color: #008080 } // Name.Variable.Class
    .vg    { color: #008080 } // Name.Variable.Global
    .vi    { color: #008080 } // Name.Variable.Instance
    .il    { color: #0000DD } // Literal.Number.Integer.Long
}

/* ANSI coloring for text_regex.ipynb */
.ansi-bold {
    font-weight: bold;
}

.ansi-yellow-bg {
    background-color: #DDB62B;
}

.ansi-black-intense-fg {
    color: #282C36;
}


================================================
FILE: _sass/page/elements/_elements.tables.scss
================================================
/**
 * Styling for tables. In the textbook, almost all tables display the contents
 * of a pandas DataFrame.
 *
 * [1]: Some tables are very small, so we shouldn't force them to be full-width
 * [2]: Add striping to table rows to make them easier to read.
 */

table {
  /* [1] */
  max-width: 100%;
  width: initial;

  border-collapse: collapse;
  border-spacing: 0;
}

table td,
table th {
  padding: $spacing-unit-tiny $spacing-unit-small;
  border: 1px solid $color-dark-gray;
  text-align: right;
}

/* [2] */
table tr:nth-child(2n) {
  background-color: $color-light-gray;
}


================================================
FILE: _sass/page/elements/_elements.typography.scss
================================================
/**
 * Site-wide typography
 */

body {
  // Use system font stack:
  // https://css-tricks.com/snippets/css/system-font-stack/
  font-family: $global-font-family;
  $color: $color-text;
}

/**
 * Code-like elements.
 */
pre,
code,
kbd,
samp {
  font-family: $monospace;
  font-style: normal;
}

/**
 * Header styling
 */
$header-font-family: $sans-serif !default;

h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 2em 0 0.5em;
  line-height: 1.2;
  font-weight: bold;
}

h1 {
  margin-top: 0;
  font-size: $type-size-3;
}

h2 {
  font-size: $type-size-4;
}

h3 {
  font-size: $type-size-5;
}

h4 {
  font-size: $type-size-5;
}

h5 {
  font-size: $type-size-5;
}

h6 {
  font-size: $type-size-5;
}


================================================
FILE: _sass/page/elements/_elements.variables.scss
================================================
/**
 * Variables
 */

$serif: Georgia, Times, serif !default;
$sans-serif: "IBM Plex Sans", "Segoe UI",
  "Helvetica Neue", "Lucida Grande", Arial, sans-serif !default;
$monospace: "IBM Plex Mono", Monaco, Consolas, "Lucida Console", monospace !default;

$global-font-family: $sans-serif !default;
$header-font-family: $sans-serif !default;
$caption-font-family: $serif !default;

/* type scale */
$type-size-1: 2.441em !default; // ~39.056px
$type-size-2: 1.953em !default; // ~31.248px
$type-size-3: 1.563em !default; // ~25.008px
$type-size-4: 1.25em !default; // ~20px
$type-size-5: 1em !default; // ~16px
$type-size-6: 0.75em !default; // ~12px
$type-size-7: 0.6875em !default; // ~11px
$type-size-8: 0.625em !default; // ~10px
 
/* Left-margin (applied if screen is big enough) */
$left-site-margin: 20% !default;
$site-margin-min-width: 1700px !default;


================================================
FILE: _sass/page/generic/_generic.phone-scrolling.scss
================================================
/**
 * Makes scrolling smooth for phones
 */

* {
  -webkit-overflow-scrolling: touch;
}


================================================
FILE: _sass/page/inuitcss/elements/_elements.headings.scss
================================================
/* ==========================================================================
   #HEADINGS
   ========================================================================== */

/**
 * Simple default styles for headings 1 through 6. Anything more opinionated
 * than simple font-size changes should likely be applied via classes (see:
 * http://csswizardry.com/2016/02/managing-typography-on-large-apps/).
 */

// We have all of our heading font sizes defined here. Passing these pixel
// values into our `inuit-font-size()` mixin will generate a rem-based
// `font-size` with a pixel fallback, as well as generating a `line-height` that
// will sit on our baseline grid.

$inuit-font-size-h1:  36px !default;
$inuit-font-size-h2:  28px !default;
$inuit-font-size-h3:  24px !default;
$inuit-font-size-h4:  20px !default;
$inuit-font-size-h5:  18px !default;
$inuit-font-size-h6:  16px !default;

h1 {
  @include inuit-font-size($inuit-font-size-h1);
}

h2 {
  @include inuit-font-size($inuit-font-size-h2);
}

h3 {
  @include inuit-font-size($inuit-font-size-h3);
}

h4 {
  @include inuit-font-size($inuit-font-size-h4);
}

h5 {
  @include inuit-font-size($inuit-font-size-h5);
}

h6 {
  @include inuit-font-size($inuit-font-size-h6);
}


================================================
FILE: _sass/page/inuitcss/elements/_elements.images.scss
================================================
/* ==========================================================================
   #IMAGES
   ========================================================================== */

/**
 * 1. Fluid images for responsive purposes.
 * 2. Offset `alt` text from surrounding copy.
 * 3. Setting `vertical-align` removes the whitespace that appears under `img`
 *    elements when they are dropped into a page as-is. Safer alternative to
 *    using `display: block;`.
 */

img {
  max-width: 100%; /* [1] */
  font-style: italic; /* [2] */
  vertical-align: middle; /* [3] */
}



// In case you don't have control over generated `width` and `height` attributes
// on `<img>` elements in your markup, but still want the images to be fluid,
// set this to `false`.

$inuit-static-images: true !default;

  @if ($inuit-static-images == true) {

  /**
   * If a `width` and/or `height` attribute has been explicitly defined, let’s
   * not make the image fluid.
   */

  img[width],
  img[height] {
    max-width: none;
  }

}


================================================
FILE: _sass/page/inuitcss/elements/_elements.page.scss
================================================
/* ==========================================================================
   #PAGE
   ========================================================================== */

/**
 * Simple page-level setup.
 *
 * 1. Set the default `font-size` and `line-height` for the entire project,
 *    sourced from our default variables. The `font-size` is calculated to exist
 *    in ems, the `line-height` is calculated to exist unitlessly.
 * 2. Ensure the page always fills at least the entire height of the viewport.
 */

html,
body {
  font-size: ($inuit-global-font-size / 16px) * 1em; /* [1] */
  line-height: $inuit-global-line-height / $inuit-global-font-size; /* [1] */
  min-height: 100%; /* [2] */
}


================================================
FILE: _sass/page/inuitcss/elements/_elements.tables.scss
================================================
/* ==========================================================================
   #TABLES
   ========================================================================== */

/**
 * 1. Ensure tables fill up as much space as possible.
 */

table {
  width: 100%; /* [1] */
}


================================================
FILE: _sass/page/inuitcss/generic/_generic.box-sizing.scss
================================================
/* ==========================================================================
   #BOX-SIZING
   ========================================================================== */

/**
 * More sensible default box-sizing:
 * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
 */

html {
  box-sizing: border-box;
}

* {

  &,
  &:before,
  &:after {
    box-sizing: inherit;
  }

}


================================================
FILE: _sass/page/inuitcss/generic/_generic.normalize.scss
================================================
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */

/* Document
   ========================================================================== */

/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in
 *    IE on Windows Phone and in iOS.
 */

html {
  line-height: 1.15; /* 1 */
  -ms-text-size-adjust: 100%; /* 2 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/* Sections
   ========================================================================== */

/**
 * Remove the margin in all browsers (opinionated).
 */

body {
  margin: 0;
}

/**
 * Add the correct display in IE 9-.
 */

article,
aside,
footer,
header,
nav,
section {
  display: block;
}

/**
 * Correct the font size and margin on `h1` elements within `section` and
 * `article` contexts in Chrome, Firefox, and Safari.
 */

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/* Grouping content
   ========================================================================== */

/**
 * Add the correct display in IE 9-.
 * 1. Add the correct display in IE.
 */

figcaption,
figure,
main { /* 1 */
  display: block;
}

/**
 * Add the correct margin in IE 8.
 */

figure {
  margin: 1em 40px;
}

/**
 * 1. Add the correct box sizing in Firefox.
 * 2. Show the overflow in Edge and IE.
 */

hr {
  box-sizing: content-box; /* 1 */
  height: 0; /* 1 */
  overflow: visible; /* 2 */
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

pre {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/* Text-level semantics
   ========================================================================== */

/**
 * 1. Remove the gray background on active links in IE 10.
 * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
 */

a {
  background-color: transparent; /* 1 */
  -webkit-text-decoration-skip: objects; /* 2 */
}

/**
 * 1. Remove the bottom border in Chrome 57- and Firefox 39-.
 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 */

abbr[title] {
  border-bottom: none; /* 1 */
  text-decoration: underline; /* 2 */
  text-decoration: underline dotted; /* 2 */
}

/**
 * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
 */

b,
strong {
  font-weight: inherit;
}

/**
 * Add the correct font weight in Chrome, Edge, and Safari.
 */

b,
strong {
  font-weight: bolder;
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

code,
kbd,
samp {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/**
 * Add the correct font style in Android 4.3-.
 */

dfn {
  font-style: italic;
}

/**
 * Add the correct background and color in IE 9-.
 */

mark {
  background-color: #ff0;
  color: #000;
}

/**
 * Add the correct font size in all browsers.
 */

small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` elements from affecting the line height in
 * all browsers.
 */

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/* Embedded content
   ========================================================================== */

/**
 * Add the correct display in IE 9-.
 */

audio,
video {
  display: inline-block;
}

/**
 * Add the correct display in iOS 4-7.
 */

audio:not([controls]) {
  display: none;
  height: 0;
}

/**
 * Remove the border on images inside links in IE 10-.
 */

img {
  border-style: none;
}

/**
 * Hide the overflow in IE.
 */

svg:not(:root) {
  overflow: hidden;
}

/* Forms
   ========================================================================== */

/**
 * 1. Change the font styles in all browsers (opinionated).
 * 2. Remove the margin in Firefox and Safari.
 */

button,
input,
optgroup,
select,
textarea {
  font-size: 100%; /* 1 */
  line-height: 1.15; /* 1 */
  margin: 0; /* 2 */
}

/**
 * Show the overflow in IE.
 * 1. Show the overflow in Edge.
 */

button,
input { /* 1 */
  overflow: visible;
}

/**
 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 * 1. Remove the inheritance of text transform in Firefox.
 */

button,
select { /* 1 */
  text-transform: none;
}

/**
 * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
 *    controls in Android 4.
 * 2. Correct the inability to style clickable types in iOS and Safari.
 */

button,
html [type="button"], /* 1 */
[type="reset"],
[type="submit"] {
  -webkit-appearance: button; /* 2 */
}

/**
 * Remove the inner border and padding in Firefox.
 */

button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

/**
 * Restore the focus styles unset by the previous rule.
 */

button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText;
}

/**
 * Correct the padding in Firefox.
 */

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

/**
 * 1. Correct the text wrapping in Edge and IE.
 * 2. Correct the color inheritance from `fieldset` elements in IE.
 * 3. Remove the padding so developers are not caught out when they zero out
 *    `fieldset` elements in all browsers.
 */

legend {
  box-sizing: border-box; /* 1 */
  color: inherit; /* 2 */
  display: table; /* 1 */
  max-width: 100%; /* 1 */
  padding: 0; /* 3 */
  white-space: normal; /* 1 */
}

/**
 * 1. Add the correct display in IE 9-.
 * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
 */

progress {
  display: inline-block; /* 1 */
  vertical-align: baseline; /* 2 */
}

/**
 * Remove the default vertical scrollbar in IE.
 */

textarea {
  overflow: auto;
}

/**
 * 1. Add the correct box sizing in IE 10-.
 * 2. Remove the padding in IE 10-.
 */

[type="checkbox"],
[type="radio"] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Correct the cursor style of increment and decrement buttons in Chrome.
 */

[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

/**
 * 1. Correct the odd appearance in Chrome and Safari.
 * 2. Correct the outline style in Safari.
 */

[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/**
 * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
 */

[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
 * 1. Correct the inability to style clickable types in iOS and Safari.
 * 2. Change font properties to `inherit` in Safari.
 */

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/* Interactive
   ========================================================================== */

/*
 * Add the correct display in IE 9-.
 * 1. Add the correct display in Edge, IE, and Firefox.
 */

details, /* 1 */
menu {
  display: block;
}

/*
 * Add the correct display in all browsers.
 */

summary {
  display: list-item;
}

/* Scripting
   ========================================================================== */

/**
 * Add the correct display in IE 9-.
 */

canvas {
  display: inline-block;
}

/**
 * Add the correct display in IE.
 */

template {
  display: none;
}

/* Hidden
   ========================================================================== */

/**
 * Add the correct display in IE 10-.
 */

[hidden] {
  display: none;
}


================================================
FILE: _sass/page/inuitcss/generic/_generic.reset.scss
================================================
/* ==========================================================================
   #RESET
   ========================================================================== */

/**
 * A very simple reset that sits on top of Normalize.css.
 */

body,
h1, h2, h3, h4, h5, h6,
blockquote, p, pre,
dl, dd, ol, ul,
figure,
hr,
fieldset, legend {
  margin:  0;
  padding: 0;
}



/**
 * Remove trailing margins from nested lists.
 */

li > {

  ol,
  ul {
    margin-bottom: 0;
  }

}



/**
 * Remove default table spacing.
 */

table {
  border-collapse: collapse;
  border-spacing: 0;
}



/**
 * 1. Reset Chrome and Firefox behaviour which sets a `min-width: min-content;`
 *    on fieldsets.
 */

fieldset {
  min-width: 0; /* [1] */
  border: 0;
}


================================================
FILE: _sass/page/inuitcss/generic/_generic.shared.scss
================================================
/* ==========================================================================
   #SHARED
   ========================================================================== */

/**
 * Shared declarations for certain elements.
 */

/**
 * Always declare margins in the same direction:
 * csswizardry.com/2012/06/single-direction-margin-declarations
 */

address,
h1, h2, h3, h4, h5, h6,
blockquote, p, pre,
dl, ol, ul,
figure,
hr,
table,
fieldset {
  margin-bottom: $inuit-global-spacing-unit;
}



/**
 * Consistent indentation for lists.
 */

dd, ol, ul {
  margin-left: $inuit-global-spacing-unit;
}


================================================
FILE: _sass/page/inuitcss/objects/_objects.block.scss
================================================
/* ==========================================================================
   #BLOCK
   ========================================================================== */

/**
 * Stacked image-with-text object. A simple abstraction to cover a very commonly
 * occurring design pattern.
 */

.o-block {
  display: block;
  text-align: center;
}

  .o-block__img {
    margin-bottom: $inuit-global-spacing-unit;


    /* Size variants
       ====================================================================== */

    .o-block--flush > & {
      margin-bottom: 0;
    }

    .o-block--tiny > & {
      margin-bottom: $inuit-global-spacing-unit-tiny;
    }

    .o-block--small > & {
      margin-bottom: $inuit-global-spacing-unit-small;
    }

    .o-block--large > & {
      margin-bottom: $inuit-global-spacing-unit-large;
    }

    .o-block--huge > & {
      margin-bottom: $inuit-global-spacing-unit-huge;
    }

  }

  .o-block__body {
    display: block;
  }





/* Alignment variants
   ========================================================================== */

.o-block--right {
  text-align: right;
}

.o-block--left {
  text-align: left;
}


================================================
FILE: _sass/page/inuitcss/objects/_objects.box.scss
================================================
/* ==========================================================================
   #BOX
   ========================================================================== */

/**
 * The box object simply boxes off content. Extend with cosmetic styles in the
 * Components layer.
 *
 * 1. So we can apply the `.o-box` class to naturally-inline elements.
 */

.o-box {
  @include inuit-clearfix();
  display: block; /* [1] */
  padding: $inuit-global-spacing-unit;

  > :last-child {
    margin-bottom: 0;
  }

}





/* Size variants
   ========================================================================== */

.o-box--flush {
  padding: 0;
}

.o-box--tiny {
  padding: $inuit-global-spacing-unit-tiny;
}

.o-box--small {
  padding: $inuit-global-spacing-unit-small;
}

.o-box--large {
  padding: $inuit-global-spacing-unit-large;
}

.o-box--huge {
  padding: $inuit-global-spacing-unit-huge;
}


================================================
FILE: _sass/page/inuitcss/objects/_objects.crop.scss
================================================
/* ==========================================================================
   #CROP
   ========================================================================== */

// A list of cropping ratios that get generated as modifier classes.
// You should predefine it with only the ratios and names your project needs.
//
// The map keys are the strings used in the generated class names, and they can
// follow any convention, as long as they are properly escaped strings. i.e.:
//
//   $inuit-crops: (
//     "2\\:1"         : (2:1),
//     "4-by-3"        : (4:3),
//     "full-hd"       : (16:9),
//     "card-image"    : (2:3),
//     "golden-ratio"  : (1.618:1) -> non-integers are okay
//   ) !default;

$inuit-crops: (
  "2\\:1"   : (2:1),
  "4\\:3"   : (4:3),
  "16\\:9"  : (16:9)
) !default;



/**
 * Provide a cropping container in order to display media (usually images)
 * cropped to certain ratios.
 *
 * 1. Set up a positioning context in which the image can sit.
 * 2. This is the crucial part: where the cropping happens.
 */

.o-crop {
  position: relative; /* [1] */
  display: block;
  overflow: hidden; /* [2] */
}

  /**
   * Apply this class to the content (usually `img`) that needs cropping.
   *
   * 1. Image’s default positioning is top-left in the cropping box.
   * 2. Make sure the media doesn’t stop itself too soon.
   */

  .o-crop__content {
    position: absolute;
    top:  0; /* [1] */
    left: 0; /* [1] */
    max-width: none; /* [2] */
  }



  /**
   * We can position the media in different locations within the cropping area.
   */

  .o-crop__content--left-top {
    left: 0;
  }

  .o-crop__content--left-center {
    top: 50%;
    transform: translateY(-50%);
  }

  .o-crop__content--left-bottom {
    top: auto;
    bottom: 0;
  }

  .o-crop__content--right-top {
    right: 0;
    left: auto;
  }

  .o-crop__content--right-center {
    top: 50%;
    right: 0;
    left: auto;
    transform: translateY(-50%);
  }

  .o-crop__content--right-bottom {
    top: auto;
    right: 0;
    bottom: 0;
    left: auto;
  }

  .o-crop__content--center-top {
    left: 50%;
    transform: translateX(-50%);
  }

  .o-crop__content--center,
  .o-crop__content--center-center {
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }

  .o-crop__content--center-bottom {
    top: auto;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
  }





/* Crop-ratio variants
   ========================================================================== */

/**
 * Generate a series of crop classes to be used like so:
 *
 *   <div class="o-crop  o-crop--golden-ratio">
 *
 */

@each $crop-name, $crop-value in $inuit-crops {

  @each $antecedent, $consequent in $crop-value {

    @if (type-of($antecedent) != number) {
      @error "`#{$antecedent}` needs to be a number.";
    }

    @if (type-of($consequent) != number) {
      @error "`#{$consequent}` needs to be a number.";
    }

    .o-crop--#{$crop-name} {
      padding-bottom: ($consequent/$antecedent) * 100%;
    }

  }

}





/* Fill modifier
   ========================================================================== */

/**
 * Content stretches to fill it's container while maintaining aspect-ratio.
 */

.o-crop--fill {

  > .o-crop__content {
    min-height: 100%;
    min-width: 100%;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.flag.scss
================================================
/* ==========================================================================
   #FLAG
   ========================================================================== */

/**
 * The flag object is a design pattern similar to the media object, however it
 * utilises `display: table[-cell];` to give us control over the vertical
 * alignments of the text and image.
 *
 * http://csswizardry.com/2013/05/the-flag-object/
 *
 * 1. Allows us to control vertical alignments.
 * 2. Force the object to be the full width of its parent. Combined with [1],
 *    this makes the object behave in a quasi-`display: block;` manner.
 * 3. Reset inherited `border-spacing` declarations.
 */

.o-flag {
  display: table; /* [1] */
  width: 100%; /* [2] */
  border-spacing: 0; /* [3] */
}

  /**
   * Items within a flag object. There should only ever be one of each.
   *
   * 1. Default to aligning content to their middles.
   */

  .o-flag__img,
  .o-flag__body {
    display: table-cell;
    vertical-align: middle; /* [1] */
  }

  /**
   * Flag images have a space between them and the body of the object.
   *
   * 1. Force `.flag__img` to take up as little space as possible:
   *    https://pixelsvsbytes.com/2012/02/this-css-layout-grid-is-no-holy-grail/
   */

  .o-flag__img {
    width: 1px; /* [1] */
    padding-right: $inuit-global-spacing-unit;

    /**
     * 1. Fixes problem with images disappearing.
     *
     *    The direct child selector '>' needs to remain in order for nested flag
     *    objects to not inherit their parent’s formatting. In case the image tag
     *    is wrapped into another tag, e.g. an anchor for linking reasons, it will
     *    disappear. In that case try wrapping the whole o-flag__img object into
     *    an anchor tag.
     *
     *    E.g.:
     *
     *      <a href="/">
     *        <div class="o-flag__img">
     *          <img src="./link/to/image.jpg" alt="image alt text">
     *        </div>
     *      </a>
     */

    > img {
      max-width: none; /* [1] */
    }

  }

  /**
   * The container for the main content of the flag object.
   *
   * 1. Forces the `.flag__body` to take up all remaining space.
   */

  .o-flag__body {
    width: auto; /* [1] */

    &,
    > :last-child {
      margin-bottom: 0;
    }

  }





/* Size variants
   ========================================================================== */

.o-flag--flush {

  > .o-flag__img {
    padding-right: 0;
    padding-left:  0;
  }

}


.o-flag--tiny {

  > .o-flag__img {
    padding-right: $inuit-global-spacing-unit-tiny;
  }

  &.o-flag--reverse {

    > .o-flag__img {
      padding-right: 0;
      padding-left: $inuit-global-spacing-unit-tiny;
    }

  }

}


.o-flag--small {

  > .o-flag__img {
    padding-right: $inuit-global-spacing-unit-small;
  }

  &.o-flag--reverse {

    > .o-flag__img {
      padding-right: 0;
      padding-left: $inuit-global-spacing-unit-small;
    }

  }

}


.o-flag--large {

  > .o-flag__img {
    padding-right: $inuit-global-spacing-unit-large;
  }

  &.o-flag--reverse {

    > .o-flag__img {
      padding-right: 0;
      padding-left: $inuit-global-spacing-unit-large;
    }

  }

}


.o-flag--huge {

  > .o-flag__img {
    padding-right: $inuit-global-spacing-unit-huge;
  }

  &.o-flag--reverse {

    > .o-flag__img {
      padding-right: 0;
      padding-left: $inuit-global-spacing-unit-huge;
    }

  }

}





/* Reversed flag
   ========================================================================== */

/**
 * 1. Swap the rendered direction of the object…
 * 2. …and reset it.
 * 3. Reassign margins to the correct sides.
 */

.o-flag--reverse {
  direction: rtl; /* [1] */

  > .o-flag__img,
  > .o-flag__body {
    direction: ltr; /* [2] */
  }

  > .o-flag__img {
    padding-right: 0; /* [3] */
    padding-left: $inuit-global-spacing-unit; /* [3] */
  }

}





/* Alignment variants
   ========================================================================== */

/**
 * Vertically align the image- and body-content differently. Defaults to middle.
 */

.o-flag--top {

  > .o-flag__img,
  > .o-flag__body {
    vertical-align: top;
  }

}


.o-flag--bottom {

  > .o-flag__img,
  > .o-flag__body {
    vertical-align: bottom;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.layout.scss
================================================
/* ==========================================================================
   #LAYOUT
   ========================================================================== */

/**
 * Grid-like layout system.
 *
 * The layout object provides us with a column-style layout system. This file
 * contains the basic structural elements, but classes should be complemented
 * with width utilities, for example:
 *
 *   <div class="o-layout">
 *     <div class="o-layout__item  u-1/2">
 *     </div>
 *     <div class="o-layout__item  u-1/2">
 *     </div>
 *   </div>
 *
 * The above will create a two-column structure in which each column will
 * fluidly fill half of the width of the parent. We can have more complex
 * systems:
 *
 *   <div class="o-layout">
 *     <div class="o-layout__item  u-1/1  u-1/3@medium">
 *     </div>
 *     <div class="o-layout__item  u-1/2  u-1/3@medium">
 *     </div>
 *     <div class="o-layout__item  u-1/2  u-1/3@medium">
 *     </div>
 *   </div>
 *
 * The above will create a system in which the first item will be 100% width
 * until we enter our medium breakpoint, when it will become 33.333% width. The
 * second and third items will be 50% of their parent, until they also become
 * 33.333% width at the medium breakpoint.
 *
 * We can also manipulate entire layout systems by adding a series of modifiers
 * to the `.o-layout` block. For example:
 *
 *   <div class="o-layout  o-layout--reverse">
 *
 * This will reverse the displayed order of the system so that it runs in the
 * opposite order to our source, effectively flipping the system over.
 *
 *   <div class="o-layout  o-layout--[right|center]">
 *
 * This will cause the system to fill up from either the centre or the right
 * hand side. Default behaviour is to fill up the layout system from the left.
 *
 * There are plenty more options available to us: explore them below.
 */

// By default we use the `font-size: 0;` trick to remove whitespace between
// items. Set this to true in order to use a markup-based strategy like
// commenting out whitespace or minifying HTML.
$inuit-use-markup-fix: false !default;





/* Default/mandatory classes
   ========================================================================== */

/**
 * 1. Allows us to use the layout object on any type of element.
 * 2. We need to defensively reset any box-model properties.
 * 3. Use the negative margin trick for multi-row grids:
 *    http://csswizardry.com/2011/08/building-better-grid-systems/
 */

.o-layout {
  display: block; /* [1] */
  margin:  0; /* [2] */
  padding: 0; /* [2] */
  list-style: none; /* [1] */
  margin-left: -$inuit-global-spacing-unit; /* [3] */

  @if ($inuit-use-markup-fix == false) {
    font-size: 0;
  }

}

  /**
   * 1. Required in order to combine fluid widths with fixed gutters.
   * 2. Allows us to manipulate grids vertically, with text-level properties,
   *    etc.
   * 3. Default item alignment is with the tops of each other, like most
   *    traditional grid/layout systems.
   * 4. By default, all layout items are full-width (mobile first).
   * 5. Gutters provided by left padding:
   *    http://csswizardry.com/2011/08/building-better-grid-systems/
   * 6. Fallback for old IEs not supporting `rem` values.
   */

  .o-layout__item {
    box-sizing: border-box; /* [1] */
    display: inline-block; /* [2] */
    vertical-align: top; /* [3] */
    width: 100%; /* [4] */
    padding-left: $inuit-global-spacing-unit; /* [5] */

    @if ($inuit-use-markup-fix == false) {
      font-size: $inuit-global-font-size; /* [6] */
      font-size: 1rem;
    }

  }





/* Gutter size modifiers
   ========================================================================== */

.o-layout--flush {
  margin-left: 0;

  > .o-layout__item {
    padding-left: 0;
  }

}


.o-layout--tiny {
  margin-left: -$inuit-global-spacing-unit-tiny;

  > .o-layout__item {
    padding-left: $inuit-global-spacing-unit-tiny;
  }

}


.o-layout--small {
  margin-left: -$inuit-global-spacing-unit-small;

  > .o-layout__item {
    padding-left: $inuit-global-spacing-unit-small;
  }

}


.o-layout--large {
  margin-left: -$inuit-global-spacing-unit-large;

  > .o-layout__item {
    padding-left: $inuit-global-spacing-unit-large;
  }

}


.o-layout--huge {
  margin-left: -$inuit-global-spacing-unit-huge;

  > .o-layout__item {
    padding-left: $inuit-global-spacing-unit-huge;
  }

}





/* Vertical alignment modifiers
   ========================================================================== */

/**
 * Align all grid items to the middles of each other.
 */

.o-layout--middle {

  > .o-layout__item {
    vertical-align: middle;
  }

}


/**
 * Align all grid items to the bottoms of each other.
 */

.o-layout--bottom {

  > .o-layout__item {
    vertical-align: bottom;
  }

}


/**
 * Stretch all grid items of each row to have an equal-height.
 * Please be aware that this modifier class doesn’t take any effect in IE9 and
 * below and other older browsers due to the lack of `display: flex` support.
 */

.o-layout--stretch {
  display: flex;
  flex-wrap: wrap;

  > .o-layout__item {
    display: flex;
  }

  &.o-layout--center {
    justify-content: center;
  }

  &.o-layout--right {
    justify-content: flex-end;
  }

  &.o-layout--left {
    justify-content: flex-start;
  }

}





/* Fill order modifiers
   ========================================================================== */

/**
 * Fill up the layout system from the centre.
 */

.o-layout--center {
  text-align: center;

  > .o-layout__item {
    text-align: left;
  }

}


/**
 * Fill up the layout system from the right-hand side.
 */

.o-layout--right {
  text-align: right;

  > .o-layout__item {
    text-align: left;
  }

}


/**
 * Fill up the layout system from the left-hand side. This will likely only be
 * needed when using in conjunction with `.o-layout--reverse`.
 */

.o-layout--left {
  text-align: left;

  > .o-layout__item {
    text-align: left;
  }

}


/**
 * Reverse the rendered order of the grid system.
 */

.o-layout--reverse {
  direction: rtl;

  > .o-layout__item {
    direction: ltr;
  }

}





/* Auto-widths modifier
   ========================================================================== */

/**
 * Cause layout items to take up a non-explicit amount of width.
 */

.o-layout--auto {

  > .o-layout__item {
    width: auto;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.list-bare.scss
================================================
/* ==========================================================================
   #LIST-BARE
   ========================================================================== */

/**
 * Strip list-like appearance from lists by removing their bullets and any
 * indentation.
 *
 * Note: Declaring the item class might not be necessary everywhere,
 * but is for example in <dl> lists for the <dd> children.
 */

.o-list-bare {
  list-style: none;
  margin-left: 0;
}

  .o-list-bare__item {
    margin-left: 0;
  }


================================================
FILE: _sass/page/inuitcss/objects/_objects.list-inline.scss
================================================
/* ==========================================================================
   #LIST-INLINE
   ========================================================================== */

/**
 * The list-inline object simply displays a list of items in one line.
 */

.o-list-inline {
  margin-left: 0;
  list-style: none;
}

  .o-list-inline__item {
    display: inline-block;
  }


================================================
FILE: _sass/page/inuitcss/objects/_objects.media.scss
================================================
/* ==========================================================================
   #MEDIA
   ========================================================================== */

/**
 * Place any image- and text-like content side-by-side, as per:
 * http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
 */

.o-media {
  @include inuit-clearfix();
  display: block;
}

  .o-media__img {
    float: left;
    margin-right: $inuit-global-spacing-unit;

    > img {
      display: block;
    }

  }

  .o-media__body {
    overflow: hidden;
    display: block;

    &,
    > :last-child {
      margin-bottom: 0;
    }

  }





/* Size variants
   ========================================================================== */

/**
 * Modify the amount of space between our image and our text. We also have
 * reversible options for all available sizes.
 */

.o-media--flush {

  > .o-media__img {
    margin-right: 0;
    margin-left: 0;
 }

}


.o-media--tiny {

  > .o-media__img {
    margin-right: $inuit-global-spacing-unit-tiny;
  }

  &.o-media--reverse {

    > .o-media__img {
      margin-right: 0;
      margin-left: $inuit-global-spacing-unit-tiny;
    }

  }

}


.o-media--small {

  > .o-media__img {
    margin-right: $inuit-global-spacing-unit-small;
  }

  &.o-media--reverse {

    > .o-media__img {
      margin-right: 0;
      margin-left: $inuit-global-spacing-unit-small;
    }

  }

}


.o-media--large {

  > .o-media__img {
    margin-right: $inuit-global-spacing-unit-large;
  }

  &.o-media--reverse {

    > .o-media__img {
      margin-right: 0;
      margin-left: $inuit-global-spacing-unit-large;
    }

  }

}


.o-media--huge {

  > .o-media__img {
    margin-right: $inuit-global-spacing-unit-huge;
  }

  &.o-media--reverse {

    > .o-media__img {
      margin-right: 0;
      margin-left: $inuit-global-spacing-unit-huge;
    }

  }

}





/* Reversed media objects
   ========================================================================== */

.o-media--reverse {

  > .o-media__img {
    float: right;
    margin-right: 0;
    margin-left: $inuit-global-spacing-unit;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.pack.scss
================================================
/* ==========================================================================
   #PACK
   ========================================================================== */

/**
 * The pack object simply causes any number of elements pack up horizontally to
 * automatically fill an equal, fluid width of their parent.
 *
 * 1. Fill all available space.
 * 2. Remove any leftover styling from lists.
 * 3. Cause children to be automatically equally sized.
 */

.o-pack {
  width: 100%; /* [1] */
  margin-left: 0; /* [2] */
  display: table;
  table-layout: fixed; /* [3] */
}

  /**
   * 1. Cause children to adopt table-like structure.
   * 2. Default item alignment is with the tops of each other.
   */

  .o-pack__item {
    display: table-cell; /* [1] */
    vertical-align: top; /* [2] */


    /* Vertical alignment variants
       ====================================================================== */

    .o-pack--middle > & {
      vertical-align: middle;
    }

    .o-pack--bottom > & {
      vertical-align: bottom;
    }

  }





/* Unequal-width items
   ========================================================================== */

.o-pack--auto {
  table-layout: auto;
}





/* Size variants
   ========================================================================== */

.o-pack--tiny {
  border-spacing: $inuit-global-spacing-unit-tiny;
}

.o-pack--small {
  border-spacing: $inuit-global-spacing-unit-small;
}

.o-pack--default {
  border-spacing: $inuit-global-spacing-unit;
}

.o-pack--large {
  border-spacing: $inuit-global-spacing-unit-large;
}

.o-pack--huge {
  border-spacing: $inuit-global-spacing-unit-huge;
}





/* Reversed order packs
   ========================================================================== */

.o-pack--reverse {
  direction: rtl;

  > .o-pack__item {
    direction: ltr;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.ratio.scss
================================================
/* ==========================================================================
   #RATIO
   ========================================================================== */

// A list of aspect ratios that get generated as modifier classes.
// You should predefine it with only the ratios and names your project needs.
//
// The map keys are the strings used in the generated class names, and they can
// follow any convention, as long as they are properly escaped strings. i.e.:
//
//   $inuit-ratios: (
//     "2\\:1"         : (2:1),
//     "4-by-3"        : (4:3),
//     "full-hd"       : (16:9),
//     "card-image"    : (2:3),
//     "golden-ratio"  : (1.618:1) -> non-integers are okay
//   ) !default;

$inuit-ratios: (
  "2\\:1"   : (2:1),
  "4\\:3"   : (4:3),
  "16\\:9"  : (16:9)
) !default;



/**
 * Create ratio-bound content blocks, to keep media (e.g. images, videos) in
 * their correct aspect ratios.
 *
 * http://alistapart.com/article/creating-intrinsic-ratios-for-video
 *
 * 1. Default is a 1:1 ratio (i.e. a perfect square).
 */

.o-ratio {
  position: relative;
  display: block;

  &:before {
    content: "";
    display: block;
    width: 100%;
    padding-bottom: 100%; /* [1] */
  }

}

  .o-ratio__content,
  .o-ratio > iframe,
  .o-ratio > embed,
  .o-ratio > object {
    position: absolute;
    top:    0;
    bottom: 0;
    left:   0;
    height: 100%;
    width:  100%;
  }





/* Ratio variants.
   ========================================================================== */

/**
 * Generate a series of ratio classes to be used like so:
 *
 *   <div class="o-ratio  o-ratio--golden-ratio">
 *
 */

@each $ratio-name, $ratio-value in $inuit-ratios {

  @each $antecedent, $consequent in $ratio-value {

    @if (type-of($antecedent) != number) {
      @error "`#{$antecedent}` needs to be a number.";
    }

    @if (type-of($consequent) != number) {
      @error "`#{$consequent}` needs to be a number.";
    }

    .o-ratio--#{$ratio-name}:before {
      padding-bottom: ($consequent/$antecedent) * 100%;
    }

  }

}





/* Contain modifier.
   ========================================================================== */

/**
 * Only works with image content.
 * Contains the image to the boundaries, without cropping or stretching it.
 */

.o-ratio--img-contain {

  > .o-ratio__content:before {
    height: auto;
    margin: auto;
    max-height: 100%;
    max-width: 100%;
    width: auto;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.table.scss
================================================
/* ==========================================================================
   #TABLE
   ========================================================================== */

/**
 * A simple object for manipulating the structure of HTML `table`s.
 */

.o-table {
  width: 100%;
}





/* Equal-width table cells
   ========================================================================== */

/**
 * `table-layout: fixed` forces all cells within a table to occupy the same
 * width as each other. This also has performance benefits: because the browser
 * does not need to (re)calculate cell dimensions based on content it discovers,
 * the table can be rendered very quickly. Further reading:
 * https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout#Values
 */

.o-table--fixed {
  table-layout: fixed;
}





/* Size variants
   ========================================================================== */

.o-table--tiny {

  th,
  td {
    padding: $inuit-global-spacing-unit-tiny;
  }

}


.o-table--small {

  th,
  td {
    padding: $inuit-global-spacing-unit-small;
  }

}


.o-table--large {

  th,
  td {
    padding: $inuit-global-spacing-unit-large;
  }

}


.o-table--huge {

  th,
  td {
    padding: $inuit-global-spacing-unit-huge;
  }

}


================================================
FILE: _sass/page/inuitcss/objects/_objects.wrapper.scss
================================================
/* ==========================================================================
   #WRAPPER
   ========================================================================== */

/**
 * Page-level constraining and wrapping elements.
 */

$inuit-wrapper-width: 1200px !default;

@if (type-of($inuit-wrapper-width) != number) {
  @error "`#{$inuit-wrapper-width}` needs to be a number.";
}


================================================
FILE: _sass/page/inuitcss/settings/_example.settings.config.scss
================================================
///* ========================================================================
//   #CONFIG
//   ======================================================================== */

// A map of global config settings. Define any project-level configuration,
// feature switches, etc. in here.

$inuit-config: (
  env: dev,
  healthcheck: false,
  debug: true,
);

// You can access data in this map using the following function:
//
// inuit-config(<key>)
//
// Example usage:
//
// @if (inuit-config(debug) == true) { ...  }

@function inuit-config($key) {
  @return map-get($inuit-config, $key);
}


================================================
FILE: _sass/page/inuitcss/settings/_example.settings.global.scss
================================================
///* ========================================================================
//   #GLOBAL
//   ======================================================================== */

// The global settings file contains any project-wide variables; things that
// need to be made available to the entire codebase.



// Standardise some UI treatments.

$global-radius: 3px !default;
$global-transition: all 300ms ease-in-out !default;


================================================
FILE: _sass/page/inuitcss/settings/_settings.core.scss
================================================
///* ========================================================================
//   #CORE
//   ======================================================================== */

// This core file sets up inuitcss’ most important setup variables. They
// underpin a lot of how the framework functions and should be modified and
// preconfigured with caution.



// Baseline grid lines height.
// Every spacing metric should be based on this.

$inuit-global-baseline:     6px !default;



// How many grid lines should our spacing unit variants span?
// Each value should be an unitless integer.

$inuit-global-spacing-unit-factor-tiny:   1 !default;   // 6px
$inuit-global-spacing-unit-factor-small:  2 !default;   // 12px
$inuit-global-spacing-unit-factor:        4 !default;   // 24px
$inuit-global-spacing-unit-factor-large:  8 !default;   // 48px
$inuit-global-spacing-unit-factor-huge:   16 !default;  // 96px



// Spacing values are determined based on your project’s global baseline grid.
// It is not recommended that you modify these following variables
// (it can break your vertical rhythm), but if you need to, you can.

$inuit-global-spacing-unit:       $inuit-global-baseline * $inuit-global-spacing-unit-factor !default;
$inuit-global-spacing-unit-tiny:  $inuit-global-baseline * $inuit-global-spacing-unit-factor-tiny !default;
$inuit-global-spacing-unit-small: $inuit-global-baseline * $inuit-global-spacing-unit-factor-small !default;
$inuit-global-spacing-unit-large: $inuit-global-baseline * $inuit-global-spacing-unit-factor-large !default;
$inuit-global-spacing-unit-huge:  $inuit-global-baseline * $inuit-global-spacing-unit-factor-huge !default;



// Base typographical styles.

$inuit-global-font-size:    16px !default;
$inuit-global-line-height:  $inuit-global-spacing-unit !default;





// Check that the chosen font rules are pixel numbers.

@each $_inuit-font-globals in
      $inuit-global-font-size
      $inuit-global-line-height {

  @if (type-of($_inuit-font-globals) == number) {

    @if (unit($_inuit-font-globals) != "px") {
      @error "`#{$_inuit-font-globals}` needs to be a pixel value.";
    }

  } @else {
    @error "`#{$_inuit-font-globals}` needs to be a number.";
  }

}



// Check that the chosen size factors are unitless, integer numbers.

@each $_inuit-spacing-unit in
      $inuit-global-spacing-unit-factor-tiny
      $inuit-global-spacing-unit-factor-small
      $inuit-global-spacing-unit-factor-large
      $inuit-global-spacing-unit-factor-huge {

  @if (type-of($_inuit-spacing-unit) == number) {

    @if (unitless($_inuit-spacing-unit) == false) {
      @error "`#{$_inuit-spacing-unit}` needs to be unitless.";
    }

    @if ($_inuit-spacing-unit != ceil($_inuit-spacing-unit)) {
      @error "`#{$_inuit-spacing-unit}` needs to be an integer.";
    }

  } @else {
    @error "`#{$_inuit-spacing-unit}` needs to be a number.";
  }

}


=================
Download .txt
gitextract_pegolp8v/

├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── content-problem---.yaml
│   │   ├── enhancement-request---.yaml
│   │   ├── new-content-suggestion-----.yaml
│   │   ├── software-bug---.yaml
│   │   └── something-else---.yaml
│   ├── issue_template.md
│   ├── pull_request_template.md
│   └── workflows/
│       └── deploy.workflow.yml
├── .gitignore
├── .qiskit/
│   └── settings.conf
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Gemfile
├── Guardfile
├── LICENSE.txt
├── Makefile
├── README.md
├── _config.yml
├── _data/
│   ├── demostoc.yml
│   ├── ja/
│   │   ├── messages.yml
│   │   └── toc.yml
│   ├── messages.yml
│   └── toc.yml
├── _includes/
│   ├── banner.html
│   ├── buttons/
│   │   ├── binder.html
│   │   ├── download.html
│   │   ├── jupyterhub.html
│   │   ├── nbinteract.html
│   │   └── thebelab.html
│   ├── buttons.html
│   ├── coursemap_img.html
│   ├── css_entry.scss
│   ├── fb_tags.html
│   ├── footer.html
│   ├── google_analytics.html
│   ├── head.html
│   ├── hotjar.html
│   ├── js/
│   │   ├── interact-update.html
│   │   ├── nbinteract.html
│   │   ├── print.html
│   │   ├── thebelab-cell-button.html
│   │   ├── thebelab-page-config.html
│   │   └── thebelab.html
│   ├── mathjax.html
│   ├── metadata.json
│   ├── page-nav.html
│   ├── qiskit_navbar.html
│   ├── search/
│   │   └── lunr/
│   │       ├── lunr-en.js
│   │       └── lunr-store.js
│   ├── segment.html
│   ├── sidebar.html
│   └── topbar.html
├── _layouts/
│   └── default.html
├── _sass/
│   ├── components/
│   │   ├── _components.book__layout.scss
│   │   ├── _components.book__topbar.scss
│   │   ├── _components.images.scss
│   │   ├── _components.interact-button.scss
│   │   ├── _components.iqx.scss
│   │   ├── _components.page__banner.scss
│   │   ├── _components.page__footer.scss
│   │   ├── _components.page__nav.scss
│   │   ├── _components.page__onthispage.scss
│   │   ├── _components.qiskit__navbar.scss
│   │   ├── _components.search.scss
│   │   └── _components.thebelab.scss
│   ├── hamburgers/
│   │   ├── _base.scss
│   │   ├── hamburgers.scss
│   │   └── types/
│   │       └── _arrowalt.scss
│   ├── main.scss
│   ├── objects/
│   │   └── _objects.thebelab-in-cell-button.scss
│   └── page/
│       ├── components/
│       │   ├── _components.hidecells.scss
│       │   ├── _components.page.scss
│       │   └── _components.sidebar-right.scss
│       ├── elements/
│       │   ├── _elements.links.scss
│       │   ├── _elements.syntax-highlighting.scss
│       │   ├── _elements.tables.scss
│       │   ├── _elements.typography.scss
│       │   └── _elements.variables.scss
│       ├── generic/
│       │   └── _generic.phone-scrolling.scss
│       ├── inuitcss/
│       │   ├── elements/
│       │   │   ├── _elements.headings.scss
│       │   │   ├── _elements.images.scss
│       │   │   ├── _elements.page.scss
│       │   │   └── _elements.tables.scss
│       │   ├── generic/
│       │   │   ├── _generic.box-sizing.scss
│       │   │   ├── _generic.normalize.scss
│       │   │   ├── _generic.reset.scss
│       │   │   └── _generic.shared.scss
│       │   ├── objects/
│       │   │   ├── _objects.block.scss
│       │   │   ├── _objects.box.scss
│       │   │   ├── _objects.crop.scss
│       │   │   ├── _objects.flag.scss
│       │   │   ├── _objects.layout.scss
│       │   │   ├── _objects.list-bare.scss
│       │   │   ├── _objects.list-inline.scss
│       │   │   ├── _objects.media.scss
│       │   │   ├── _objects.pack.scss
│       │   │   ├── _objects.ratio.scss
│       │   │   ├── _objects.table.scss
│       │   │   └── _objects.wrapper.scss
│       │   ├── settings/
│       │   │   ├── _example.settings.config.scss
│       │   │   ├── _example.settings.global.scss
│       │   │   └── _settings.core.scss
│       │   ├── tools/
│       │   │   ├── _tools.clearfix.scss
│       │   │   ├── _tools.font-size.scss
│       │   │   ├── _tools.hidden.scss
│       │   │   └── _tools.mq.scss
│       │   └── utilities/
│       │       ├── _utilities.clearfix.scss
│       │       ├── _utilities.headings.scss
│       │       ├── _utilities.hide.scss
│       │       ├── _utilities.print.scss
│       │       ├── _utilities.responsive-spacings.scss
│       │       ├── _utilities.spacings.scss
│       │       └── _utilities.widths.scss
│       ├── main.scss
│       ├── objects/
│       │   ├── _objects.copy-button.scss
│       │   └── _objects.tooltip.scss
│       └── settings/
│           └── settings.global.scss
├── assets/
│   ├── css/
│   │   └── styles.scss
│   ├── custom/
│   │   ├── custom.css
│   │   ├── custom.css.backup
│   │   └── custom.js
│   ├── html/
│   │   ├── index.html
│   │   └── search_form.html
│   ├── js/
│   │   ├── page/
│   │   │   ├── anchors.js
│   │   │   ├── copy-button.js
│   │   │   ├── documentSelectors.js
│   │   │   ├── dom-update.js
│   │   │   ├── hide-cell.js
│   │   │   └── tocbot.js
│   │   └── scripts.js
│   └── vendor/
│       └── thebelab/
│           ├── 0.index.js
│           ├── 1.index.js
│           ├── 2.index.js
│           ├── 3.index.js
│           ├── 4.index.js
│           └── index.js
├── build.sh
├── content/
│   ├── LICENSE.md
│   ├── about.ipynb
│   ├── ch-algorithms/
│   │   ├── bernstein-vazirani.ipynb
│   │   ├── defining-quantum-circuits.ipynb
│   │   ├── deutsch-jozsa.ipynb
│   │   ├── grover.ipynb
│   │   ├── hidden-shift-problem.ipynb
│   │   ├── images/
│   │   │   └── .gitkeep
│   │   ├── index.md
│   │   ├── quantum-counting.ipynb
│   │   ├── quantum-fourier-transform.ipynb
│   │   ├── quantum-key-distribution.ipynb
│   │   ├── quantum-phase-estimation.ipynb
│   │   ├── quantum-walk-search-algorithm.ipynb
│   │   ├── shor.ipynb
│   │   ├── simon.ipynb
│   │   ├── superdense-coding.ipynb
│   │   └── teleportation.ipynb
│   ├── ch-appendix/
│   │   ├── index.md
│   │   ├── linear_algebra.ipynb
│   │   └── qiskit.ipynb
│   ├── ch-applications/
│   │   ├── .gitkeep
│   │   ├── advanced-quantum-algs-index.md
│   │   ├── algs_for_apps_index.md
│   │   ├── algs_index.md
│   │   ├── apps_index.md
│   │   ├── datasets/
│   │   │   └── FFHQ/
│   │   │       ├── happy/
│   │   │       │   ├── 00001_landmarks.json
│   │   │       │   ├── 00011_landmarks.json
│   │   │       │   ├── 00017_landmarks.json
│   │   │       │   ├── 00018_landmarks.json
│   │   │       │   ├── 00019_landmarks.json
│   │   │       │   ├── 00022_landmarks.json
│   │   │       │   ├── 00023_landmarks.json
│   │   │       │   ├── 00025_landmarks.json
│   │   │       │   ├── 00036_landmarks.json
│   │   │       │   └── 00489_landmarks.json
│   │   │       └── sad/
│   │   │           ├── 00109_landmarks.json
│   │   │           ├── 00111_landmarks.json
│   │   │           ├── 00112_landmarks.json
│   │   │           ├── 00142_landmarks.json
│   │   │           ├── 00154_landmarks.json
│   │   │           ├── 00220_landmarks.json
│   │   │           ├── 00269_landmarks.json
│   │   │           ├── 00303_landmarks.json
│   │   │           ├── 00412_landmarks.json
│   │   │           └── 00477_landmarks.json
│   │   ├── examples/
│   │   │   └── 3sat.dimacs
│   │   ├── facial-expression-recognition.ipynb
│   │   ├── hhl_tutorial.ipynb
│   │   ├── image-processing-frqi-neqr.ipynb
│   │   ├── images/
│   │   │   └── .gitkeep
│   │   ├── imp_index.md
│   │   ├── qaoa.ipynb
│   │   ├── quantum-edge-detection.ipynb
│   │   ├── satisfiability-grover.ipynb
│   │   └── vqe-molecules.ipynb
│   ├── ch-demos/
│   │   ├── .gitignore
│   │   ├── chsh.ipynb
│   │   ├── coin-game.ipynb
│   │   ├── first-quantum-game.ipynb
│   │   ├── index.md
│   │   ├── piday-code.ipynb
│   │   └── variational-quantum-regression.ipynb
│   ├── ch-ex/
│   │   ├── Solutions/
│   │   │   ├── Exercise for 2.4.ipynb
│   │   │   └── Exercise for 2.5.ipynb
│   │   ├── ex1.ipynb
│   │   ├── ex2.ipynb
│   │   ├── ex3.ipynb
│   │   ├── hello-qiskit.ipynb
│   │   ├── hello-qiskit.ipynb.orig
│   │   └── index.md
│   ├── ch-gates/
│   │   ├── fun-matrices.ipynb
│   │   ├── introduction.ipynb
│   │   ├── more-circuit-identities.ipynb
│   │   ├── multiple-qubits-entangled-states.ipynb
│   │   ├── oracles.ipynb
│   │   ├── phase-kickback.ipynb
│   │   ├── proving-universality.ipynb
│   │   ├── quantum-gates.ipynb
│   │   └── standard-gate-set.ipynb
│   ├── ch-labs/
│   │   ├── Lab01_QuantumCircuits.ipynb
│   │   ├── Lab02_QuantumMeasurement.ipynb
│   │   ├── Lab03_AccuracyQPE.ipynb
│   │   ├── Lab04_IterativePhaseEstimation.ipynb
│   │   ├── Lab05_Scalable_Shor_Algorithm.ipynb
│   │   ├── Lab06_Grover_search_with_an_unknown_number_of_solutions.ipynb
│   │   ├── Lab07_QuantumSimulationSearchAlgorithm.ipynb
│   │   ├── Lab08_QEC.ipynb
│   │   └── index.md
│   ├── ch-machine-learning/
│   │   ├── data/
│   │   │   └── MNIST/
│   │   │       ├── processed/
│   │   │       │   ├── test.pt
│   │   │       │   └── training.pt
│   │   │       └── raw/
│   │   │           ├── t10k-images-idx3-ubyte
│   │   │           ├── t10k-labels-idx1-ubyte
│   │   │           ├── train-images-idx3-ubyte
│   │   │           └── train-labels-idx1-ubyte
│   │   └── machine-learning-qiskit-pytorch.ipynb
│   ├── ch-paper-implementations/
│   │   ├── tsp.ipynb
│   │   └── vqls.ipynb
│   ├── ch-prerequisites/
│   │   ├── python-and-jupyter-notebooks.ipynb
│   │   └── setting-the-environment.ipynb
│   ├── ch-quantum-hardware/
│   │   ├── Jaynes-Cummings-model.ipynb
│   │   ├── Open-quantum-systems.ipynb
│   │   ├── ac-Stark-shift.ipynb
│   │   ├── accessing_higher_energy_states.ipynb
│   │   ├── cQED-JC-SW.ipynb
│   │   ├── calibrating-qubits-pulse.ipynb
│   │   ├── cliffords2.pickle
│   │   ├── density-matrix.ipynb
│   │   ├── error-correction-repetition-code.ipynb
│   │   ├── hamiltonian-tomography.ipynb
│   │   ├── index-circuits.md
│   │   ├── index-pulses.md
│   │   ├── measurement-error-mitigation.ipynb
│   │   ├── measuring-quantum-volume.ipynb
│   │   ├── randomized-benchmarking.ipynb
│   │   ├── results/
│   │   │   ├── gate_probs_ibmq_16_melbourne.txt
│   │   │   ├── logical_prob_match_ibmq_16_melbourne.txt
│   │   │   ├── probs_ibmq_16_melbourne.txt
│   │   │   └── raw_results_ibmq_16_melbourne.txt
│   │   ├── transmon-physics.ipynb
│   │   └── transpiling-quantum-circuits.ipynb
│   ├── ch-states/
│   │   ├── atoms-computation.ipynb
│   │   ├── case-for-quantum.ipynb
│   │   ├── introduction.ipynb
│   │   ├── old-states-many-qubits.ipynb
│   │   ├── old-unique-properties-qubits.ipynb
│   │   ├── old-writing-down-qubit-states.ipynb
│   │   ├── representing-qubit-states.ipynb
│   │   └── single-qubit-gates.ipynb
│   ├── ch-upcoming/
│   │   └── 0.ipynb
│   ├── preface.ipynb
│   ├── qiskit-textbook.bib
│   ├── upcoming.ipynb
│   ├── using-the-textbook.ipynb
│   ├── what-is-quantum.ipynb
│   └── widgets-index.ipynb
├── deploy.sh
├── environment.yml
├── i18n/
│   ├── LOCALIZATION_CONTRIBUTORS
│   ├── config.i18n.yml
│   └── locales/
│       └── ja/
│           ├── LICENSE.md
│           ├── about.ipynb
│           ├── ch-algorithms/
│           │   ├── bernstein-vazirani.ipynb
│           │   ├── defining-quantum-circuits.ipynb
│           │   ├── deutsch-jozsa.ipynb
│           │   ├── grover.ipynb
│           │   ├── images/
│           │   │   └── .gitkeep
│           │   ├── index.md
│           │   ├── quantum-counting.ipynb
│           │   ├── quantum-fourier-transform.ipynb
│           │   ├── quantum-key-distribution.ipynb
│           │   ├── quantum-phase-estimation.ipynb
│           │   ├── quantum-walk-search-algorithm.ipynb
│           │   ├── shor.ipynb
│           │   ├── simon.ipynb
│           │   ├── superdense-coding.ipynb
│           │   └── teleportation.ipynb
│           ├── ch-appendix/
│           │   ├── index.md
│           │   ├── linear_algebra.ipynb
│           │   └── qiskit.ipynb
│           ├── ch-applications/
│           │   ├── .gitkeep
│           │   ├── QIP/
│           │   │   ├── frqi.ipynb
│           │   │   ├── neqr.ipynb
│           │   │   ├── qip_index.ipynb
│           │   │   └── review-classical-image-proc.ipynb
│           │   ├── advanced-quantum-algs-index.md
│           │   ├── algs_for_apps_index.md
│           │   ├── algs_index.md
│           │   ├── apps_index.md
│           │   ├── hhl_tutorial.ipynb
│           │   ├── image-processing-frqi-neqr.ipynb
│           │   ├── images/
│           │   │   └── .gitkeep
│           │   ├── imp_index.md
│           │   ├── qaoa.ipynb
│           │   ├── satisfiability-grover.ipynb
│           │   └── vqe-molecules.ipynb
│           ├── ch-demos/
│           │   ├── .gitignore
│           │   ├── index.md
│           │   └── piday-code.ipynb
│           ├── ch-ex/
│           │   ├── Solutions/
│           │   │   ├── Exercise for 1.1.ipynb
│           │   │   ├── Exercise for 2.4.ipynb
│           │   │   └── Exercise for 2.5.ipynb
│           │   ├── ex1.ipynb
│           │   ├── ex2.ipynb
│           │   ├── ex3.ipynb
│           │   ├── hello-qiskit.ipynb
│           │   └── index.md
│           ├── ch-gates/
│           │   ├── basic-circuit-identities.ipynb
│           │   ├── fun-matrices.ipynb
│           │   ├── introduction.ipynb
│           │   ├── more-circuit-identities.ipynb
│           │   ├── multiple-qubits-entangled-states.ipynb
│           │   ├── oracles.ipynb
│           │   ├── phase-kickback.ipynb
│           │   ├── proving-universality.ipynb
│           │   ├── quantum-gates.ipynb
│           │   └── standard-gate-set.ipynb
│           ├── ch-labs/
│           │   ├── Lab01_QuantumCircuits.ipynb
│           │   ├── Lab02_QuantumMeasurement.ipynb
│           │   └── index.md
│           ├── ch-machine-learning/
│           │   ├── data/
│           │   │   └── MNIST/
│           │   │       ├── processed/
│           │   │       │   ├── test.pt
│           │   │       │   └── training.pt
│           │   │       └── raw/
│           │   │           ├── t10k-images-idx3-ubyte
│           │   │           ├── t10k-labels-idx1-ubyte
│           │   │           ├── train-images-idx3-ubyte
│           │   │           └── train-labels-idx1-ubyte
│           │   └── machine-learning-qiskit-pytorch.ipynb
│           ├── ch-paper-implementations/
│           │   └── vqls.ipynb
│           ├── ch-prerequisites/
│           │   ├── python-and-jupyter-notebooks.ipynb
│           │   └── setting-the-environment.ipynb
│           ├── ch-quantum-hardware/
│           │   ├── accessing_higher_energy_states.ipynb
│           │   ├── cQED-JC-SW.ipynb
│           │   ├── calibrating-qubits-openpulse.ipynb
│           │   ├── calibrating-qubits-pulse.ipynb
│           │   ├── cliffords2.pickle
│           │   ├── error-correction-repetition-code.ipynb
│           │   ├── index-circuits.md
│           │   ├── index-pulses.md
│           │   ├── measurement-error-mitigation.ipynb
│           │   ├── measuring-quantum-volume.ipynb
│           │   ├── randomized-benchmarking.ipynb
│           │   ├── results/
│           │   │   ├── gate_probs_ibmq_16_melbourne.txt
│           │   │   ├── logical_prob_match_ibmq_16_melbourne.txt
│           │   │   ├── probs_ibmq_16_melbourne.txt
│           │   │   └── raw_results_ibmq_16_melbourne.txt
│           │   ├── transmon-physics.ipynb
│           │   └── transpiling-quantum-circuits.ipynb
│           ├── ch-states/
│           │   ├── atoms-computation.ipynb
│           │   ├── case-for-quantum.ipynb
│           │   ├── introduction.ipynb
│           │   ├── old-states-many-qubits.ipynb
│           │   ├── old-unique-properties-qubits.ipynb
│           │   ├── old-writing-down-qubit-states.ipynb
│           │   ├── pauli-matrices-bloch-sphere.ipynb
│           │   ├── representing-qubit-states.ipynb
│           │   ├── single-qubit-gates.ipynb
│           │   ├── states-many-qubits.ipynb
│           │   ├── unique-properties-qubits.ipynb
│           │   └── writing-down-qubit-states.ipynb
│           ├── ch-upcoming/
│           │   └── 0.ipynb
│           ├── guideline-ja.md
│           ├── preface-old.md
│           ├── preface.ipynb
│           ├── preface.md
│           ├── qiskit-textbook.bib
│           ├── upcoming.ipynb
│           ├── using-the-textbook.ipynb
│           ├── what-is-quantum.ipynb
│           └── widgets-index.ipynb
├── qiskit-textbook-src/
│   ├── qiskit_textbook/
│   │   ├── __init__.py
│   │   ├── games/
│   │   │   ├── __init__.py
│   │   │   ├── hello_quantum.py
│   │   │   └── qiskit_game_engine.py
│   │   ├── problems/
│   │   │   └── __init__.py
│   │   ├── tools/
│   │   │   └── __init__.py
│   │   └── widgets/
│   │       ├── __init__.py
│   │       └── _helpers.py
│   └── setup.py
├── rclone.conf.enc
├── requirements-dev.txt
├── requirements.txt
├── runtime.txt
└── scripts/
    ├── clean.py
    ├── create_redirections.py
    ├── postprocess_html.py
    ├── replace_code_cells.py
    ├── run_notebooks.py
    └── run_notebooks_soft.py
Download .txt
Showing preview only (1,418K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3301 symbols across 18 files)

FILE: assets/js/scripts.js
  constant LEFT_ARROW_KEYCODE (line 122) | const LEFT_ARROW_KEYCODE = 37
  constant RIGHT_ARROW_KEYCODE (line 123) | const RIGHT_ARROW_KEYCODE = 39

FILE: assets/vendor/thebelab/0.index.js
  function ensureState (line 67) | function ensureState(states, name) {
  function toRegex (line 72) | function toRegex(val, caret) {
  function asToken (line 84) | function asToken(val) {
  function Rule (line 94) | function Rule(data, states) {
  function tokenFunction (line 101) | function tokenFunction(states, config) {
  function cmp (line 164) | function cmp(a, b) {
  function enterLocalMode (line 176) | function enterLocalMode(config, state, spec, token) {
  function indexOf (line 192) | function indexOf(val, arr) {
  function indentFunction (line 196) | function indentFunction(states, meta) {
  function errorIfNotEmpty (line 426) | function errorIfNotEmpty(stream) {
  function tokenBase (line 523) | function tokenBase(stream, state) {
  function tokenString (line 562) | function tokenString(quote) {
  function Context (line 584) | function Context(indented, column, type, align, prev) {
  function pushContext (line 591) | function pushContext(state, col, type) {
  function popContext (line 597) | function popContext(state) {
  function words (line 656) | function words(str) {
  function basicToken (line 772) | function basicToken(stream,state){
  function base (line 1171) | function base(stream, state) {
  function inString (line 1200) | function inString(stream, state) {
  function inComment (line 1211) | function inComment(stream, state) {
  function createLookupMap (line 1228) | function createLookupMap(words) {
  function is (line 1236) | function is(value, test) {
  function tokenString (line 1320) | function tokenString(stream, state) {
  function tokenize (line 1340) | function tokenize(stream, state) {
  function makeKeywords (line 1430) | function makeKeywords(str) {
  function isNumber (line 1558) | function isNumber(ch, stream){
  function wordRegexp (line 1692) | function wordRegexp(words) {
  function tokenBase (line 1721) | function tokenBase(stream, state) {
  function tokenFactory (line 1850) | function tokenFactory(delimiter, singleline, outclass) {
  function longComment (line 1877) | function longComment(stream, state) {
  function indent (line 1889) | function indent(stream, state, type) {
  function dedent (line 1913) | function dedent(stream, state) {
  function tokenLexer (line 1937) | function tokenLexer(stream, state) {
  function readSym (line 2059) | function readSym(stream) {
  function base (line 2068) | function base(stream, state) {
  function inString (line 2102) | function inString(stream, state) {
  function inComment (line 2111) | function inComment(stream, state) {
  function wordRegExp (line 2185) | function wordRegExp(words, end) {
  function chain (line 2189) | function chain(tokenize, stream, state) {
  function tokenBase (line 2228) | function tokenBase(stream, state) {
  function tokenNest (line 2407) | function tokenNest(begin, end, style, started) {
  function tokenMacro (line 2426) | function tokenMacro(begin, end, started) {
  function tokenMacroDef (line 2444) | function tokenMacroDef(stream, state) {
  function tokenFollowIdent (line 2461) | function tokenFollowIdent(stream, state) {
  function tokenFollowType (line 2475) | function tokenFollowType(stream, state) {
  function tokenQuote (line 2485) | function tokenQuote(end, style, embed) {
  function tokenHereDoc (line 2524) | function tokenHereDoc(phrase, embed) {
  function tokenBase (line 2796) | function tokenBase(stream, state) {
  function tokenString (line 2846) | function tokenString(quote) {
  function tokenComment (line 2859) | function tokenComment(stream, state) {
  function tokenNestedComment (line 2871) | function tokenNestedComment(stream, state) {
  function Context (line 2883) | function Context(indented, column, type, align, prev) {
  function pushContext (line 2890) | function pushContext(state, col, type) {
  function popContext (line 2896) | function popContext(state) {
  function words (line 2963) | function words(str) {
  function set (line 3023) | function set(words) {
  function pushInterpolationStack (line 3029) | function pushInterpolationStack(state) {
  function popInterpolationStack (line 3033) | function popInterpolationStack(state) {
  function sizeInterpolationStack (line 3037) | function sizeInterpolationStack(state) {
  function tokenString (line 3085) | function tokenString(quote, stream, state, raw) {
  function tokenInterpolation (line 3112) | function tokenInterpolation(stream, state) {
  function tokenInterpolationIdentifier (line 3124) | function tokenInterpolationIdentifier(stream, state) {
  function tokenNestedComment (line 3130) | function tokenNestedComment(depth) {
  function tokenBase (line 3268) | function tokenBase (stream, state) {
  function inString (line 3290) | function inString (delimiter, previousTokenizer) {
  function inVariable (line 3313) | function inVariable (stream, state) {
  function inTag (line 3412) | function inTag (stream, state) {
  function inComment (line 3538) | function inComment (stream, state) {
  function inBlockComment (line 3545) | function inBlockComment (stream, state) {
  function ret (line 3825) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 3827) | function tokenBase(stream, state) {
  function tokenSGMLComment (line 3856) | function tokenSGMLComment(stream, state) {
  function tokenString (line 3868) | function tokenString(quote) {
  function inBlock (line 3882) | function inBlock(style, terminator) {
  function forEach (line 3966) | function forEach(arr, f) {
  function some (line 3969) | function some(arr, f) {
  function chain (line 4112) | function chain(stream, state, f) {
  function tokenBase (line 4117) | function tokenBase(stream, state) {
  function tokenComment (line 4247) | function tokenComment(stream, state) {
  function tokenString (line 4266) | function tokenString(quote, style) {
  function words (line 4531) | function words(str) {
  function metaHook (line 4537) | function metaHook(stream, state) {
  function tokenBase (line 4556) | function tokenBase(stream, state) {
  function tokenString (line 4622) | function tokenString(quote) {
  function tokenComment (line 4635) | function tokenComment(stream, state) {
  function Context (line 4647) | function Context(indented, column, type, align, prev) {
  function pushContext (line 4654) | function pushContext(state, col, type) {
  function popContext (line 4657) | function popContext(state) {
  function wordObj (line 4744) | function wordObj(words) {
  function chain (line 4817) | function chain(newtok, stream, state) {
  function tokenBase (line 4822) | function tokenBase(stream, state) {
  function readQuoted (line 4848) | function readQuoted(quote, style,  unescaped) {
  function switchState (line 4913) | function switchState(source, setState, f) {
  function normal (line 4929) | function normal() {
  function ncomment (line 5014) | function ncomment(type, nest) {
  function stringLiteral (line 5037) | function stringLiteral(source, setState) {
  function stringGap (line 5056) | function stringGap(source, setState) {
  function tokenizer (line 5213) | function tokenizer(stream,state) {
  function nongreedy (line 5400) | function nongreedy(stream,re,words) {
  function greedy (line 5414) | function greedy(stream,re,words) {
  function doubleQuote (line 5431) | function doubleQuote(stream) {
  function singleQuote (line 5435) | function singleQuote(stream) {
  function quote (line 5439) | function quote(stream,quoteChar,escapeChar) {
  function lookahead (line 5451) | function lookahead(stream) {
  function is_member (line 5456) | function is_member(element,list) {
  function rval (line 5460) | function rval(state,stream,type) {
  function aToken (line 5494) | function aToken(tok,col,ind,typ) {
  function realToken (line 5501) | function realToken(type,stream) {
  function fakeToken (line 5508) | function fakeToken(type) {
  function peekToken (line 5512) | function peekToken(state,depth) {
  function pushToken (line 5523) | function pushToken(state,token) {
  function maybe_drop_pre (line 5531) | function maybe_drop_pre(s,token) {
  function maybe_drop_post (line 5545) | function maybe_drop_post(s) {
  function d (line 5573) | function d(stack,tt) {
  function indenter (line 5613) | function indenter(state,textAfter) {
  function wordafter (line 5656) | function wordafter(str) {
  function postcommaToken (line 5662) | function postcommaToken(state) {
  function defaultToken (line 5669) | function defaultToken(state) {
  function getToken (line 5683) | function getToken(state,tokens) {
  function getTokenIndex (line 5690) | function getTokenIndex(objs,propname,propvals) {
  function truthy (line 5700) | function truthy(x) {
  function tokenBase (line 5878) | function tokenBase(stream, state) {
  function tokenComment (line 5919) | function tokenComment(stream, state) {
  function Context (line 5931) | function Context(indented, column, type, align, prev) {
  function pushContext (line 5939) | function pushContext(state, col, type) {
  function popContext (line 5943) | function popContext(state) {
  function toWordList (line 6027) | function toWordList(words) {
  function searchWordList (line 6078) | function searchWordList (wordList, word) {
  function words (line 6214) | function words(array) {
  function tokenBase (line 6316) | function tokenBase(stream, state) {
  function tokenString (line 6354) | function tokenString(quote) {
  function x86 (line 6539) | function x86(_parserConfig) {
  function armv6 (line 6586) | function armv6(_parserConfig) {
  function nextUntilUnescaped (line 6629) | function nextUntilUnescaped(stream, end) {
  function clikeComment (line 6640) | function clikeComment(stream, state) {
  function tokenBase (line 6975) | function tokenBase(stream, state) {
  function tokenString (line 7019) | function tokenString(quote) {
  function tokenComment (line 7032) | function tokenComment(stream, state) {
  function Context (line 7044) | function Context(indented, column, type, align, prev) {
  function pushContext (line 7051) | function pushContext(state, col, type) {
  function popContext (line 7054) | function popContext(state) {
  function words (line 7144) | function words(str) {
  function tokenBase (line 7160) | function tokenBase(stream, state) {
  function startString (line 7210) | function startString(quote, stream, state) {
  function tokenBaseUntilBrace (line 7236) | function tokenBaseUntilBrace() {
  function tokenComment (line 7254) | function tokenComment(stream, state) {
  function expectExpression (line 7266) | function expectExpression(last, newline) {
  function Context (line 7272) | function Context(indented, column, type, align, prev) {
  function pushContext (line 7279) | function pushContext(state, col, type) {
  function popContext (line 7282) | function popContext(state) {
  function rubyInQuote (line 7386) | function rubyInQuote(endQuote) {
  function ruby (line 7400) | function ruby(stream, state) {
  function html (line 7408) | function html(stream, state) {
  function switchState (line 7677) | function switchState(source, setState, f) {
  function normal (line 7693) | function normal(source, setState) {
  function ncomment (line 7786) | function ncomment(type, nest) {
  function stringLiteral (line 7810) | function stringLiteral(source, setState) {
  function stringGap (line 7833) | function stringGap(source, setState) {
  function setType (line 7845) | function setType(t) {
  function kw (line 7956) | function kw(type) {return {type: type, style: "keyword"};}
  function chain (line 7974) | function chain(stream, state, f) {
  function toUnescaped (line 7979) | function toUnescaped(stream, end) {
  function ret (line 7991) | function ret(tp, style, cont) {
  function haxeTokenBase (line 7996) | function haxeTokenBase(stream, state) {
  function haxeTokenString (line 8047) | function haxeTokenString(quote) {
  function haxeTokenComment (line 8055) | function haxeTokenComment(stream, state) {
  function HaxeLexical (line 8071) | function HaxeLexical(indented, column, type, align, prev, info) {
  function inScope (line 8080) | function inScope(state, varname) {
  function parseHaxe (line 8085) | function parseHaxe(state, style, type, content, stream) {
  function imported (line 8107) | function imported(state, typename) {
  function registerimport (line 8115) | function registerimport(importname) {
  function pass (line 8124) | function pass() {
  function cont (line 8127) | function cont() {
  function inList (line 8131) | function inList(name, list) {
  function register (line 8136) | function register(varname) {
  function pushcontext (line 8151) | function pushcontext() {
  function popcontext (line 8155) | function popcontext() {
  function pushlex (line 8160) | function pushlex(type, info) {
  function poplex (line 8168) | function poplex() {
  function expect (line 8178) | function expect(wanted) {
  function statement (line 8187) | function statement(type) {
  function expression (line 8209) | function expression(type) {
  function maybeexpression (line 8220) | function maybeexpression(type) {
  function maybeoperator (line 8225) | function maybeoperator(type, value) {
  function maybeattribute (line 8234) | function maybeattribute(type) {
  function metadef (line 8240) | function metadef(type) {
  function metaargs (line 8245) | function metaargs(type) {
  function importdef (line 8249) | function importdef (type, value) {
  function typedef (line 8254) | function typedef (type, value)
  function maybelabel (line 8260) | function maybelabel(type) {
  function property (line 8264) | function property(type) {
  function objprop (line 8267) | function objprop(type) {
  function commasep (line 8271) | function commasep(what, end) {
  function block (line 8282) | function block(type) {
  function vardef1 (line 8286) | function vardef1(type, value) {
  function vardef2 (line 8290) | function vardef2(type, value) {
  function forspec1 (line 8294) | function forspec1(type, value) {
  function forin (line 8302) | function forin(_type, value) {
  function functiondef (line 8305) | function functiondef(type, value) {
  function typeuse (line 8311) | function typeuse(type) {
  function typestring (line 8314) | function typestring(type) {
  function typeprop (line 8319) | function typeprop(type) {
  function funarg (line 8322) | function funarg(type, value) {
  function maybeBackup (line 8533) | function maybeBackup(stream, pat, style) {
  function getAttrRegexp (line 8545) | function getAttrRegexp(attr) {
  function getAttrValue (line 8551) | function getAttrValue(text, attr) {
  function getTagRegexp (line 8556) | function getTagRegexp(tagName, anchored) {
  function addTags (line 8560) | function addTags(from, to) {
  function findMatchingMode (line 8569) | function findMatchingMode(tagInfo, tagText) {
  function html (line 8591) | function html(stream, state) {
  function failFirstLine (line 8679) | function failFirstLine(stream, state) {
  function start (line 8685) | function start(stream, state) {
  function responseStatusCode (line 8697) | function responseStatusCode(stream, state) {
  function responseStatusText (line 8718) | function responseStatusText(stream, state) {
  function requestPath (line 8724) | function requestPath(stream, state) {
  function requestProtocol (line 8730) | function requestProtocol(stream, state) {
  function header (line 8739) | function header(stream) {
  function body (line 8753) | function body(stream) {
  function wordRegexp (line 8799) | function wordRegexp(words) {
  function tokenBase (line 9029) | function tokenBase(stream) {
  function tokenBase (line 9119) | function tokenBase (stream, state) {
  function Context (line 9252) | function Context(state, mode, depth, prev) {
  function copyContext (line 9256) | function copyContext(context) {
  function flatXMLIndent (line 9267) | function flatXMLIndent(state) {
  function token (line 9275) | function token(stream, state) {
  function xmlToken (line 9282) | function xmlToken(stream, state, cx) {
  function jsToken (line 9340) | function jsToken(stream, state, cx) {
  function prefixRE (line 9700) | function prefixRE(words) {
  function wordRE (line 9703) | function wordRE(words) {
  function readBracket (line 9749) | function readBracket(stream) {
  function normal (line 9756) | function normal(stream, state) {
  function bracketed (line 9779) | function bracketed(level, style) {
  function string (line 9792) | function string(quote) {
  function tokenBase (line 9878) | function tokenBase(stream, state) {
  function tokenString (line 9979) | function tokenString(stream, state) {
  function tokenComment (line 9994) | function tokenComment(stream, state) {
  function styleForHeader (line 10065) | function styleForHeader(header) {
  function readToken (line 10070) | function readToken(stream, state) {
  function parseWords (line 10185) | function parseWords(str) {
  function chain (line 10253) | function chain(stream, state, f) {
  function tokenBase (line 10257) | function tokenBase(stream, state) {
  function tokenComment (line 10320) | function tokenComment(stream, state) {
  function tokenUnparsed (line 10331) | function tokenUnparsed(stream, state) {
  function tokenBase (line 10416) | function tokenBase(stream, state) {
  function tokenString (line 10478) | function tokenString(stream, state) {
  function tokenComment (line 10493) | function tokenComment(stream, state) {
  function tokenLongString (line 10506) | function tokenLongString(stream, state) {
  function tokenLineComment (line 10765) | function tokenLineComment(stream, state) {
  function tokenBlockComment (line 10771) | function tokenBlockComment(stream, state) {
  function tokenString (line 10783) | function tokenString(stream, state) {
  function tokenIdent (line 10797) | function tokenIdent(stream, state) {
  function tokenQIdent (line 10816) | function tokenQIdent(stream, state) {
  function tokenUnsignedNuber (line 10828) | function tokenUnsignedNuber(stream, state) {
  function words (line 10937) | function words(str) {
  function def (line 10948) | function def(mimes, mode) {
  function wordRegexpBoundary (line 11062) | function wordRegexpBoundary(pWords) {
  function wordRegexp (line 11066) | function wordRegexp(pWords) {
  function startStateFn (line 11070) | function startStateFn() {
  function copyStateFn (line 11079) | function copyStateFn(pState) {
  function produceTokenFunction (line 11088) | function produceTokenFunction(pConfig) {
  function wordRegexp (line 11190) | function wordRegexp(words) {
  function tokenBase (line 11205) | function tokenBase(stream, state) {
  function words (line 11343) | function words(str) {
  function ret (line 11363) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 11365) | function tokenBase(stream, state) {
  function tokenCComment (line 11424) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 11436) | function tokenSGMLComment(stream, state) {
  function tokenString (line 11448) | function tokenString(quote) {
  function transitState (line 11675) | function transitState(currState, c) {
  function wordRegexp (line 11834) | function wordRegexp(words) {
  function tokenTranspose (line 11865) | function tokenTranspose(stream, state) {
  function tokenComment (line 11876) | function tokenComment(stream, state) {
  function tokenBase (line 11885) | function tokenBase(stream, state) {
  function wordRegexp (line 11982) | function wordRegexp(words) {
  function tokenBase (line 12003) | function tokenBase(stream, state) {
  function tokenClass (line 12105) | function tokenClass(stream, state) {
  function tokenMeth (line 12114) | function tokenMeth(stream, state) {
  function tokenFunProc (line 12123) | function tokenFunProc(stream, state) {
  function tokenComment (line 12144) | function tokenComment(stream, state) {
  function tokenString (line 12156) | function tokenString(quote) {
  function buildElectricInputRegEx (line 12172) | function buildElectricInputRegEx() {
  function words (line 12241) | function words(str) {
  function tokenBase (line 12265) | function tokenBase(stream, state) {
  function tokenString (line 12303) | function tokenString(quote) {
  function tokenComment (line 12315) | function tokenComment(stream, state) {
  function identifier (line 12372) | function identifier(stream) {
  function tokenChain (line 12960) | function tokenChain(stream,state,chain,style,tail){     // NOTE: chain.l...
  function tokenSOMETHING (line 12980) | function tokenSOMETHING(stream,state,string){
  function tokenPerl (line 12988) | function tokenPerl(stream,state){
  function look (line 13281) | function look(stream, c){
  function prefix (line 13286) | function prefix(stream, c){
  function suffix (line 13296) | function suffix(stream, c){
  function eatSuffix (line 13303) | function eatSuffix(stream, c){
  function keywords (line 13336) | function keywords(str) {
  function matchSequence (line 13343) | function matchSequence(list, end, escapes) {
  function phpString (line 13355) | function phpString(closing, escapes) {
  function phpString_ (line 13358) | function phpString_(stream, state, closing, escapes) {
  function dispatch (line 13479) | function dispatch(stream, state) {
  function chain (line 13592) | function chain(stream, state, f) {
  function tokenComment (line 13597) | function tokenComment(stream, state) {
  function tokenString (line 13610) | function tokenString(quote) {
  function tokenBase (line 13626) | function tokenBase(stream, state) {
  function keywords (line 13704) | function keywords(str) {
  function buildRegexp (line 13766) | function buildRegexp(patterns, options) {
  function tokenBase (line 13912) | function tokenBase(stream, state) {
  function tokenSingleQuoteString (line 13987) | function tokenSingleQuoteString(stream, state) {
  function tokenDoubleQuoteString (line 14001) | function tokenDoubleQuoteString(stream, state) {
  function tokenStringInterpolation (line 14024) | function tokenStringInterpolation(stream, state) {
  function tokenMultiStringReturn (line 14028) | function tokenMultiStringReturn(stream, state) {
  function tokenHereStringInterpolation (line 14034) | function tokenHereStringInterpolation(stream, state) {
  function tokenInterpolation (line 14038) | function tokenInterpolation(stream, state, parentTokenize) {
  function tokenComment (line 14062) | function tokenComment(stream, state) {
  function tokenVariable (line 14074) | function tokenVariable(stream, state) {
  function tokenVariableWithBraces (line 14089) | function tokenVariableWithBraces(stream, state) {
  function tokenMultiString (line 14100) | function tokenMultiString(stream, state) {
  function wordRegexp (line 14256) | function wordRegexp(words) {
  function tokenBase (line 14273) | function tokenBase(stream) {
  function State (line 14348) | function State() {
  function javaScript (line 14424) | function javaScript(stream, state) {
  function javaScriptArguments (line 14441) | function javaScriptArguments(stream, state) {
  function yieldStatement (line 14462) | function yieldStatement(stream) {
  function doctype (line 14468) | function doctype(stream) {
  function interpolation (line 14474) | function interpolation(stream, state) {
  function interpolationContinued (line 14482) | function interpolationContinued(stream, state) {
  function caseStatement (line 14498) | function caseStatement(stream, state) {
  function when (line 14505) | function when(stream, state) {
  function defaultStatement (line 14513) | function defaultStatement(stream) {
  function extendsStatement (line 14519) | function extendsStatement(stream, state) {
  function append (line 14526) | function append(stream, state) {
  function prepend (line 14532) | function prepend(stream, state) {
  function block (line 14538) | function block(stream, state) {
  function include (line 14545) | function include(stream, state) {
  function includeFiltered (line 14552) | function includeFiltered(stream, state) {
  function includeFilteredContinued (line 14559) | function includeFilteredContinued(stream, state) {
  function mixin (line 14568) | function mixin(stream, state) {
  function call (line 14575) | function call(stream, state) {
  function callArguments (line 14589) | function callArguments(stream, state) {
  function conditional (line 14600) | function conditional(stream, state) {
  function each (line 14607) | function each(stream, state) {
  function eachContinued (line 14613) | function eachContinued(stream, state) {
  function whileStatement (line 14628) | function whileStatement(stream, state) {
  function tag (line 14635) | function tag(stream, state) {
  function filter (line 14646) | function filter(stream, state) {
  function code (line 14663) | function code(stream, state) {
  function id (line 14670) | function id(stream) {
  function className (line 14676) | function className(stream) {
  function attrs (line 14682) | function attrs(stream, state) {
  function attrsContinued (line 14694) | function attrsContinued(stream, state) {
  function attributesBlock (line 14738) | function attributesBlock(stream, state) {
  function indent (line 14746) | function indent(stream) {
  function comment (line 14752) | function comment(stream, state) {
  function colon (line 14760) | function colon(stream) {
  function text (line 14766) | function text(stream, state) {
  function dot (line 14778) | function dot(stream, state) {
  function fail (line 14791) | function fail(stream) {
  function setInnerMode (line 14797) | function setInnerMode(stream, state, mode) {
  function innerMode (line 14810) | function innerMode(stream, state, force) {
  function restOfLine (line 14830) | function restOfLine(stream, state) {
  function startState (line 14844) | function startState() {
  function copyState (line 14847) | function copyState(state) {
  function nextToken (line 14856) | function nextToken(stream, state) {
  function define (line 14940) | function define(style, string) {
  function tokenString (line 14965) | function tokenString(stream, state) {
  function tokenize (line 14986) | function tokenize(stream, state) {
  function buildRE (line 15165) | function buildRE(w){return new RegExp("^("+w.join("|")+")$");}
  function tokenBase (line 15166) | function tokenBase(stream,state){
  function tokenLineComment (line 15208) | function tokenLineComment(stream,state){
  function tokenBlockComment (line 15211) | function tokenBlockComment(stream,state){
  function tokenCommentToEOF (line 15218) | function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";}
  function tokenString (line 15219) | function tokenString(stream,state){
  function pushContext (line 15228) | function pushContext(state,type,col){state.context={prev:state.context,i...
  function popContext (line 15229) | function popContext(state){state.indent=state.context.indent;state.conte...
  function format (line 15486) | function format(string) {
  function to_normal (line 15566) | function to_normal(stream, state) {
  function to_explicit (line 15766) | function to_explicit(stream, state) {
  function to_comment (line 15873) | function to_comment(stream, state) {
  function to_verbatim (line 15877) | function to_verbatim(stream, state) {
  function as_block (line 15881) | function as_block(stream, state, token) {
  function to_mode (line 15894) | function to_mode(stream, state) {
  function context (line 15913) | function context(phase, stage, mode, local) {
  function change (line 15917) | function change(state, tok, ctx) {
  function stage (line 15922) | function stage(state) {
  function phase (line 15926) | function phase(state) {
  function wordObj (line 15990) | function wordObj(words) {
  function chain (line 16009) | function chain(newtok, stream, state) {
  function tokenBase (line 16014) | function tokenBase(stream, state) {
  function regexpAhead (line 16114) | function regexpAhead(stream) {
  function tokenBaseUntilBrace (line 16136) | function tokenBaseUntilBrace(depth) {
  function tokenBaseOnce (line 16152) | function tokenBaseOnce() {
  function readQuoted (line 16163) | function readQuoted(quote, style, embed, unescaped) {
  function readHereDoc (line 16194) | function readHereDoc(phrase) {
  function readBlockComment (line 16201) | function readBlockComment(stream, state) {
  function define (line 16410) | function define(style, string, context) {
  function tokenize (line 16454) | function tokenize(stream, state) {
  function tokenRegexp (line 16691) | function tokenRegexp(words) {
  function isEndLine (line 16706) | function isEndLine(stream) {
  function urlTokens (line 16710) | function urlTokens(stream, state) {
  function comment (line 16730) | function comment(indentation, multiLine) {
  function buildStringTokenizer (line 16749) | function buildStringTokenizer(quote, greedy) {
  function buildInterpolationTokenizer (line 16778) | function buildInterpolationTokenizer(currentTokenizer) {
  function indent (line 16790) | function indent(state) {
  function dedent (line 16799) | function dedent(state) {
  function tokenBase (line 16805) | function tokenBase(stream, state) {
  function tokenLexer (line 17066) | function tokenLexer(stream, state) {
  function makeKeywords (line 17155) | function makeKeywords(str) {
  function stateStack (line 17164) | function stateStack(indent, type, prev) { // represents a state stack ob...
  function pushStack (line 17170) | function pushStack(state, indent, type) {
  function popStack (line 17174) | function popStack(state) {
  function isBinaryNumber (line 17183) | function isBinaryNumber (stream) {
  function isOctalNumber (line 17187) | function isOctalNumber (stream) {
  function isDecimalNumber (line 17191) | function isDecimalNumber (stream, backup) {
  function isHexNumber (line 17198) | function isHexNumber (stream) {
  function words (line 17420) | function words(str) {
  function tokenBase (line 17430) | function tokenBase(stream, state) {
  function tokenMultiLineString (line 17517) | function tokenMultiLineString(stream, state)
  function tokenCComment (line 17542) | function tokenCComment(stream, state) {
  function tokenString (line 17554) | function tokenString(quote) {
  function backup (line 17678) | function backup(pos, tokenize, style) {
  function maybeBackup (line 17693) | function maybeBackup(stream, state, pat, offset, style) {
  function continueLine (line 17703) | function continueLine(state, column) {
  function finishContinue (line 17712) | function finishContinue(state) {
  function lineContinuable (line 17719) | function lineContinuable(column, tokenize) {
  function commaContinuable (line 17733) | function commaContinuable(column, tokenize) {
  function rubyInQuote (line 17744) | function rubyInQuote(endQuote, tokenize) {
  function startRubySplat (line 17758) | function startRubySplat(tokenize) {
  function ruby (line 17780) | function ruby(stream, state) {
  function htmlLine (line 17784) | function htmlLine(stream, state) {
  function html (line 17790) | function html(stream, state) {
  function startHtmlLine (line 17798) | function startHtmlLine(lastTokenize) {
  function startHtmlMode (line 17806) | function startHtmlMode(stream, state, offset) {
  function comment (line 17817) | function comment(stream, state) {
  function commentMode (line 17822) | function commentMode(stream, state) {
  function attributeWrapper (line 17833) | function attributeWrapper(stream, state) {
  function attributeWrapperAssign (line 17847) | function attributeWrapperAssign(stream, state) {
  function attributeWrapperValue (line 17854) | function attributeWrapperValue(stream, state) {
  function startAttributeWrapperMode (line 17871) | function startAttributeWrapperMode(state, endQuote, tokenize) {
  function sub (line 17884) | function sub(stream, state) {
  function firstSub (line 17898) | function firstSub(stream, state) {
  function createMode (line 17904) | function createMode(mode) {
  function getMode (line 17917) | function getMode(mode) {
  function startSubMode (line 17924) | function startSubMode(mode, state) {
  function doctypeLine (line 17941) | function doctypeLine(stream, _state) {
  function startLine (line 17946) | function startLine(stream, state) {
  function slim (line 17974) | function slim(stream, state) {
  function slimTag (line 17981) | function slimTag(stream, state) {
  function slimTagExtras (line 17992) | function slimTagExtras(stream, state) {
  function slimClass (line 17999) | function slimClass(stream, state) {
  function slimAttribute (line 18010) | function slimAttribute(stream, state) {
  function slimAttributeAssign (line 18025) | function slimAttributeAssign(stream, state) {
  function slimAttributeValue (line 18034) | function slimAttributeValue(stream, state) {
  function slimAttributeSymbols (line 18053) | function slimAttributeSymbols(stream, state) {
  function readQuoted (line 18062) | function readQuoted(quote, style, embed, unescaped, nextTokenize) {
  function slimContent (line 18096) | function slimContent(stream, state) {
  function cont (line 18397) | function cont(style, lastType) {
  function chain (line 18402) | function chain(stream, state, parser) {
  function doesNotCount (line 18408) | function doesNotCount(stream, pos) {
  function tokenTop (line 18414) | function tokenTop(stream, state) {
  function tokenSmarty (line 18440) | function tokenSmarty(stream, state) {
  function tokenAttribute (line 18523) | function tokenAttribute(quote) {
  function tokenBlock (line 18539) | function tokenBlock(style, terminator) {
  function isNumber (line 18619) | function isNumber(word) {
  function tokenString (line 18623) | function tokenString(quote) {
  function tokenOperator (line 18636) | function tokenOperator(operator) {
  function tokenWord (line 18655) | function tokenWord(ch) {
  function tokenBase (line 18674) | function tokenBase(stream, state) {
  function last (line 18740) | function last(array) {
  function tokenUntil (line 18744) | function tokenUntil(stream, state, untilRegExp) {
  function contains (line 18766) | function contains(list, element) {
  function prepend (line 18774) | function prepend(list, element) {
  function ref (line 18783) | function ref(list, name, loose) {
  function popscope (line 18787) | function popscope(state) {
  function wordRegexp (line 19125) | function wordRegexp(words) {
  function tokenBase (line 19144) | function tokenBase(stream, state) {
  function tokenLiteral (line 19198) | function tokenLiteral(quote) {
  function pushContext (line 19212) | function pushContext(state, type, col) {
  function popContext (line 19215) | function popContext(state) {
  function tokenBase (line 19462) | function tokenBase(stream, state) {
  function tokenCComment (line 19579) | function tokenCComment(stream, state) {
  function tokenString (line 19594) | function tokenString(quote) {
  function tokenParenthesized (line 19612) | function tokenParenthesized(stream, state) {
  function Context (line 19624) | function Context(type, indent, prev, line) {
  function pushContext (line 19631) | function pushContext(state, stream, type, indent) {
  function popContext (line 19637) | function popContext(state, currentIndent) {
  function pass (line 19645) | function pass(type, stream, state) {
  function popAndPass (line 19649) | function popAndPass(type, stream, state, n) {
  function wordIsTag (line 19659) | function wordIsTag(word) {
  function wordIsProperty (line 19663) | function wordIsProperty(word) {
  function wordIsBlock (line 19668) | function wordIsBlock(word) {
  function wordIsVendorPrefix (line 19672) | function wordIsVendorPrefix(word) {
  function wordAsValue (line 19676) | function wordAsValue(word) {
  function typeIsBlock (line 19690) | function typeIsBlock(type, stream) {
  function typeIsInterpolation (line 19694) | function typeIsInterpolation(type, stream) {
  function typeIsPseudo (line 19698) | function typeIsPseudo(type, stream) {
  function startOfLine (line 19702) | function startOfLine(stream) {
  function endOfLine (line 19706) | function endOfLine(stream) {
  function firstWordOfLine (line 19710) | function firstWordOfLine(line) {
  function wordRegexp (line 20169) | function wordRegexp(words) {
  function keySet (line 20174) | function keySet(array) {
  function escapeRegExp (line 20180) | function escapeRegExp(text) {
  function wordSet (line 20210) | function wordSet(words) {
  function tokenBase (line 20239) | function tokenBase(stream, state, prev) {
  function tokenUntilClosingParen (line 20293) | function tokenUntilClosingParen() {
  function tokenString (line 20312) | function tokenString(quote) {
  function tokenComment (line 20337) | function tokenComment(stream, state) {
  function Context (line 20352) | function Context(prev, align, indented) {
  function pushContext (line 20358) | function pushContext(state, stream) {
  function popContext (line 20363) | function popContext(state) {
  function parseWords (line 20441) | function parseWords(str) {
  function chain (line 20461) | function chain(stream, state, f) {
  function tokenBase (line 20465) | function tokenBase(stream, state) {
  function tokenString (line 20508) | function tokenString(quote) {
  function tokenComment (line 20522) | function tokenComment(stream, state) {
  function tokenUnparsed (line 20533) | function tokenUnparsed(stream, state) {
  function startNewLine (line 20619) | function startNewLine(stream, state) {
  function handlePhraseModifier (line 20628) | function handlePhraseModifier(stream, state, ch) {
  function togglePhraseModifier (line 20689) | function togglePhraseModifier(stream, state, phraseModifier, closeRE, op...
  function tokenStyles (line 20706) | function tokenStyles(state) {
  function textileDisabled (line 20723) | function textileDisabled(state) {
  function tokenStylesWith (line 20738) | function tokenStylesWith(state, extraStyles) {
  function activeStyles (line 20749) | function activeStyles(state) {
  function blankLine (line 20758) | function blankLine(state) {
  function RE (line 20858) | function RE(name) {
  function chain (line 21108) | function chain(stream, state, f) {
  function tokenBase (line 21113) | function tokenBase(stream, state) {
  function twTokenComment (line 21226) | function twTokenComment(stream, state) {
  function twTokenStrong (line 21239) | function twTokenStrong(stream, state) {
  function twTokenCode (line 21253) | function twTokenCode(stream, state) {
  function twTokenEm (line 21275) | function twTokenEm(stream, state) {
  function twTokenUnderline (line 21289) | function twTokenUnderline(stream, state) {
  function twTokenStrike (line 21304) | function twTokenStrike(stream, state) {
  function twTokenMacro (line 21318) | function twTokenMacro(stream, state) {
  function inBlock (line 21378) | function inBlock(style, terminator, returnTokenizer) {
  function inLine (line 21394) | function inLine(style) {
  function inText (line 21404) | function inText(stream, state) {
  function inPlugin (line 21496) | function inPlugin(stream, state) {
  function inAttribute (line 21530) | function inAttribute(quote) {
  function inAttributeNoQuote (line 21542) | function inAttributeNoQuote() {
  function pass (line 21557) | function pass() {
  function cont (line 21561) | function cont() {
  function pushContext (line 21566) | function pushContext(pluginName, startOfLine) {
  function popContext (line 21577) | function popContext() {
  function element (line 21581) | function element(type) {
  function endplugin (line 21602) | function endplugin(startOfLine) {
  function endcloseplugin (line 21614) | function endcloseplugin(err) {
  function attributes (line 21622) | function attributes(type) {
  function attvalue (line 21627) | function attvalue(type) {
  function attvaluemaybe (line 21632) | function attvaluemaybe(type) {
  function tokenBase (line 21803) | function tokenBase (stream, state) {
  function inTag (line 21813) | function inTag (close) {
  function tokenBase (line 21872) | function tokenBase(stream) {
  function tokenize (line 21922) | function tokenize(stream, state) {
  function tokenBase (line 21970) | function tokenBase(stream, state) {
  function tokenString (line 22007) | function tokenString(quote) {
  function Context (line 22029) | function Context(indented, column, type, align, prev) {
  function pushContext (line 22036) | function pushContext(state, col, type) {
  function popContext (line 22042) | function popContext(state) {
  function words (line 22100) | function words(str) {
  function tokenBase (line 22204) | function tokenBase(stream, state) {
  function tokenString (line 22272) | function tokenString(quote) {
  function tokenComment (line 22294) | function tokenComment(stream, state) {
  function Context (line 22306) | function Context(indented, column, type, align, prev) {
  function pushContext (line 22314) | function pushContext(state, col, type) {
  function popContext (line 22321) | function popContext(state) {
  function words (line 22383) | function words(str) {
  function def (line 22389) | function def(mimes, mode) {
  function wordRegexp (line 22476) | function wordRegexp(words) {
  function tokenBase (line 22483) | function tokenBase(stream, state) {
  function tokenLiteral (line 22535) | function tokenLiteral(quote) {
  function pushContext (line 22549) | function pushContext(state, type, col) {
  function popContext (line 22552) | function popContext(state) {
  function tokenBase (line 22652) | function tokenBase (stream, state) {
  function wordRegexp (line 22794) | function wordRegexp(words) {
  function indent (line 22831) | function indent(_stream, state) {
  function dedent (line 22835) | function dedent(_stream, state) {
  function tokenBase (line 22839) | function tokenBase(stream, state) {
  function tokenStringFactory (line 22949) | function tokenStringFactory(delimiter) {
  function tokenLexer (line 22975) | function tokenLexer(stream, state) {
  function wordRegexp (line 23088) | function wordRegexp(words) {
  function indent (line 23168) | function indent(_stream, state) {
  function dedent (line 23172) | function dedent(_stream, state) {
  function tokenBase (line 23176) | function tokenBase(stream, state) {
  function tokenStringFactory (line 23319) | function tokenStringFactory(delimiter) {
  function tokenLexer (line 23345) | function tokenLexer(stream, state) {
  function parseWords (line 23433) | function parseWords(str) {
  function chain (line 23446) | function chain(stream, state, f) {
  function tokenBase (line 23450) | function tokenBase(stream, state) {
  function tokenString (line 23547) | function tokenString(quote) {
  function tokenComment (line 23567) | function tokenComment(stream, state) {
  function tokenUnparsed (line 23579) | function tokenUnparsed(stream, state) {
  function words (line 23650) | function words(str) {
  function tokenBase (line 23737) | function tokenBase(stream, state) {
  function tokenString (line 23831) | function tokenString(quote) {
  function tokenComment (line 23844) | function tokenComment(stream, state) {
  function Context (line 23856) | function Context(indented, column, type, align, prev) {
  function pushContext (line 23863) | function pushContext(state, col, type) {
  function popContext (line 23868) | function popContext(state) {
  function isClosing (line 23876) | function isClosing(text, contextClosing) {
  function buildElectricInputRegEx (line 23891) | function buildElectricInputRegEx() {
  function tlvScopeStyle (line 24075) | function tlvScopeStyle(state, indentation, type) {
  function tlvIdentNext (line 24082) | function tlvIdentNext(stream) {
  function words (line 24325) | function words(str) {
  function metaHook (line 24337) | function metaHook(stream) {
  function tokenBase (line 24361) | function tokenBase(stream, state) {
  function tokenString (line 24403) | function tokenString(quote) {
  function tokenString2 (line 24415) | function tokenString2(quote) {
  function Context (line 24428) | function Context(indented, column, type, align, prev) {
  function pushContext (line 24435) | function pushContext(state, col, type) {
  function popContext (line 24438) | function popContext(state) {
  function wordRegexp (line 24596) | function wordRegexp(words) {
  function readToken (line 24676) | function readToken(stream, state) {
  function kw (line 24806) | function kw(type) {return {type: type, style: "keyword"};}
  function chain (line 24867) | function chain(stream, state, f) {
  function tokenBase (line 24873) | function tokenBase(stream, state) {
  function tokenComment (line 25006) | function tokenComment(stream, state) {
  function tokenString (line 25029) | function tokenString(quote, f) {
  function tokenVariable (line 25069) | function tokenVariable(stream, state) {
  function tokenTag (line 25086) | function tokenTag(name, isclose) {
  function tokenAttribute (line 25109) | function tokenAttribute(stream, state) {
  function tokenXMLComment (line 25144) | function tokenXMLComment(stream, state) {
  function tokenCDATA (line 25156) | function tokenCDATA(stream, state) {
  function tokenPreProcessing (line 25167) | function tokenPreProcessing(stream, state) {
  function isInXmlBlock (line 25179) | function isInXmlBlock(state) { return isIn(state, "tag"); }
  function isInXmlAttributeBlock (line 25180) | function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); }
  function isInXmlConstructor (line 25181) | function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"...
  function isInString (line 25182) | function isInString(state) { return isIn(state, "string"); }
  function isEQNameAhead (line 25184) | function isEQNameAhead(stream) {
  function isIn (line 25194) | function isIn(state, type) {
  function pushStateStack (line 25198) | function pushStateStack(state, newState) {
  function popStateStack (line 25202) | function popStateStack(state) {
  function words (line 25260) | function words(str) {
  function tokenBase (line 25283) | function tokenBase(stream, state) {
  function tokenString (line 25377) | function tokenString(stream, state) {
  function tokenComment (line 25392) | function tokenComment(stream, state) {
  function currentScope (line 25404) | function currentScope(state) {
  function curMode (line 25473) | function curMode(state) {

FILE: assets/vendor/thebelab/1.index.js
  function r (line 1) | function r(e,t){var r=e.match(function(e){var t=n[e];return t||(n[e]=new...
  function i (line 1) | function i(e,t){return new RegExp((t?"^":"")+"</s*"+e+"s*>","i")}
  function a (line 1) | function a(e,t){for(var n in e)for(var r=t[n]||(t[n]=[]),i=e[n],a=i.leng...
  function f (line 1) | function f(t,a){var o,c=s.token(t,a.htmlState),u=/\btag\b/.test(c);if(u&...
  function t (line 1) | function t(e,t){if(!e.hasOwnProperty(t))throw new Error("Undefined state...
  function n (line 1) | function n(e,t){if(!e)return/(?:)/;var n="";return e instanceof RegExp?(...
  function r (line 1) | function r(e,r){(e.next||e.push)&&t(r,e.next||e.push),this.regex=n(e.reg...
  function i (line 1) | function i(e,t){return function(n,r){if(r.pending){var i=r.pending.shift...
  function a (line 1) | function a(e,t){if(e===t)return!0;if(!e||"object"!=typeof e||!t||"object...
  function o (line 1) | function o(t,r,i,o){var s;if(i.persistent)for(var l=r.persistentStates;l...
  function s (line 1) | function s(t,n){return function(r,i,a){if(r.local&&r.local.mode.indent)r...
  function n (line 1) | function n(e){for(var t={},n=0,r=e.length;n<r;++n)t[e[n]]=!0;return t}
  function c (line 1) | function c(e,t,n){return n.tokenize.push(e),e(t,n)}
  function u (line 1) | function u(e,t){if(e.sol()&&e.match("=begin")&&e.eol())return t.tokenize...
  function d (line 1) | function d(e){return e||(e=1),function(t,n){if("}"==t.peek()){if(1==e)re...
  function f (line 1) | function f(){var e=!1;return function(t,n){return e?(n.tokenize.pop(),n....
  function m (line 1) | function m(e,t,n,r){return function(i,a){var o,s=!1;for("read-quoted-pau...
  function p (line 1) | function p(e,t){return e.sol()&&e.match("=end")&&e.eol()&&t.tokenize.pop...
  function r (line 1) | function r(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}
  function p (line 1) | function p(e,t){if(e.sol()){null===t.scope.align&&(t.scope.align=!1);var...
  function h (line 1) | function h(e,r,i){return function(a,o){for(;!a.eol();)if(a.eatWhile(/[^'...
  function g (line 1) | function g(e,t){for(;!e.eol();){if(e.eatWhile(/[^#]/),e.match("###")){t....
  function b (line 1) | function b(t,n,r){r=r||"coffee";for(var i=0,a=!1,o=null,s=n.scope;s;s=s....
  function k (line 1) | function k(e,t){if(t.scope.prev){if("coffee"===t.scope.type){for(var n=e...
  function n (line 1) | function n(e,t,n){return t(n),n(e,t)}
  function f (line 1) | function f(e,t){if(e.eatWhile(d))return null;var p=e.next();if(u.test(p)...
  function m (line 1) | function m(e,t){for(;!e.eol();){var n=e.next();if('"'==n)return t(f),"st...
  function p (line 1) | function p(e,t){return e.eat("\\")?n(e,t,m):(e.next(),t(f),"error")}
  function n (line 1) | function n(t){return function(){for(var n=0;n<arguments.length;n++)e[arg...
  function l (line 1) | function l(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,...
  function c (line 1) | function c(e,t){if(e.match("#{"))return t.isInterpolating=!0,t.interpola...
  function u (line 1) | function u(n,r){var i;if(n.match(/^:([\w\-]+)/))return t&&t.innerModes&&...
  function d (line 1) | function d(n,r,i){i=e.mimeModes[i]||i,i=t.innerModes&&t.innerModes(i)||i...
  function f (line 1) | function f(t,n,r){if(t.indentation()>n.indentOf||n.innerModeForLine&&!t....
  function d (line 1) | function d(e){return!e.peek()||e.match(/\s+$/,!1)}
  function f (line 1) | function f(e,t){var n=e.peek();return")"===n?(e.next(),t.tokenizer=k,"op...
  function m (line 1) | function m(e,t){return function(n,r){return n.sol()&&n.indentation()<=e?...
  function p (line 1) | function p(e,t){return null==t&&(t=!0),function n(r,i){var a=r.next(),o=...
  function h (line 1) | function h(e){return function(t,n){return"}"===t.peek()?(t.next(),n.toke...
  function g (line 1) | function g(e){if(0==e.indentCount){e.indentCount++;var n=e.scopes[0].off...
  function b (line 1) | function b(e){1!=e.scopes.length&&e.scopes.shift()}
  function k (line 1) | function k(e,t){var r=e.peek();if(e.match("/*"))return t.tokenizer=m(e.i...
  function U (line 1) | function U(e,t){for(var n,r=!1;null!=(n=e.next());){if(r&&"/"==n){t.toke...
  function q (line 1) | function q(e){return function(t,n){for(var r,i=!1;null!=(r=t.next());){i...
  function W (line 1) | function W(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null...
  function F (line 1) | function F(e,t,n,r){this.type=e,this.indent=t,this.prev=n,this.line=r||{...
  function j (line 1) | function j(e,t,n,r){return r=r>=0?r:_,e.context=new F(n,t.indentation()+...
  function B (line 1) | function B(e,t){var n=e.context.indent-_;return t=t||!1,e.context=e.cont...
  function G (line 1) | function G(e,t,n,r){for(var i=r||1;i>0;i--)n.context=n.context.prev;retu...
  function H (line 1) | function H(e){return e.toLowerCase()in y}
  function V (line 1) | function V(e){return(e=e.toLowerCase())in w||e in R}
  function Z (line 1) | function Z(e){return e.toLowerCase()in N}
  function K (line 1) | function K(e){return e.toLowerCase().match($)}
  function Y (line 1) | function Y(e){var t=e.toLowerCase(),n="variable-2";return H(e)?n="tag":Z...
  function X (line 1) | function X(e,t){return te(t)&&("{"==e||"]"==e||"hash"==e||"qualifier"==e...
  function J (line 1) | function J(e,t){return"{"==e&&t.match(/^\s*\$?[\w-]+/i,!1)}
  function Q (line 1) | function Q(e,t){return":"==e&&t.match(/^[a-z-]+/,!1)}
  function ee (line 1) | function ee(e){return e.sol()||e.string.match(new RegExp("^\\s*"+e.curre...
  function te (line 1) | function te(e){return e.eol()||e.match(/^\s*$/,!1)}
  function ne (line 1) | function ne(e){var t=/^\s*[-_]*[a-z0-9]+[\w-]*/i,n="string"==typeof e?e....
  function p (line 1) | function p(e){return e=e.sort(function(e,t){return t>e}),new RegExp("^((...
  function h (line 1) | function h(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}
  function t (line 1) | function t(e){var t=e.match(/^\s*\S/);return e.skipToEnd(),t?"error":null}
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function h (line 1) | function h(e,t){var r,m=e.next();if('"'==m||"'"==m)return t.tokenize=(r=...
  function g (line 1) | function g(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function b (line 1) | function b(e,t,n){var r=e.indented;return e.context&&"statement"==e.cont...
  function k (line 1) | function k(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function m (line 1) | function m(e,t){if(e.eatSpace()||e.eat(","))return["space",null];if(e.ma...
  function p (line 1) | function p(e,t){for(var n,r=!1;n=e.next();){if('"'===n&&!r){t.tokenize=m...
  function h (line 1) | function h(e,t){for(var n,r=1;n=e.next();)if(")"===n&&r--,"("===n&&r++,0...
  function g (line 1) | function g(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}
  function b (line 1) | function b(e,t){return t instanceof RegExp?t.test(e):t instanceof Object...
  function t (line 1) | function t(e,t){for(var n,r,i=!1;!e.eol()&&(n=e.next())!=t.pending;){if(...
  function e (line 1) | function e(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function o (line 1) | function o(e){for(var t;t=e.next();)if("\\"==t)e.next();else if(!a.test(...
  function s (line 1) | function s(e,a){if(e.eatSpace())return t="ws",null;if(e.match(i))return"...
  function l (line 1) | function l(e,t){for(var n,r=!1;n=e.next();){if('"'==n&&!r){t.tokenize=s;...
  function c (line 1) | function c(e,n){for(var r,i;r=e.next();){if("#"==r&&"|"==i){n.tokenize=s...
  function t (line 1) | function t(e,t){return new RegExp((t?"":"^")+"(?:"+e.join("|")+")"+(t?"$...
  function n (line 1) | function n(e,t,n){return n.tokenize.push(e),e(t,n)}
  function _ (line 1) | function _(e,t){if(e.eatSpace())return null;if("\\"!=t.lastToken&&e.matc...
  function x (line 1) | function x(e,t,n,r){return function(i,a){if(!r&&i.match(e))return a.toke...
  function y (line 1) | function y(e,t,n){return function(r,i){return!n&&r.match("{"+e)?(i.curre...
  function v (line 1) | function v(e,t){return e.eatSpace()?null:(e.match(s)?e.eat(/[!?]/):e.mat...
  function w (line 1) | function w(e,t){return e.eatSpace()?null:(e.match(l),t.tokenize.pop(),"d...
  function E (line 1) | function E(e,t,n){return function(r,i){for(var a=!1;r.peek();)if(a)r.nex...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function m (line 1) | function m(e,t){var n,i=e.next();if(u[i]){var a=u[i](e,t);if(!1!==a)retu...
  function p (line 1) | function p(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=nul...
  function h (line 1) | function h(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=nul...
  function g (line 1) | function g(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function b (line 1) | function b(e,t,n){var r=e.indented;return e.context&&"statement"==e.cont...
  function k (line 1) | function k(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function a (line 1) | function a(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}
  function o (line 1) | function o(e){(e.interpolationStack||(e.interpolationStack=[])).push(e.t...
  function s (line 1) | function s(e){return(e.interpolationStack||(e.interpolationStack=[])).po...
  function l (line 1) | function l(e,t,n,r){var i=!1;if(t.eat(e)){if(!t.eat(e))return"string";i=...
  function c (line 1) | function c(e,t){return e.eat("$"),e.eat("{")?t.tokenize=null:t.tokenize=...
  function u (line 1) | function u(e,t){return e.eatWhile(/[\w_]/),t.tokenize=s(t),"variable"}
  function i (line 1) | function i(e,t){if(e.match("{{"))return t.tokenize=o,"tag";if(e.match("{...
  function a (line 1) | function a(e,t){return function(n,r){return!r.escapeNext&&n.eat(e)?r.tok...
  function o (line 1) | function o(e,n){if(n.waitDot){if(n.waitDot=!1,"."!=e.peek())return"null"...
  function s (line 1) | function s(o,s){if(s.waitDot){if(s.waitDot=!1,"."!=o.peek())return"null"...
  function l (line 1) | function l(e,t){return e.match(/^.*?#\}/)?t.tokenize=i:e.skipToEnd(),"co...
  function c (line 1) | function c(e,t){return e.match(/\{%\s*endcomment\s*%\}/,!1)?(t.tokenize=...
  function r (line 1) | function r(e,n){return t=n,e}
  function i (line 1) | function i(e,t){var n,o,s,l=e.next();if("<"!=l||!e.eat("!")){if("<"==l&&...
  function a (line 1) | function a(e,t){for(var n,a=0;null!=(n=e.next());){if(a>=2&&">"==n){t.to...
  function t (line 1) | function t(e,t){for(var n=0;n<e.length;n++)t(e[n],n)}
  function n (line 1) | function n(e,t){for(var n=0;n<e.length;n++)if(t(e[n],n))return!0;return!1}
  function f (line 1) | function f(e,t,n){return t.tokenize=n,n(e,t)}
  function m (line 1) | function m(e,t){var r=e.peek();if("'"==r||'"'==r)return e.next(),f(e,t,h...
  function p (line 1) | function p(e,t){for(var n,r=!1,i=!1,a=0;n=e.next();){if("/"==n&&r){if(!(...
  function h (line 1) | function h(e,t){return function(n,r){for(var i,a=!1,o=!1;null!=(i=n.next...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function m (line 1) | function m(e,t){var r,h=e.next();if(d[h]){var g=d[h](e,t);if(!1!==g)retu...
  function p (line 1) | function p(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=m;b...
  function h (line 1) | function h(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function g (line 1) | function g(e,t,n){return e.context=new h(e.indented,t,n,null,e.context)}
  function b (line 1) | function b(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function e (line 1) | function e(e){for(var t={},n=0,r=e.length;n<r;++n)t[e[n]]=!0;return t}
  function r (line 1) | function r(e,t){if(e.eatSpace())return null;var n,r,i,a=e.next();return'...
  function e (line 1) | function e(e,t,n){return t(n),n(e,t)}
  function u (line 1) | function u(){return function(f,m){if(f.eatWhile(c))return null;var p=f.n...
  function d (line 1) | function d(e,t){for(;!e.eol();){var n=e.next();if('"'==n)return t(u()),"...
  function f (line 1) | function f(t,n){return t.eat("\\")?e(t,n,d):(t.next(),n(u()),"error")}
  function b (line 1) | function b(e,t,n){if(1==e.current().length&&t.test(e.current())){for(e.b...
  function k (line 1) | function k(e,t,n){if(1==e.current().length&&t.test(e.current())){for(;t....
  function _ (line 1) | function _(e){return y(e,'"',"\\")}
  function x (line 1) | function x(e){return y(e,"'","\\")}
  function y (line 1) | function y(e,t,n){for(;!e.eol();){var r=e.next();if(r==t)return!0;r==n&&...
  function v (line 1) | function v(e,t){return-1<t.indexOf(e)}
  function w (line 1) | function w(e,t,n){switch(function(e,t){"comment"!=t.type&&"whitespace"!=...
  function E (line 1) | function E(e,t,n,r){return{token:e,column:t,indent:n,type:r}}
  function S (line 1) | function S(e){return E(e,0,0,e)}
  function T (line 1) | function T(e,t){var n=e.tokenStack.length,r=t||1;return!(n<r)&&e.tokenSt...
  function I (line 1) | function I(e,t){for(var n in t)for(var r=e.length-1,i=t[n],a=r-1;-1<a;a-...
  function A (line 1) | function A(n,r){var i,a,o=t.indentUnit,s=R(a=r.match(/,|[a-z]+|\}|\]|\)|...
  function z (line 1) | function z(e,t){var n=e.tokenStack,r=C(n,"token",t);return!!R(n[r])&&n[r]}
  function C (line 1) | function C(e,t,n){for(var r=e.length-1;-1<r;r--)if(v(e[r][t],n))return r...
  function R (line 1) | function R(e){return!1!==e&&null!=e}
  function s (line 1) | function s(e,t){var s=e.next();if(/[\d\.]/.test(s))return"."==s?e.match(...
  function l (line 1) | function l(e,t){for(var n,r=!1;n=e.next();){if(("/"==n||")"==n)&&r){t.to...
  function c (line 1) | function c(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function t (line 1) | function t(e){var t=[];return e.split(" ").forEach(function(e){t.push({n...
  function e (line 1) | function e(e,t){var n;for(n=e.length-1;n>=0;n--)if(e[n].name===t.toUpper...
  function e (line 1) | function e(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}
  function s (line 1) | function s(e,t){for(var n,r=!1;null!=(n=e.next());){if("/"===n&&r){t.tok...
  function s (line 1) | function s(e,t){var r,c=e.next();if('"'==c||"'"==c||"`"==c)return t.toke...
  function l (line 1) | function l(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=s;b...
  function c (line 1) | function c(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function u (line 1) | function u(e,t,n){return e.context=new c(e.indented,t,n,null,e.context)}
  function d (line 1) | function d(e){if(e.context.prev){var t=e.context.type;return")"!=t&&"]"!...
  function n (line 1) | function n(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function l (line 1) | function l(e,t){var n=e.next();if('"'==n||"'"==n)return c(n,e,t);if(/[\[...
  function c (line 1) | function c(e,t,n){var r=!1;if("/"!=e&&t.eat(e)){if(!t.eat(e))return"stri...
  function u (line 1) | function u(){var e=1;function t(t,n){if("}"==t.peek()){if(0==--e)return ...
  function d (line 1) | function d(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize.pop...
  function f (line 1) | function f(e,t){return!e||"operator"==e||"->"==e||/[\.\[\{\(,;:]/.test(e...
  function m (line 1) | function m(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function p (line 1) | function p(e,t,n){return e.context=new m(e.indented,t,n,null,e.context)}
  function h (line 1) | function h(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function i (line 1) | function i(e){return function(t,n){return t.peek()==e&&1==n.rubyState.to...
  function a (line 1) | function a(e,t){return e.match("-#")?(e.skipToEnd(),"comment"):r.token(e...
  function o (line 1) | function o(e,t){var r=e.peek();if("comment"==t.previousToken.style&&t.in...
  function r (line 1) | function r(e){return{type:e,style:"keyword"}}
  function p (line 1) | function p(e,t,n){return t.tokenize=n,n(e,t)}
  function h (line 1) | function h(e,t){for(var n,r=!1;null!=(n=e.next());){if(n==t&&!r)return!0...
  function g (line 1) | function g(e,t,n){return d=e,i=n,t}
  function b (line 1) | function b(e,t){var n=e.next();if('"'==n||"'"==n)return p(e,t,(r=n,funct...
  function k (line 1) | function k(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=b;b...
  function x (line 1) | function x(e,t,n,r,i,a){this.indented=e,this.column=t,this.type=n,this.p...
  function y (line 1) | function y(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0}
  function v (line 1) | function v(e,t){if(/[a-z]/.test(t.charAt(0)))return!1;for(var n=e.import...
  function w (line 1) | function w(e){for(var t=E.state,n=t.importedtypes;n;n=n.next)if(n.name==...
  function S (line 1) | function S(){for(var e=arguments.length-1;e>=0;e--)E.cc.push(arguments[e])}
  function T (line 1) | function T(){return S.apply(null,arguments),!0}
  function I (line 1) | function I(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}
  function A (line 1) | function A(e){var t=E.state;if(t.context){if(E.marked="def",I(e,t.localV...
  function C (line 1) | function C(){E.state.context||(E.state.localVars=z),E.state.context={pre...
  function R (line 1) | function R(){E.state.localVars=E.state.context.vars,E.state.context=E.st...
  function M (line 1) | function M(e,t){var n=function(){var n=E.state;n.lexical=new x(n.indente...
  function O (line 1) | function O(){var e=E.state;e.lexical.prev&&(")"==e.lexical.type&&(e.inde...
  function N (line 1) | function N(e){return function t(n){return n==e?T():";"==e?S():T(t)}}
  function $ (line 1) | function $(e){return"@"==e?T(q):"var"==e?T(M("vardef"),K,N(";"),O):"keyw...
  function L (line 1) | function L(e){return _.hasOwnProperty(e)?T(P):"type"==e?T(P):"function"=...
  function D (line 1) | function D(e){return e.match(/[;\}\)\],]/)?S():S(L)}
  function P (line 1) | function P(e,t){return"operator"==e&&/\+\+|--/.test(t)?T(P):"operator"==...
  function U (line 1) | function U(e){return"attribute"==e?T(U):"function"==e?T(Q):"var"==e?T(K)...
  function q (line 1) | function q(e){return":"==e?T(q):"variable"==e?T(q):"("==e?T(M(")"),V(W,"...
  function W (line 1) | function W(e){if("variable"==e)return T()}
  function F (line 1) | function F(e,t){return"variable"==e&&/[A-Z]/.test(t.charAt(0))?(w(t),T()...
  function j (line 1) | function j(e,t){return"variable"==e&&/[A-Z]/.test(t.charAt(0))?(w(t),T()...
  function B (line 1) | function B(e){return":"==e?T(O,$):S(P,N(";"),O)}
  function G (line 1) | function G(e){if("variable"==e)return E.marked="property",T()}
  function H (line 1) | function H(e){if("variable"==e&&(E.marked="property"),_.hasOwnProperty(e...
  function V (line 1) | function V(e,t){function n(r){return","==r?T(e,n):r==t?T():T(N(t))}retur...
  function Z (line 1) | function Z(e){return"}"==e?T():S($,Z)}
  function K (line 1) | function K(e,t){return"variable"==e?(A(t),T(ee,Y)):T()}
  function Y (line 1) | function Y(e,t){return"="==t?T(L,Y):","==e?T(K):void 0}
  function X (line 1) | function X(e,t){return"variable"==e?(A(t),T(J,L)):S()}
  function J (line 1) | function J(e,t){if("in"==t)return T()}
  function Q (line 1) | function Q(e,t){return"variable"==e||"type"==e?(A(t),T(Q)):"new"==t?T(Q)...
  function ee (line 1) | function ee(e){if(":"==e)return T(te)}
  function te (line 1) | function te(e){return"type"==e?T():"variable"==e?T():"{"==e?T(M("}"),V(n...
  function ne (line 1) | function ne(e){if("variable"==e)return T(ee)}
  function re (line 1) | function re(e,t){if("variable"==e)return A(t),T(ee)}
  function e (line 1) | function e(e,t){return e.skipToEnd(),t.cur=o,"error"}
  function t (line 1) | function t(t,r){return t.match(/^HTTP\/\d\.\d/)?(r.cur=n,"keyword"):t.ma...
  function n (line 1) | function n(t,n){var i=t.match(/^\d+/);if(!i)return e(t,n);n.cur=r;var a=...
  function r (line 1) | function r(e,t){return e.skipToEnd(),t.cur=o,null}
  function i (line 1) | function i(e,t){return e.eatWhile(/\S/),t.cur=a,"string-2"}
  function a (line 1) | function a(t,n){return t.match(/^HTTP\/\d\.\d$/)?(n.cur=o,"keyword"):e(t...
  function o (line 1) | function o(e){return e.sol()&&!e.eat(/[ \t]/)?e.match(/^.*?:/)?"atom":(e...
  function s (line 1) | function s(e){return e.skipToEnd(),null}
  function t (line 1) | function t(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}
  function a (line 1) | function a(a,o){var s=a.peek();if(o.incomment)return a.skipTo("#}")?(a.e...
  function t (line 1) | function t(e,t,n,r){this.state=e,this.mode=t,this.depth=n,this.prev=r}
  function n (line 1) | function n(r){return new t(e.copyState(r.mode,r.state),r.mode,r.depth,r....
  function s (line 1) | function s(e){var t=e.tagName;e.tagName=null;var n=a.indent(e,"","");ret...
  function l (line 1) | function l(n,i){return i.context.mode==a?function(n,i,c){if(2==c.depth)r...
  function r (line 1) | function r(e){return new RegExp("^(?:"+e.join("|")+")$","i")}
  function u (line 1) | function u(e){for(var t=0;e.eat("=");)++t;return e.eat("["),t}
  function d (line 1) | function d(e,t){var n,r=e.next();return"-"==r&&e.eat("-")?e.eat("[")&&e....
  function f (line 1) | function f(e,t){return function(n,r){for(var i,a=null;null!=(i=n.next())...
  function s (line 1) | function s(e,t){var n;return'"'===(n=e.next())?(t.tokenize=l,t.tokenize(...
  function l (line 1) | function l(e,t){for(var n,r=!1,i=!1;null!=(n=e.next());){if('"'===n&&!i)...
  function c (line 1) | function c(e,t){for(var n,r;t.commentLevel>0&&null!=(r=e.next());)"("===...
  function f (line 1) | function f(e,t){if(e.sol()){if(t.inSeparator=!1,t.inHeader&&e.match(r))r...
  function e (line 1) | function e(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function a (line 1) | function a(e,t,n){return t.tokenize=n,n(e,t)}
  function o (line 1) | function o(e,o){var c=o.beforeParams;o.beforeParams=!1;var u=e.next();if...
  function s (line 1) | function s(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=o;b...
  function l (line 1) | function l(e,t){for(var n,r=0;n=e.next();){if(";"==n&&2==r){t.tokenize=o...
  function l (line 1) | function l(e,t){var i=e.next();if('"'===i)return t.tokenize=c,t.tokenize...
  function c (line 1) | function c(e,t){for(var n,r=!1,i=!1;null!=(n=e.next());){if('"'===n&&!i)...
  function u (line 1) | function u(e,t){for(var n,r;t.commentLevel>0&&null!=(r=e.next());)"("===...
  function d (line 1) | function d(e,t){for(var n,r;t.longString&&null!=(r=e.next());)"|"===n&&"...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function d (line 1) | function d(e,t){return e.skipToEnd(),t.tokenize=null,"comment"}
  function f (line 1) | function f(e,t){for(var n,r=!1;n=e.next();){if(r&&"/"==n){t.tokenize=nul...
  function m (line 1) | function m(e,t){for(var n,r=!1;null!=(n=e.next());){if('"'==n&&!r){t.tok...
  function p (line 1) | function p(e,t){for(e.eatWhile(c);e.eat(c)||e.eat(u););var n=e.current()...
  function h (line 1) | function h(e,t){for(;e.eat(/[^']/););return t.tokenize=null,t.sol=!1,e.e...
  function g (line 1) | function g(e,t){return e.eatWhile(c),e.eat(".")&&e.eatWhile(c),(e.eat("e...
  function i (line 1) | function i(e){if(e)for(var t in e)e.hasOwnProperty(t)&&r.push(t)}
  function n (line 1) | function n(e){return new RegExp("\\b("+e.join("|")+")\\b","i")}
  function r (line 1) | function r(e){return new RegExp("("+e.join("|")+")","i")}
  function i (line 1) | function i(){return{inComment:!1,inString:!1,inAttributeList:!1,inScript...
  function a (line 1) | function a(e){return{inComment:e.inComment,inString:e.inString,inAttribu...
  function e (line 1) | function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function s (line 1) | function s(e,t){return n=t,e}
  function l (line 1) | function l(e,t){e.eatWhile(/[\w\$_]/);var n=e.current();if(r.propertyIsE...
  function c (line 1) | function c(e,t){for(var n,r=!1;null!=(n=e.next());){if(r&&"/"==n){t.toke...
  function u (line 1) | function u(e,t){for(var n,r=0;null!=(n=e.next());){if(r>=2&&">"==n){t.to...
  function t (line 1) | function t(t,n){var r,i=t.location;r=i==e.PRE_SUBJECT&&"<"==n?e.WRITING_...
  function e (line 1) | function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}
  function u (line 1) | function u(e,t){return e.sol()||"'"!==e.peek()?(t.tokenize=f,f(e,t)):(e....
  function d (line 1) | function d(e,t){return e.match(/^.*%}/)?(t.tokenize=f,"comment"):(e.skip...
  function f (line 1) | function f(m,p){if(m.eatSpace())return null;if(m.match("%{"))return p.to...
  function t (line 1) | function t(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}
  function m (line 1) | function m(e,t){if(e.eatSpace())return null;if(e.match(/[{}]/))return"br...
  function p (line 1) | function p(e,t){return e.eatSpace()?null:(e.match(/([A-Z][A-Za-z0-9_]*)|...
  function h (line 1) | function h(e,t){return e.eatSpace()?null:(e.match(/([a-zA-Z][A-Za-z0-9_]...
  function g (line 1) | function g(e,t){return e.eatSpace()?null:!t.hasPassedFirstStage&&e.eat("...
  function b (line 1) | function b(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=m;b...
  function r (line 1) | function r(e,t){for(var n,r=!1;n=e.next();){if(")"==n&&r){t.tokenize=nul...
  function t (line 1) | function t(e,t){return e.string.charAt(e.pos+(t||0))}
  function n (line 1) | function n(e,t){if(t){var n=e.pos-t;return e.string.substr(n>=0?n:0,t)}r...
  function r (line 1) | function r(e,t){var n=e.string.length,r=n-e.pos+1;return e.string.substr...
  function i (line 1) | function i(e,t){var n,r=e.pos+t;r<=0?e.pos=0:r>=(n=e.string.length-1)?e....
  function s (line 1) | function s(e,t,n,r,i){return t.chain=null,t.style=null,t.tail=null,t.tok...
  function l (line 1) | function l(e,t,n){return t.tokenize=function(e,t){return e.string==n&&(t...
  function c (line 1) | function c(c,u){if(c.eatSpace())return null;if(u.chain)return s(c,u,u.ch...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function n (line 1) | function n(e,t,i){return 0==e.length?r(t):function(a,o){for(var s=e[0],l...
  function r (line 1) | function r(e,t){return function(r,i){return function(e,t,r,i){if(!1!==i&...
  function s (line 1) | function s(e,t,n){return t.tokenize=n,n(e,t)}
  function l (line 1) | function l(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=c;b...
  function c (line 1) | function c(e,t){var u,d=e.next();return'"'==d||"'"==d?s(e,t,(u=d,functio...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function e (line 1) | function e(e,t){for(var n=void 0!==(t=t||{}).prefix?t.prefix:"^",r=void ...
  function l (line 1) | function l(e,n){var r=n.returnStack[n.returnStack.length-1];if(r&&r.shou...
  function c (line 1) | function c(e,t){for(var n;null!=(n=e.peek());){if("$"===n)return t.token...
  function u (line 1) | function u(e,t){return m(e,t,c)}
  function d (line 1) | function d(e,t){return t.tokenize=b,t.startQuote='"',b(e,t)}
  function f (line 1) | function f(e,t){return m(e,t,d)}
  function m (line 1) | function m(e,t,n){if(e.match("$(")){var r=t.bracketNesting;return t.retu...
  function p (line 1) | function p(e,t){for(var n,r=!1;null!=(n=e.next());){if(r&&">"==n){t.toke...
  function h (line 1) | function h(e,n){var r=e.peek();return e.eat("{")?(n.tokenize=g,g(e,n)):n...
  function g (line 1) | function g(e,t){for(var n;null!=(n=e.next());)if("}"===n){t.tokenize=l;b...
  function b (line 1) | function b(e,t){var n=t.startQuote;if(e.sol()&&e.match(new RegExp(n+"@")...
  function i (line 1) | function i(e){if(e.eatSpace())return null;if(e.match("//"))return e.skip...
  function n (line 1) | function n(t,n){for(var r=n.split(" "),i=0;i<r.length;i++)e[r[i]]=t}
  function r (line 1) | function r(e,t){for(var n,r,i=!1;!e.eol()&&(n=e.next())!=t.pending;){if(...
  function a (line 1) | function a(e,n){var s=e.sol(),u=e.next();if(t=null,s){if("/"==u)return(n...
  function o (line 1) | function o(e,t){return e.skipToEnd(),/\/\s*$/.test(e.current())?(t.token...
  function s (line 1) | function s(e,t){var n=e.sol()&&"\\"==e.peek();return e.skipToEnd(),n&&/^...
  function l (line 1) | function l(e){return e.skipToEnd(),"comment"}
  function c (line 1) | function c(e,t){for(var n,r=!1,i=!1;n=e.next();){if('"'==n&&!r){i=!0;bre...
  function u (line 1) | function u(e,t,n){e.context={prev:e.context,indent:e.indent,col:n,type:t}}
  function d (line 1) | function d(e){e.indent=e.context.indent,e.context=e.context.prev}
  function n (line 1) | function n(e){var t=Array.prototype.slice.call(arguments,1);return e.rep...
  function U (line 1) | function U(t,n){var a=null;if(t.sol()&&t.match(P,!1))H(n,B,{mode:r,local...
  function q (line 1) | function q(t,n){var a=null;if(Z(n)==b||t.match(b,!1))switch(V(n)){case 0...
  function W (line 1) | function W(e,t){return j(e,t,"comment")}
  function F (line 1) | function F(e,t){return j(e,t,"meta")}
  function j (line 1) | function j(e,t,n){return e.eol()||e.eatSpace()?(e.skipToEnd(),n):(H(t,U)...
  function B (line 1) | function B(e,t){return t.ctx.mode&&t.ctx.local?e.sol()?(e.eatSpace()||H(...
  function G (line 1) | function G(e,t,n,r){return{phase:e,stage:t,mode:n,local:r}}
  function H (line 1) | function H(e,t,n){e.tok=t,e.ctx=n||{}}
  function V (line 1) | function V(e){return e.ctx.stage||0}
  function Z (line 1) | function Z(e){return e.ctx.phase}
  function i (line 1) | function i(t,n,r){if(r)for(var i=n.split(" "),a=0;a<i.length;a++)e[i[a]]...
  function e (line 1) | function e(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function r (line 1) | function r(e,t,n){this.indent=e,this.type=t,this.prev=n}
  function i (line 1) | function i(e,t,n){e.indentStack=new r(t,n,e.indentStack)}
  function c (line 1) | function c(e){return e.match(a)}
  function u (line 1) | function u(e){return e.match(o)}
  function d (line 1) | function d(e,t){return!0===t&&e.backUp(1),e.match(l)}
  function f (line 1) | function f(e){return e.match(s)}
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function a (line 1) | function a(e,t){var i,l=e.next();if("/"==l&&e.eat("*"))return t.tokenize...
  function o (line 1) | function o(e,t){return t._multiLineString=!0,e.sol()?("."==e.next()&&e.e...
  function s (line 1) | function s(e,t){for(var n,r=!1;null!=(n=e.next());){if(r&&"/"==n){t.toke...
  function g (line 1) | function g(e,t){e.stack={parent:e.stack,style:"continuation",indented:t,...
  function b (line 1) | function b(e){e.line==e.tokenize&&(e.line=e.stack.tokenize,e.stack=e.sta...
  function k (line 1) | function k(e,t){return function(n,r){return n.peek()==e&&1==r.rubyState....
  function _ (line 1) | function _(t){var n,i=function(e,r){if(1==r.rubyState.tokenize.length&&!...
  function x (line 1) | function x(e,t){return r.token(e,t.rubyState)}
  function y (line 1) | function y(e,t){return e.match(/^#\{/)?(t.tokenize=k("}",t.tokenize),nul...
  function v (line 1) | function v(e){return function(t,n){var r=function(e,t){return e.match(/^...
  function w (line 1) | function w(e,t,n){return t.stack={parent:t.stack,style:"html",indented:e...
  function E (line 1) | function E(e,t){return e.skipToEnd(),t.stack.style}
  function S (line 1) | function S(e,t){return e.eat(t.stack.endQuote)?(t.line=t.stack.line,t.to...
  function T (line 1) | function T(e,t){return e.match(/^==?/)?(t.tokenize=I,null):S(e,t)}
  function I (line 1) | function I(e,t){var n=e.peek();return'"'==n||"'"==n?(t.tokenize=W(n,"str...
  function A (line 1) | function A(t,n){if(t.match(/^#\{/))return n.tokenize=k("}",n.tokenize),n...
  function z (line 1) | function z(e,t){return t.stack.indented=e.column(),t.line=t.tokenize=A,t...
  function C (line 1) | function C(n){return i.hasOwnProperty(n)?i[n]:i[n]=function(n){var r=a[n...
  function R (line 1) | function R(e,t){return e.skipToEnd(),"slimDoctype"}
  function M (line 1) | function M(t,n){var r,i;if("<"==t.peek())return(n.tokenize=v(n.tokenize)...
  function O (line 1) | function O(e,t){return t.startOfLine?M(e,t):N(e,t)}
  function N (line 1) | function N(e,t){return e.eat("*")?(t.tokenize=_($),null):e.match(d)?(t.t...
  function $ (line 1) | function $(e,t){return e.match(/^(<>?|><?)/)?(t.tokenize=L,null):L(e,t)}
  function L (line 1) | function L(e,t){return e.match(h)?(t.tokenize=L,"slimId"):e.match(p)?(t....
  function D (line 1) | function D(e,t){return e.match(/^([\[\{\(])/)?function(e,t,n){return e.s...
  function P (line 1) | function P(e,t){return e.match(/^==?/)?(t.tokenize=U,null):D(e,t)}
  function U (line 1) | function U(e,t){var n=e.peek();return'"'==n||"'"==n?(t.tokenize=W(n,"str...
  function q (line 1) | function q(e,t){return e.backUp(1),e.match(/^[^\s],(?=:)/)?(t.tokenize=_...
  function W (line 1) | function W(e,t,n,r,i){return function(a,o){b(o);var s=0==a.current().len...
  function F (line 1) | function F(e,t){return e.match(/^==?/)?(t.tokenize=x,"slimSwitch"):e.mat...
  function u (line 1) | function u(e,t){return r=t,e}
  function d (line 1) | function d(e,t){return null==t&&(t=e.pos),3===o&&"{"==a&&(t==e.string.le...
  function f (line 1) | function f(e,t){for(var n,o,l=e.string,c=e.pos;;){var u=l.indexOf(a,c);i...
  function m (line 1) | function m(e,t){if(e.match(i,!0))return 3===o?(t.depth--,t.depth<=0&&(t....
  function r (line 1) | function r(t){return function(r,a){for(var o=t;(t=r.peek())&&null!=t.mat...
  function i (line 1) | function i(n,a){var o,s,l=n.next();return'"'==l?a.tokenize=(s=l,function...
  function o (line 1) | function o(e){return e[e.length-1]}
  function s (line 1) | function s(e,t,n){if(e.sol()){for(var r=0;r<t.indent&&e.eat(/\s/);r++);i...
  function l (line 1) | function l(e,t){return{element:t,next:e}}
  function c (line 1) | function c(e){e.context&&(e.context.scope&&(e.variables=e.context.scope)...
  function u (line 1) | function u(e,t,n){this.previousContext=e,this.tag=t,this.kind=null,this....
  function r (line 1) | function r(e){return new RegExp("^(?:"+e.join("|")+")$","i")}
  function s (line 1) | function s(e,n){var r,l=e.next();if(t=null,"$"==l||"?"==l)return"?"==l&&...
  function l (line 1) | function l(e,t,n){e.context={prev:e.context,indent:e.indent,col:n,type:t}}
  function c (line 1) | function c(e){e.indent=e.context.indent,e.context=e.context.prev}
  function t (line 1) | function t(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=!0;return t}
  function g (line 1) | function g(e,t,g){if(e.sol()&&(t.indented=e.indentation()),e.eatSpace())...
  function b (line 1) | function b(){var e=0;return function(t,n,r){var i=g(t,n,r);if("punctuati...
  function k (line 1) | function k(e,t){for(var n;e.match(/^[^/*]+/,!0),n=e.next();)"/"===n&&e.e...
  function _ (line 1) | function _(e,t,n){this.prev=e,this.align=t,this.indented=n}
  function e (line 1) | function e(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function i (line 1) | function i(e,t,n){return t.tokenize=n,n(e,t)}
  function a (line 1) | function a(e,l){var c=l.beforeParams;l.beforeParams=!1;var u,d=e.next();...
  function o (line 1) | function o(e,t){for(var n,r=!1;n=e.next();){if("#"==n&&r){t.tokenize=a;b...
  function s (line 1) | function s(e,t){for(var n,r=0;n=e.next();){if("#"==n&&2==r){t.tokenize=a...
  function n (line 1) | function n(e,n,a){if("_"===a)return e.eat("_")?r(e,n,"italic",/__/,2):r(...
  function r (line 1) | function r(e,t,n,r,a){var o=e.pos>a?e.string.charAt(e.pos-a-1):null,s=e....
  function i (line 1) | function i(e){var n=a(e);if(n)return n;var r=[];return e.layoutType&&r.p...
  function a (line 1) | function a(e){var n=e.layoutType;switch(n){case"notextile":case"code":ca...
  function o (line 1) | function o(e,t){var n=a(e);if(n)return n;var r=i(e);return t?r?r+" "+t:t:r}
  function s (line 1) | function s(e){var t=e.spanningLayout,n=e.layoutType;for(var r in e)e.has...
  function c (line 1) | function c(e){return l.cache[e]||(l.cache[e]=l.createRe(e))}
  function p (line 1) | function p(e,t,n){return t.tokenize=n,n(e,t)}
  function h (line 1) | function h(t,f){var m=t.sol(),h=t.peek();if(f.block=!1,m&&/[<\/\*{}\-]/....
  function g (line 1) | function g(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=h;b...
  function b (line 1) | function b(e,t){for(var n,r=!1;n=e.next();){if("'"==n&&r){t.tokenize=h;b...
  function k (line 1) | function k(e,t){var n=t.block;return n&&e.current()?"comment":!n&&e.matc...
  function _ (line 1) | function _(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=h;b...
  function x (line 1) | function x(e,t){for(var n,r=!1;n=e.next();){if("_"==n&&r){t.tokenize=h;b...
  function y (line 1) | function y(e,t){for(var n,r=!1;n=e.next();){if("-"==n&&r){t.tokenize=h;b...
  function v (line 1) | function v(e,n){if("<<"==e.current())return"macro";var r=e.next();return...
  function t (line 1) | function t(e,t,n){return function(i,a){for(;!i.eol();){if(i.match(t)){a....
  function n (line 1) | function n(e){return function(t,n){for(;!t.eol();)t.next();return n.toke...
  function r (line 1) | function r(e,i){function a(t){return i.tokenize=t,t(e,i)}var o=e.sol(),s...
  function c (line 1) | function c(e,t){var n,i=e.next(),o=e.peek();return"}"==i?(t.tokenize=r,"...
  function u (line 1) | function u(){for(var e=arguments.length-1;e>=0;e--)o.cc.push(arguments[e])}
  function d (line 1) | function d(){return u.apply(null,arguments),!0}
  function f (line 1) | function f(e,t){var n=o.context&&o.context.noIndent;o.context={prev:o.co...
  function m (line 1) | function m(){o.context&&(o.context=o.context.prev)}
  function p (line 1) | function p(e){if("openPlugin"==e)return o.pluginName=i,d(h,(n=o.startOfL...
  function h (line 1) | function h(e){return"keyword"==e?(s="attribute",d(h)):"equals"==e?d(g,h)...
  function g (line 1) | function g(e){return"keyword"==e?(s="string",d()):"string"==e?d(b):u()}
  function b (line 1) | function b(e){return"string"==e?d(b):u()}
  function t (line 1) | function t(n,r){n.eatWhile(/[^\{]/);var i,a=n.next();if("{"==a&&(a=n.eat...
  function t (line 1) | function t(t,n){return(n.tokens[0]||function(t){if(t.eatSpace())return n...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function u (line 1) | function u(e,t){var r,l=e.next();if('"'==l||"'"==l)return t.tokenize=(r=...
  function d (line 1) | function d(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function f (line 1) | function f(e,t,n){var r=e.indented;return e.context&&"statement"==e.cont...
  function m (line 1) | function m(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function t (line 1) | function t(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function y (line 1) | function y(e,t){var r,_=e.next();if('"'==_||"'"==_)return t.tokenize=(r=...
  function v (line 1) | function v(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=nul...
  function w (line 1) | function w(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function E (line 1) | function E(e,t,n){var r=e.indented;return e.context&&"statement"==e.cont...
  function S (line 1) | function S(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function i (line 1) | function i(e){if(e)for(var t in e)e.hasOwnProperty(t)&&r.push(t)}
  function r (line 1) | function r(e){return new RegExp("^(?:"+e.join("|")+")$","i")}
  function o (line 1) | function o(e,n){var r,s=e.next();if(t=null,"<"!=s||e.match(/^[\s\u00a0=]...
  function s (line 1) | function s(e,t,n){e.context={prev:e.context,indent:e.indent,col:n,type:t}}
  function l (line 1) | function l(e){e.indent=e.context.indent,e.context=e.context.prev}
  function i (line 1) | function i(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}
  function I (line 1) | function I(e,t){t.currentIndent++}
  function A (line 1) | function A(e,t){t.currentIndent--}
  function z (line 1) | function z(e,t){if(e.eatSpace())return null;var i,d;if("'"===e.peek())re...
  function r (line 1) | function r(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}
  function S (line 1) | function S(e,t){t.currentIndent++}
  function T (line 1) | function T(e,t){t.currentIndent--}
  function I (line 1) | function I(e,r){if(e.eatSpace())return"space";var u,d;if("'"===e.peek())...
  function e (line 1) | function e(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function a (line 1) | function a(e,t,n){return t.tokenize=n,n(e,t)}
  function o (line 1) | function o(e,o){var u=o.beforeParams;o.beforeParams=!1;var d=e.next();if...
  function s (line 1) | function s(e){return function(t,n){for(var r,i=!1,a=!1;null!=(r=t.next()...
  function l (line 1) | function l(e,t){for(var n,r=!1;n=e.next();){if("#"==n&&r){t.tokenize=o;b...
  function c (line 1) | function c(e,t){for(var n,r=0;n=e.next();){if("#"==n&&2==r){t.tokenize=o...
  function c (line 1) | function c(e){for(var t={},n=e.split(" "),r=0;r<n.length;++r)t[n[r]]=!0;...
  function A (line 1) | function A(e,t){var n,r,i=e.peek();if(l[i]&&0!=(n=l[i](e,t)))return n;if...
  function z (line 1) | function z(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=A;b...
  function C (line 1) | function C(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function R (line 1) | function R(e,t,n){var r=new C(e.indented,t,n,null,e.context);return e.co...
  function M (line 1) | function M(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function O (line 1) | function O(e,t){if(e==t)return!0;var n=t.split(";");for(var r in n)if(e=...
  function l (line 1) | function l(e,t,n){var i=t/r;return"tlv-"+e.tlvIndentationStyle[i]+"-"+n}
  function t (line 1) | function t(e){for(var t={},n=e.split(","),r=0;r<n.length;++r){var i=n[r]...
  function n (line 1) | function n(e){return e.eatWhile(/[\w\$_]/),"meta"}
  function f (line 1) | function f(e,t){var n,r=e.next();if(s[r]){var a=s[r](e,t);if(!1!==a)retu...
  function m (line 1) | function m(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.ali...
  function p (line 1) | function p(e,t,n){return e.context=new m(e.indented,t,n,null,e.context)}
  function h (line 1) | function h(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.inde...
  function t (line 1) | function t(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}
  function e (line 1) | function e(e){return{type:e,style:"keyword"}}
  function t (line 1) | function t(e,t,n){return t.tokenize=n,n(e,t)}
  function n (line 1) | function n(d,h){var g=d.next(),b=!1,k=function(e){return'"'===e.current(...
  function r (line 1) | function r(e,t){for(var n,r=!1,i=!1,a=0;n=e.next();){if(")"==n&&r){if(!(...
  function i (line 1) | function i(e,t){return function(r,a){var o;if(function(e){return f(e,"st...
  function a (line 1) | function a(e,t){var r=/[\w\$_-]/;if(e.eat('"')){for(;'"'!==e.next(););e....
  function o (line 1) | function o(e,r){var a=e.next();return"/"==a&&e.eat(">")?(d(r)&&p(r),u(r)...
  function s (line 1) | function s(e,t){for(var r;r=e.next();)if("-"==r&&e.match("->",!0))return...
  function l (line 1) | function l(e,t){for(var r;r=e.next();)if("]"==r&&e.match("]",!0))return ...
  function c (line 1) | function c(e,t){for(var r;r=e.next();)if("?"==r&&e.match(">",!0))return ...
  function u (line 1) | function u(e){return f(e,"tag")}
  function d (line 1) | function d(e){return f(e,"attribute")}
  function f (line 1) | function f(e,t){return e.stack.length&&e.stack[e.stack.length-1].type==t}
  function m (line 1) | function m(e,t){e.stack.push(t)}
  function p (line 1) | function p(e){e.stack.pop();var t=e.stack.length&&e.stack[e.stack.length...
  function c (line 1) | function c(e,t){var n;if('"'===(n=e.next()))return t.tokenize=u,t.tokeni...
  function u (line 1) | function u(e,t){for(var n,r=!1,i=!1;null!=(n=e.next());){if('"'===n&&!i)...
  function d (line 1) | function d(e,t){for(var n,r;null!=(r=e.next());){if("*"===n&&"/"===r){t....
  function f (line 1) | function f(e){var t=null;return e.scopes.length>0&&(t=e.scopes[e.scopes....
  function o (line 1) | function o(e){return e.state==i?a:n}

FILE: assets/vendor/thebelab/2.index.js
  function l (line 1) | function l(s){var j=r(s);return e(j)}
  function r (line 1) | function r(s){if(!e.o(t,s)){var j=new Error("Cannot find module '"+s+"'"...

FILE: assets/vendor/thebelab/3.index.js
  function l (line 1) | function l(s){var j=r(s);return e(j)}
  function r (line 1) | function r(s){if(!e.o(t,s)){var j=new Error("Cannot find module '"+s+"'"...

FILE: assets/vendor/thebelab/4.index.js
  function l (line 1) | function l(s){var j=r(s);return e(j)}
  function r (line 1) | function r(s){if(!e.o(t,s)){var j=new Error("Cannot find module '"+s+"'"...

FILE: assets/vendor/thebelab/index.js
  function t (line 1) | function t(t){for(var n,i,o=t[0],a=t[1],s=0,c=[];s<o.length;s++)i=o[s],O...
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function i (line 1) | function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{...
    method constructor (line 54) | constructor(e){this._initPromise=new r.PromiseDelegate,this._initializ...
    method typeset (line 54) | typeset(e){this._initialized||this._init(),this._initPromise.promise.t...
    method _init (line 54) | _init(){let e=document.getElementsByTagName("head")[0],t=document.crea...
    method _onLoad (line 54) | _onLoad(){MathJax.Hub.Config({tex2jax:{inlineMath:[["$","$"],["\\(","\...
    method constructor (line 54) | constructor(e={}){this._changed=new r.Signal(this);const{connector:t,t...
    method changed (line 54) | get changed(){return this._changed}
    method clear (line 54) | async clear(){await this._ready,await this._clear()}
    method fetch (line 54) | async fetch(e){return await this._ready,this._fetch(e)}
    method list (line 54) | async list(e){return await this._ready,this._list(e)}
    method remove (line 54) | async remove(e){await this._ready,await this._remove(e),this._changed....
    method save (line 54) | async save(e,t){await this._ready,await this._save(e,t),this._changed....
    method toJSON (line 54) | async toJSON(){await this._ready;const{ids:e,values:t}=await this._lis...
    method _clear (line 54) | async _clear(){await Promise.all((await this._list()).ids.map(e=>this....
    method _fetch (line 54) | async _fetch(e){const t=await this._connector.fetch(e);if(t)return JSO...
    method _list (line 54) | async _list(e){const{ids:t,values:n}=await this._connector.list(e);ret...
    method _merge (line 54) | async _merge(e){await Promise.all(Object.keys(e).map(t=>this._save(t,e...
    method _overwrite (line 54) | async _overwrite(e){await this._clear(),await this._merge(e)}
    method _remove (line 54) | async _remove(e){return this._connector.remove(e)}
    method _save (line 54) | async _save(e,t){return this._connector.save(e,JSON.stringify({v:t}))}
  function C (line 1) | function C(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedMarkdown")}
    method render (line 93) | render(e){return g({host:this.node,source:String(e.data[this.mimeType]...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function j (line 1) | function j(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firs...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedJavaScript")}
    method render (line 93) | render(e){return v({host:this.node,sanitizer:this.sanitizer,source:"Ja...
  function A (line 1) | function A(e,t){return j(e).appendChild(t)}
  function T (line 1) | function T(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n...
  function M (line 1) | function M(e,t,n,r){var i=T(e,t,n,r);return i.setAttribute("role","prese...
    method constructor (line 46) | constructor(e){this.edgeRequested=new l.Signal(this),this.selectionMar...
    method uuid (line 46) | get uuid(){return this._uuid}
    method uuid (line 46) | set uuid(e){this._uuid=e}
    method selectionStyle (line 46) | get selectionStyle(){return this._selectionStyle}
    method selectionStyle (line 46) | set selectionStyle(e){this._selectionStyle=e}
    method editor (line 46) | get editor(){return this._editor}
    method doc (line 46) | get doc(){return this._editor.getDoc()}
    method lineCount (line 46) | get lineCount(){return this.doc.lineCount()}
    method model (line 46) | get model(){return this._model}
    method lineHeight (line 46) | get lineHeight(){return this._editor.defaultTextHeight()}
    method charWidth (line 46) | get charWidth(){return this._editor.defaultCharWidth()}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method dispose (line 46) | dispose(){this.isDisposed||(this._isDisposed=!0,this.host.removeEventL...
    method getOption (line 46) | getOption(e){return this._config[e]}
    method setOption (line 46) | setOption(e,t){this._config[e]!==t&&(this._config[e]=t,P.setOption(thi...
    method getLine (line 46) | getLine(e){return this.doc.getLine(e)}
    method getOffsetAt (line 46) | getOffsetAt(e){return this.doc.indexFromPos({ch:e.column,line:e.line})}
    method getPositionAt (line 46) | getPositionAt(e){const{ch:t,line:n}=this.doc.posFromIndex(e);return{li...
    method undo (line 46) | undo(){this.doc.undo()}
    method redo (line 46) | redo(){this.doc.redo()}
    method clearHistory (line 46) | clearHistory(){this.doc.clearHistory()}
    method focus (line 46) | focus(){this._editor.focus()}
    method hasFocus (line 46) | hasFocus(){return this._editor.getWrapperElement().contains(document.a...
    method blur (line 46) | blur(){this._editor.getInputField().blur()}
    method refresh (line 46) | refresh(){this._editor.refresh(),this._needsRefresh=!1}
    method resizeToFit (line 46) | resizeToFit(){this.hasFocus()?this.refresh():this._needsRefresh=!0,thi...
    method addOverlay (line 46) | addOverlay(e,t){this._editor.addOverlay(e,t)}
    method removeOverlay (line 46) | removeOverlay(e){this._editor.removeOverlay(e)}
    method getSearchCursor (line 46) | getSearchCursor(e,t,n){return this._editor.getDoc().getSearchCursor(e,...
    method getCursor (line 46) | getCursor(e){return this._editor.getDoc().getCursor(e)}
    method state (line 46) | get state(){return this._editor.state}
    method operation (line 46) | operation(e){return this._editor.operation(e)}
    method firstLine (line 46) | firstLine(){return this._editor.getDoc().firstLine()}
    method lastLine (line 46) | lastLine(){return this._editor.getDoc().lastLine()}
    method scrollIntoView (line 46) | scrollIntoView(e,t){this._editor.scrollIntoView(e,t)}
    method cursorCoords (line 46) | cursorCoords(e,t){return this._editor.cursorCoords(e,t)}
    method getRange (line 46) | getRange(e,t,n){return this._editor.getDoc().getRange(e,t,n)}
    method addKeydownHandler (line 46) | addKeydownHandler(e){return this._keydownHandlers.push(e),new s.Dispos...
    method setSize (line 46) | setSize(e){e?this._editor.setSize(e.width,e.height):this._editor.setSi...
    method revealPosition (line 46) | revealPosition(e){const t=this._toCodeMirrorPosition(e);this._editor.s...
    method revealSelection (line 46) | revealSelection(e){const t={from:this._toCodeMirrorPosition(e.start),t...
    method getCoordinateForPosition (line 46) | getCoordinateForPosition(e){const t=this._toCodeMirrorPosition(e);retu...
    method getPositionForCoordinate (line 46) | getPositionForCoordinate(e){return this._toPosition(this.editor.coords...
    method getCursorPosition (line 46) | getCursorPosition(){const e=this.doc.getCursor();return this._toPositi...
    method setCursorPosition (line 46) | setCursorPosition(e,t){const n=this._toCodeMirrorPosition(e);this.doc....
    method getSelection (line 46) | getSelection(){return this.getSelections()[0]}
    method setSelection (line 46) | setSelection(e){this.setSelections([e])}
    method getSelections (line 46) | getSelections(){const e=this.doc.listSelections();if(e.length>0)return...
    method setSelections (line 46) | setSelections(e){const t=this._toCodeMirrorSelections(e);this.doc.setS...
    method getTokens (line 46) | getTokens(){let e=[];for(let t=0;t<this.lineCount;++t){const n=this.ed...
    method getTokenForPosition (line 46) | getTokenForPosition(e){const t=this._toCodeMirrorPosition(e),n=this.ed...
    method newIndentedLine (line 46) | newIndentedLine(){this.execCommand("newlineAndIndent")}
    method execCommand (line 46) | execCommand(e){this._editor.execCommand(e)}
    method onKeydown (line 46) | onKeydown(e){let t=this.getCursorPosition(),{line:n,column:r}=t;if(0==...
    method _toCodeMirrorSelections (line 46) | _toCodeMirrorSelections(e){if(e.length>0)return e.map(e=>this._toCodeM...
    method _onMimeTypeChanged (line 46) | _onMimeTypeChanged(){const e=this._model.mimeType;let t=this._editor;_...
    method _onSelectionsChanged (line 46) | _onSelectionsChanged(e,t){const n=t.key;n!==this.uuid&&(this._cleanSel...
    method _cleanSelections (line 46) | _cleanSelections(e){const t=this.selectionMarkers[e];t&&t.forEach(e=>{...
    method _markSelections (line 46) | _markSelections(e,t){const n=[];let r;e===this._hoverId&&this._clearHo...
    method _onCursorActivity (line 46) | _onCursorActivity(){if(this._editor.hasFocus()){const e=this.getSelect...
    method _toSelection (line 46) | _toSelection(e){return{uuid:this.uuid,start:this._toPosition(e.anchor)...
    method _toTextMarkerOptions (line 46) | _toTextMarkerOptions(e){let t=`background-color: rgba( ${parseInt(e.co...
    method _toCodeMirrorSelection (line 46) | _toCodeMirrorSelection(e){return{anchor:this._toCodeMirrorPosition(e.s...
    method _toPosition (line 46) | _toPosition(e){return{line:e.line,column:e.ch}}
    method _toCodeMirrorPosition (line 46) | _toCodeMirrorPosition(e){return{line:e.line,ch:e.column}}
    method _onValueChanged (line 46) | _onValueChanged(e,t){if(this._changeGuard)return;this._changeGuard=!0;...
    method _beforeDocChanged (line 46) | _beforeDocChanged(e,t){if(this._changeGuard)return;this._changeGuard=!...
    method handleEvent (line 46) | handleEvent(e){switch(e.type){case"focus":this._evtFocus(e);break;case...
    method _evtFocus (line 46) | _evtFocus(e){this._needsRefresh&&this.refresh(),this.host.classList.ad...
    method _evtBlur (line 46) | _evtBlur(e){this.host.classList.remove("jp-mod-focused")}
    method _evtScroll (line 46) | _evtScroll(){this._clearHover()}
    method _clearHover (line 46) | _clearHover(){this._caretHover&&(window.clearTimeout(this._hoverTimeou...
    method _getCaret (line 46) | _getCaret(e){let t=e?e.displayName:"Anonymous",n=e?e.color:this._selec...
    method _checkSync (line 46) | _checkSync(){let e=this._lastChange;if(!e)return;this._lastChange=null...
  function O (line 1) | function O(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.c...
  function P (line 1) | function P(){var e;try{e=document.activeElement}catch(t){e=document.body...
  function D (line 1) | function D(e,t){var n=e.className;C(t).test(n)||(e.className+=(n?" ":"")...
  function L (line 1) | function L(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!C(n[r])...
  function I (line 1) | function I(e){var t=Array.prototype.slice.call(arguments,1);return funct...
  function B (line 1) | function B(e,t,n){for(var r in t||(t={}),e)!e.hasOwnProperty(r)||!1===n&...
  function z (line 1) | function z(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.len...
  function N (line 1) | function N(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}
  function V (line 1) | function V(e,t,n){for(var r=0,i=0;;){var o=e.indexOf("\t",r);-1==o&&(o=e...
  function G (line 1) | function G(e){for(;K.length<=e;)K.push(J(K)+" ");return K[e]}
  function J (line 1) | function J(e){return e[e.length-1]}
  function Y (line 1) | function Y(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}
  function X (line 1) | function X(){}
  function Q (line 1) | function Q(e,t){var n;return Object.create?n=Object.create(e):(X.prototy...
  function ee (line 1) | function ee(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCas...
  function te (line 1) | function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(...
  function ne (line 1) | function ne(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;retu...
  function ie (line 1) | function ie(e){return e.charCodeAt(0)>=768&&re.test(e)}
  function oe (line 1) | function oe(e,t,n){for(;(n<0?t>0:t<e.length)&&ie(e.charAt(t));)t+=n;retu...
  function ae (line 1) | function ae(e,t,n){for(var r=t>n?-1:1;;){if(t==n)return t;var i=(t+n)/2,...
  function le (line 1) | function le(e,t,n){var r;se=null;for(var i=0;i<e.length;++i){var o=e[i];...
  function s (line 1) | function s(e,t,n){this.level=e,this.from=t,this.to=n}
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function pe (line 1) | function pe(e,t){var n=e.order;return null==n&&(n=e.order=ce(e.text,t)),n}
  function he (line 1) | function he(e,t){return e._handlers&&e._handlers[t]||ue}
  function fe (line 1) | function fe(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1...
  function be (line 1) | function be(e,t){var n=he(e,t);if(n.length)for(var r=Array.prototype.sli...
  function me (line 1) | function me(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:f...
  function ge (line 1) | function ge(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(va...
  function ve (line 1) | function ve(e,t){return he(e,t).length>0}
  function ye (line 1) | function ye(e){e.prototype.on=function(e,t){de(this,e,t)},e.prototype.of...
  function _e (line 1) | function _e(e){e.preventDefault?e.preventDefault():e.returnValue=!1}
  function we (line 1) | function we(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}
  function xe (line 1) | function xe(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.r...
  function ke (line 1) | function ke(e){_e(e),we(e)}
  function Ce (line 1) | function Ce(e){return e.target||e.srcElement}
  function Se (line 1) | function Se(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?...
  function Te (line 1) | function Te(e){if(null==Ee){var t=T("span","​");A(e,T("span",[t,document...
  function Me (line 1) | function Me(e){if(null!=je)return je;var t=A(e,document.createTextNode("...
  function ze (line 1) | function ze(e,t){arguments.length>2&&(t.dependencies=Array.prototype.sli...
  function Fe (line 1) | function Fe(e){if("string"==typeof e&&Be.hasOwnProperty(e))e=Be[e];else ...
  function Ne (line 1) | function Ne(e,t){t=Fe(t);var n=Ie[t.name];if(!n)return Ne(e,"text/plain"...
  function Ue (line 1) | function Ue(e,t){B(t,qe.hasOwnProperty(e)?qe[e]:qe[e]={})}
  function He (line 1) | function He(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t)...
  function We (line 1) | function We(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t...
  function $e (line 1) | function $e(e,t,n){return!e.startState||e.startState(t,n)}
  function Ke (line 1) | function Ke(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is ...
  function Ge (line 1) | function Ge(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,funct...
  function Je (line 1) | function Je(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)...
  function Ye (line 1) | function Ye(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height...
  function Xe (line 1) | function Xe(e){if(null==e.parent)return null;for(var t=e.parent,n=N(t.li...
  function Qe (line 1) | function Qe(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r)...
  function Ze (line 1) | function Ze(e,t){return t>=e.first&&t<e.first+e.size}
  function et (line 1) | function et(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}
  function tt (line 1) | function tt(e,t,n){if(void 0===n&&(n=null),!(this instanceof tt))return ...
  function nt (line 1) | function nt(e,t){return e.line-t.line||e.ch-t.ch}
  function rt (line 1) | function rt(e,t){return e.sticky==t.sticky&&0==nt(e,t)}
  function it (line 1) | function it(e){return tt(e.line,e.ch)}
  function ot (line 1) | function ot(e,t){return nt(e,t)<0?t:e}
  function at (line 1) | function at(e,t){return nt(e,t)<0?e:t}
  function st (line 1) | function st(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}
  function lt (line 1) | function lt(e,t){if(t.line<e.first)return tt(e.first,0);var n=e.first+e....
  function ct (line 1) | function ct(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=lt(e,t[r]);return n}
  function dt (line 1) | function dt(e,t,n,r){var i=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode...
  function ht (line 1) | function ht(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=ft(...
  function ft (line 1) | function ft(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return ...
  function bt (line 1) | function bt(e,t,n,r){var i=e.doc.mode,o=new Ve(t,e.options.tabSize,n);fo...
  function mt (line 1) | function mt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){va...
  function gt (line 1) | function gt(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=We(e,n).mode);var o=...
  function yt (line 1) | function yt(e,t,n,r){var i,o,a=e.doc,s=a.mode,l=Ke(a,(t=lt(a,t)).line),c...
  function _t (line 1) | function _t(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)...
  function wt (line 1) | function wt(e,t,n,r,i,o,a){var s=n.flattenSpans;null==s&&(s=e.options.fl...
  function Ct (line 1) | function Ct(e,t,n){this.marker=e,this.from=t,this.to=n}
  function St (line 1) | function St(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker...
  function Et (line 1) | function Et(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(...
  function jt (line 1) | function jt(e,t){if(t.full)return null;var n=Ze(e,t.from.line)&&Ke(e,t.f...
  function At (line 1) | function At(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.fr...
  function Tt (line 1) | function Tt(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n]...
  function Mt (line 1) | function Mt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine...
  function Ot (line 1) | function Ot(e){return e.inclusiveLeft?-1:0}
  function Pt (line 1) | function Pt(e){return e.inclusiveRight?1:0}
  function Dt (line 1) | function Dt(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;va...
  function Lt (line 1) | function Lt(e,t){var n,r=kt&&e.markedSpans;if(r)for(var i=void 0,o=0;o<r...
  function Rt (line 1) | function Rt(e){return Lt(e,!0)}
  function It (line 1) | function It(e){return Lt(e,!1)}
  function Bt (line 1) | function Bt(e,t){var n,r=kt&&e.markedSpans;if(r)for(var i=0;i<r.length;+...
  function zt (line 1) | function zt(e,t,n,r,i){var o=Ke(e,t),a=kt&&o.markedSpans;if(a)for(var s=...
  function Ft (line 1) | function Ft(e){for(var t;t=Rt(e);)e=t.find(-1,!0).line;return e}
  function Nt (line 1) | function Nt(e,t){var n=Ke(e,t),r=Ft(n);return n==r?t:Xe(r)}
  function qt (line 1) | function qt(e,t){if(t>e.lastLine())return t;var n,r=Ke(e,t);if(!Ut(e,r))...
  function Ut (line 1) | function Ut(e,t){var n=kt&&t.markedSpans;if(n)for(var r=void 0,i=0;i<n.l...
  function Ht (line 1) | function Ht(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return Ht(e,...
  function Wt (line 1) | function Wt(e){for(var t=0,n=(e=Ft(e)).parent,r=0;r<n.lines.length;++r){...
  function $t (line 1) | function $t(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=R...
  function Vt (line 1) | function Vt(e){var t=e.display,n=e.doc;t.maxLine=Ke(n,n.first),t.maxLine...
  function Gt (line 1) | function Gt(e){e.parent=null,Tt(e)}
  function Xt (line 1) | function Xt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass...
  function Qt (line 1) | function Qt(e,t){var n=M("span",null,null,l?"padding-right: .1px":null),...
  function Zt (line 1) | function Zt(e){var t=T("span","•","cm-invalidchar");return t.title="\\u"...
  function en (line 1) | function en(e,t,n,r,i,o,l){if(t){var c,p=e.splitSpaces?function(e,t){if(...
  function tn (line 1) | function tn(e,t){return function(n,r,i,o,a,s,l){i=i?i+" cm-force-border"...
  function nn (line 1) | function nn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,...
  function rn (line 1) | function rn(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,s,l,c...
  function on (line 1) | function on(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=It(e)...
  function an (line 1) | function an(e,t,n){for(var r,i=[],o=t;o<n;o=r){var a=new on(e.doc,Ke(e.d...
  function cn (line 1) | function cn(e,t){var n=he(e,t);if(n.length){var r,i=Array.prototype.slic...
  function pn (line 1) | function pn(){var e=ln;ln=null;for(var t=0;t<e.length;++t)e[t]()}
  function un (line 1) | function un(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes...
  function dn (line 1) | function dn(e){return e.node==e.text&&(e.node=T("div",null,null,"positio...
  function hn (line 1) | function hn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.li...
  function fn (line 1) | function fn(e,t){var n=t.text.className,r=hn(e,t);t.text==t.node&&(t.nod...
  function bn (line 1) | function bn(e,t){!function(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bg...
  function mn (line 1) | function mn(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter...
  function gn (line 1) | function gn(e,t,n){t.alignable&&(t.alignable=null);for(var r=t.node.firs...
  function vn (line 1) | function vn(e,t,n,r){var i=hn(e,t);return t.text=t.node=i.pre,i.bgClass&...
  function yn (line 1) | function yn(e,t,n){if(_n(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.le...
  function _n (line 1) | function _n(e,t,n,r,i){if(t.widgets)for(var o=dn(n),a=0,s=t.widgets;a<s....
  function wn (line 1) | function wn(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).pus...
  function xn (line 1) | function xn(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)re...
  function kn (line 1) | function kn(e,t){for(var n=Ce(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n...
  function Cn (line 1) | function Cn(e){return e.lineSpace.offsetTop}
  function Sn (line 1) | function Sn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}
  function En (line 1) | function En(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=A(e.mea...
  function jn (line 1) | function jn(e){return q-e.display.nativeBarWidth}
  function An (line 1) | function An(e){return e.display.scroller.clientWidth-jn(e)-e.display.bar...
  function Tn (line 1) | function Tn(e){return e.display.scroller.clientHeight-jn(e)-e.display.ba...
  function Mn (line 1) | function Mn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure...
  function On (line 1) | function On(e,t,n,r){return Ln(e,Dn(e,t),n,r)}
  function Pn (line 1) | function Pn(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.d...
  function Dn (line 1) | function Dn(e,t){var n=Xe(t),r=Pn(e,n);r&&!r.text?r=null:r&&r.changes&&(...
  function Ln (line 1) | function Ln(e,t,n,r,i){t.before&&(n=-1);var o,l=n+(r||"");return t.cache...
  function Bn (line 1) | function Bn(e,t,n){for(var r,i,o,a,s,l,c=0;c<e.length;c+=3)if(s=e[c],l=e...
  function zn (line 1) | function zn(e,t){var n=In;if("left"==t)for(var r=0;r<e.length&&(n=e[r])....
  function Fn (line 1) | function Fn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,...
  function Nn (line 1) | function Nn(e){e.display.externalMeasure=null,j(e.display.lineMeasure);f...
  function qn (line 1) | function qn(e){Nn(e),e.display.cachedCharWidth=e.display.cachedTextHeigh...
  function Un (line 1) | function Un(){return p&&m?-(document.body.getBoundingClientRect().left-p...
  function Hn (line 1) | function Hn(){return p&&m?-(document.body.getBoundingClientRect().top-pa...
  function Wn (line 1) | function Wn(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e...
  function $n (line 1) | function $n(e,t,n,r,i){if(!i){var o=Wn(t);n.top+=o,n.bottom+=o}if("line"...
  function Vn (line 1) | function Vn(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==...
  function Kn (line 1) | function Kn(e,t,n,r,i){return r||(r=Ke(e.doc,t.line)),$n(e,r,On(e,r,t.ch...
  function Gn (line 1) | function Gn(e,t,n,r,i,o){function a(t,a){var s=Ln(e,i,t,a?"right":"left"...
  function Jn (line 1) | function Jn(e,t){var n=0;t=lt(e.doc,t),e.options.lineWrapping||(n=rr(e.d...
  function Yn (line 1) | function Yn(e,t,n,r,i){var o=tt(e,t,n);return o.xRel=i,r&&(o.outside=!0),o}
  function Xn (line 1) | function Xn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Yn(...
  function Qn (line 1) | function Qn(e,t,n,r){r-=Wn(t);var i=t.text.length,o=ae(function(t){retur...
  function Zn (line 1) | function Zn(e,t,n,r){return n||(n=Dn(e,t)),Qn(e,t,n,$n(e,t,Ln(e,n,r),"li...
  function er (line 1) | function er(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}
  function tr (line 1) | function tr(e,t,n,r,i){i-=Wt(t);var o=Dn(e,t),a=Wn(t),s=0,l=t.text.lengt...
  function nr (line 1) | function nr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(...
  function rr (line 1) | function rr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t...
  function ir (line 1) | function ir(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t....
  function or (line 1) | function or(e){return e.scroller.getBoundingClientRect().left-e.sizer.ge...
  function ar (line 1) | function ar(e){var t=nr(e.display),n=e.options.lineWrapping,r=n&&Math.ma...
  function sr (line 1) | function sr(e){var t=e.doc,n=ar(e);t.iter(function(e){var t=n(e);t!=e.he...
  function lr (line 1) | function lr(e,t,n,r){var i=e.display;if(!n&&"true"==Ce(t).getAttribute("...
  function cr (line 1) | function cr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.vie...
  function pr (line 1) | function pr(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e....
  function ur (line 1) | function ur(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.ex...
  function dr (line 1) | function dr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display...
  function hr (line 1) | function hr(e,t,n,r){var i,o=cr(e,t),a=e.display.view;if(!kt||n==e.doc.f...
  function fr (line 1) | function fr(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[...
  function br (line 1) | function br(e){e.display.input.showSelection(e.display.input.prepareSele...
  function mr (line 1) | function mr(e,t){void 0===t&&(t=!0);for(var n=e.doc,r={},i=r.cursors=doc...
  function gr (line 1) | function gr(e,t,n){var r=Gn(e,t,"div",null,null,!e.options.singleCursorH...
  function vr (line 1) | function vr(e,t){return e.top-t.top||e.left-t.left}
  function yr (line 1) | function yr(e,t,n){var r=e.display,i=e.doc,o=document.createDocumentFrag...
  function _r (line 1) | function _r(e){if(e.state.focused){var t=e.display;clearInterval(t.blink...
  function wr (line 1) | function wr(e){e.state.focused||(e.display.input.focus(),kr(e))}
  function xr (line 1) | function xr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.stat...
  function kr (line 1) | function kr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!...
  function Cr (line 1) | function Cr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(be(e,"blu...
  function Sr (line 1) | function Sr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.le...
  function Er (line 1) | function Er(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e....
  function jr (line 1) | function jr(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scr...
  function Ar (line 1) | function Ar(e,t){var n=e.display,r=nr(e.display);t.top<0&&(t.top=0);var ...
  function Tr (line 1) | function Tr(e,t){null!=t&&(Pr(e),e.curOp.scrollTop=(null==e.curOp.scroll...
  function Mr (line 1) | function Mr(e){Pr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:...
  function Or (line 1) | function Or(e,t,n){null==t&&null==n||Pr(e),null!=t&&(e.curOp.scrollLeft=...
  function Pr (line 1) | function Pr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Dr...
  function Dr (line 1) | function Dr(e,t,n,r){var i=Ar(e,{left:Math.min(t.left,n.left),top:Math.m...
  function Lr (line 1) | function Lr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||ai(e,{top:t}),Rr(e,t...
  function Rr (line 1) | function Rr(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display....
  function Ir (line 1) | function Ir(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.displ...
  function Br (line 1) | function Br(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.do...
  function Nr (line 1) | function Nr(e,t){t||(t=Br(e));var n=e.display.barWidth,r=e.display.barHe...
  function qr (line 1) | function qr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style....
  function Hr (line 1) | function Hr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.dis...
  function $r (line 1) | function $r(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.heig...
  function Vr (line 1) | function Vr(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try...
  function Kr (line 1) | function Kr(e){var t=e.cm,n=t.display;!function(e){var t=e.display;!t.sc...
  function Gr (line 1) | function Gr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Sr(t),e.barMeasu...
  function Jr (line 1) | function Jr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style....
  function Yr (line 1) | function Yr(e){var t=e.cm,n=t.display,r=t.doc;e.updatedDisplay&&oi(t,e.u...
  function Xr (line 1) | function Xr(e,t){if(e.curOp)return t();$r(e);try{return t()}finally{Vr(e)}}
  function Qr (line 1) | function Qr(e,t){return function(){if(e.curOp)return t.apply(e,arguments...
  function Zr (line 1) | function Zr(e){return function(){if(this.curOp)return e.apply(this,argum...
  function ei (line 1) | function ei(e){return function(){var t=this.cm;if(!t||t.curOp)return e.a...
  function ti (line 1) | function ti(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highl...
  function ni (line 1) | function ni(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){...
  function ii (line 1) | function ii(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return dr(e...
  function oi (line 1) | function oi(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t...
  function ai (line 1) | function ai(e,t){var n=new ri(e,t);if(ii(e,n)){Sr(e),oi(e,n);var r=Br(e)...
  function si (line 1) | function si(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}
  function li (line 1) | function li(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.disp...
  function ci (line 1) | function ci(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.fir...
  function pi (line 1) | function pi(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=et(e.opt...
  function ui (line 1) | function ui(e,t){for(var n=[],r=!1,i=0;i<e.length;i++){var o=e[i],a=null...
  function di (line 1) | function di(e){var t=e.gutters,n=e.gutterSpecs;j(t),e.lineGutter=null;fo...
  function hi (line 1) | function hi(e){di(e.display),pr(e),ci(e)}
  function fi (line 1) | function fi(e,t,r,i){var o=this;this.input=r,o.scrollbarFiller=T("div",n...
  function gi (line 1) | function gi(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.det...
  function vi (line 1) | function vi(e){var t=gi(e);return t.x*=mi,t.y*=mi,t}
  function yi (line 1) | function yi(e,t){var r=gi(t),i=r.x,o=r.y,a=e.display,s=a.scroller,c=s.sc...
  function xi (line 1) | function xi(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort(f...
  function ki (line 1) | function ki(e,t){return new _i([new wi(e,t||e)],0)}
  function Ci (line 1) | function Ci(e){return e.text?tt(e.from.line+e.text.length-1,J(e.text).le...
  function Si (line 1) | function Si(e,t){if(nt(e,t.from)<0)return e;if(nt(e,t.to)<=0)return Ci(t...
  function Ei (line 1) | function Ei(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel...
  function ji (line 1) | function ji(e,t,n){return e.line==t.line?tt(n.line,e.ch-t.ch+n.ch):tt(n....
  function Ai (line 1) | function Ai(e){e.doc.mode=Ne(e.options,e.doc.modeOption),Ti(e)}
  function Ti (line 1) | function Ti(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),...
  function Mi (line 1) | function Mi(e,t){return 0==t.from.ch&&0==t.to.ch&&""==J(t.text)&&(!e.cm|...
  function Oi (line 1) | function Oi(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){...
  function Pi (line 1) | function Pi(e,t,n){!function e(r,i,o){if(r.linked)for(var a=0;a<r.linked...
  function Di (line 1) | function Di(e,t){if(t.cm)throw new Error("This document is already in us...
  function Li (line 1) | function Li(e){("rtl"==e.doc.direction?D:E)(e.display.lineDiv,"CodeMirro...
  function Ri (line 1) | function Ri(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastM...
  function Ii (line 1) | function Ii(e,t){var n={from:it(t.from),to:Ci(t),text:Ge(e,t.from,t.to)}...
  function Bi (line 1) | function Bi(e){for(;e.length&&J(e).ranges;)e.pop()}
  function zi (line 1) | function zi(e,t,n,r){var i=e.history;i.undone.length=0;var o,a,s=+new Da...
  function Fi (line 1) | function Fi(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i....
  function Ni (line 1) | function Ni(e,t){var n=J(t);n&&n.ranges&&n.equals(e)||t.push(e)}
  function qi (line 1) | function qi(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,...
  function Ui (line 1) | function Ui(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marke...
  function Hi (line 1) | function Hi(e,t){var n=function(e,t){var n=t["spans_"+e.id];if(!n)return...
  function Wi (line 1) | function Wi(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.rang...
  function $i (line 1) | function $i(e,t,n,r){if(r){var i=e.anchor;if(n){var o=nt(t,i)<0;o!=nt(n,...
  function Vi (line 1) | function Vi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend))...
  function Ki (line 1) | function Ki(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o...
  function Gi (line 1) | function Gi(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,Xi(e,xi(e.cm,i,e...
  function Ji (line 1) | function Ji(e,t,n,r){Xi(e,ki(t,n),r)}
  function Yi (line 1) | function Yi(e,t,n){var r=e.history.done,i=J(r);i&&i.ranges?(r[r.length-1...
  function Xi (line 1) | function Xi(e,t,n){Qi(e,t,n),Fi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}
  function Qi (line 1) | function Qi(e,t,n){(ve(e,"beforeSelectionChange")||e.cm&&ve(e.cm,"before...
  function Zi (line 1) | function Zi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput...
  function eo (line 1) | function eo(e){Zi(e,to(e,e.sel,null,!1))}
  function to (line 1) | function to(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges...
  function no (line 1) | function no(e,t,n,r,i){var o=Ke(e,t.line);if(o.markedSpans)for(var a=0;a...
  function ro (line 1) | function ro(e,t,n,r,i){var o=r||1,a=no(e,t,n,o,i)||!i&&no(e,t,n,o,!0)||n...
  function io (line 1) | function io(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?lt(e,tt(t.line-1...
  function oo (line 1) | function oo(e){e.setSelection(tt(e.firstLine(),0),tt(e.lastLine()),H)}
  function ao (line 1) | function ao(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,or...
  function so (line 1) | function so(e,t,n){if(e.cm){if(!e.cm.curOp)return Qr(e.cm,so)(e,t,n);if(...
  function lo (line 1) | function lo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=nt(t.from,t.to))...
  function co (line 1) | function co(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(va...
  function po (line 1) | function po(e,t){if(0!=t&&(e.first+=t,e.sel=new _i(Y(e.sel.ranges,functi...
  function uo (line 1) | function uo(e,t,n,r){if(e.cm&&!e.cm.curOp)return Qr(e.cm,uo)(e,t,n,r);if...
  function ho (line 1) | function ho(e,t,n,r,i){var o;r||(r=n),nt(r,n)<0&&(n=(o=[r,n])[0],r=o[1])...
  function fo (line 1) | function fo(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}
  function bo (line 1) | function bo(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ra...
  function mo (line 1) | function mo(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;b...
  function go (line 1) | function go(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=Ke(e,st(e,t)...
  function vo (line 1) | function vo(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;...
  function yo (line 1) | function yo(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i...
  function wo (line 1) | function wo(e,t,n){Wt(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&...
  function Co (line 1) | function Co(e,t,n,r,i){if(r&&r.shared)return function(e,t,n,r,i){(r=B(r)...
  function Eo (line 1) | function Eo(e){return e.findMarks(tt(e.first,0),e.clipPos(tt(e.lastLine(...
  function jo (line 1) | function jo(e){for(var t=function(t){var n=e[t],r=[n.primary.doc];Pi(n.p...
  function Oo (line 1) | function Oo(e){var t=this;if(Po(t),!me(t,e)&&!kn(t.display,e)){_e(e),a&&...
  function Po (line 1) | function Po(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e....
  function Do (line 1) | function Do(e){if(document.getElementsByClassName){for(var t=document.ge...
  function Ro (line 1) | function Ro(){var e;Lo||(de(window,"resize",function(){null==e&&(e=setTi...
  function Io (line 1) | function Io(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.ca...
  function Uo (line 1) | function Uo(e){var t,n,r,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a...
  function Ho (line 1) | function Ho(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n...
  function Wo (line 1) | function Wo(e,t,n,r){var i=(t=Go(t)).call?t.call(e,r):t[e];if(!1===i)ret...
  function $o (line 1) | function $o(e){var t="string"==typeof e?e:Bo[e.keyCode];return"Ctrl"==t|...
  function Vo (line 1) | function Vo(e,t,n){var r=e;return t.altKey&&"Alt"!=r&&(e="Alt-"+e),(x?t....
  function Ko (line 1) | function Ko(e,t){if(u&&34==e.keyCode&&e.char)return!1;var n=Bo[e.keyCode...
  function Go (line 1) | function Go(e){return"string"==typeof e?qo[e]:e}
  function Jo (line 1) | function Jo(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for...
  function Yo (line 1) | function Yo(e,t,n){var r=oe(e.text,t+n,n);return r<0||r>e.text.length?nu...
  function Xo (line 1) | function Xo(e,t,n){var r=Yo(e,t.ch,n);return null==r?null:new tt(t.line,...
  function Qo (line 1) | function Qo(e,t,n,r,i){if(e){var o=pe(n,t.doc.direction);if(o){var a,s=i...
  function ea (line 1) | function ea(e,t){var n=Ke(e.doc,t),r=Ft(n);return r!=n&&(t=Xe(r)),Qo(!0,...
  function ta (line 1) | function ta(e,t){var n=ea(e,t.line),r=Ke(e.doc,n.line),i=pe(r,e.doc.dire...
  function na (line 1) | function na(e,t,n){if("string"==typeof t&&!(t=Zo[t]))return!1;e.display....
  function ia (line 1) | function ia(e,t,n,r){var i=e.state.keySeq;if(i){if($o(t))return"handled"...
  function oa (line 1) | function oa(e,t,n,r){var i=function(e,t,n){for(var r=0;r<e.state.keyMaps...
  function aa (line 1) | function aa(e,t){var n=Ko(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?...
  function la (line 1) | function la(e){var t=this;if(t.curOp.focus=P(),!me(t,e)){a&&s<11&&27==e....
  function ca (line 1) | function ca(e){16==e.keyCode&&(this.doc.sel.shift=!1),me(this,e)}
  function pa (line 1) | function pa(e){var t=this;if(!(kn(t.display,e)||me(t,e)||e.ctrlKey&&!e.a...
  function fa (line 1) | function fa(e){var t=this,n=t.display;if(!(me(t,e)||n.activeTouch&&n.inp...
  function ba (line 1) | function ba(e,t,n){if("char"==n)return new wi(t,t);if("word"==n)return e...
  function ma (line 1) | function ma(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.tou...
  function ga (line 1) | function ga(e,t){return ma(e,t,"gutterClick",!0)}
  function va (line 1) | function va(e,t){kn(e.display,t)||function(e,t){return!!ve(e,"gutterCont...
  function ya (line 1) | function ya(e){e.display.wrapper.className=e.display.wrapper.className.r...
  function ka (line 1) | function ka(e,t,n){if(!t!=!(n&&n!=_a)){var r=e.display.dragFunctions,i=t...
  function Ca (line 1) | function Ca(e){e.options.lineWrapping?(D(e.display.wrapper,"CodeMirror-w...
  function Sa (line 1) | function Sa(e,t){var n=this;if(!(this instanceof Sa))return new Sa(e,t);...
  function ja (line 1) | function ja(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mod...
  function Ta (line 1) | function Ta(e){Aa=e}
  function Ma (line 1) | function Ma(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var a...
  function Oa (line 1) | function Oa(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");...
  function Pa (line 1) | function Pa(e,t){if(e.options.electricChars&&e.options.smartIndent)for(v...
  function Da (line 1) | function Da(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var ...
  function La (line 1) | function La(e,t,n,r){e.setAttribute("autocorrect",n?"":"off"),e.setAttri...
  function Ra (line 1) | function Ra(){var e=T("textarea",null,null,"position: absolute; bottom: ...
  function Ia (line 1) | function Ia(e,t,n,r,i){var o=t,a=n,s=Ke(e,t.line);function l(r){var o,a;...
  function Ba (line 1) | function Ba(e,t,n,r){var i,o,a=e.doc,s=t.left;if("page"==r){var l=Math.m...
  function Fa (line 1) | function Fa(e,t){var n=Pn(e,t.line);if(!n||n.hidden)return null;var r=Ke...
  function Na (line 1) | function Na(e,t){return t&&(e.bad=!0),e}
  function qa (line 1) | function qa(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineD...
  function Ua (line 1) | function Ua(e,t,n){var r=e.text.firstChild,i=!1;if(!t||!O(r,t))return Na...
  function o (line 1) | function o(e){if(!me(r,e)){if(r.somethingSelected())Ta({lineWise:!1,text...
    method constructor (line 46) | constructor(e,t){super(),this.mimeType=e.mimeType,this._manager=t}
    method renderModel (line 46) | async renderModel(e){const t=e.data[this.mimeType],n=this._manager.get...
    method constructor (line 46) | constructor(e={}){if(this._map=new Map,this._changed=new i.Signal(this...
    method type (line 46) | get type(){return"Map"}
    method changed (line 46) | get changed(){return this._changed}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method size (line 46) | get size(){return this._map.size}
    method set (line 46) | set(e,t){let n=this._map.get(e);if(void 0===t)throw Error("Cannot set ...
    method get (line 46) | get(e){return this._map.get(e)}
    method has (line 46) | has(e){return this._map.has(e)}
    method keys (line 46) | keys(){let e=[];return this._map.forEach((t,n)=>{e.push(n)}),e}
    method values (line 46) | values(){let e=[];return this._map.forEach((t,n)=>{e.push(t)}),e}
    method delete (line 46) | delete(e){let t=this._map.get(e);return this._map.delete(e)&&this._cha...
    method clear (line 46) | clear(){let e=this.keys();for(let t=0;t<e.length;t++)this.delete(e[t])}
    method dispose (line 46) | dispose(){this.isDisposed||(this._isDisposed=!0,i.Signal.clearData(thi...
    method reg (line 54) | static reg(e){return new RegExp("^"+e+"$","i")}
    method constructor (line 54) | constructor(e,t=500){this.payload=null,this.limit=t,this.poll=new i.Po...
    method isDisposed (line 54) | get isDisposed(){return null===this.payload}
    method dispose (line 54) | dispose(){this.isDisposed||(this.payload=null,this.poll.dispose())}
    method stop (line 54) | async stop(){return this.poll.stop()}
  function c (line 1) | function c(){a&&(o+=s,l&&(o+=s),a=l=!1)}
    method constructor (line 54) | constructor(){this.stateChanged=new i.Signal(this),this._isDisposed=!1}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,i.Signal.clearData(thi...
    method defaults (line 54) | defaults(){return Object.assign({},super.defaults(),{msg_id:""})}
    method initialize (line 54) | initialize(e,t){super.initialize(e,t),this._outputs=new s.a({trusted:!...
    method onMsgIdChange (line 54) | onMsgIdChange(){this._msgHook&&this._msgHook.dispose(),this._msgHook=n...
    method add (line 54) | add(e){var t=e.header.msg_type;switch(t){case"execute_result":case"dis...
    method clear_output (line 54) | clear_output(){var e=arguments.length>0&&void 0!==arguments[0]&&argume...
    method outputs (line 54) | get outputs(){return this._outputs}
  function p (line 1) | function p(e){e&&(c(),o+=e)}
    method _createElement (line 54) | _createElement(e){return this.pWidget=new i.Panel,this.pWidget.node}
    method _setElement (line 54) | _setElement(e){if(this.el||e!==this.pWidget.node)throw new Error("Cann...
    method render (line 54) | render(){super.render(),this._outputView=new l.a({rendermime:this.mode...
    method remove (line 54) | remove(){return this._outputView.dispose(),super.remove()}
  function u (line 1) | function u(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)ret...
    method constructor (line 54) | constructor(e){this.jsServicesComm=e,this.comm_id=this.jsServicesComm....
    method open (line 54) | open(e,t,n,r){var i=this.jsServicesComm.open(e,n,r);return this._hooku...
    method send (line 54) | send(e,t,n,r){var i=this.jsServicesComm.send(e,n,r);return this._hooku...
    method close (line 54) | close(e,t,n,r){var i=this.jsServicesComm.close(e,n,r);return this._hoo...
    method on_msg (line 54) | on_msg(e){this.jsServicesComm.onMsg=e.bind(this)}
    method on_close (line 54) | on_close(e){this.jsServicesComm.onClose=e.bind(this)}
    method _hookupCallbacks (line 54) | _hookupCallbacks(e,t){t&&(e.onReply=function(e){t.shell&&t.shell.reply...
    method constructor (line 54) | constructor(e,t,n){this._id="",this._path="",this._name="",this._type=...
    method terminated (line 54) | get terminated(){return this._terminated}
    method kernelChanged (line 54) | get kernelChanged(){return this._kernelChanged}
    method statusChanged (line 54) | get statusChanged(){return this._statusChanged}
    method iopubMessage (line 54) | get iopubMessage(){return this._iopubMessage}
    method unhandledMessage (line 54) | get unhandledMessage(){return this._unhandledMessage}
    method anyMessage (line 54) | get anyMessage(){return this._anyMessage}
    method propertyChanged (line 54) | get propertyChanged(){return this._propertyChanged}
    method id (line 54) | get id(){return this._id}
    method kernel (line 54) | get kernel(){return this._kernel}
    method path (line 54) | get path(){return this._path}
    method type (line 54) | get type(){return this._type}
    method name (line 54) | get name(){return this._name}
    method model (line 54) | get model(){return{id:this.id,kernel:this.kernel.model,path:this._path...
    method status (line 54) | get status(){return this._kernel?this._kernel.status:"dead"}
    method isDisposed (line 54) | get isDisposed(){return!0===this._isDisposed}
    method clone (line 54) | clone(){return new u({path:this._path,name:this._name,type:this._type,...
    method update (line 54) | update(e){if(this._updating)return;let t=this.model;if(this._path=e.pa...
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,this._kernel.dispose()...
    method setPath (line 54) | setPath(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method setName (line 54) | setName(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method setType (line 54) | setType(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method changeKernel (line 54) | changeKernel(e){if(this.isDisposed)return Promise.reject(new Error("Se...
    method shutdown (line 54) | shutdown(){return this.isDisposed?Promise.reject(new Error("Session is...
    method setupKernel (line 54) | setupKernel(e){const t=s.Kernel.connectTo(e,this.serverSettings);this....
    method onKernelStatus (line 54) | onKernelStatus(e,t){this._statusChanged.emit(t)}
    method onIOPubMessage (line 54) | onIOPubMessage(e,t){this._iopubMessage.emit(t)}
    method onUnhandledMessage (line 54) | onUnhandledMessage(e,t){this._unhandledMessage.emit(t)}
    method onAnyMessage (line 54) | onAnyMessage(e,t){this._anyMessage.emit(t)}
    method _patch (line 54) | _patch(e){this._updating=!0;let t=this.serverSettings,n=d.getSessionUr...
    method _handleModelChange (line 54) | _handleModelChange(e){e.name!==this._name&&this._propertyChanged.emit(...
  function o (line 1) | function o(e){if(!me(r,e)){if(r.somethingSelected())Ta({lineWise:!1,text...
    method constructor (line 46) | constructor(e,t){super(),this.mimeType=e.mimeType,this._manager=t}
    method renderModel (line 46) | async renderModel(e){const t=e.data[this.mimeType],n=this._manager.get...
    method constructor (line 46) | constructor(e={}){if(this._map=new Map,this._changed=new i.Signal(this...
    method type (line 46) | get type(){return"Map"}
    method changed (line 46) | get changed(){return this._changed}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method size (line 46) | get size(){return this._map.size}
    method set (line 46) | set(e,t){let n=this._map.get(e);if(void 0===t)throw Error("Cannot set ...
    method get (line 46) | get(e){return this._map.get(e)}
    method has (line 46) | has(e){return this._map.has(e)}
    method keys (line 46) | keys(){let e=[];return this._map.forEach((t,n)=>{e.push(n)}),e}
    method values (line 46) | values(){let e=[];return this._map.forEach((t,n)=>{e.push(t)}),e}
    method delete (line 46) | delete(e){let t=this._map.get(e);return this._map.delete(e)&&this._cha...
    method clear (line 46) | clear(){let e=this.keys();for(let t=0;t<e.length;t++)this.delete(e[t])}
    method dispose (line 46) | dispose(){this.isDisposed||(this._isDisposed=!0,i.Signal.clearData(thi...
    method reg (line 54) | static reg(e){return new RegExp("^"+e+"$","i")}
    method constructor (line 54) | constructor(e,t=500){this.payload=null,this.limit=t,this.poll=new i.Po...
    method isDisposed (line 54) | get isDisposed(){return null===this.payload}
    method dispose (line 54) | dispose(){this.isDisposed||(this.payload=null,this.poll.dispose())}
    method stop (line 54) | async stop(){return this.poll.stop()}
  function m (line 1) | function m(){if(null!=i.selectionStart){var e=n.somethingSelected(),o="​...
  function g (line 1) | function g(){if(t.contextMenuPending==g&&(t.contextMenuPending=!1,t.wrap...
    method constructor (line 46) | constructor(e){super(),this._inCompound=!1,this._isUndoable=!0,this._m...
    method canRedo (line 46) | get canRedo(){return this._index<this._stack.length-1}
    method canUndo (line 46) | get canUndo(){return this._index>=0}
    method beginCompoundOperation (line 46) | beginCompoundOperation(e){this._inCompound=!0,this._isUndoable=!1!==e,...
    method endCompoundOperation (line 46) | endCompoundOperation(){this._inCompound=!1,this._isUndoable=!0,this._m...
    method undo (line 46) | undo(){if(!this.canUndo)return;let e=this._stack[this._index];this._is...
    method redo (line 46) | redo(){if(!this.canRedo)return;this._index++;let e=this._stack[this._i...
    method clearUndo (line 46) | clearUndo(){this._index=-1,this._stack=[]}
    method _onListChanged (line 46) | _onListChanged(e,t){if(this.isDisposed||!this._isUndoable)return;this....
    method _undoChange (line 46) | _undoChange(e){let t=0,n=this._serializer;switch(e.type){case"add":Obj...
    method _redoChange (line 46) | _redoChange(e){let t=0,n=this._serializer;switch(e.type){case"add":t=e...
    method _copyChange (line 46) | _copyChange(e){let t=[];Object(a.each)(e.oldValues,e=>{t.push(this._se...
    method constructor (line 46) | constructor(e){super(),this.loader=e&&e.loader,this.renderMime=new f.a...
    method display_view (line 46) | display_view(e,t,n){return Promise.resolve(t).then(e=>(s.Widget.attach...
    method _get_comm_info (line 46) | _get_comm_info(){return Promise.resolve({})}
    method _create_comm (line 46) | _create_comm(e,t,n,r,i){return Promise.resolve({on_close:()=>{},on_msg...
    method loadClass (line 46) | loadClass(e,t,n){return new Promise((e,a)=>{"@jupyter-widgets/base"===...
    method constructor (line 54) | constructor(e,t){this._createSocket=()=>{if(this.isDisposed)return;let...
    method terminated (line 54) | get terminated(){return this._terminated}
    method statusChanged (line 54) | get statusChanged(){return this._statusChanged}
    method iopubMessage (line 54) | get iopubMessage(){return this._iopubMessage}
    method unhandledMessage (line 54) | get unhandledMessage(){return this._unhandledMessage}
    method anyMessage (line 54) | get anyMessage(){return this._anyMessage}
    method id (line 54) | get id(){return this._id}
    method name (line 54) | get name(){return this._name}
    method model (line 54) | get model(){return{name:this.name,id:this.id}}
    method username (line 54) | get username(){return this._username}
    method clientId (line 54) | get clientId(){return this._clientId}
    method status (line 54) | get status(){return this._status}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method info (line 54) | get info(){return this._info}
    method isReady (line 54) | get isReady(){return this._isReady}
    method ready (line 54) | get ready(){return this._readyPromise.promise}
    method getSpec (line 54) | getSpec(){return this._specPromise?this._specPromise:(this._specPromis...
    method clone (line 54) | clone(){return new g({name:this._name,username:this._username,serverSe...
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,this._terminated.emit(...
    method sendShellMessage (line 54) | sendShellMessage(e,t=!1,n=!0){return this._sendKernelShellControl(d.Ke...
    method sendControlMessage (line 54) | sendControlMessage(e,t=!1,n=!0){return this._sendKernelShellControl(d....
    method _sendKernelShellControl (line 54) | _sendKernelShellControl(e,t,n=!1,r=!0){if("dead"===this.status)throw n...
    method interrupt (line 54) | interrupt(){return v.interruptKernel(this,this.serverSettings)}
    method restart (line 54) | restart(){return v.restartKernel(this,this.serverSettings)}
    method handleRestart (line 54) | async handleRestart(){await this._clearState(),this._updateStatus("res...
    method reconnect (line 54) | reconnect(){return this._clearSocket(),this._updateStatus("reconnectin...
    method shutdown (line 54) | async shutdown(){if("dead"===this.status)return this._clearSocket(),vo...
    method requestKernelInfo (line 54) | async requestKernelInfo(){let e=u.KernelMessage.createMessage({msgType...
    method requestComplete (line 54) | requestComplete(e){let t=u.KernelMessage.createMessage({msgType:"compl...
    method requestInspect (line 54) | requestInspect(e){let t=u.KernelMessage.createMessage({msgType:"inspec...
    method requestHistory (line 54) | requestHistory(e){let t=u.KernelMessage.createMessage({msgType:"histor...
    method requestExecute (line 54) | requestExecute(e,t=!0,n){let r=u.KernelMessage.createMessage({msgType:...
    method requestIsComplete (line 54) | requestIsComplete(e){let t=u.KernelMessage.createMessage({msgType:"is_...
    method requestCommInfo (line 54) | requestCommInfo(e){let t=u.KernelMessage.createMessage({msgType:"comm_...
    method sendInputReply (line 54) | sendInputReply(e){if("dead"===this.status)throw new Error("Kernel is d...
    method connectToComm (line 54) | connectToComm(e,t=o.UUID.uuid4()){if(this._comms.has(t))return this._c...
    method registerCommTarget (line 54) | registerCommTarget(e,t){this._targetRegistry[e]=t}
    method removeCommTarget (line 54) | removeCommTarget(e,t){this.isDisposed||this._targetRegistry[e]!==t||de...
    method registerMessageHook (line 54) | registerMessageHook(e,t){let n=this._futures&&this._futures.get(e);n&&...
    method removeMessageHook (line 54) | removeMessageHook(e,t){let n=this._futures&&this._futures.get(e);n&&n....
    method _handleDisplayId (line 54) | async _handleDisplayId(e,t){let n=t.parent_header.msg_id,r=this._displ...
    method _clearSocket (line 54) | _clearSocket(){this._wsStopped=!0,null!==this._ws&&(this._ws.onopen=th...
    method _updateStatus (line 54) | _updateStatus(e){switch(e){case"idle":case"busy":!this._isReady&&this....
    method _sendPending (line 54) | _sendPending(){for(;this._ws&&this._pendingMessages.length>0;){let e=h...
    method _clearState (line 54) | async _clearState(){this._pendingMessages=[];const e=[];this._futures....
    method _assertCurrentMessage (line 54) | _assertCurrentMessage(e){if(this.isDisposed)throw new Error("Kernel ob...
    method _handleCommOpen (line 54) | async _handleCommOpen(e){this._assertCurrentMessage(e);let t=e.content...
    method _handleCommClose (line 54) | async _handleCommClose(e){this._assertCurrentMessage(e);let t=e.conten...
    method _handleCommMsg (line 54) | async _handleCommMsg(e){this._assertCurrentMessage(e);let t=e.content,...
    method _unregisterComm (line 54) | _unregisterComm(e){this._comms.delete(e)}
    method _handleMessage (line 54) | async _handleMessage(e){let t=!1;if(e.parent_header&&"iopub"===e.chann...
  function n (line 1) | function n(n,r,i,o){e.defaults[n]=r,i&&(t[n]=o?function(e,t,n){n!=_a&&i(...
    method constructor (line 54) | constructor(e){this.startLine=e,this.code="",this.endLine=-1}
  function r (line 1) | function r(){e.value=s.getValue()}
  function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
  function n (line 1) | function n(){this.constructor=e}
    method constructor (line 54) | constructor(e){this.startLine=e,this.code="",this.endLine=-1}
  function d (line 1) | function d(e,t){return e.filter(function(e){return-1===t.indexOf(e)})}
    method defaults (line 46) | defaults(){return Object.assign({},super.defaults(),{msg_id:""})}
    method initialize (line 46) | initialize(e,t){super.initialize(e,t),this._outputs=new l.a({values:e....
    method outputs (line 46) | get outputs(){return this._outputs}
    method onError (line 54) | get onError(){return this._onError}
    method registerWithKernel (line 54) | registerWithKernel(e){this._commRegistration&&this._commRegistration.d...
    method display_view (line 54) | display_view(e,t,n){var r=n.el;return Promise.resolve(t).then(e=>(i.Wi...
    method loadClass (line 54) | loadClass(e,t,n){return"@jupyter-widgets/output"===t?Promise.resolve(r...
    method callbacks (line 54) | callbacks(e){var t=super.callbacks(e);return Object.assign({},t,{iopub...
    method _create_comm (line 54) | _create_comm(e,t,n,r){var i=this.kernel.connectToComm(e,t);return(n||m...
    method _get_comm_info (line 54) | _get_comm_info(){return this.kernel.requestCommInfo({target:this.comm_...
  function h (line 1) | function h(e,t){return s()(e,t)}
    method constructor (line 46) | constructor(e=""){this._text="",this._isDisposed=!1,this._changed=new ...
    method type (line 46) | get type(){return"String"}
    method changed (line 46) | get changed(){return this._changed}
    method text (line 46) | set text(e){e.length===this._text.length&&e===this._text||(this._text=...
    method text (line 46) | get text(){return this._text}
    method insert (line 46) | insert(e,t){this._text=this._text.slice(0,e)+t+this._text.slice(e),thi...
    method remove (line 46) | remove(e,t){let n=this._text.slice(e,t);this._text=this._text.slice(0,...
    method clear (line 46) | clear(){this.text=""}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method dispose (line 46) | dispose(){this._isDisposed||(this._isDisposed=!0,l.Signal.clearData(th...
    method _createElement (line 46) | _createElement(e){return this.pWidget=new s.Panel,this.pWidget.node}
    method _setElement (line 46) | _setElement(e){if(this.el||e!==this.pWidget.node)throw new Error("Cann...
    method render (line 46) | render(){const e=this.model.widget_manager.renderMime;this._outputView...
    method constructor (line 93) | constructor(e){this._changed=new l.Signal(this),this._raw={};let{data:...
    method changed (line 93) | get changed(){return this._changed}
    method dispose (line 93) | dispose(){this._data.dispose(),this._metadata.dispose(),l.Signal.clear...
    method data (line 93) | get data(){return this._rawData}
    method metadata (line 93) | get metadata(){return this._rawMetadata}
    method setData (line 93) | setData(e){e.data&&(this._updateObservable(this._data,e.data),this._ra...
    method toJSON (line 93) | toJSON(){let e={};for(let t in this._raw)e[t]=i.extract(this._raw,t);s...
    method _updateObservable (line 93) | _updateObservable(e,t){let n=e.keys(),r=Object.keys(t);for(let t of n)...
  function b (line 1) | function b(){return o.UUID.uuid4()}
  function t (line 1) | function t(n,r){var i=e.call(this,n)||this;return console.warn("WrappedE...
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function g (line 1) | function g(e){var t=Object.keys(e),n=[];return t.forEach(function(t){n.p...
    method constructor (line 46) | constructor(e){super(),this._inCompound=!1,this._isUndoable=!0,this._m...
    method canRedo (line 46) | get canRedo(){return this._index<this._stack.length-1}
    method canUndo (line 46) | get canUndo(){return this._index>=0}
    method beginCompoundOperation (line 46) | beginCompoundOperation(e){this._inCompound=!0,this._isUndoable=!1!==e,...
    method endCompoundOperation (line 46) | endCompoundOperation(){this._inCompound=!1,this._isUndoable=!0,this._m...
    method undo (line 46) | undo(){if(!this.canUndo)return;let e=this._stack[this._index];this._is...
    method redo (line 46) | redo(){if(!this.canRedo)return;this._index++;let e=this._stack[this._i...
    method clearUndo (line 46) | clearUndo(){this._index=-1,this._stack=[]}
    method _onListChanged (line 46) | _onListChanged(e,t){if(this.isDisposed||!this._isUndoable)return;this....
    method _undoChange (line 46) | _undoChange(e){let t=0,n=this._serializer;switch(e.type){case"add":Obj...
    method _redoChange (line 46) | _redoChange(e){let t=0,n=this._serializer;switch(e.type){case"add":t=e...
    method _copyChange (line 46) | _copyChange(e){let t=[];Object(a.each)(e.oldValues,e=>{t.push(this._se...
    method constructor (line 46) | constructor(e){super(),this.loader=e&&e.loader,this.renderMime=new f.a...
    method display_view (line 46) | display_view(e,t,n){return Promise.resolve(t).then(e=>(s.Widget.attach...
    method _get_comm_info (line 46) | _get_comm_info(){return Promise.resolve({})}
    method _create_comm (line 46) | _create_comm(e,t,n,r,i){return Promise.resolve({on_close:()=>{},on_msg...
    method loadClass (line 46) | loadClass(e,t,n){return new Promise((e,a)=>{"@jupyter-widgets/base"===...
    method constructor (line 54) | constructor(e,t){this._createSocket=()=>{if(this.isDisposed)return;let...
    method terminated (line 54) | get terminated(){return this._terminated}
    method statusChanged (line 54) | get statusChanged(){return this._statusChanged}
    method iopubMessage (line 54) | get iopubMessage(){return this._iopubMessage}
    method unhandledMessage (line 54) | get unhandledMessage(){return this._unhandledMessage}
    method anyMessage (line 54) | get anyMessage(){return this._anyMessage}
    method id (line 54) | get id(){return this._id}
    method name (line 54) | get name(){return this._name}
    method model (line 54) | get model(){return{name:this.name,id:this.id}}
    method username (line 54) | get username(){return this._username}
    method clientId (line 54) | get clientId(){return this._clientId}
    method status (line 54) | get status(){return this._status}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method info (line 54) | get info(){return this._info}
    method isReady (line 54) | get isReady(){return this._isReady}
    method ready (line 54) | get ready(){return this._readyPromise.promise}
    method getSpec (line 54) | getSpec(){return this._specPromise?this._specPromise:(this._specPromis...
    method clone (line 54) | clone(){return new g({name:this._name,username:this._username,serverSe...
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,this._terminated.emit(...
    method sendShellMessage (line 54) | sendShellMessage(e,t=!1,n=!0){return this._sendKernelShellControl(d.Ke...
    method sendControlMessage (line 54) | sendControlMessage(e,t=!1,n=!0){return this._sendKernelShellControl(d....
    method _sendKernelShellControl (line 54) | _sendKernelShellControl(e,t,n=!1,r=!0){if("dead"===this.status)throw n...
    method interrupt (line 54) | interrupt(){return v.interruptKernel(this,this.serverSettings)}
    method restart (line 54) | restart(){return v.restartKernel(this,this.serverSettings)}
    method handleRestart (line 54) | async handleRestart(){await this._clearState(),this._updateStatus("res...
    method reconnect (line 54) | reconnect(){return this._clearSocket(),this._updateStatus("reconnectin...
    method shutdown (line 54) | async shutdown(){if("dead"===this.status)return this._clearSocket(),vo...
    method requestKernelInfo (line 54) | async requestKernelInfo(){let e=u.KernelMessage.createMessage({msgType...
    method requestComplete (line 54) | requestComplete(e){let t=u.KernelMessage.createMessage({msgType:"compl...
    method requestInspect (line 54) | requestInspect(e){let t=u.KernelMessage.createMessage({msgType:"inspec...
    method requestHistory (line 54) | requestHistory(e){let t=u.KernelMessage.createMessage({msgType:"histor...
    method requestExecute (line 54) | requestExecute(e,t=!0,n){let r=u.KernelMessage.createMessage({msgType:...
    method requestIsComplete (line 54) | requestIsComplete(e){let t=u.KernelMessage.createMessage({msgType:"is_...
    method requestCommInfo (line 54) | requestCommInfo(e){let t=u.KernelMessage.createMessage({msgType:"comm_...
    method sendInputReply (line 54) | sendInputReply(e){if("dead"===this.status)throw new Error("Kernel is d...
    method connectToComm (line 54) | connectToComm(e,t=o.UUID.uuid4()){if(this._comms.has(t))return this._c...
    method registerCommTarget (line 54) | registerCommTarget(e,t){this._targetRegistry[e]=t}
    method removeCommTarget (line 54) | removeCommTarget(e,t){this.isDisposed||this._targetRegistry[e]!==t||de...
    method registerMessageHook (line 54) | registerMessageHook(e,t){let n=this._futures&&this._futures.get(e);n&&...
    method removeMessageHook (line 54) | removeMessageHook(e,t){let n=this._futures&&this._futures.get(e);n&&n....
    method _handleDisplayId (line 54) | async _handleDisplayId(e,t){let n=t.parent_header.msg_id,r=this._displ...
    method _clearSocket (line 54) | _clearSocket(){this._wsStopped=!0,null!==this._ws&&(this._ws.onopen=th...
    method _updateStatus (line 54) | _updateStatus(e){switch(e){case"idle":case"busy":!this._isReady&&this....
    method _sendPending (line 54) | _sendPending(){for(;this._ws&&this._pendingMessages.length>0;){let e=h...
    method _clearState (line 54) | async _clearState(){this._pendingMessages=[];const e=[];this._futures....
    method _assertCurrentMessage (line 54) | _assertCurrentMessage(e){if(this.isDisposed)throw new Error("Kernel ob...
    method _handleCommOpen (line 54) | async _handleCommOpen(e){this._assertCurrentMessage(e);let t=e.content...
    method _handleCommClose (line 54) | async _handleCommClose(e){this._assertCurrentMessage(e);let t=e.conten...
    method _handleCommMsg (line 54) | async _handleCommMsg(e){this._assertCurrentMessage(e);let t=e.content,...
    method _unregisterComm (line 54) | _unregisterComm(e){this._comms.delete(e)}
    method _handleMessage (line 54) | async _handleMessage(e){let t=!1;if(e.parent_header&&"iopub"===e.chann...
  function v (line 1) | function v(e,t){return function(n){throw t&&console.error(new Error(e)),n}}
    method constructor (line 46) | constructor(e=null){this._value=null,this._changed=new l.Signal(this),...
    method type (line 46) | get type(){return"Value"}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method changed (line 46) | get changed(){return this._changed}
    method get (line 46) | get(){return this._value}
    method set (line 46) | set(e){let t=this._value;o.JSONExt.deepEqual(t,e)||(this._value=e,this...
    method dispose (line 46) | dispose(){this._isDisposed||(this._isDisposed=!0,l.Signal.clearData(th...
    method constructor (line 93) | constructor(e){super(),this.outputLengthChanged=new o.Signal(this),thi...
    method widgets (line 93) | get widgets(){return this.layout.widgets}
    method future (line 93) | get future(){return this._future}
    method future (line 93) | set future(e){if(this.model.isDisposed)throw Error("Model is disposed"...
    method dispose (line 93) | dispose(){this._future&&this._future.dispose(),this._future=null,this....
    method onModelChanged (line 93) | onModelChanged(e,t){switch(t.type){case"add":this._insertOutput(t.newI...
    method onStateChanged (line 93) | onStateChanged(e){for(let e=0;e<this.model.length;e++)this._setOutput(...
    method _clear (line 93) | _clear(){if(!this.widgets.length)return;let e=this.widgets.length;for(...
    method onInputRequest (line 93) | onInputRequest(e,t){let n=this.contentFactory,r=e.content.prompt,i=e.c...
    method _setOutput (line 93) | _setOutput(e,t){let n=this.layout,r=n.widgets[e],i=r.widgets?r.widgets...
    method _insertOutput (line 93) | _insertOutput(e,t){let n=this.createOutputItem(t);n?n.toggleClass(h,nu...
    method createOutputItem (line 93) | createOutputItem(e){let t=this.createRenderedMimetype(e);if(!t)return ...
    method createRenderedMimetype (line 93) | createRenderedMimetype(e){let t=this.rendermime.preferredMimeType(e.da...
  function y (line 1) | function y(e,t,n){for(var r=0;r<t.length;r++){for(var i=t[r],o=e,a=0;a<i...
    method constructor (line 46) | constructor(e={}){this.isPrepopulated=!1,this.isCollaborative=!1,this....
    method basePath (line 46) | get basePath(){return this._basePath}
    method isDisposed (line 46) | get isDisposed(){return this._isDisposed}
    method get (line 46) | get(e){return this._db.get(this._resolvePath(e))}
    method has (line 46) | has(e){return this._db.has(this._resolvePath(e))}
    method createString (line 46) | createString(e){let t=new h;return this._disposables.add(t),this.set(e...
    method createList (line 46) | createList(e){let t=new g(new g.IdentitySerializer);return this._dispo...
    method createMap (line 46) | createMap(e){let t=new d.a;return this._disposables.add(t),this.set(e,...
    method createValue (line 46) | createValue(e){let t=new v;return this._disposables.add(t),this.set(e,...
    method getValue (line 46) | getValue(e){let t=this.get(e);if(!t||"Value"!==t.type)throw Error("Can...
    method setValue (line 46) | setValue(e,t){let n=this.get(e);if(!n||"Value"!==n.type)throw Error("C...
    method view (line 46) | view(e){let t=new y({basePath:e,baseDB:this});return this._disposables...
    method set (line 46) | set(e,t){this._db.set(this._resolvePath(e),t)}
    method dispose (line 46) | dispose(){this.isDisposed||(this._isDisposed=!0,this._toDispose&&this....
    method _resolvePath (line 46) | _resolvePath(e){return this._basePath&&(e=this._basePath+"."+e),e}
    method constructor (line 93) | constructor(){super(),this._executionCount=null,this.addClass(d)}
    method executionCount (line 93) | get executionCount(){return this._executionCount}
    method executionCount (line 93) | set executionCount(e){this._executionCount=e,this.node.textContent=nul...
    method constructor (line 93) | constructor(e){super(),this.mimeType=e.mimeType,this.sanitizer=e.sanit...
    method renderModel (line 93) | async renderModel(e){for(;this.node.firstChild;)this.node.removeChild(...
    method setFragment (line 93) | setFragment(e){}
  function _ (line 1) | function _(e){var t=[],n=[];return{state:function e(r,i){if(r.toJSON&&(r...
    method constructor (line 93) | constructor(e){super({node:w.createInputWidgetNode(e.prompt,e.password...
    method value (line 93) | get value(){return this._promise.promise.then(()=>this._value)}
    method handleEvent (line 93) | handleEvent(e){let t=this._input;"keydown"===e.type&&13===e.keyCode&&(...
    method onAfterAttach (line 93) | onAfterAttach(e){this._input.addEventListener("keydown",this),this.upd...
    method onUpdateRequest (line 93) | onUpdateRequest(e){this._input.focus()}
    method onBeforeDetach (line 93) | onBeforeDetach(e){this._input.removeEventListener("keydown",this)}
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedHTMLCommon")}
    method setFragment (line 93) | setFragment(e){let t;try{t=this.node.querySelector(e)}catch(e){console...
  function x (line 1) | function x(e){for(var t=new Uint8Array(e),n=[],r=0;r<t.length;r++)n.push...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedLatex")}
    method render (line 93) | render(e){return function(e){let{host:t,source:n,shouldTypeset:r,latex...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function k (line 1) | function k(e){for(var t=new Uint8Array(e.length/2),n=0;n<e.length;n+=2)t...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedImage")}
    method render (line 93) | render(e){let t=e.metadata[this.mimeType];return function(e){let{host:...
  function C (line 1) | function C(e){return Object(i.fromByteArray)(new Uint8Array(e))}
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedMarkdown")}
    method render (line 93) | render(e){return g({host:this.node,source:String(e.data[this.mimeType]...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function S (line 1) | function S(e){return Object(i.toByteArray)(e).buffer}
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedSVG")}
    method render (line 93) | render(e){let t=e.metadata[this.mimeType];return function(e){let{host:...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function a (line 1) | function a(e){try{l(r.next(e))}catch(e){o(e)}}
    method constructor (line 54) | constructor(e={}){this._array=[],this._isDisposed=!1,this._changed=new...
    method type (line 54) | get type(){return"List"}
    method changed (line 54) | get changed(){return this._changed}
    method length (line 54) | get length(){return this._array.length}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method dispose (line 54) | dispose(){this._isDisposed||(this._isDisposed=!0,o.Signal.clearData(th...
    method iter (line 54) | iter(){return new i.ArrayIterator(this._array)}
    method get (line 54) | get(e){return this._array[e]}
    method set (line 54) | set(e,t){let n=this._array[e];if(void 0===t)throw new Error("Cannot se...
    method push (line 54) | push(e){let t=this._array.push(e);return this._changed.emit({type:"add...
    method insert (line 54) | insert(e,t){i.ArrayExt.insert(this._array,e,t),this._changed.emit({typ...
    method removeValue (line 54) | removeValue(e){let t=this._itemCmp,n=i.ArrayExt.findFirstIndex(this._a...
    method remove (line 54) | remove(e){let t=i.ArrayExt.removeAt(this._array,e);if(void 0!==t)retur...
    method clear (line 54) | clear(){let e=this._array.slice();this._array.length=0,this._changed.e...
    method move (line 54) | move(e,t){if(this.length<=1||e===t)return;let n=[this._array[e]];i.Arr...
    method pushAll (line 54) | pushAll(e){let t=this.length;return Object(i.each)(e,e=>{this._array.p...
    method insertAll (line 54) | insertAll(e,t){let n=e;Object(i.each)(t,t=>{i.ArrayExt.insert(this._ar...
    method removeRange (line 54) | removeRange(e,t){let n=this._array.slice(e,t);for(let n=e;n<t;n++)i.Ar...
    method constructor (line 54) | constructor(e={}){super({itemCmp:r.JSONExt.deepEqual,values:e.values})}
    method toJSON (line 54) | toJSON(){const e=Object.create(null),t=this.keys();for(let n of t){con...
    method constructor (line 54) | constructor(e){this._url="unknown";let t=this.serverSettings=e.serverS...
    method data (line 54) | get data(){return this._data}
    method load (line 54) | load(){return i.ServerConnection.makeRequest(this._url,{},this.serverS...
    method update (line 54) | update(e){this._data=Object.assign({},this._data,e);let t={method:"PAT...
    method constructor (line 54) | constructor(e,t,n,i,o){super(e),this._status=0,this._stdin=s.noOp,this...
    method msg (line 54) | get msg(){return this._msg}
    method done (line 54) | get done(){return this._done.promise}
    method onReply (line 54) | get onReply(){return this._reply}
    method onReply (line 54) | set onReply(e){this._reply=e}
    method onIOPub (line 54) | get onIOPub(){return this._iopub}
    method onIOPub (line 54) | set onIOPub(e){this._iopub=e}
    method onStdin (line 54) | get onStdin(){return this._stdin}
    method onStdin (line 54) | set onStdin(e){this._stdin=e}
    method registerMessageHook (line 54) | registerMessageHook(e){if(this.isDisposed)throw new Error("Kernel futu...
    method removeMessageHook (line 54) | removeMessageHook(e){this.isDisposed||this._hooks.remove(e)}
    method sendInputReply (line 54) | sendInputReply(e){this._kernel.sendInputReply(e)}
    method dispose (line 54) | dispose(){this._stdin=s.noOp,this._iopub=s.noOp,this._reply=s.noOp,thi...
    method handleMsg (line 54) | async handleMsg(e){switch(e.channel){case"control":case"shell":e.chann...
    method _handleReply (line 54) | async _handleReply(e){let t=this._reply;t&&await t(e),this._replyMsg=e...
    method _handleStdin (line 54) | async _handleStdin(e){let t=this._stdin;t&&await t(e)}
    method _handleIOPub (line 54) | async _handleIOPub(e){let t=await this._hooks.process(e),n=this._iopub...
    method _handleDone (line 54) | _handleDone(){this._testFlag(s.KernelFutureFlag.IsDone)||(this._setFla...
    method _testFlag (line 54) | _testFlag(e){return 0!=(this._status&e)}
    method _setFlag (line 54) | _setFlag(e){this._status|=e}
  function s (line 1) | function s(e){try{l(r.throw(e))}catch(e){o(e)}}
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function l (line 1) | function l(e){e.done?i(e.value):new n(function(t){t(e.value)}).then(a,s)}
    method constructor (line 46) | constructor(e){this._disposed=new o.Signal(this),this._tick=new i.Prom...
    method disposed (line 46) | get disposed(){return this._disposed}
    method frequency (line 46) | get frequency(){return this._frequency}
    method frequency (line 46) | set frequency(e){if(this.isDisposed||i.JSONExt.deepEqual(e,this.freque...
    method isDisposed (line 46) | get isDisposed(){return"disposed"===this.state.phase}
    method standby (line 46) | get standby(){return this._standby}
    method standby (line 46) | set standby(e){this.isDisposed||this.standby===e||(this._standby=e)}
    method state (line 46) | get state(){return this._state}
    method tick (line 46) | get tick(){return this._tick.promise}
    method ticked (line 46) | get ticked(){return this._ticked}
    method dispose (line 46) | dispose(){this.isDisposed||(this._state=Object.assign({},c.DISPOSED_ST...
    method refresh (line 46) | refresh(){return this.schedule({cancel:({phase:e})=>"refreshed"===e,in...
    method schedule (line 46) | async schedule(e={}){if(this.isDisposed)return;if(e.cancel&&e.cancel(t...
    method start (line 46) | start(){return this.schedule({cancel:({phase:e})=>"constructed"!==e&&"...
    method stop (line 46) | stop(){return this.schedule({cancel:({phase:e})=>"stopped"===e,interva...
    method _execute (line 46) | _execute(){let e="function"==typeof this.standby?this.standby():this.s...
    method constructor (line 54) | constructor(){super(...arguments),this._modelChanged=new i.Signal(this)}
    method modelChanged (line 54) | get modelChanged(){return this._modelChanged}
    method model (line 54) | set model(e){this._model!==e&&(this._model&&this._model.stateChanged.d...
    method model (line 54) | get model(){return this._model}
    method dispose (line 54) | dispose(){this._model=null,super.dispose()}
    method constructor (line 93) | constructor(e={}){if(this._id=0,this._ranks={},this._types=null,this._...
    method mimeTypes (line 93) | get mimeTypes(){return this._types||(this._types=i.sortedTypes(this._r...
    method preferredMimeType (line 93) | preferredMimeType(e,t="ensure"){if("ensure"===t||"prefer"===t)for(let ...
    method createRenderer (line 93) | createRenderer(e){if(!(e in this._factories))throw new Error(`No facto...
    method createModel (line 93) | createModel(e={}){return new s(e)}
    method clone (line 93) | clone(e={}){let t=new l({resolver:e.resolver||this.resolver||void 0,sa...
    method getFactory (line 93) | getFactory(e){return this._factories[e]}
    method addFactory (line 93) | addFactory(e,t){void 0===t&&void 0===(t=e.defaultRank)&&(t=100);for(le...
    method removeMimeType (line 93) | removeMimeType(e){delete this._factories[e],delete this._ranks[e],this...
    method getRank (line 93) | getRank(e){let t=this._ranks[e];return t&&t.rank}
    method setRank (line 93) | setRank(e,t){if(!this._ranks[e])return;let n=this._id++;this._ranks[e]...
  function s (line 1) | function s(o){return function(s){return function(o){if(n)throw new TypeE...
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function e (line 1) | function e(){this.comm_target_name="jupyter.widget",this._models=Object....
  function O (line 1) | function O(e,t){void 0===t&&(t={});var n={};return e.forEach(function(e)...
  function r (line 1) | function r(){this.constructor=t}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function r (line 1) | function r(){this.constructor=t}
  function W (line 1) | function W(e,t){if(Array.isArray(e)){var n=[];return e.forEach(function(...
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(t){return e.call(this,t)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(t){var n=this,r=t.view;return delete t.view,(n=e.call(this,t)...
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(t){var n=this,r=t.view;return delete t.view,(n=e.call(this,t)...
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function r (line 1) | function r(){this.constructor=t}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function r (line 1) | function r(){this.constructor=t}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
    method createOutputPrompt (line 93) | createOutputPrompt(){return new y}
    method createStdin (line 93) | createStdin(e){return new _(e)}
    method createOutputModel (line 93) | createOutputModel(e){return new h(e)}
  function a (line 1) | function a(e){try{l(r.next(e))}catch(e){o(e)}}
    method constructor (line 54) | constructor(e={}){this._array=[],this._isDisposed=!1,this._changed=new...
    method type (line 54) | get type(){return"List"}
    method changed (line 54) | get changed(){return this._changed}
    method length (line 54) | get length(){return this._array.length}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method dispose (line 54) | dispose(){this._isDisposed||(this._isDisposed=!0,o.Signal.clearData(th...
    method iter (line 54) | iter(){return new i.ArrayIterator(this._array)}
    method get (line 54) | get(e){return this._array[e]}
    method set (line 54) | set(e,t){let n=this._array[e];if(void 0===t)throw new Error("Cannot se...
    method push (line 54) | push(e){let t=this._array.push(e);return this._changed.emit({type:"add...
    method insert (line 54) | insert(e,t){i.ArrayExt.insert(this._array,e,t),this._changed.emit({typ...
    method removeValue (line 54) | removeValue(e){let t=this._itemCmp,n=i.ArrayExt.findFirstIndex(this._a...
    method remove (line 54) | remove(e){let t=i.ArrayExt.removeAt(this._array,e);if(void 0!==t)retur...
    method clear (line 54) | clear(){let e=this._array.slice();this._array.length=0,this._changed.e...
    method move (line 54) | move(e,t){if(this.length<=1||e===t)return;let n=[this._array[e]];i.Arr...
    method pushAll (line 54) | pushAll(e){let t=this.length;return Object(i.each)(e,e=>{this._array.p...
    method insertAll (line 54) | insertAll(e,t){let n=e;Object(i.each)(t,t=>{i.ArrayExt.insert(this._ar...
    method removeRange (line 54) | removeRange(e,t){let n=this._array.slice(e,t);for(let n=e;n<t;n++)i.Ar...
    method constructor (line 54) | constructor(e={}){super({itemCmp:r.JSONExt.deepEqual,values:e.values})}
    method toJSON (line 54) | toJSON(){const e=Object.create(null),t=this.keys();for(let n of t){con...
    method constructor (line 54) | constructor(e){this._url="unknown";let t=this.serverSettings=e.serverS...
    method data (line 54) | get data(){return this._data}
    method load (line 54) | load(){return i.ServerConnection.makeRequest(this._url,{},this.serverS...
    method update (line 54) | update(e){this._data=Object.assign({},this._data,e);let t={method:"PAT...
    method constructor (line 54) | constructor(e,t,n,i,o){super(e),this._status=0,this._stdin=s.noOp,this...
    method msg (line 54) | get msg(){return this._msg}
    method done (line 54) | get done(){return this._done.promise}
    method onReply (line 54) | get onReply(){return this._reply}
    method onReply (line 54) | set onReply(e){this._reply=e}
    method onIOPub (line 54) | get onIOPub(){return this._iopub}
    method onIOPub (line 54) | set onIOPub(e){this._iopub=e}
    method onStdin (line 54) | get onStdin(){return this._stdin}
    method onStdin (line 54) | set onStdin(e){this._stdin=e}
    method registerMessageHook (line 54) | registerMessageHook(e){if(this.isDisposed)throw new Error("Kernel futu...
    method removeMessageHook (line 54) | removeMessageHook(e){this.isDisposed||this._hooks.remove(e)}
    method sendInputReply (line 54) | sendInputReply(e){this._kernel.sendInputReply(e)}
    method dispose (line 54) | dispose(){this._stdin=s.noOp,this._iopub=s.noOp,this._reply=s.noOp,thi...
    method handleMsg (line 54) | async handleMsg(e){switch(e.channel){case"control":case"shell":e.chann...
    method _handleReply (line 54) | async _handleReply(e){let t=this._reply;t&&await t(e),this._replyMsg=e...
    method _handleStdin (line 54) | async _handleStdin(e){let t=this._stdin;t&&await t(e)}
    method _handleIOPub (line 54) | async _handleIOPub(e){let t=await this._hooks.process(e),n=this._iopub...
    method _handleDone (line 54) | _handleDone(){this._testFlag(s.KernelFutureFlag.IsDone)||(this._setFla...
    method _testFlag (line 54) | _testFlag(e){return 0!=(this._status&e)}
    method _setFlag (line 54) | _setFlag(e){this._status|=e}
  function s (line 1) | function s(e){try{l(r.throw(e))}catch(e){o(e)}}
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function l (line 1) | function l(e){e.done?i(e.value):new n(function(t){t(e.value)}).then(a,s)}
    method constructor (line 46) | constructor(e){this._disposed=new o.Signal(this),this._tick=new i.Prom...
    method disposed (line 46) | get disposed(){return this._disposed}
    method frequency (line 46) | get frequency(){return this._frequency}
    method frequency (line 46) | set frequency(e){if(this.isDisposed||i.JSONExt.deepEqual(e,this.freque...
    method isDisposed (line 46) | get isDisposed(){return"disposed"===this.state.phase}
    method standby (line 46) | get standby(){return this._standby}
    method standby (line 46) | set standby(e){this.isDisposed||this.standby===e||(this._standby=e)}
    method state (line 46) | get state(){return this._state}
    method tick (line 46) | get tick(){return this._tick.promise}
    method ticked (line 46) | get ticked(){return this._ticked}
    method dispose (line 46) | dispose(){this.isDisposed||(this._state=Object.assign({},c.DISPOSED_ST...
    method refresh (line 46) | refresh(){return this.schedule({cancel:({phase:e})=>"refreshed"===e,in...
    method schedule (line 46) | async schedule(e={}){if(this.isDisposed)return;if(e.cancel&&e.cancel(t...
    method start (line 46) | start(){return this.schedule({cancel:({phase:e})=>"constructed"!==e&&"...
    method stop (line 46) | stop(){return this.schedule({cancel:({phase:e})=>"stopped"===e,interva...
    method _execute (line 46) | _execute(){let e="function"==typeof this.standby?this.standby():this.s...
    method constructor (line 54) | constructor(){super(...arguments),this._modelChanged=new i.Signal(this)}
    method modelChanged (line 54) | get modelChanged(){return this._modelChanged}
    method model (line 54) | set model(e){this._model!==e&&(this._model&&this._model.stateChanged.d...
    method model (line 54) | get model(){return this._model}
    method dispose (line 54) | dispose(){this._model=null,super.dispose()}
    method constructor (line 93) | constructor(e={}){if(this._id=0,this._ranks={},this._types=null,this._...
    method mimeTypes (line 93) | get mimeTypes(){return this._types||(this._types=i.sortedTypes(this._r...
    method preferredMimeType (line 93) | preferredMimeType(e,t="ensure"){if("ensure"===t||"prefer"===t)for(let ...
    method createRenderer (line 93) | createRenderer(e){if(!(e in this._factories))throw new Error(`No facto...
    method createModel (line 93) | createModel(e={}){return new s(e)}
    method clone (line 93) | clone(e={}){let t=new l({resolver:e.resolver||this.resolver||void 0,sa...
    method getFactory (line 93) | getFactory(e){return this._factories[e]}
    method addFactory (line 93) | addFactory(e,t){void 0===t&&void 0===(t=e.defaultRank)&&(t=100);for(le...
    method removeMimeType (line 93) | removeMimeType(e){delete this._factories[e],delete this._ranks[e],this...
    method getRank (line 93) | getRank(e){let t=this._ranks[e];return t&&t.rank}
    method setRank (line 93) | setRank(e,t){if(!this._ranks[e])return;let n=this._id++;this._ranks[e]...
  function s (line 1) | function s(o){return function(s){return function(o){if(n)throw new TypeE...
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function e (line 1) | function e(e){this.targets=Object.create(null),this.comms=Object.create(...
  function e (line 1) | function e(e){this.jsServicesComm=null,this.kernel=null,this.jsServicesC...
  function e (line 1) | function e(e,t,n){this.initialize(e,t,n)}
  function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
  function e (line 1) | function e(e){this.sender=e}
  function s (line 1) | function s(e,t,n,r){return i.find(e,function(e){return e.signal===t&&e.s...
    method create (line 54) | static create(e){return new class extends s{render(){return e}}}
    method onUpdateRequest (line 54) | onUpdateRequest(e){this.renderPromise=this.renderDOM()}
    method onAfterAttach (line 54) | onAfterAttach(e){r.MessageLoop.sendMessage(this,o.Widget.Msg.UpdateReq...
    method onBeforeDetach (line 54) | onBeforeDetach(e){a.unmountComponentAtNode(this.node)}
    method renderDOM (line 54) | renderDOM(){return new Promise(e=>{let t=this.render();Array.isArray(t...
    method constructor (line 93) | constructor(e={}){this.trusted=!!e.trusted,this._data=e.data||{},this....
    method data (line 93) | get data(){return this._data}
    method metadata (line 93) | get metadata(){return this._metadata}
    method setData (line 93) | setData(e){this._data=e.data||this._data,this._metadata=e.metadata||th...
  function l (line 1) | function l(e,n){var r=e.signal,i=e.slot,o=e.thisArg;try{i.call(o,r.sende...
    method constructor (line 46) | constructor(e){this._disposed=new o.Signal(this),this._tick=new i.Prom...
    method disposed (line 46) | get disposed(){return this._disposed}
    method frequency (line 46) | get frequency(){return this._frequency}
    method frequency (line 46) | set frequency(e){if(this.isDisposed||i.JSONExt.deepEqual(e,this.freque...
    method isDisposed (line 46) | get isDisposed(){return"disposed"===this.state.phase}
    method standby (line 46) | get standby(){return this._standby}
    method standby (line 46) | set standby(e){this.isDisposed||this.standby===e||(this._standby=e)}
    method state (line 46) | get state(){return this._state}
    method tick (line 46) | get tick(){return this._tick.promise}
    method ticked (line 46) | get ticked(){return this._ticked}
    method dispose (line 46) | dispose(){this.isDisposed||(this._state=Object.assign({},c.DISPOSED_ST...
    method refresh (line 46) | refresh(){return this.schedule({cancel:({phase:e})=>"refreshed"===e,in...
    method schedule (line 46) | async schedule(e={}){if(this.isDisposed)return;if(e.cancel&&e.cancel(t...
    method start (line 46) | start(){return this.schedule({cancel:({phase:e})=>"constructed"!==e&&"...
    method stop (line 46) | stop(){return this.schedule({cancel:({phase:e})=>"stopped"===e,interva...
    method _execute (line 46) | _execute(){let e="function"==typeof this.standby?this.standby():this.s...
    method constructor (line 54) | constructor(){super(...arguments),this._modelChanged=new i.Signal(this)}
    method modelChanged (line 54) | get modelChanged(){return this._modelChanged}
    method model (line 54) | set model(e){this._model!==e&&(this._model&&this._model.stateChanged.d...
    method model (line 54) | get model(){return this._model}
    method dispose (line 54) | dispose(){this._model=null,super.dispose()}
    method constructor (line 93) | constructor(e={}){if(this._id=0,this._ranks={},this._types=null,this._...
    method mimeTypes (line 93) | get mimeTypes(){return this._types||(this._types=i.sortedTypes(this._r...
    method preferredMimeType (line 93) | preferredMimeType(e,t="ensure"){if("ensure"===t||"prefer"===t)for(let ...
    method createRenderer (line 93) | createRenderer(e){if(!(e in this._factories))throw new Error(`No facto...
    method createModel (line 93) | createModel(e={}){return new s(e)}
    method clone (line 93) | clone(e={}){let t=new l({resolver:e.resolver||this.resolver||void 0,sa...
    method getFactory (line 93) | getFactory(e){return this._factories[e]}
    method addFactory (line 93) | addFactory(e,t){void 0===t&&void 0===(t=e.defaultRank)&&(t=100);for(le...
    method removeMimeType (line 93) | removeMimeType(e){delete this._factories[e],delete this._ranks[e],this...
    method getRank (line 93) | getRank(e){let t=this._ranks[e];return t&&t.rank}
    method setRank (line 93) | setRank(e,t){if(!this._ranks[e])return;let n=this._id++;this._ranks[e]...
  function c (line 1) | function c(e){0===o.size&&a(p),o.add(e)}
    method constructor (line 54) | constructor(){this.stateChanged=new i.Signal(this),this._isDisposed=!1}
    method isDisposed (line 54) | get isDisposed(){return this._isDisposed}
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,i.Signal.clearData(thi...
    method defaults (line 54) | defaults(){return Object.assign({},super.defaults(),{msg_id:""})}
    method initialize (line 54) | initialize(e,t){super.initialize(e,t),this._outputs=new s.a({trusted:!...
    method onMsgIdChange (line 54) | onMsgIdChange(){this._msgHook&&this._msgHook.dispose(),this._msgHook=n...
    method add (line 54) | add(e){var t=e.header.msg_type;switch(t){case"execute_result":case"dis...
    method clear_output (line 54) | clear_output(){var e=arguments.length>0&&void 0!==arguments[0]&&argume...
    method outputs (line 54) | get outputs(){return this._outputs}
  function p (line 1) | function p(){o.forEach(u),o.clear()}
    method _createElement (line 54) | _createElement(e){return this.pWidget=new i.Panel,this.pWidget.node}
    method _setElement (line 54) | _setElement(e){if(this.el||e!==this.pWidget.node)throw new Error("Cann...
    method render (line 54) | render(){super.render(),this._outputView=new l.a({rendermime:this.mode...
    method remove (line 54) | remove(){return this._outputView.dispose(),super.remove()}
  function u (line 1) | function u(e){i.ArrayExt.removeAllWhere(e,d)}
    method constructor (line 54) | constructor(e){this.jsServicesComm=e,this.comm_id=this.jsServicesComm....
    method open (line 54) | open(e,t,n,r){var i=this.jsServicesComm.open(e,n,r);return this._hooku...
    method send (line 54) | send(e,t,n,r){var i=this.jsServicesComm.send(e,n,r);return this._hooku...
    method close (line 54) | close(e,t,n,r){var i=this.jsServicesComm.close(e,n,r);return this._hoo...
    method on_msg (line 54) | on_msg(e){this.jsServicesComm.onMsg=e.bind(this)}
    method on_close (line 54) | on_close(e){this.jsServicesComm.onClose=e.bind(this)}
    method _hookupCallbacks (line 54) | _hookupCallbacks(e,t){t&&(e.onReply=function(e){t.shell&&t.shell.reply...
    method constructor (line 54) | constructor(e,t,n){this._id="",this._path="",this._name="",this._type=...
    method terminated (line 54) | get terminated(){return this._terminated}
    method kernelChanged (line 54) | get kernelChanged(){return this._kernelChanged}
    method statusChanged (line 54) | get statusChanged(){return this._statusChanged}
    method iopubMessage (line 54) | get iopubMessage(){return this._iopubMessage}
    method unhandledMessage (line 54) | get unhandledMessage(){return this._unhandledMessage}
    method anyMessage (line 54) | get anyMessage(){return this._anyMessage}
    method propertyChanged (line 54) | get propertyChanged(){return this._propertyChanged}
    method id (line 54) | get id(){return this._id}
    method kernel (line 54) | get kernel(){return this._kernel}
    method path (line 54) | get path(){return this._path}
    method type (line 54) | get type(){return this._type}
    method name (line 54) | get name(){return this._name}
    method model (line 54) | get model(){return{id:this.id,kernel:this.kernel.model,path:this._path...
    method status (line 54) | get status(){return this._kernel?this._kernel.status:"dead"}
    method isDisposed (line 54) | get isDisposed(){return!0===this._isDisposed}
    method clone (line 54) | clone(){return new u({path:this._path,name:this._name,type:this._type,...
    method update (line 54) | update(e){if(this._updating)return;let t=this.model;if(this._path=e.pa...
    method dispose (line 54) | dispose(){this.isDisposed||(this._isDisposed=!0,this._kernel.dispose()...
    method setPath (line 54) | setPath(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method setName (line 54) | setName(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method setType (line 54) | setType(e){if(this.isDisposed)return Promise.reject(new Error("Session...
    method changeKernel (line 54) | changeKernel(e){if(this.isDisposed)return Promise.reject(new Error("Se...
    method shutdown (line 54) | shutdown(){return this.isDisposed?Promise.reject(new Error("Session is...
    method setupKernel (line 54) | setupKernel(e){const t=s.Kernel.connectTo(e,this.serverSettings);this....
    method onKernelStatus (line 54) | onKernelStatus(e,t){this._statusChanged.emit(t)}
    method onIOPubMessage (line 54) | onIOPubMessage(e,t){this._iopubMessage.emit(t)}
    method onUnhandledMessage (line 54) | onUnhandledMessage(e,t){this._unhandledMessage.emit(t)}
    method onAnyMessage (line 54) | onAnyMessage(e,t){this._anyMessage.emit(t)}
    method _patch (line 54) | _patch(e){this._updating=!0;let t=this.serverSettings,n=d.getSessionUr...
    method _handleModelChange (line 54) | _handleModelChange(e){e.name!==this._name&&this._propertyChanged.emit(...
  function d (line 1) | function d(e){return null===e.signal}
    method defaults (line 46) | defaults(){return Object.assign({},super.defaults(),{msg_id:""})}
    method initialize (line 46) | initialize(e,t){super.initialize(e,t),this._outputs=new l.a({values:e....
    method outputs (line 46) | get outputs(){return this._outputs}
    method onError (line 54) | get onError(){return this._onError}
    method registerWithKernel (line 54) | registerWithKernel(e){this._commRegistration&&this._commRegistration.d...
    method display_view (line 54) | display_view(e,t,n){var r=n.el;return Promise.resolve(t).then(e=>(i.Wi...
    method loadClass (line 54) | loadClass(e,t,n){return"@jupyter-widgets/output"===t?Promise.resolve(r...
    method callbacks (line 54) | callbacks(e){var t=super.callbacks(e);return Object.assign({},t,{iopub...
    method _create_comm (line 54) | _create_comm(e,t,n,r){var i=this.kernel.connectToComm(e,t);return(n||m...
    method _get_comm_info (line 54) | _get_comm_info(){return this.kernel.requestCommInfo({target:this.comm_...
  function w (line 28) | function w(e,t,n){var r,i,o=(n=n||a).createElement("script");if(o.text=e...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedHTML")}
    method render (line 93) | render(e){return m({host:this.node,source:String(e.data[this.mimeType]...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function x (line 28) | function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedLatex")}
    method render (line 93) | render(e){return function(e){let{host:t,source:n,shouldTypeset:r,latex...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function S (line 28) | function S(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e...
    method constructor (line 93) | constructor(e){super(e),this.addClass("jp-RenderedSVG")}
    method render (line 93) | render(e){let t=e.metadata[this.mimeType];return function(e){let{host:...
    method onAfterAttach (line 93) | onAfterAttach(e){this.latexTypesetter&&this.latexTypesetter.typeset(th...
  function se (line 39) | function se(e,t,r,i){var o,s,c,p,u,f,g,v=t&&t.ownerDocument,x=t?t.nodeTy...
  function le (line 39) | function le(){va
Copy disabled (too large) Download .json
Condensed preview — 406 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (56,663K chars).
[
  {
    "path": ".github/CODEOWNERS",
    "chars": 433,
    "preview": "# This file defines the persons that will be assigned as reviewers for PRs that\n# modify a particular file in the repo.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/content-problem---.yaml",
    "chars": 389,
    "preview": "name: Content Problem 😮\ndescription: There is an inaccuracy / inconsistency with the content of the textbook.\ntitle: '[C"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/enhancement-request---.yaml",
    "chars": 1133,
    "preview": "name: Enhancement Request 💅\ndescription: Suggest an improvement to content currently covered in the textbook.\ntitle: '[C"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/new-content-suggestion-----.yaml",
    "chars": 718,
    "preview": "name: New Content Suggestion ✒️ 📄\ndescription: Propose new sections or chapters for the textbook\ntitle: '[]'\nlabels:\n  -"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/software-bug---.yaml",
    "chars": 1319,
    "preview": "name: Software Bug 🐛\ndescription: Something is wrong with the website or code examples.\ntitle: '[Chapter number]'\nlabels"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/something-else---.yaml",
    "chars": 334,
    "preview": "name: Something else\ndescription: The issue does not fall into any of the above categories.\ntitle: '[]'\nbody:\n  - type: "
  },
  {
    "path": ".github/issue_template.md",
    "chars": 78,
    "preview": "## Describe the Issue\n\n## Expected Solution\n\n## Anything else we should know?\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 550,
    "preview": "<!--- \nYour PR title should start with the number of the chapter(s) \nyour PR affects. E.g \"[4.5, 6.3] Fixed misspelling "
  },
  {
    "path": ".github/workflows/deploy.workflow.yml",
    "chars": 1464,
    "preview": "name: build and deploy\n\non:\n  # run when action is manually triggered\n  workflow_dispatch:\n    inputs:\n      deploy:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 2203,
    "preview": "# Created by https://www.gitignore.io/api/python\n# Edit at https://www.gitignore.io/?templates=python\n\n### Mac OS ###\n.D"
  },
  {
    "path": ".qiskit/settings.conf",
    "chars": 31,
    "preview": "[default]\ncircuit_drawer = mpl\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 398,
    "preview": "<!-- Copyright Contributors to the Qiskit project. -->\n\n# Code of Conduct\nAll members of this project agree to adhere to"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 7040,
    "preview": "# Contributors Guide\n\n## General Guidelines\n\nWe love contributions and need them to ensure the textbook is a high-qualit"
  },
  {
    "path": "Gemfile",
    "chars": 545,
    "preview": "source 'https://rubygems.org'\n\ngroup :jekyll_plugins do\n  gem 'github-pages'\n  gem 'jekyll-feed', '~> 0.6'\n\n  # Textbook"
  },
  {
    "path": "Guardfile",
    "chars": 111,
    "preview": "guard 'jekyll-plus', serve: true do\n  watch /.*/\n  ignore /^_site/\nend\n\nguard 'livereload' do\n  watch /.*/\nend\n"
  },
  {
    "path": "LICENSE.txt",
    "chars": 11416,
    "preview": "                    Copyright 2019 IBM and its contributors\n\n                                 Apache License\n           "
  },
  {
    "path": "Makefile",
    "chars": 1638,
    "preview": ".PHONY: help book clean serve\n\nBUILD_DIR := \"./_build\"\n# space delimited list of available languages, e.g., LOCALES:=ja "
  },
  {
    "path": "README.md",
    "chars": 591,
    "preview": "# Qiskit Textbook Source Code\n\n> :warning: This repo is for an old version of the textbook and is now deprecated. For th"
  },
  {
    "path": "_config.yml",
    "chars": 8021,
    "preview": "# Welcome to Jekyll!\n#\n# This config file is meant for settings that affect your whole blog, values\n# which you are expe"
  },
  {
    "path": "_data/demostoc.yml",
    "chars": 435,
    "preview": "# Keep your titles and descriptions below 75 characters \n# Frank wrote the css, so check the page still looks fine\n# at "
  },
  {
    "path": "_data/ja/messages.yml",
    "chars": 506,
    "preview": "sidebar_title: Qiskitを使った量子計算の学習\n\ndownload_notebook: Jupyter Notebookのダウンロード\n\ncontribute_github: Githubに貢献する\n\nopen_quant"
  },
  {
    "path": "_data/ja/toc.yml",
    "chars": 6787,
    "preview": "# Each entry has the following schema:\n#\n# - title: mytitle   # Title of chapter or section.\n#   url: /myurl  # URL of s"
  },
  {
    "path": "_data/messages.yml",
    "chars": 546,
    "preview": "sidebar_title: Learn Quantum Computation using Qiskit\n\ndownload_notebook: Download as Jupyter Notebook\n\ncontribute_githu"
  },
  {
    "path": "_data/toc.yml",
    "chars": 8980,
    "preview": "# Each entry has the following schema:\n#\n# - title: mytitle   # Title of chapter or section.\n#   url: /myurl  # URL of s"
  },
  {
    "path": "_includes/banner.html",
    "chars": 404,
    "preview": "{% if site.data[page.locale] %}\n{% assign messages = site.data[page.locale].messages %}\n{% else %}\n{% assign messages = "
  },
  {
    "path": "_includes/buttons/binder.html",
    "chars": 1001,
    "preview": "{% if site.use_binder_button %}\n\n{% if site.use_jupyterlab %}\n    {% assign binder_interact_prefix=\"urlpath=lab/tree/\" %"
  },
  {
    "path": "_includes/buttons/download.html",
    "chars": 666,
    "preview": "{% if site.use_download_button -%}\n<div class=\"download-buttons-dropdown\">\n    <button id=\"dropdown-button-trigger\" clas"
  },
  {
    "path": "_includes/buttons/jupyterhub.html",
    "chars": 829,
    "preview": "{% if site.use_jupyterhub_button %}\n\n{% if site.use_jupyterlab %}\n    {% assign hub_app=\"lab\" %}\n{% else %}\n    {% assig"
  },
  {
    "path": "_includes/buttons/nbinteract.html",
    "chars": 180,
    "preview": "{% if site.use_show_widgets_button and page.has_widgets -%}\n<button id=\"interact-button-show-widgets\" class=\"interact-bu"
  },
  {
    "path": "_includes/buttons/thebelab.html",
    "chars": 149,
    "preview": "{% if site.use_thebelab_button -%}\n<button id=\"interact-button-thebelab\" class=\"interact-button\">{{ site.thebelab_button"
  },
  {
    "path": "_includes/buttons.html",
    "chars": 268,
    "preview": "<div class=\"buttons\">\r\n{% include buttons/download.html %}\r\n{% if page.interact_link %}\r\n  {% include buttons/thebelab.h"
  },
  {
    "path": "_includes/coursemap_img.html",
    "chars": 1323,
    "preview": "<img id=\"Coursemap\" \n     src=\"images/coursemaps/coursemap_all.png\" \n     style=\"max-width: 600px; margin: 50px;\">\n\n<p>C"
  },
  {
    "path": "_includes/css_entry.scss",
    "chars": 632,
    "preview": "@import 'inuitcss/settings/settings.core';\n@import 'settings/settings.global.scss';\n\n@import 'inuitcss/tools/tools.font-"
  },
  {
    "path": "_includes/fb_tags.html",
    "chars": 534,
    "preview": "<meta property=\"og:url\"         content=\"{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.u"
  },
  {
    "path": "_includes/footer.html",
    "chars": 66,
    "preview": "<footer>\n  <p class=\"footer\">{{ site.footer_text }}</p>\n</footer>\n"
  },
  {
    "path": "_includes/google_analytics.html",
    "chars": 430,
    "preview": "{% if site.google_analytics.mytrackingcode %}\n<!-- Global site tag (gtag.js) - Google Analytics -->\n<script async src=\"h"
  },
  {
    "path": "_includes/head.html",
    "chars": 4881,
    "preview": "<head>\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <meta name=\"viewport\" content="
  },
  {
    "path": "_includes/hotjar.html",
    "chars": 380,
    "preview": "<script>\n  (function(h,o,t,j,a,r){\n    h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n    h._hjSettings={hj"
  },
  {
    "path": "_includes/js/interact-update.html",
    "chars": 4830,
    "preview": "{% if site.use_jupyterhub_button or site.use_binder_button %}\n<script>\n/**\n  * To auto-embed hub URLs in interact links "
  },
  {
    "path": "_includes/js/nbinteract.html",
    "chars": 891,
    "preview": "{% if site.use_show_widgets_button and page.has_widgets %}\n<!-- Include nbinteract for interactive widgets -->\n<script s"
  },
  {
    "path": "_includes/js/print.html",
    "chars": 1146,
    "preview": "<!-- Include nbinteract for interactive widgets -->\n<script src=\"https://printjs-4de6.kxcdn.com/print.min.js\" async></sc"
  },
  {
    "path": "_includes/js/thebelab-cell-button.html",
    "chars": 703,
    "preview": "{% if site.use_thebelab_button -%}\n<script>\n/**\n * Set up thebelab button for code blocks\n */\n\nconst thebelabCellButton "
  },
  {
    "path": "_includes/js/thebelab-page-config.html",
    "chars": 818,
    "preview": "<script type=\"text/x-thebe-config\">\n{%- if page.kernel_name %}\n    {% assign kernelName = page.kernel_name %}\n{% else %}"
  },
  {
    "path": "_includes/js/thebelab.html",
    "chars": 6686,
    "preview": "<!-- Include Thebelab for interactive code if it's enabled -->\n{% if site.use_thebelab_button %}\n\n<!-- Display Thebelab "
  },
  {
    "path": "_includes/mathjax.html",
    "chars": 1072,
    "preview": "<!-- Allow inline math using $ and automatically break long math lines -->\n<!-- (mostly) copied from nbconvert configura"
  },
  {
    "path": "_includes/metadata.json",
    "chars": 1112,
    "preview": "{\n  \"@context\": \"http://schema.org\",\n  \"@type\": \"NewsArticle\",\n  \"mainEntityOfPage\": \"{{ page.url | replace:'index.html'"
  },
  {
    "path": "_includes/page-nav.html",
    "chars": 1310,
    "preview": "{% comment %}\nOnly the URLs from the TOC are used here. The title for\nprev/next is pulled from the respective page's met"
  },
  {
    "path": "_includes/qiskit_navbar.html",
    "chars": 839,
    "preview": "\n{% if site.data[page.locale] %}\n    {% assign messages = site.data[page.locale].messages %}\n{% else %}\n    {% assign me"
  },
  {
    "path": "_includes/search/lunr/lunr-en.js",
    "chars": 3942,
    "preview": "var initQuery = function() {\n  // See if we have a search box\n  var searchInput = document.querySelector('input#lunr_sea"
  },
  {
    "path": "_includes/search/lunr/lunr-store.js",
    "chars": 1024,
    "preview": "var store = [\n  {%- for c in site.collections -%}\n    {%- if forloop.last -%}\n      {%- assign l = true -%}\n    {%- endi"
  },
  {
    "path": "_includes/segment.html",
    "chars": 1480,
    "preview": "<script>\n(function () {\n  'use strict'\n  window._analytics = {\n    segment_key: 'ffdYLviQze3kzomaINXNk6NwpY9LlXcw',\n    "
  },
  {
    "path": "_includes/sidebar.html",
    "chars": 7314,
    "preview": "{% comment %}\nPartial for the textbook sidebar. Renders each chapter and its sections from\n_data/toc.yml .\n\nMuch of the "
  },
  {
    "path": "_includes/topbar.html",
    "chars": 2841,
    "preview": "{% if site.data[page.locale] %}\n{% assign messages = site.data[page.locale].messages %}\n{% else %}\n{% assign messages = "
  },
  {
    "path": "_layouts/default.html",
    "chars": 1134,
    "preview": "<!DOCTYPE html>\n\n{% if page.locale %}\n  {% assign page_locale = page.locale %}\n{% else %}\n  {% assign page_locale = 'en'"
  },
  {
    "path": "_sass/components/_components.book__layout.scss",
    "chars": 4306,
    "preview": "/**\n * The website contains two main components: the sidebar and the textbook page.\n * This file specifies the layout an"
  },
  {
    "path": "_sass/components/_components.book__topbar.scss",
    "chars": 1096,
    "preview": ".c-topbar__label {\n  @include inuit-font-size(12px);\n  display: inline-block;\n  margin-left: $spacing-unit-tiny;\n  verti"
  },
  {
    "path": "_sass/components/_components.images.scss",
    "chars": 38,
    "preview": "svg {\n  width: 100%;\n  height: auto;\n}"
  },
  {
    "path": "_sass/components/_components.interact-button.scss",
    "chars": 1329,
    "preview": "/**\n * Stylings for Interact and Show Widget buttons.\n *\n * [1]: We abuse CSS selector specificity here since the button"
  },
  {
    "path": "_sass/components/_components.iqx.scss",
    "chars": 145,
    "preview": ".uses-hardware-notice {\n        background-color: white;\n        border: 1px solid #ccc;\n        margin-bottom: 0;\n     "
  },
  {
    "path": "_sass/components/_components.page__banner.scss",
    "chars": 650,
    "preview": ".page__banner {\n    background-color: $background-color-accent;\n    color: #FFFFFF;\n    height: $textbook-banner-height;"
  },
  {
    "path": "_sass/components/_components.page__footer.scss",
    "chars": 118,
    "preview": ".footer {\n    text-align: center;\n    font-size: 14px;\n    padding: 20px;\n    opacity: 0.7;\n    margin-bottom: 0px;\n}\n"
  },
  {
    "path": "_sass/components/_components.page__nav.scss",
    "chars": 472,
    "preview": "/**\n * Styling for the Next Page / Previous Page links at the bottom of textbook\n * pages.\n */\n\n$color-nav-links: $color"
  },
  {
    "path": "_sass/components/_components.page__onthispage.scss",
    "chars": 2162,
    "preview": "/**\n * Styling for the onthispage elements.\n *\n * [1]: The sidebar is implemented as ul and li elements so we need to re"
  },
  {
    "path": "_sass/components/_components.qiskit__navbar.scss",
    "chars": 946,
    "preview": "div.qiskit__navbar {\n        height: $qiskit-navbar-height;\n\tbackground-color: white;\n\tborder-bottom: 1px solid rgba(0,0"
  },
  {
    "path": "_sass/components/_components.search.scss",
    "chars": 1976,
    "preview": "/* ==========================================================================\n   SEARCH\n   ============================="
  },
  {
    "path": "_sass/components/_components.thebelab.scss",
    "chars": 991,
    "preview": "\n.thebelab-cell {\n    // To ensure that thebelab cells are always the top of the Z-stack\n    position: relative;\n    z-i"
  },
  {
    "path": "_sass/hamburgers/_base.scss",
    "chars": 1557,
    "preview": "// Hamburger\n// ==================================================\n.hamburger {\n  padding: $hamburger-padding-y $hamburg"
  },
  {
    "path": "_sass/hamburgers/hamburgers.scss",
    "chars": 2961,
    "preview": "@charset \"UTF-8\";\n/*!\n * Hamburgers\n * @description Tasty CSS-animated hamburgers\n * @author Jonathan Suh @jonsuh\n * @si"
  },
  {
    "path": "_sass/hamburgers/types/_arrowalt.scss",
    "chars": 1057,
    "preview": "@if index($hamburger-types, arrowalt) {\n  /*\n   * Arrow Alt\n   */\n  .hamburger--arrowalt {\n    .hamburger-inner {\n      "
  },
  {
    "path": "_sass/main.scss",
    "chars": 1170,
    "preview": "/**\n  Most of Jupyter Book's CSS is defined in the single-page CSS\n  folder. This CSS adds some book-specific CSS rules "
  },
  {
    "path": "_sass/objects/_objects.thebelab-in-cell-button.scss",
    "chars": 654,
    "preview": "/* in-cell thebelab buttons */\r\n.thebebtn {\r\n\r\n  position: absolute;\r\n  left: 0;\r\n  bottom: 0;\r\n  border: none;\r\n\r\n  i {"
  },
  {
    "path": "_sass/page/components/_components.hidecells.scss",
    "chars": 1363,
    "preview": "// Mixins and variables\n@mixin transition($in) {\n\ttransition:$in;\n\t-webkit-transition:$in;\n\t-moz-transition:$in;\n\t-o-tra"
  },
  {
    "path": "_sass/page/components/_components.page.scss",
    "chars": 5640,
    "preview": "/**\n * Styling for textbook pages. Jupyter notebooks generate their own HTML markup\n * which we style under the #ipython"
  },
  {
    "path": "_sass/page/components/_components.sidebar-right.scss",
    "chars": 4464,
    "preview": "/**\r\n * Styling for within-page navigation.\r\n *\r\n * [1]: When the screen is large enough to hold the sidebar, place the "
  },
  {
    "path": "_sass/page/elements/_elements.links.scss",
    "chars": 477,
    "preview": "/**\n * Styling for links\n */\n\na,\na:visited {\n  color: $color-links;\n  text-decoration: none;\n}\n\n// Anchor links\n// Uncom"
  },
  {
    "path": "_sass/page/elements/_elements.syntax-highlighting.scss",
    "chars": 3511,
    "preview": "/**\n * Syntax highlighting for code cells\n */\n\npre.highlight {\n    overflow-x: auto;\n    padding: .5em;\n}\n.highlight {\n\n"
  },
  {
    "path": "_sass/page/elements/_elements.tables.scss",
    "chars": 582,
    "preview": "/**\n * Styling for tables. In the textbook, almost all tables display the contents\n * of a pandas DataFrame.\n *\n * [1]: "
  },
  {
    "path": "_sass/page/elements/_elements.typography.scss",
    "chars": 684,
    "preview": "/**\n * Site-wide typography\n */\n\nbody {\n  // Use system font stack:\n  // https://css-tricks.com/snippets/css/system-font"
  },
  {
    "path": "_sass/page/elements/_elements.variables.scss",
    "chars": 887,
    "preview": "/**\r\n * Variables\r\n */\r\n\r\n$serif: Georgia, Times, serif !default;\r\n$sans-serif: \"IBM Plex Sans\", \"Segoe UI\",\r\n  \"Helveti"
  },
  {
    "path": "_sass/page/generic/_generic.phone-scrolling.scss",
    "chars": 89,
    "preview": "/**\n * Makes scrolling smooth for phones\n */\n\n* {\n  -webkit-overflow-scrolling: touch;\n}\n"
  },
  {
    "path": "_sass/page/inuitcss/elements/_elements.headings.scss",
    "chars": 1232,
    "preview": "/* ==========================================================================\n   #HEADINGS\n   =========================="
  },
  {
    "path": "_sass/page/inuitcss/elements/_elements.images.scss",
    "chars": 1009,
    "preview": "/* ==========================================================================\n   #IMAGES\n   ============================"
  },
  {
    "path": "_sass/page/inuitcss/elements/_elements.page.scss",
    "chars": 698,
    "preview": "/* ==========================================================================\n   #PAGE\n   =============================="
  },
  {
    "path": "_sass/page/inuitcss/elements/_elements.tables.scss",
    "chars": 270,
    "preview": "/* ==========================================================================\n   #TABLES\n   ============================"
  },
  {
    "path": "_sass/page/inuitcss/generic/_generic.box-sizing.scss",
    "chars": 402,
    "preview": "/* ==========================================================================\n   #BOX-SIZING\n   ========================"
  },
  {
    "path": "_sass/page/inuitcss/generic/_generic.normalize.scss",
    "chars": 7684,
    "preview": "/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ==========================="
  },
  {
    "path": "_sass/page/inuitcss/generic/_generic.reset.scss",
    "chars": 741,
    "preview": "/* ==========================================================================\n   #RESET\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/generic/_generic.shared.scss",
    "chars": 596,
    "preview": "/* ==========================================================================\n   #SHARED\n   ============================"
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.block.scss",
    "chars": 1156,
    "preview": "/* ==========================================================================\n   #BLOCK\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.box.scss",
    "chars": 892,
    "preview": "/* ==========================================================================\n   #BOX\n   ==============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.crop.scss",
    "chars": 3322,
    "preview": "/* ==========================================================================\n   #CROP\n   =============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.flag.scss",
    "chars": 4243,
    "preview": "/* ==========================================================================\n   #FLAG\n   =============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.layout.scss",
    "chars": 6377,
    "preview": "/* ==========================================================================\n   #LAYOUT\n   ============================"
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.list-bare.scss",
    "chars": 508,
    "preview": "/* ==========================================================================\n   #LIST-BARE\n   ========================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.list-inline.scss",
    "chars": 370,
    "preview": "/* ==========================================================================\n   #LIST-INLINE\n   ======================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.media.scss",
    "chars": 2151,
    "preview": "/* ==========================================================================\n   #MEDIA\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.pack.scss",
    "chars": 1841,
    "preview": "/* ==========================================================================\n   #PACK\n   =============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.ratio.scss",
    "chars": 2443,
    "preview": "/* ==========================================================================\n   #RATIO\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.table.scss",
    "chars": 1260,
    "preview": "/* ==========================================================================\n   #TABLE\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/objects/_objects.wrapper.scss",
    "chars": 381,
    "preview": "/* ==========================================================================\n   #WRAPPER\n   ==========================="
  },
  {
    "path": "_sass/page/inuitcss/settings/_example.settings.config.scss",
    "chars": 590,
    "preview": "///* ========================================================================\n//   #CONFIG\n//   ========================"
  },
  {
    "path": "_sass/page/inuitcss/settings/_example.settings.global.scss",
    "chars": 424,
    "preview": "///* ========================================================================\n//   #GLOBAL\n//   ========================"
  },
  {
    "path": "_sass/page/inuitcss/settings/_settings.core.scss",
    "chars": 2895,
    "preview": "///* ========================================================================\n//   #CORE\n//   =========================="
  },
  {
    "path": "_sass/page/inuitcss/tools/_tools.clearfix.scss",
    "chars": 488,
    "preview": "///* ========================================================================\n//   #CLEARFIX\n//   ======================"
  },
  {
    "path": "_sass/page/inuitcss/tools/_tools.font-size.scss",
    "chars": 2474,
    "preview": "///* ========================================================================\n//   #FONT-SIZE\n//   ====================="
  },
  {
    "path": "_sass/page/inuitcss/tools/_tools.hidden.scss",
    "chars": 570,
    "preview": "///* ========================================================================\n//   #HIDDEN-VISUALLY\n//   ==============="
  },
  {
    "path": "_sass/page/inuitcss/tools/_tools.mq.scss",
    "chars": 11386,
    "preview": "@charset \"UTF-8\"; // Fixes an issue where Ruby locale is not set properly\n                  // See https://github.com/sa"
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.clearfix.scss",
    "chars": 276,
    "preview": "/* ==========================================================================\n   #CLEARFIX\n   =========================="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.headings.scss",
    "chars": 883,
    "preview": "/* ==========================================================================\n   #HEADINGS\n   =========================="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.hide.scss",
    "chars": 471,
    "preview": "/* ==========================================================================\n   #HIDE\n   =============================="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.print.scss",
    "chars": 1476,
    "preview": "/* ==========================================================================\n   #PRINT\n   ============================="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.responsive-spacings.scss",
    "chars": 3742,
    "preview": "/* ==========================================================================\n   #RESPONSIVE-SPACINGS\n   ==============="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.spacings.scss",
    "chars": 1487,
    "preview": "/* ==========================================================================\n   #SPACINGS\n   =========================="
  },
  {
    "path": "_sass/page/inuitcss/utilities/_utilities.widths.scss",
    "chars": 4663,
    "preview": "/* ==========================================================================\n   #WIDTHS\n   ============================"
  },
  {
    "path": "_sass/page/main.scss",
    "chars": 3767,
    "preview": "/**\n * This file is the main entry point for a single page's stylings. It should\n * be self-contained CSS for *one* page"
  },
  {
    "path": "_sass/page/objects/_objects.copy-button.scss",
    "chars": 332,
    "preview": "/* Copy buttons */\r\n.copybtn {\r\n  position: absolute;\r\n  top: 0;\r\n  right: 0;\r\n\r\n  margin: $spacing-unit-tiny;\r\n  width:"
  },
  {
    "path": "_sass/page/objects/_objects.tooltip.scss",
    "chars": 1058,
    "preview": "/**\n * A minimal CSS-only tooltip copied from:\n *   https://codepen.io/mildrenben/pen/rVBrpK\n *\n * To use, write HTML li"
  },
  {
    "path": "_sass/page/settings/settings.global.scss",
    "chars": 1154,
    "preview": "///* ========================================================================\n//   #GLOBAL\n//   ========================"
  },
  {
    "path": "assets/css/styles.scss",
    "chars": 25,
    "preview": "---\n---\n\n@import 'main';\n"
  },
  {
    "path": "assets/custom/custom.css",
    "chars": 4763,
    "preview": "/* This is mostly patching up things I couldn't track down in _sass  */\n\n.interact-button {\n\tfont-family: \"IBM Plex Sans"
  },
  {
    "path": "assets/custom/custom.css.backup",
    "chars": 2465,
    "preview": "/* Put your custom CSS here */\n\n@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,70"
  },
  {
    "path": "assets/custom/custom.js",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "assets/html/index.html",
    "chars": 853,
    "preview": "---\npermalink: /index.html\ntitle: \"Index\"\nlayout: none\n---\n\n<!-- The index page should simply re-direct to the first cha"
  },
  {
    "path": "assets/html/search_form.html",
    "chars": 402,
    "preview": "---\npermalink: /search\ntitle: \"Search the site\"\nsearch_page: true\n---\n\n<div class=\"search-content__inner-wrap\">\n    <inp"
  },
  {
    "path": "assets/js/page/anchors.js",
    "chars": 335,
    "preview": "const initAnchors = () => {\n  if (window.anchors === undefined) {\n    setTimeout(initAnchors, 250);\n    return;\n  }\n  an"
  },
  {
    "path": "assets/js/page/copy-button.js",
    "chars": 1891,
    "preview": "/**\n * Set up copy/paste for code blocks\n */\nconst copySVG = '<img src=\"/textbook/assets/images/copy-button.svg\">'\n\ncons"
  },
  {
    "path": "assets/js/page/documentSelectors.js",
    "chars": 964,
    "preview": "/**\n * Select various elements on the page for later use\n */\n\n// IDs we'll attach to cells\nconst codeCellId = index => `"
  },
  {
    "path": "assets/js/page/dom-update.js",
    "chars": 1141,
    "preview": "const runWhenDOMLoaded = cb => {\r\n  if (document.readyState != 'loading') {\r\n    cb()\r\n  } else if (document.addEventLis"
  },
  {
    "path": "assets/js/page/hide-cell.js",
    "chars": 2848,
    "preview": "/**\n  Add buttons to hide code cells\n*/\nvar setCellVisibility = function (inputField, kind) {\n    // Update the image an"
  },
  {
    "path": "assets/js/page/tocbot.js",
    "chars": 1387,
    "preview": "const initToc = () => {\n  if (window.tocbot === undefined) {\n    setTimeout(initToc, 250);\n    return;\n  }\n\n  // Check w"
  },
  {
    "path": "assets/js/scripts.js",
    "chars": 8769,
    "preview": "/**\n * Site-wide JS that sets up:\n *\n * [1] MathJax rendering on navigation\n * [2] Sidebar toggling\n * [3] Sidebar scrol"
  },
  {
    "path": "assets/vendor/thebelab/0.index.js",
    "chars": 947876,
    "preview": "(window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || []).push([[0],{\n\n/***/ \"./node_modules/@jupyter-widgets/html-manager"
  },
  {
    "path": "assets/vendor/thebelab/1.index.js",
    "chars": 426811,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{679:function(e,t,n){!function(e){\"use strict\";var t={script:[[\""
  },
  {
    "path": "assets/vendor/thebelab/2.index.js",
    "chars": 3268,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{788:function(s,j,e){var t={\"./apl/apl.js\":689,\"./asciiarmor/asc"
  },
  {
    "path": "assets/vendor/thebelab/3.index.js",
    "chars": 3345,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{859:function(s,j,e){var t={\"./apl/apl.js\":979,\"./asciiarmor/asc"
  },
  {
    "path": "assets/vendor/thebelab/4.index.js",
    "chars": 3268,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{858:function(s,j,e){var t={\"./apl/apl.js\":880,\"./asciiarmor/asc"
  },
  {
    "path": "assets/vendor/thebelab/index.js",
    "chars": 1963533,
    "preview": "!function(e){function t(t){for(var n,i,o=t[0],a=t[1],s=0,c=[];s<o.length;s++)i=o[s],Object.prototype.hasOwnProperty.call"
  },
  {
    "path": "build.sh",
    "chars": 278,
    "preview": "#!/usr/bin/env bash\n\nuser=delapuente\norg=qiskit-community\nrepo=community.qiskit.org\npath=textbook\n\nif [[ $TRAVIS_BRANCH "
  },
  {
    "path": "content/LICENSE.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "content/about.ipynb",
    "chars": 2456,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Recommended External Resources\\n"
  },
  {
    "path": "content/ch-algorithms/bernstein-vazirani.ipynb",
    "chars": 186126,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/defining-quantum-circuits.ipynb",
    "chars": 7658,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/deutsch-jozsa.ipynb",
    "chars": 351595,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/grover.ipynb",
    "chars": 633882,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/hidden-shift-problem.ipynb",
    "chars": 207717,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"ade8e984\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Hidden Shift"
  },
  {
    "path": "content/ch-algorithms/images/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "content/ch-algorithms/index.md",
    "chars": 903,
    "preview": "# About This Section\n\nNow we have covered the basics of quantum computing, we are now ready to introduce some quantum pr"
  },
  {
    "path": "content/ch-algorithms/quantum-counting.ipynb",
    "chars": 177215,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/quantum-fourier-transform.ipynb",
    "chars": 1816451,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/quantum-key-distribution.ipynb",
    "chars": 209651,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/quantum-phase-estimation.ipynb",
    "chars": 692753,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/quantum-walk-search-algorithm.ipynb",
    "chars": 559391,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/shor.ipynb",
    "chars": 264862,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/simon.ipynb",
    "chars": 192409,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-algorithms/superdense-coding.ipynb",
    "chars": 128175,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"OQYW8N5rPyGC\",\n    \""
  },
  {
    "path": "content/ch-algorithms/teleportation.ipynb",
    "chars": 1028873,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-appendix/index.md",
    "chars": 145,
    "preview": "\nThis is an appendix containing in-depth recaps of linear algebra concepts and a crash-course in qiskit for those alread"
  },
  {
    "path": "content/ch-appendix/linear_algebra.ipynb",
    "chars": 370863,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-appendix/qiskit.ipynb",
    "chars": 320053,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Basic Qiskit Syntax\"\n   ]\n  },\n "
  },
  {
    "path": "content/ch-applications/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "content/ch-applications/advanced-quantum-algs-index.md",
    "chars": 720,
    "preview": "# About This Section\n\nAt this point in the textbook, the reader can choose to continue learning about more advanced quan"
  },
  {
    "path": "content/ch-applications/algs_for_apps_index.md",
    "chars": 417,
    "preview": "# About This Section\n\nAt this point in the textbook, the reader can choose to continue learning about applied quantum al"
  },
  {
    "path": "content/ch-applications/algs_index.md",
    "chars": 671,
    "preview": "# About This Section\n\nThe algorithms in this section are more complicated and less general than those in chapter 3, henc"
  },
  {
    "path": "content/ch-applications/apps_index.md",
    "chars": 853,
    "preview": "# About This Section\n\nIt’s important to see the wide range of applications of quantum algorithms, but as we have seen, u"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00001_landmarks.json",
    "chars": 1206,
    "preview": "[[232.2, 483.59], [235.45, 562.36], [241.26, 639.6], [251.06, 716.54], [275.31, 789.71], [314.01, 859.12], [361.53, 921."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00011_landmarks.json",
    "chars": 1212,
    "preview": "[[212.97, 502.75], [213.05, 582.03], [219.83, 659.48], [230.88, 739.37], [264.49, 809.47], [316.39, 867.36], [383.21, 91"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00017_landmarks.json",
    "chars": 1217,
    "preview": "[[165.31, 539.99], [174.12, 619.51], [188.51, 698.41], [212.51, 774.83], [255.11, 840.72], [314.92, 896.22], [389.62, 93"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00018_landmarks.json",
    "chars": 1214,
    "preview": "[[216.3, 549.08], [221.55, 623.89], [231.49, 694.16], [245.96, 769.12], [273.46, 836.91], [320.58, 889.34], [380.01, 922"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00019_landmarks.json",
    "chars": 1214,
    "preview": "[[169.2, 458.74], [177.24, 546.35], [188.15, 636.41], [209.28, 720.35], [248.3, 793.55], [309.2, 855.72], [379.92, 906.4"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00022_landmarks.json",
    "chars": 1214,
    "preview": "[[279.73, 489.2], [277.08, 551.77], [283.11, 609.0], [300.98, 669.56], [329.64, 730.21], [365.88, 787.68], [407.53, 843."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00023_landmarks.json",
    "chars": 1218,
    "preview": "[[220.17, 501.65], [218.87, 582.14], [219.72, 665.96], [233.93, 742.29], [269.11, 816.74], [318.81, 880.41], [380.85, 93"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00025_landmarks.json",
    "chars": 1213,
    "preview": "[[188.52, 501.49], [195.24, 579.84], [208.57, 652.56], [230.08, 721.8], [265.22, 789.38], [313.29, 847.54], [377.97, 891"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00036_landmarks.json",
    "chars": 1213,
    "preview": "[[190.8, 460.43], [188.88, 553.9], [190.74, 644.12], [205.58, 726.52], [247.36, 803.05], [308.45, 869.59], [376.71, 923."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/happy/00489_landmarks.json",
    "chars": 1213,
    "preview": "[[257.95, 496.97], [255.12, 569.52], [258.6, 642.05], [274.71, 717.68], [293.98, 796.44], [329.0, 868.83], [379.75, 931."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00109_landmarks.json",
    "chars": 1207,
    "preview": "[[123.94, 484.8], [126.06, 564.26], [135.19, 644.1], [157.88, 719.73], [202.76, 787.41], [269.39, 842.19], [347.88, 884."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00111_landmarks.json",
    "chars": 1210,
    "preview": "[[356.33, 485.06], [338.36, 548.83], [335.5, 612.72], [350.65, 676.18], [371.62, 738.53], [392.6, 800.88], [418.83, 859."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00112_landmarks.json",
    "chars": 1213,
    "preview": "[[313.74, 520.37], [300.61, 581.5], [296.11, 647.34], [300.32, 715.67], [313.4, 782.12], [337.54, 846.75], [366.31, 904."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00142_landmarks.json",
    "chars": 1217,
    "preview": "[[229.61, 448.21], [230.92, 527.61], [235.71, 609.48], [243.48, 690.85], [258.22, 777.14], [289.79, 854.44], [343.65, 91"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00154_landmarks.json",
    "chars": 1214,
    "preview": "[[205.6, 487.34], [212.93, 567.91], [223.35, 648.5], [238.43, 727.56], [272.15, 795.88], [326.07, 850.36], [390.93, 887."
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00220_landmarks.json",
    "chars": 1218,
    "preview": "[[260.12, 480.01], [265.56, 548.32], [277.8, 616.63], [289.78, 683.63], [315.38, 743.84], [356.68, 794.12], [405.59, 827"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00269_landmarks.json",
    "chars": 1214,
    "preview": "[[283.78, 513.23], [285.85, 578.99], [297.73, 648.1], [314.42, 720.13], [339.45, 782.77], [374.72, 843.74], [415.83, 895"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00303_landmarks.json",
    "chars": 1213,
    "preview": "[[301.13, 453.79], [303.01, 518.44], [315.0, 589.93], [333.83, 651.32], [359.04, 718.51], [392.73, 784.07], [427.46, 845"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00412_landmarks.json",
    "chars": 1210,
    "preview": "[[210.68, 476.73], [222.01, 550.84], [235.35, 621.37], [249.77, 688.26], [272.54, 753.7], [313.29, 807.99], [375.96, 845"
  },
  {
    "path": "content/ch-applications/datasets/FFHQ/sad/00477_landmarks.json",
    "chars": 1211,
    "preview": "[[315.33, 484.33], [317.86, 540.19], [331.3, 594.08], [358.12, 649.33], [383.97, 699.12], [419.23, 749.1], [461.11, 794."
  },
  {
    "path": "content/ch-applications/examples/3sat.dimacs",
    "chars": 84,
    "preview": "c example DIMACS-CNF 3-SAT\np cnf 3 5\n-1 -2 -3 0\n1 -2 3 0\n1 2 -3 0\n1 -2 -3 0\n-1 2 3 0"
  },
  {
    "path": "content/ch-applications/facial-expression-recognition.ipynb",
    "chars": 696951,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"# Quantum Facial Expression Recognition\"\n   ],\n   \"met"
  },
  {
    "path": "content/ch-applications/hhl_tutorial.ipynb",
    "chars": 160945,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-applications/image-processing-frqi-neqr.ipynb",
    "chars": 1212185,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Image processing is extensively use"
  },
  {
    "path": "content/ch-applications/images/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "content/ch-applications/imp_index.md",
    "chars": 441,
    "preview": "# About This Section\n\nFinding new quantum algorithms, or new applications of existing algorithms is an area of active re"
  },
  {
    "path": "content/ch-applications/qaoa.ipynb",
    "chars": 248986,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-applications/quantum-edge-detection.ipynb",
    "chars": 422652,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"An essential part of any image feat"
  },
  {
    "path": "content/ch-applications/satisfiability-grover.ipynb",
    "chars": 114372,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-applications/vqe-molecules.ipynb",
    "chars": 158936,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-demos/.gitignore",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "content/ch-demos/chsh.ipynb",
    "chars": 165611,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  },
  {
    "path": "content/ch-demos/coin-game.ipynb",
    "chars": 89669,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"id\": \"D5Zxkmb_FKWG\",\n    \"tags\": [\n     \"remove_cell"
  },
  {
    "path": "content/ch-demos/first-quantum-game.ipynb",
    "chars": 1072832,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Your First Quantum Game\"\n   ]\n  }"
  },
  {
    "path": "content/ch-demos/index.md",
    "chars": 559,
    "preview": "These games and demos are a fun way to reinforce the concepts you’ll learn throughout your quantum computing journey. We"
  },
  {
    "path": "content/ch-demos/piday-code.ipynb",
    "chars": 82157,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": [\n     \"remove_cell\"\n    ]\n   },\n   \"source\":"
  }
]

// ... and 206 more files (download for full content)

About this extraction

This page contains the full source code of the Qiskit/qiskit-textbook GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 406 files (229.5 MB), approximately 12.9M tokens, and a symbol index with 3301 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!