PageSourceSearch

https://semarchy.com/wp-content/themes/semarchy2024/functions/opti…archy-first-form-tracking.js?ver=1778599844

js semarchy.com collected 2026-09-24 18:46:08 UTC 21,514 bytes, 751 lines download raw bytes

1(function () {
2  if (window.__SEMARCHY_PARENT_TRACKING_V7__) return;
3  window.__SEMARCHY_PARENT_TRACKING_V7__ = true;
4
5  const PH_KEY = "phc_bbCqHaMYWguVqa1V99L0ZzLsgiaE7EyeUDr8iORbeeU";
6  const API_HOST = "https://eu.i.posthog.com";
7
8  const CONSENT_COOKIE = "ph_analytics_consent";
9  const IFRAME_ORIGIN = "https://go.semarchy.com";
10  const IFRAME_MATCH = "go.semarchy.com";
11  const PARENT_ORIGIN = window.location.origin;
12
13  const UTM_KEYS = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
14
15    const EXTRA_TRACKING_KEYS = [
16    "kw_matchtype",
17    "gtm_network",
18    "gtm_placement",
19    "gtm_groupid",
20    "gtm_accid",
21    "gad_source",
22    "gad_campaignid"
23    ];
24
25    function getExtraTrackingParamsFromURL() {
26    const p = new URLSearchParams(window.location.search);
27    const params = {};
28
29    EXTRA_TRACKING_KEYS.forEach((k) => {
30        const v = p.get(k);
31        if (v && String(v).trim()) {
32        params[k] = String(v).trim();
33        }
34    });
35
36    return params;
37    }
38
39    function persistExtraTrackingParams() {
40    const params = getExtraTrackingParamsFromURL();
41
42    if (Object.keys(params).length) {
43        writeSession(
44        STORAGE_KEYS.EXTRA_TRACKING_PARAMS,
45        params
46        );
47    }
48
49    return readSession(
50        STORAGE_KEYS.EXTRA_TRACKING_PARAMS,
51        {}
52    );
53    }
54
55  const STORAGE_KEYS = {
56    SESSION_START: "sem_first_form_session_start_v1",
57    INITIAL_CONTEXT: "sem_first_form_initial_context_v1",
58    INITIAL_UTMS: "sem_first_form_initial_utms_v1",
59    LAST_TOUCH_UTMS: "sem_first_form_last_touch_utms_v1",
60    EXTRA_TRACKING_PARAMS: "sem_first_form_extra_tracking_params_v1",
61    FIRST_FORM_DATA: "sem_first_form_data_v1"
62  };
63
64  const IDENTITY_EMAIL_KEY = "sem_posthog_identity_email_v1";
65
66  function nowIso() {
67    return new Date().toISOString();
68  }
69
70  function safeJsonParse(value, fallback) {
71    try { return JSON.parse(value); } catch { return fallback; }
72  }
73
74  function readSession(key, fallback) {
75    try {
76      const raw = sessionStorage.getItem(key);
77      return raw ? safeJsonParse(raw, fallback) : fallback;
78    } catch {
79      return fallback;
80    }
81  }
82
83  function writeSession(key, value) {
84    try { sessionStorage.setItem(key, JSON.stringify(value)); } catch {}
85  }
86
87  function getStoredIdentityEmail() {
88    try {
89      return localStorage.getItem(IDENTITY_EMAIL_KEY) || sessionStorage.getItem(IDENTITY_EMAIL_KEY) || "";
90    } catch {
91      return "";
92    }
93  }
94
95  function storeIdentityEmail(email) {
96    try {
97      localStorage.setItem(IDENTITY_EMAIL_KEY, email);
98    } catch {}
99
100    try {
101      sessionStorage.setItem(IDENTITY_EMAIL_KEY, email);
102    } catch {}
103  }
104
105  function findEmailInProps(props) {
106    if (!props || typeof props !== "object") return "";
107
108    function search(obj) {
109      if (!obj || typeof obj !== "object") return "";
110
111      for (const key in obj) {
112        if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
113
114        const value = obj[key];
115
116        if (
117          typeof value === "string" &&
118          /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim())
119        ) {
120          return value.trim().toLowerCase();
121        }
122
123        if (value && typeof value === "object") {
124          const found = search(value);
125          if (found) return found;
126        }
127      }
128
129      return "";
130    }
131
132    return search(props);
133  }
134
135function emptyUtms() {
136  return {
137    utm_source: "",
138    utm_medium: "",
139    utm_campaign: "",
140    utm_term: "",
141    utm_content: ""
142  };
143}
144
145function getSharedTrackingProperties() {
146  const sessionUTMs = readSession(
147    STORAGE_KEYS.LAST_TOUCH_UTMS,
148    {}
149  );
150
151  const sessionExtraTracking = readSession(
152    STORAGE_KEYS.EXTRA_TRACKING_PARAMS,
153    {}
154  );
155
156  return {
157    ...sessionUTMs,
158    ...sessionExtraTracking
159  };
160}
161
162  function hasAnyUTM(obj) {
163    if (!obj) return false;
164    return UTM_KEYS.some((k) => !!(obj[k] && String(obj[k]).trim()));
165  }
166
167  function normalizeTitle(str) {
168    return String(str || "").replace(/\s+/g, " ").trim();
169  }
170
171  function getCurrentPageTitle() {
172    return normalizeTitle(document.title || "");
173  }
174
175  function ensurePageTitle() {
176    return getCurrentPageTitle();
177  }
178
179  function getFormNameFromPageTitle() {
180    const title = getCurrentPageTitle();
181    if (!title) return "";
182    return title.toLowerCase().endsWith("form") ? title : `${title} Form`;
183  }
184
185  function getUTMsFromURL() {
186    const p = new URLSearchParams(window.location.search);
187    const utms = {};
188    UTM_KEYS.forEach((k) => {
189      const v = p.get(k);
190      if (v && String(v).trim()) utms[k] = String(v).trim();
191    });
192    return utms;
193  }
194
195  function getCleanInitialPagePath() {
196    try {
197      return window.location.pathname + (window.location.hash || "");
198    } catch {
199      return window.location.pathname || "";
200    }
201  }
202
203  function getReferringDomain() {
204    try {
205      if (!document.referrer) return "";
206      return new URL(document.referrer).hostname || "";
207    } catch {
208      return "";
209    }
210  }
211
212  function getConsent() {
213    const m = document.cookie.match(new RegExp("(^| )" + CONSENT_COOKIE + "=([^;]+)"));
214    return m ? decodeURIComponent(m[2]) : null;
215  }
216
217  function setConsent(value, days = 180) {
218    const d = new Date();
219    d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
220    document.cookie = `${CONSENT_COOKIE}=${encodeURIComponent(value)}; expires=${d.toUTCString()}; path=/; SameSite=Lax`;
221  }
222
223  function consented() {
224    return getConsent() === "yes";
225  }
226
227  function cookieYesHasAnalytics(detail) {
228    if (!detail) return false;
229    let accepted =
230      detail.acceptedCategories ||
231      detail.categories ||
232      detail.accepted ||
233      detail.cookieCategories ||
234      [];
235    if (typeof accepted === "string") accepted = accepted.split(",");
236    if (accepted && typeof accepted === "object" && !Array.isArray(accepted)) {
237      accepted = Object.keys(accepted).filter(k => accepted[k]);
238    }
239    accepted = (accepted || []).map(v => String(v).toLowerCase().trim());
240    return accepted.some(v => ["analytics", "statistics", "performance"].includes(v));
241  }
242
243  function getCookieValue(name) {
244    const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
245    const m = document.cookie.match(new RegExp("(^|;\\s*)" + escaped + "=([^;]*)"));
246    return m ? decodeURIComponent(m[2]) : "";
247  }
248
249  function getMarketingCloudVisitorId() {
250    return (
251      getCookieValue("sfmc_visitor_id") ||
252      getCookieValue("mc_visitor_id") ||
253      getCookieValue("visitor_id") ||
254      ""
255    );
256  }
257
258  function getMarketingCloudVisitId() {
259    return (
260      getCookieValue("sfmc_visit_id") ||
261      getCookieValue("mc_visit_id") ||
262      getCookieValue("visit_id") ||
263      ""
264    );
265  }
266
267  function getCurrentPostHogDistinctId() {
268    try {
269      if (!window.posthog || typeof window.posthog.get_distinct_id !== "function") return "";
270      const id = window.posthog.get_distinct_id();
271      return id ? String(id) : "";
272    } catch {
273      return "";
274    }
275  }
276
277  function isGenericFormName(value) {
278    const v = String(value || "").trim().toLowerCase();
279    return !v || v === "pardot form" || v === "pardot-form" || v === "form";
280  }
281
282  function isGenericFormId(value) {
283    const v = String(value || "").trim().toLowerCase();
284    return !v || v === "pardot-form" || v === "form";
285  }
286
287  function ensureSessionStart() {
288    let sessionStart = readSession(STORAGE_KEYS.SESSION_START, "");
289    if (!sessionStart) {
290      sessionStart = nowIso();
291      writeSession(STORAGE_KEYS.SESSION_START, sessionStart);
292    }
293    return sessionStart;
294  }
295
296  function ensureInitialContext() {
297    let initial = readSession(STORAGE_KEYS.INITIAL_CONTEXT, null);
298    if (!initial) {
299      initial = {
300        initial_url: window.location.href,
301        initial_page_path: getCleanInitialPagePath(),
302        referring_domain: getReferringDomain()
303      };
304      writeSession(STORAGE_KEYS.INITIAL_CONTEXT, initial);
305    }
306    return initial;
307  }
308
309  function ensureInitialUTMs() {
310    let initialUtms = readSession(STORAGE_KEYS.INITIAL_UTMS, null);
311    if (hasAnyUTM(initialUtms)) return initialUtms;
312
313    const urlUTMs = getUTMsFromURL();
314    if (hasAnyUTM(urlUTMs)) {
315      const next = {};
316      UTM_KEYS.forEach((k) => { next[k] = urlUTMs[k] || ""; });
317      writeSession(STORAGE_KEYS.INITIAL_UTMS, next);
318      return next;
319    }
320
321    return initialUtms || emptyUtms();
322  }
323
324  function persistLastTouchUTMsIfPresent() {
325    const urlUTMs = getUTMsFromURL();
326    if (!hasAnyUTM(urlUTMs)) {
327      return readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms());
328    }
329
330    const next = {};
331    UTM_KEYS.forEach((k) => { next[k] = urlUTMs[k] || ""; });
332    writeSession(STORAGE_KEYS.LAST_TOUCH_UTMS, next);
333    return next;
334  }
335
336  function getDefaultFirstFormData() {
337    return {
338      "First Form Date/Time": "",
339      "First Form Email": "",
340      "First Form ID": "",
341      "First Form Initial Page Path": "",
342      "First Form Initial URL": "",
343      "First Form Marketing Cloud Visit ID": "",
344      "First Form Marketing Cloud Visitor ID": "",
345      "First Form Name": "",
346      "First Form PostHog Distinct ID": "",
347      "First Form Referring Domain": "",
348      "First Form Session Start": "",
349      "First Form UTM Campaign": "",
350      "First Form UTM Content": "",
351      "First Form UTM Medium": "",
352      "First Form UTM Source": "",
353      "First Form UTM Term": ""
354    };
355  }
356
357  function readFirstFormData() {
358    return readSession(STORAGE_KEYS.FIRST_FORM_DATA, getDefaultFirstFormData());
359  }
360
361  function writeFirstFormData(data) {
362    writeSession(STORAGE_KEYS.FIRST_FORM_DATA, data || getDefaultFirstFormData());
363  }
364
365  function ensureFirstFormPrefill() {
366    const existing = readFirstFormData();
367    const sessionStart = ensureSessionStart();
368    const initial = ensureInitialContext();
369    const initialUtms = ensureInitialUTMs();
370
371    const next = {
372      ...getDefaultFirstFormData(),
373      ...existing
374    };
375
376    if (!next["First Form UTM Source"]) next["First Form UTM Source"] = initialUtms.utm_source || "";
377    if (!next["First Form UTM Medium"]) next["First Form UTM Medium"] = initialUtms.utm_medium || "";
378    if (!next["First Form UTM Campaign"]) next["First Form UTM Campaign"] = initialUtms.utm_campaign || "";
379    if (!next["First Form UTM Content"]) next["First Form UTM Content"] = initialUtms.utm_content || "";
380    if (!next["First Form UTM Term"]) next["First Form UTM Term"] = initialUtms.utm_term || "";
381    if (!next["First Form Session Start"]) next["First Form Session Start"] = sessionStart || "";
382    if (!next["First Form Initial URL"]) next["First Form Initial URL"] = initial.initial_url || "";
383    if (!next["First Form Initial Page Path"]) next["First Form Initial Page Path"] = initial.initial_page_path || "";
384    if (!next["First Form Referring Domain"]) next["First Form Referring Domain"] = initial.referring_domain || "";
385    if (isGenericFormName(next["First Form Name"])) next["First Form Name"] = "";
386    if (!next["First Form Name"]) next["First Form Name"] = getFormNameFromPageTitle() || "";
387
388    if (consented()) {
389      if (!next["First Form PostHog Distinct ID"]) next["First Form PostHog Distinct ID"] = getStoredIdentityEmail() || getCurrentPostHogDistinctId() || "";
390      if (!next["First Form Email"]) next["First Form Email"] = getStoredIdentityEmail() || "";
391      if (!next["First Form Marketing Cloud Visit ID"]) next["First Form Marketing Cloud Visit ID"] = getMarketingCloudVisitId() || "";
392      if (!next["First Form Marketing Cloud Visitor ID"]) next["First Form Marketing Cloud Visitor ID"] = getMarketingCloudVisitorId() || "";
393    }
394
395    writeFirstFormData(next);
396    return next;
397  }
398
399function refreshPrefill() {
400  ensurePageTitle();
401  ensureSessionStart();
402  ensureInitialContext();
403
404  persistLastTouchUTMsIfPresent();
405  persistExtraTrackingParams();
406
407  ensureInitialUTMs();
408
409  return ensureFirstFormPrefill();
410}
411
412  function markFirstFormSubmitted(meta) {
413    const existing = ensureFirstFormPrefill();
414    const next = { ...existing };
415
416    const submittedName = meta && meta.formName ? String(meta.formName).trim() : "";
417    const submittedId = meta && meta.formId ? String(meta.formId).trim() : "";
418
419    if (isGenericFormName(next["First Form Name"])) next["First Form Name"] = "";
420    if (!next["First Form Name"]) {
421      next["First Form Name"] = !isGenericFormName(submittedName)
422        ? submittedName
423        : (getFormNameFromPageTitle() || "");
424    }
425
426    if (isGenericFormId(next["First Form ID"])) next["First Form ID"] = "";
427    if (!next["First Form ID"] && !isGenericFormId(submittedId)) {
428      next["First Form ID"] = submittedId;
429    }
430
431    if (!next["First Form Date/Time"]) next["First Form Date/Time"] = nowIso();
432
433    writeFirstFormData(next);
434    return next;
435  }
436
437  function clearAll() {
438    try {
439      Object.values(STORAGE_KEYS).forEach((k) => sessionStorage.removeItem(k));
440    } catch {}
441  }
442
443  function identifyStoredEmail() {
444    if (!consented()) return "";
445
446    const storedEmail = getStoredIdentityEmail();
447    if (!storedEmail) return "";
448
449    try {
450      posthog.identify(storedEmail, {
451        email: storedEmail
452      });
453
454      posthog.register({
455        email: storedEmail,
456        user_email: storedEmail,
457        identified_email: storedEmail
458      });
459
460      return storedEmail;
461    } catch (err) {
462      console.warn("Stored PostHog identify failed", err);
463      return "";
464    }
465  }
466
467  function identifySubmittedEmail(submittedEmail) {
468    if (!consented()) return "";
469    if (!submittedEmail || !String(submittedEmail).trim()) return "";
470
471    const email = String(submittedEmail).trim().toLowerCase();
472
473    try {
474      const previousDistinctId = getCurrentPostHogDistinctId();
475
476      storeIdentityEmail(email);
477
478      posthog.identify(email, {
479        email: email,
480        previous_posthog_distinct_id: previousDistinctId || ""
481      });
482
483      posthog.register({
484        email: email,
485        user_email: email,
486        identified_email: email
487      });
488
489      const firstFormData = readFirstFormData();
490
491      firstFormData["First Form Email"] = email;
492      firstFormData["First Form PostHog Distinct ID"] = email;
493
494      writeFirstFormData(firstFormData);
495
496      return email;
497    } catch (err) {
498      console.warn("PostHog identify failed", err);
499      return "";
500    }
501  }
502
503window.__FIRST_FORM_SESSION__ = {
504  read() {
505    return {
506      page_title: getCurrentPageTitle(),
507      session_start: readSession(STORAGE_KEYS.SESSION_START, ""),
508      initial_context: readSession(STORAGE_KEYS.INITIAL_CONTEXT, null),
509      initial_utms: readSession(STORAGE_KEYS.INITIAL_UTMS, emptyUtms()),
510      last_touch_utms: readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms()),
511      extra_tracking_params: readSession(
512        STORAGE_KEYS.EXTRA_TRACKING_PARAMS,
513        {}
514      ),
515      first_form_data: readFirstFormData()
516    };
517  },
518    prefill() {
519      return refreshPrefill();
520    },
521    markSubmitted(meta) {
522      return markFirstFormSubmitted(meta || {});
523    },
524    clear() {
525      clearAll();
526    }
527  };
528
529  (function(t,e){
530    var o,n,p,r;
531    e.__SV||(window.posthog&&window.posthog.__loaded)||
532    (window.posthog=e,e._i=[],e.init=function(i,s,a){
533      function g(t,e){
534        var o=e.split(".");
535        if (o.length === 2) {
536          t = t[o[0]];
537          e = o[1];
538        }
539        t[e] = function(){
540          t.push([e].concat([].slice.call(arguments,0)));
541        };
542      }
543      (p=t.createElement("script")).type="text/javascript";
544      p.crossOrigin="anonymous";
545      p.async=!0;
546      p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js";
547      (r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);
548      var u=e;
549      for(a=a||"posthog", o="init capture identify alias get_distinct_id opt_in_capturing opt_out_capturing has_opted_in_capturing set_config register".split(" "), n=0;n<o.length;n++) g(u,o[n]);
550      e._i.push([i,s,a]);
551    },e.__SV=1);
552  })(document,window.posthog||[]);
553
554  posthog.init(PH_KEY, {
555    api_host: API_HOST,
556    persistence: consented() ? "localStorage+cookie" : "memory",
557    opt_out_capturing_by_default: consented() ? false : true,
558    autocapture: true,
559    capture_pageview: false,
560    loaded: function () {
561      identifyStoredEmail();
562      refreshPrefill();
563
564      
565      if (consented()) {
566        posthog.register(getSharedTrackingProperties());
567        posthog.capture("$pageview");
568      }
569    }
570  });
571
572  function buildIframePayload() {
573    refreshPrefill();
574
575    return {
576      type: "semarchy_first_form_context",
577      consented: consented(),
578      parentOrigin: PARENT_ORIGIN,
579      pageTitle: getCurrentPageTitle(),
580      pageUrl: window.location.href,
581      pagePath: window.location.pathname + window.location.search + window.location.hash,
582      firstFormData: readFirstFormData(),
583      lastTouchUtms: readSession(STORAGE_KEYS.LAST_TOUCH_UTMS, emptyUtms()),
584      distinctId: consented() ? (getStoredIdentityEmail() || getCurrentPostHogDistinctId()) : "",
585      formMeta: {
586        form_id: "",
587        form_name: ""
588      }
589    };
590  }
591
592  function sendContextToIframe(iframe) {
593    if (!iframe || !iframe.contentWindow) return;
594    try {
595      iframe.contentWindow.postMessage(buildIframePayload(), IFRAME_ORIGIN);
596    } catch (e) {
597      console.warn("iframe postMessage failed", e);
598    }
599  }
600
601  function hookIframes() {
602    document.querySelectorAll(`iframe[src*="${IFRAME_MATCH}"]`).forEach((fr) => {
603      if (fr.dataset.semarchyHooked === "1") return;
604      fr.dataset.semarchyHooked = "1";
605      fr.addEventListener("load", function () {
606        sendContextToIframe(fr);
607      });
608      sendContextToIframe(fr);
609    });
610  }
611
612  function sendContextToAllIframes() {
613    document.querySelectorAll(`iframe[src*="${IFRAME_MATCH}"]`).forEach(sendContextToIframe);
614  }
615
616  const mo = new MutationObserver(hookIframes);
617  try {
618    mo.observe(document.documentElement, { subtree: true, childList: true });
619  } catch {}
620
621  const seen = new Set();
622
623  window.addEventListener("message", function (e) {
624    if (e.origin !== IFRAME_ORIGIN) return;
625
626    const data = e.data;
627    if (!data || typeof data !== "object") return;
628    if (data.type !== "PH_FORM_EVENT") return;
629
630    if (data.msg_id) {
631      if (seen.has(data.msg_id)) return;
632      seen.add(data.msg_id);
633      if (seen.size > 500) seen.clear();
634    }
635
636    if (data.event === "salesforce_form_submitted") {
637      markFirstFormSubmitted({
638        formName: data.props && data.props.form_name,
639        formId: data.props && data.props.form_id
640      });
641
642      const submittedEmail = findEmailInProps(data.props);
643      const identifiedEmail = identifySubmittedEmail(submittedEmail);
644      const finalEmail = identifiedEmail || submittedEmail || "";
645
646      if (consented()) {
647        try {
648          setTimeout(function () {
649            if (finalEmail) {
650              posthog.identify(finalEmail, {
651                email: finalEmail
652              });
653
654              posthog.register({
655                email: finalEmail,
656                user_email: finalEmail,
657                identified_email: finalEmail
658              });
659            }
660
661            posthog.capture("salesforce_form_submitted", {
662              ...(data.props || {}),
663              ...getSharedTrackingProperties(),
664              email: finalEmail,
665              user_email: finalEmail,
666              identified_email: finalEmail,
667              event_source: "iframe_postmessage"
668            });
669          }, finalEmail ? 800 : 0);
670        } catch (err) {
671          console.warn("PostHog capture failed", err);
672        }
673      }
674    }
675  }, false);
676
677  function handleConsentAccept(source) {
678    setConsent("yes");
679    persistLastTouchUTMsIfPresent();
680    persistExtraTrackingParams();
681
682    try {
683      posthog.set_config({ persistence: "localStorage+cookie" });
684      posthog.opt_in_capturing();
685
686      identifyStoredEmail();
687      refreshPrefill();
688
689      posthog.register(getSharedTrackingProperties());
690
691      if (!sessionStorage.getItem("sem_tracking_synced_v1")) {
692        posthog.capture("utm_and_extra_tracking", {
693            ...getSharedTrackingProperties(),
694            event_source: "website"
695        });
696
697        sessionStorage.setItem("sem_tracking_synced_v1", "true");
698        }
699
700      posthog.capture("cookie_consent_opt_in", {
701        consent_value: "yes",
702        consent_source: source,
703        url: location.href
704      });
705    } catch (_) {}
706
707    setTimeout(function () {
708      refreshPrefill();
709      hookIframes();
710      sendContextToAllIframes();
711    }, 300);
712  }
713
714  function handleConsentReject(source) {
715    setConsent("no");
716
717    try {
718      posthog.set_config({ persistence: "memory" });
719      posthog.opt_out_capturing();
720    } catch (_) {}
721
722    setTimeout(function () {
723      hookIframes();
724      sendContextToAllIframes();
725    }, 300);
726  }
727
728  document.addEventListener("cookieyes_consent_update", function (e) {
729    cookieYesHasAnalytics(e.detail) ? handleConsentAccept("cookieyes") : handleConsentReject("cookieyes");
730  });
731
732  window.addEventListener("load", function () {
733    refreshPrefill();
734    hookIframes();
735
736    setTimeout(function () {
737      refreshPrefill();
738      sendContextToAllIframes();
739    }, 300);
740
741    console.log("First Form session state:", window.__FIRST_FORM_SESSION__.read());
742  });
743
744  document.addEventListener("visibilitychange", function () {
745    if (!document.hidden) {
746      identifyStoredEmail();
747      refreshPrefill();
748      sendContextToAllIframes();
749    }
750  });
751})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.