Uri: https%3A%2F%2Fbillets.tripdhumour.com%2Fatr%2F%3F%26locale%3Dfr-CA%26skin%3Damptrip%26fac%3DATR

Page name:

Edit | Back

Date Scraped: 2026-05-30 01:10:42 -0400

Last Successful Refresh: 2026-05-30 01:10:42 -0400

Created: 2025-01-04 15:49:12 -0500

Updated: 2026-05-30 01:10:42 -0400

HTTP Response Code: 200

Html:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, minimum-scale=1.0, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
    />

    <script>
      window.split_keyword = "go";

      // Support for legacy URLs.
      if (window.location.href.includes("#")) {
        window.location.href = window.location.href.replace(
          "/#/",
          "/" + window.split_keyword + "/",
        );
      }

      const baseHref = window.location.href.split(window.split_keyword)?.[0];
      const baseEl = document.createElement("base");
      baseEl.setAttribute("href", baseHref);
      document.head.appendChild(baseEl);
    </script>

    <script>
      async function hashContent(content) {
        const data = new TextEncoder().encode(content);
        const hashBuffer = await crypto.subtle.digest("SHA-384", data);
        return [...new Uint8Array(hashBuffer)]
          .map((b) => b.toString(16).padStart(2, "0"))
          .join("");
      }

      function resolveUrl(src) {
        return src?.startsWith("http") ? src : new URL(src, location.href).href;
      }

      async function reportMismatch({ src, expectedHash, actualHash }) {
        const env = "production";
        const reportUrl =
          env === "production"
            ? "https://reports.outbox.com/report/sri"
            : "https://reports-test.outbox.com/report/sri";
        await fetch(reportUrl, {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({
            type: "sri-violation",
            app_name: "es5",
            expected_hash: expectedHash,
            actual_hash: actualHash,
            user_agent: navigator.userAgent,
            url: window.location.href,
            body: {
              document_url: window.location.href,
              blocked_url: src,
              source_file: resolveUrl(src),
            },
          }),
        });
      }

      async function verifyScriptIntegrity({ src, expectedHash }) {
        try {
          // Use cache without revalidation
          const response = await fetch(src, { cache: "force-cache" });
          if (!response.ok)
            throw new Error(
              `Failed to fetch: ${src} (HTTP ${response.status})`,
            );

          const content = await response.text();
          const actualHash = await hashContent(content);
          const env = "production";

          if (
            actualHash !== expectedHash &&
            env !== "development" &&
            env !== "dev-local"
          ) {
            console.warn(
              `Hash mismatch for ${src}:\nExpected: ${expectedHash}\nActual: ${actualHash}`,
            );
            // Report disabled on Playwright and Cypress
            if (
              !window.PLAYWRIGHT &&
              "<&percnt;= process.env.PLAYWRIGHT &percnt;>" !== "true" &&
              !window.Cypress
            ) {
              await reportMismatch({ src, expectedHash, actualHash });
            }
          }
        } catch (err) {
          console.error(`Error verifying integrity for ${src}:`, err);
        }
      }

      function loadScript(src, isDefer) {
        return new Promise((resolve) => {
          const script = document.createElement("script");
          script.src = src;
          script.defer = isDefer;
          script.onload = resolve;
          script.onerror = resolve;
          document.head.appendChild(script);
        });
      }

      (async function () {
        // TLAScript.js must run and set window.TLA_from_config before any
        // other script (or the inline TLA block below) reads window.TLA.
        // Dynamically-injected scripts are always async, so we load it on
        // its own and await it before loading the rest.
        const tlaScript = {
          src: "js/TLAScript.js?v=9.52.6",
          expectedHash: "8c0302cd269689c7fb6ed201c2914fdad9cef5ee1a5fd4dd2f8e36a98c71d9d72c4c3fc06845dd74492f97336eacdb53",
          defer: false,
        };

        const scriptsConfig = [
          {
            src: "js/polyfills.js?v=9.52.6",
            expectedHash: "da2c729ccc31712021b55ea84b5dedc83c21d33791c03e01c2afbf78da7208fd63253bc902056517984d8d38b9bba294",
            defer: true,
          },
          {
            src: "js/consolidateQueryParams.js?v=9.52.6",
            expectedHash: "adc56c5eb13143fc5f016f9763c4b41d46fc3faf8550050baae2f285e2367b2566e79fc46cb02b3882fee9572d9b7ba1",
            defer: false,
          },
          {
            src: "js/apiPreloader.js?v=9.52.6",
            expectedHash: "474b2b761650c3989810e640a35a1647ca0548c1e953427a50ea44c81da4132d0c161df75c05f13fd9d956222b3343d7",
            defer: true,
          },
          {
            src: "js/loadSkin.js?v=9.52.6",
            expectedHash: "b96f3a31a0d237b056f7ccb36e43c6e5b3a3ae09ea5fb6434c98f7d06f1f5e1f0e91ca483c318de991c6be5269f27583",
            defer: true,
          },
          {
            src: "js/vendor.js?v=9.52.6",
            expectedHash: "",
            defer: true,
          },
          {
            src: "js/bundle.js?v=9.52.6",
            expectedHash: "94be62b5b1f0a8d01930bb3fb9022be9def023d288e40f9fadcbb7cecf5aa295673e8622d0a77b3e6a7d909b8fea054c",
            defer: true,
          },
        ];

        await loadScript(tlaScript.src, tlaScript.defer);

        window.TLA_from_url = getParameterByName("TLA");
        window.TLA_from_config =
          typeof window.TLA_from_config != "undefined"
            ? window.TLA_from_config
            : null;
        window.TLA = (
          window.TLA_from_url ||
          window.TLA_from_config ||
          "default"
        ).toLowerCase();

        await Promise.all(
          scriptsConfig.map(({ src, defer }) => loadScript(src, defer)),
        );

        // Verify after scripts are loaded to hit cache
        Promise.all(
          [tlaScript, ...scriptsConfig].map(verifyScriptIntegrity),
        ).catch(console.error);
      })();
    </script>

    <script type="text/javascript">
      window.dataLayer = window.dataLayer || [];
    </script>

    <script>
      function loadjscssfile(filename, filetype) {
        if (filetype == "js") {
          // if filename is a external JavaScript file
          var fileref = document.createElement("script");
          fileref.setAttribute("type", "text/javascript");
          fileref.setAttribute("src", filename);
        } else if (filetype == "css") {
          // if filename is an external CSS file
          var fileref = document.createElement("link");
          fileref.setAttribute("rel", "stylesheet");
          fileref.setAttribute("type", "text/css");
          fileref.setAttribute("href", filename);
        }
        if (typeof fileref != "undefined")
          document.getElementsByTagName("head")[0].appendChild(fileref);
      }

      function getParameterByName(name, url) {
        if (!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
          results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return "";
        return decodeURIComponent(results[2].replace(/\+/g, " "));
      }
    </script>

    <script type="text/javascript">
      let families = ["Roboto:300,400,500,700"];
      if ("%MOCK%" === "true") {
        // This is required to circumvent CORS errors when fetching fonts from fonts.gstatic.com on Playwright's Firefox browser in mock mode.
        families.push(
          "Be+Vietnam+Pro:100,200,300,400,500,600,700,800,900,100italic,200italic,300italic,400italic,500italic,600italic,700italic,800italic,900italic",
        );
      }
      // This preloads all woff2 font files for each of the above weights, rather than fetching
      // them dynamically, as we do with @import url(), e.g. in css/vendor/eventshopper/_fonts.scss.
      WebFontConfig = { google: { families } };
    </script>
    <script
      async
      src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"
    ></script>



    <style id="antiClickjack">
      body {
        display: none !important;
      }
    </style>
    <script type="text/javascript">
      if (self === top) {
        var antiClickjack = document.getElementById("antiClickjack");
        antiClickjack.parentNode.removeChild(antiClickjack);
      } else {
        top.location = self.location;
      }
    </script>

    <!--[if lt IE 9]>
      <script>
        var isIeOld = true;
      </script>
    <![endif]-->

    <title></title>
    <style type="text/css" media="screen">
      html,
      body {
        font-size: 14px;
        width: 100%;
        height: 100%;
        margin: 0;
      }

      .top-level-spinner {
        width: 100%;
        height: 100%;
        position: absolute;
        background-color: white;
        z-index: 100;
      }

      .top-level-spinner > .top-level-spinner__img {
        width: 64px;
        height: 64px;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
      }
    </style>
    <script type="module" crossorigin src="./js/main.vEtVJqu1.js"></script>
    <link rel="modulepreload" crossorigin href="./js/consolidateQueryParams.js">
    <link rel="modulepreload" crossorigin href="./js/loadSkinUtil.ZM3V0qg0.js">
    <link rel="modulepreload" crossorigin href="./js/nivo.C9XwLknu.js">
    <link rel="modulepreload" crossorigin href="./js/Tools.B1_zJlFx.js">
    <link rel="modulepreload" crossorigin href="./js/loadSkin.js">
    <link rel="modulepreload" crossorigin href="./js/LookupSupportedLocales.yiA4EwsW.js">
    <link rel="modulepreload" crossorigin href="./js/polyfills.js">
    <link rel="modulepreload" crossorigin href="./js/index.B-RbEckT.js">
    <link rel="modulepreload" crossorigin href="./js/apiPreloader.js">
    <link rel="modulepreload" crossorigin href="./js/bundle.js">
  </head>
  <body>
    <noscript>
      <div class="container">
        <div class="well well-lg" style="margin-top: 100px">
          <h1>
            <span
              class="glyphicon glyphicon-exclamation-sign"
              aria-hidden="true"
            ></span>
            JavaScript is required by EventShopper.
          </h1>
          <p>
            <strong
              >Please
              <a
                href="https://www.google.com/search?q=enable+javascript"
                target="_blank"
                rel="noopener noreferrer"
                >enable JavaScript in your browser</a
              >.</strong
            >
          </p>
        </div>
      </div>
    </noscript>

    <div id="top-level-spinner" class="top-level-spinner">
      <img
        class="top-level-spinner__img"
        id="spinner-img"
        alt="Application is loading"
      />
    </div>

    <script>
      // Set spinner image source after base tag is established
      document.getElementById("spinner-img").src = "img/spinner.gif";
    </script>

    <div id="main"></div>

    <script>
      // Use this variable to invalidate cache throughout the application.
      // window.TLA / TLA_from_url / TLA_from_config are resolved earlier in
      // the async loader in <head>, after TLAScript.js has finished loading.
      window.CACHE_BUST = "9.52.6";
    </script>

    <script>
      // Because visa checkout's sdk has the nasty habit of defining enumerable functions
      // on Array.prototype and we don't want for (const i in array) to iterate over "contains"
      Object.defineProperty(Array.prototype, "contains", {
        value: Array.prototype.includes,
        enumerable: false,
      });
    </script>

    <script>
      if ("production" === "production") {
        (function () {
          function loadScript(url) {
            var e = document.createElement("script");
            e.src = url;
            document.body.appendChild(e);
          }

          // Do not load the app on incompatible browsers
          if (
            /\bMSIE\s?(6|7|8|9|10)\b/i.test(navigator.userAgent) ||
            (!!window.MSInputMethodContext && !!document.documentMode)
          ) {
            const locale = getParameterByName("locale") || "en-US";
            let message;
            if (locale.indexOf("en") > -1) {
              message =
                "  <h1>" +
                '    <Glyphicon glyph="exclamation-sign" />' +
                "    This app requires a modern browser." +
                "  </h1>" +
                "  <p>" +
                "    <strong>" +
                '      Please install a modern browser like <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
                '      or <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
                "    </strong>" +
                "  </p>";
            }

            if (locale.indexOf("fr") > -1) {
              message =
                "  <h1>" +
                '    <Glyphicon glyph="exclamation-sign" />' +
                "    Cette app nécessite un navigateur moderne." +
                "  </h1>" +
                "  <p>" +
                "    <strong>" +
                '      Veuillez installer un navigateur moderne comme <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
                '      ou <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
                "    </strong>" +
                "  </p>";
            }

            if (locale.indexOf("es") > -1) {
              message =
                "  <h1>" +
                '    <Glyphicon glyph="exclamation-sign" />' +
                "    Esta aplicación requiere un navegador moderno." +
                "  </h1>" +
                "  <p>" +
                "    <strong>" +
                '      Por favor, instale un navegador moderno como  <a href="https://www.firefox.com" target="_blank" rel="noopener noreferrer">Firefox </a>' +
                '      o <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Chrome</a>.' +
                "    </strong>" +
                "  </p>";
            }

            document.body.innerHTML =
              '<div style="margin:100px auto 0 auto; max-width: 600px;" class="well well-lg" data-reactid=".0.0.0.0">' +
              message +
              "</div>";
            return;
          }

          // See https://browser-update.org/ for details
          // Notify recommended set of browsers and adjust it automatically over time:If a browser is no longer supported by the vendor or has security vulnerabilities, it will be added to the set.
          var $buoop = {
            vs: { f: 38, o: 31, s: 8, c: 31 },
            text: "We noticed that your web browser (%s) is <b>out of date</b>. <a%s>Please update your browser</a> for more security and the best ticketing experience.",
            reminder: 0,
            reminderClosed: 24,
          };
          function $buo_f() {
            loadScript("//browser-update.org/update.min.js");
          }
          try {
            document.addEventListener("DOMContentLoaded", $buo_f, false);
          } catch (e) {
            window.attachEvent("onload", $buo_f);
          }
        })();
      }
    </script>
  </body>
</html>