diff --git a/example/index.html b/example/index.html index f6ad3de..8e238f7 100644 --- a/example/index.html +++ b/example/index.html @@ -7,14 +7,24 @@ #main { border: 1px solid; margin: 10px; - width: 760px; - overflow: auto; + width: 500px; + overflow: hidden; }
+

+    

+    

+    

+    

+    

+    

+    

+    

+    

     
 
 
diff --git a/package.json b/package.json
index 8ec1f45..1ecaa12 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,8 @@
     "start": "./node_modules/.bin/webpack-dev-server --host 0.0.0.0"
   },
   "devDependencies": {
+    "@types/node": "^8.0.26",
+    "@types/pixi.js": "^4.8.2",
     "source-map-loader": "^0.2.4",
     "ts-loader": "^5.2.2",
     "typescript": "^3.1.3",
@@ -15,6 +17,7 @@
     "webpack-dev-server": "^3.1.10"
   },
   "dependencies": {
-    "webpack": "^4.22.0"
+    "webpack": "^4.22.0",
+    "pixi.js": "^4.8.2"
   }
 }
diff --git a/src/index.ts b/src/index.ts
index 67ddd8b..57a3ec3 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,11 +1,54 @@
-import { TimeGraph, TimeGraphEntry } from "./time-graph";
+import { TimeGraph, TimeGraphModel } from "./time-graph";
+// import { TimeAxis } from "./time-axis";
 
-const timeGraphEntry: TimeGraphEntry = {
-    id: 'testEntry',
-    name: 'EntryTest',
+// const timeGraphSimple: TimeGraphModel = {
+//     id: 'test1',
+//     name: 'graph-test1',
+//     range: {
+//         start: 0,
+//         end: 1000
+//     },
+//     rows: [
+//         {
+//             states: [
+//                 {
+//                     label: 'state1',
+//                     range: {
+//                         start: 0,
+//                         end: 100
+//                     }
+//                 },
+//                 {
+//                     label: 'state2',
+//                     range: {
+//                         start: 300,
+//                         end: 400
+//                     }
+//                 },
+//                 {
+//                     label: 'state3',
+//                     range: {
+//                         start: 600,
+//                         end: 700
+//                     }
+//                 },
+//                 {
+//                     label: 'state4',
+//                     range: {
+//                         start: 900,
+//                         end: 1000
+//                     }
+//                 }
+//             ]
+//         }
+//     ]
+// }
+const timeGraph: TimeGraphModel = {
+    id: 'test1',
+    name: 'graph-test1',
     range: {
-        startTime: 0,
-        endTime: 760
+        start: 0,
+        end: 6000
     },
     rows: [
         {
@@ -13,82 +56,57 @@ const timeGraphEntry: TimeGraphEntry = {
                 {
                     label: 'state1',
                     range: {
-                        startTime: 450,
-                        endTime: 550
+                        start: 0,
+                        end: 50
                     }
                 },
                 {
                     label: 'state2',
                     range: {
-                        startTime: 650,
-                        endTime: 1550
+                        start: 150,
+                        end: 155
                     }
                 },
                 {
                     label: 'state3',
                     range: {
-                        startTime: 2650,
-                        endTime: 4550
-                    }
-                }
-            ]
-        },
-        {
-            states: [
-                {
-                    label: 'state2.1',
-                    range: {
-                        startTime: 1450,
-                        endTime: 2550
+                        start: 265,
+                        end: 455
                     }
                 },
                 {
-                    label: 'state2.2',
+                    label: 'state4',
                     range: {
-                        startTime: 2650,
-                        endTime: 2750
+                        start: 565,
+                        end: 655
                     }
                 },
                 {
-                    label: 'state2.3',
+                    label: 'state5',
                     range: {
-                        startTime: 4650,
-                        endTime: 5550
+                        start: 765,
+                        end: 1455
                     }
-                }
-            ]
-        }
-    ]
-}
-const timeGraphEntry2: TimeGraphEntry = {
-    id: 'testEntry2',
-    name: 'EntryTest2',
-    range: {
-        startTime: 0,
-        endTime: 760
-    },
-    rows: [
-        {
-            states: [
+                },
                 {
-                    label: 'state1',
+                    label: 'state6',
                     range: {
-                        startTime: 0,
-                        endTime: 50
+                        start: 2265,
+                        end: 2455
                     }
                 },
                 {
-                    label: 'state2',
+                    label: 'state7',
                     range: {
-                        startTime: 150,
-                        endTime: 155
+                        start: 3265,
+                        end: 3455
                     }
                 },
                 {
-                    label: 'state3',
+                    label: 'state8',
                     range: {
-                        startTime: 265,
-                        endTime: 455
+                        start: 4265,
+                        end: 4455
                     }
                 }
             ]
@@ -98,22 +116,22 @@ const timeGraphEntry2: TimeGraphEntry = {
                 {
                     label: 'state2.1',
                     range: {
-                        startTime: 145,
-                        endTime: 255
+                        start: 145,
+                        end: 255
                     }
                 },
                 {
                     label: 'state2.2',
                     range: {
-                        startTime: 265,
-                        endTime: 275
+                        start: 265,
+                        end: 275
                     }
                 },
                 {
                     label: 'state2.3',
                     range: {
-                        startTime: 365,
-                        endTime: 555
+                        start: 365,
+                        end: 555
                     }
                 }
             ]
@@ -121,7 +139,38 @@ const timeGraphEntry2: TimeGraphEntry = {
     ]
 }
 
-const chart = new TimeGraph('main');
-chart.setEntry(timeGraphEntry);
-chart.setEntry(timeGraphEntry2);
-chart.render();
\ No newline at end of file
+
+
+// const tg = new TimeGraph('main');
+
+// const timeAxis = new TimeAxis({
+//     id: 'timeAxis',
+//     height: 30,
+//     width: 6000
+// });
+// tg.setTimeAxis(timeAxis)
+
+// r1 = new TimeGraphRow(row-config)
+// r2 = new TimeGraphRow(row-config)
+
+// tg.addRows([r1, r2])
+// tg.removeRows([r2])
+
+// s1 = new TimeGraphState(state-config)
+// s2 = new TimeGraphState(state-config)
+
+// r = tg.findRow(row-id)
+// r.addStates([s1])
+// r1.addStates([s2])
+
+const chart = new TimeGraph('main', timeGraph);
+chart.render();
+
+
+export type TestFieldId = 'test0' | 'test1' | 'test2' | 'test3' | 'test4' | 'test5' | 'test6' | 'test7' | 'test8' | 'test9';
+export function tgTest(id: TestFieldId, val:string){
+    const f = document.getElementById(id);
+    if(f){
+        f.innerHTML = val;
+    }
+}
\ No newline at end of file
diff --git a/src/speedscope/gl/canvas-context.ts b/src/speedscope/gl/canvas-context.ts
deleted file mode 100644
index 98bf8f9..0000000
--- a/src/speedscope/gl/canvas-context.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import {Graphics, WebGL} from './graphics'
-import {RectangleBatchRenderer} from './rectangle-batch-renderer'
-import {TextureRenderer} from './texture-renderer'
-import {Rect, Vec2} from '../lib/math'
-import {ViewportRectangleRenderer} from './overlay-rectangle-renderer'
-import {FlamechartColorPassRenderer} from './flamechart-color-pass-renderer'
-
-type FrameCallback = () => void
-
-export class CanvasContext {
-  public readonly gl: WebGL.Context
-  public readonly rectangleBatchRenderer: RectangleBatchRenderer
-  public readonly textureRenderer: TextureRenderer
-  public readonly viewportRectangleRenderer: ViewportRectangleRenderer
-  public readonly flamechartColorPassRenderer: FlamechartColorPassRenderer
-
-  constructor(canvas: HTMLCanvasElement) {
-    this.gl = new WebGL.Context(canvas)
-    this.rectangleBatchRenderer = new RectangleBatchRenderer(this.gl)
-    this.textureRenderer = new TextureRenderer(this.gl)
-    this.viewportRectangleRenderer = new ViewportRectangleRenderer(this.gl)
-    this.flamechartColorPassRenderer = new FlamechartColorPassRenderer(this.gl)
-
-    const webGLInfo = this.gl.getWebGLInfo()
-    if (webGLInfo) {
-      console.log(
-        `WebGL initialized. renderer: ${webGLInfo.renderer}, vendor: ${
-          webGLInfo.vendor
-        }, version: ${webGLInfo.version}`,
-      )
-    }
-    ;(window as any)['testContextLoss'] = () => {
-      this.gl.testContextLoss()
-    }
-  }
-
-  private animationFrameRequest: number | null = null
-  private beforeFrameHandlers = new Set()
-  addBeforeFrameHandler(callback: FrameCallback) {
-    this.beforeFrameHandlers.add(callback)
-  }
-  removeBeforeFrameHandler(callback: FrameCallback) {
-    this.beforeFrameHandlers.delete(callback)
-  }
-  requestFrame() {
-    if (!this.animationFrameRequest) {
-      this.animationFrameRequest = requestAnimationFrame(this.onBeforeFrame)
-    }
-  }
-  private onBeforeFrame = () => {
-    this.animationFrameRequest = null
-    this.gl.setViewport(0, 0, this.gl.renderTargetWidthInPixels, this.gl.renderTargetHeightInPixels)
-    this.gl.clear(new Graphics.Color(1, 1, 1, 1))
-
-    for (const handler of this.beforeFrameHandlers) {
-      handler()
-    }
-  }
-
-  setViewport(physicalBounds: Rect, cb: () => void): void {
-    const {origin, size} = physicalBounds
-    let viewportBefore = this.gl.viewport
-    this.gl.setViewport(origin.x, origin.y, size.x, size.y)
-
-    cb()
-
-    let {x, y, width, height} = viewportBefore
-    this.gl.setViewport(x, y, width, height)
-  }
-
-  renderBehind(el: Element, cb: () => void) {
-    const bounds = el.getBoundingClientRect()
-    const physicalBounds = new Rect(
-      new Vec2(bounds.left * window.devicePixelRatio, bounds.top * window.devicePixelRatio),
-      new Vec2(bounds.width * window.devicePixelRatio, bounds.height * window.devicePixelRatio),
-    )
-
-    this.setViewport(physicalBounds, cb)
-  }
-}
diff --git a/src/speedscope/gl/flamechart-color-pass-renderer.ts b/src/speedscope/gl/flamechart-color-pass-renderer.ts
deleted file mode 100644
index 06d2884..0000000
--- a/src/speedscope/gl/flamechart-color-pass-renderer.ts
+++ /dev/null
@@ -1,165 +0,0 @@
-import {Vec2, Rect, AffineTransform} from '../lib/math'
-import {Graphics} from './graphics'
-import {setUniformAffineTransform} from './utils'
-
-const vertexFormat = new Graphics.VertexFormat()
-vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
-vertexFormat.add('uv', Graphics.AttributeType.FLOAT, 2)
-
-const vert = `
-  uniform mat3 uvTransform;
-  uniform mat3 positionTransform;
-
-  attribute vec2 position;
-  attribute vec2 uv;
-  varying vec2 vUv;
-
-  void main() {
-    vUv = (uvTransform * vec3(uv, 1)).xy;
-    gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
-  }
-`
-
-const frag = `
-  precision mediump float;
-
-  uniform vec2 uvSpacePixelSize;
-  uniform float renderOutlines;
-
-  varying vec2 vUv;
-  uniform sampler2D colorTexture;
-
-  // https://en.wikipedia.org/wiki/HSL_and_HSV#From_luma/chroma/hue
-  vec3 hcl2rgb(float H, float C, float L) {
-    float hPrime = H / 60.0;
-    float X = C * (1.0 - abs(mod(hPrime, 2.0) - 1.0));
-    vec3 RGB =
-      hPrime < 1.0 ? vec3(C, X, 0) :
-      hPrime < 2.0 ? vec3(X, C, 0) :
-      hPrime < 3.0 ? vec3(0, C, X) :
-      hPrime < 4.0 ? vec3(0, X, C) :
-      hPrime < 5.0 ? vec3(X, 0, C) :
-      vec3(C, 0, X);
-
-    float m = L - dot(RGB, vec3(0.30, 0.59, 0.11));
-    return RGB + vec3(m, m, m);
-  }
-
-  float triangle(float x) {
-    return 2.0 * abs(fract(x) - 0.5) - 1.0;
-  }
-
-  vec3 colorForBucket(float t) {
-    float x = triangle(30.0 * t);
-    float H = 360.0 * (0.9 * t);
-    float C = 0.25 + 0.2 * x;
-    float L = 0.80 - 0.15 * x;
-    return hcl2rgb(H, C, L);
-  }
-
-  void main() {
-    vec4 here = texture2D(colorTexture, vUv);
-
-    if (here.z == 0.0) {
-      // Background color
-      gl_FragColor = vec4(0, 0, 0, 0);
-      return;
-    }
-
-    // Sample the 4 surrounding pixels in the depth texture to determine
-    // if we should draw a boundary here or not.
-    vec4 N = texture2D(colorTexture, vUv + vec2(0, uvSpacePixelSize.y));
-    vec4 E = texture2D(colorTexture, vUv + vec2(uvSpacePixelSize.x, 0));
-    vec4 S = texture2D(colorTexture, vUv + vec2(0, -uvSpacePixelSize.y));
-    vec4 W = texture2D(colorTexture, vUv + vec2(-uvSpacePixelSize.x, 0));
-
-    // NOTE: For outline checks, we intentionally check both the right
-    // and the left to determine if we're an edge. If a rectangle is a single
-    // pixel wide, we don't want to render it as an outline, so this method
-    // of checking ensures that we don't outline single physical-space
-    // pixel width rectangles.
-    if (
-      renderOutlines > 0.0 &&
-      (
-        here.y == N.y && here.y != S.y || // Top edge
-        here.y == S.y && here.y != N.y || // Bottom edge
-        here.x == E.x && here.x != W.x || // Left edge
-        here.x == W.x && here.x != E.x
-      )
-    ) {
-      // We're on an edge! Draw transparent.
-      gl_FragColor = vec4(0, 0, 0, 0);
-    } else {
-      // Not on an edge. Draw the appropriate color.
-      gl_FragColor = vec4(colorForBucket(here.z), here.a);
-    }
-  }
-`
-
-export interface FlamechartColorPassRenderProps {
-  rectInfoTexture: Graphics.Texture
-  renderOutlines: boolean
-  srcRect: Rect
-  dstRect: Rect
-}
-
-export class FlamechartColorPassRenderer {
-  private material: Graphics.Material
-  private buffer: Graphics.VertexBuffer
-
-  constructor(private gl: Graphics.Context) {
-    const vertices = [
-      {pos: [-1, 1], uv: [0, 1]},
-      {pos: [1, 1], uv: [1, 1]},
-      {pos: [-1, -1], uv: [0, 0]},
-      {pos: [1, -1], uv: [1, 0]},
-    ]
-    const floats: number[] = []
-    for (let v of vertices) {
-      floats.push(v.pos[0])
-      floats.push(v.pos[1])
-      floats.push(v.uv[0])
-      floats.push(v.uv[1])
-    }
-
-    this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
-    this.buffer.uploadFloats(floats)
-    this.material = gl.createMaterial(vertexFormat, vert, frag)
-  }
-
-  render(props: FlamechartColorPassRenderProps) {
-    const {srcRect, rectInfoTexture} = props
-    const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
-      .times(AffineTransform.withScale(new Vec2(1, -1)))
-      .times(
-        AffineTransform.betweenRects(
-          new Rect(Vec2.zero, new Vec2(rectInfoTexture.width, rectInfoTexture.height)),
-          Rect.unit,
-        ),
-      )
-    const uvRect = physicalToUV.transformRect(srcRect)
-    const uvTransform = AffineTransform.betweenRects(Rect.unit, uvRect)
-
-    const {dstRect} = props
-    const viewportSize = new Vec2(this.gl.viewport.width, this.gl.viewport.height)
-
-    const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
-      AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
-    )
-    const ndcRect = physicalToNDC.transformRect(dstRect)
-    const positionTransform = AffineTransform.betweenRects(Rect.NDC, ndcRect)
-
-    const uvSpacePixelSize = Vec2.unit.dividedByPointwise(
-      new Vec2(props.rectInfoTexture.width, props.rectInfoTexture.height),
-    )
-
-    this.material.setUniformSampler('colorTexture', props.rectInfoTexture, 0)
-    setUniformAffineTransform(this.material, 'uvTransform', uvTransform)
-    this.material.setUniformFloat('renderOutlines', props.renderOutlines ? 1.0 : 0.0)
-    this.material.setUniformVec2('uvSpacePixelSize', uvSpacePixelSize.x, uvSpacePixelSize.y)
-    setUniformAffineTransform(this.material, 'positionTransform', positionTransform)
-
-    this.gl.setUnpremultipliedBlendState()
-    this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
-  }
-}
diff --git a/src/speedscope/gl/flamechart-renderer.ts b/src/speedscope/gl/flamechart-renderer.ts
deleted file mode 100644
index 4bce19d..0000000
--- a/src/speedscope/gl/flamechart-renderer.ts
+++ /dev/null
@@ -1,380 +0,0 @@
-import {Flamechart} from '../lib/flamechart'
-import {RectangleBatch, RectangleBatchRenderer} from './rectangle-batch-renderer'
-import {Vec2, Rect, AffineTransform} from '../lib/math'
-import {Color} from '../lib/color'
-import {KeyedSet} from '../lib/utils'
-import {RowAtlas} from './row-atlas'
-import {Graphics} from './graphics'
-import {FlamechartColorPassRenderer} from './flamechart-color-pass-renderer'
-import {renderInto} from './utils'
-
-const MAX_BATCH_SIZE = 10000
-
-interface RangeTreeNode {
-  getBounds(): Rect
-  getRectCount(): number
-  getChildren(): RangeTreeNode[]
-  forEachLeafNodeWithinBounds(configSpaceBounds: Rect, cb: (leaf: RangeTreeLeafNode) => void): void
-}
-
-class RangeTreeLeafNode implements RangeTreeNode {
-  private children: RangeTreeNode[] = []
-
-  constructor(
-    private batch: RectangleBatch,
-    private bounds: Rect,
-    private numPrecedingRectanglesInRow: number,
-  ) {}
-
-  getBatch() {
-    return this.batch
-  }
-  getBounds() {
-    return this.bounds
-  }
-  getRectCount() {
-    return this.batch.getRectCount()
-  }
-  getChildren() {
-    return this.children
-  }
-  getParity() {
-    return this.numPrecedingRectanglesInRow % 2
-  }
-  forEachLeafNodeWithinBounds(configSpaceBounds: Rect, cb: (leaf: RangeTreeLeafNode) => void) {
-    if (!this.bounds.hasIntersectionWith(configSpaceBounds)) return
-    cb(this)
-  }
-}
-
-class RangeTreeInteriorNode implements RangeTreeNode {
-  private rectCount: number = 0
-  private bounds: Rect
-  constructor(private children: RangeTreeNode[]) {
-    if (children.length === 0) {
-      throw new Error('Empty interior node')
-    }
-    let minLeft = Infinity
-    let maxRight = -Infinity
-    let minTop = Infinity
-    let maxBottom = -Infinity
-    for (let child of children) {
-      this.rectCount += child.getRectCount()
-      const bounds = child.getBounds()
-      minLeft = Math.min(minLeft, bounds.left())
-      maxRight = Math.max(maxRight, bounds.right())
-      minTop = Math.min(minTop, bounds.top())
-      maxBottom = Math.max(maxBottom, bounds.bottom())
-    }
-    this.bounds = new Rect(
-      new Vec2(minLeft, minTop),
-      new Vec2(maxRight - minLeft, maxBottom - minTop),
-    )
-  }
-
-  getBounds() {
-    return this.bounds
-  }
-  getRectCount() {
-    return this.rectCount
-  }
-  getChildren() {
-    return this.children
-  }
-
-  forEachLeafNodeWithinBounds(configSpaceBounds: Rect, cb: (leaf: RangeTreeLeafNode) => void) {
-    if (!this.bounds.hasIntersectionWith(configSpaceBounds)) return
-    for (let child of this.children) {
-      child.forEachLeafNodeWithinBounds(configSpaceBounds, cb)
-    }
-  }
-}
-
-export interface FlamechartRendererProps {
-  configSpaceSrcRect: Rect
-  physicalSpaceDstRect: Rect
-  renderOutlines: boolean
-}
-
-interface FlamechartRowAtlasKeyInfo {
-  stackDepth: number
-  zoomLevel: number
-  index: number
-}
-
-export class FlamechartRowAtlasKey {
-  readonly stackDepth: number
-  readonly zoomLevel: number
-  readonly index: number
-
-  get key() {
-    return `${this.stackDepth}_${this.index}_${this.zoomLevel}`
-  }
-  private constructor(options: FlamechartRowAtlasKeyInfo) {
-    this.stackDepth = options.stackDepth
-    this.zoomLevel = options.zoomLevel
-    this.index = options.index
-  }
-  static getOrInsert(set: KeyedSet, info: FlamechartRowAtlasKeyInfo) {
-    return set.getOrInsert(new FlamechartRowAtlasKey(info))
-  }
-}
-
-export interface FlamechartRendererOptions {
-  inverted: boolean
-}
-
-export class FlamechartRenderer {
-  private layers: RangeTreeNode[] = []
-
-  constructor(
-    private gl: Graphics.Context,
-    private rowAtlas: RowAtlas,
-    private flamechart: Flamechart,
-    private rectangleBatchRenderer: RectangleBatchRenderer,
-    private colorPassRenderer: FlamechartColorPassRenderer,
-    private options: FlamechartRendererOptions = {inverted: false},
-  ) {
-    const nLayers = flamechart.getLayers().length
-    for (let stackDepth = 0; stackDepth < nLayers; stackDepth++) {
-      const leafNodes: RangeTreeLeafNode[] = []
-      const y = options.inverted ? nLayers - 1 - stackDepth : stackDepth
-
-      let minLeft = Infinity
-      let maxRight = -Infinity
-      let batch = new RectangleBatch(this.gl)
-
-      let rectCount = 0
-
-      const layer = flamechart.getLayers()[stackDepth]
-
-      for (let i = 0; i < layer.length; i++) {
-        const frame = layer[i]
-        if (batch.getRectCount() >= MAX_BATCH_SIZE) {
-          leafNodes.push(
-            new RangeTreeLeafNode(
-              batch,
-              new Rect(new Vec2(minLeft, y), new Vec2(maxRight - minLeft, 1)),
-              rectCount,
-            ),
-          )
-          minLeft = Infinity
-          maxRight = -Infinity
-          batch = new RectangleBatch(this.gl)
-        }
-        const configSpaceBounds = new Rect(
-          new Vec2(frame.start, y),
-          new Vec2(frame.end - frame.start, 1),
-        )
-        minLeft = Math.min(minLeft, configSpaceBounds.left())
-        maxRight = Math.max(maxRight, configSpaceBounds.right())
-
-        // We'll use the red channel to indicate the index to allow
-        // us to separate adjacent rectangles within a row from one another,
-        // the green channel to indicate the row,
-        // and the blue channel to indicate the color bucket to render.
-        // We add one to each so we have zero reserved for the background color.
-        const color = new Color(
-          (1 + i % 255) / 256,
-          (1 + stackDepth % 255) / 256,
-          (1 + this.flamechart.getColorBucketForFrame(frame.node.frame)) / 256,
-        )
-        batch.addRect(configSpaceBounds, color)
-        rectCount++
-      }
-
-      if (batch.getRectCount() > 0) {
-        leafNodes.push(
-          new RangeTreeLeafNode(
-            batch,
-            new Rect(new Vec2(minLeft, y), new Vec2(maxRight - minLeft, 1)),
-            rectCount,
-          ),
-        )
-      }
-
-      // TODO(jlfwong): Making this into a binary tree
-      // range than a tree of always-height-two might make this run faster
-      this.layers.push(new RangeTreeInteriorNode(leafNodes))
-    }
-  }
-
-  private rectInfoTexture: Graphics.Texture | null = null
-  getRectInfoTexture(width: number, height: number): Graphics.Texture {
-    if (this.rectInfoTexture) {
-      const texture = this.rectInfoTexture
-      if (texture.width != width || texture.height != height) {
-        texture.resize(width, height)
-      }
-    } else {
-      this.rectInfoTexture = this.gl.createTexture(
-        Graphics.TextureFormat.NEAREST_CLAMP,
-        width,
-        height,
-      )
-    }
-    return this.rectInfoTexture
-  }
-
-  private rectInfoRenderTarget: Graphics.RenderTarget | null = null
-  getRectInfoRenderTarget(width: number, height: number): Graphics.RenderTarget {
-    const texture = this.getRectInfoTexture(width, height)
-    if (this.rectInfoRenderTarget) {
-      if (this.rectInfoRenderTarget.texture != texture) {
-        this.rectInfoRenderTarget.texture.free()
-        this.rectInfoRenderTarget.setColor(texture)
-      }
-    }
-    if (!this.rectInfoRenderTarget) {
-      this.rectInfoRenderTarget = this.gl.createRenderTarget(texture)
-    }
-    return this.rectInfoRenderTarget
-  }
-
-  free() {
-    if (this.rectInfoRenderTarget) {
-      this.rectInfoRenderTarget.free()
-    }
-    if (this.rectInfoTexture) {
-      this.rectInfoTexture.free()
-    }
-  }
-
-  private atlasKeys = new KeyedSet()
-
-  configSpaceBoundsForKey(key: FlamechartRowAtlasKey): Rect {
-    const {stackDepth, zoomLevel, index} = key
-    const configSpaceContentWidth = this.flamechart.getTotalWeight()
-
-    const width = configSpaceContentWidth / Math.pow(2, zoomLevel)
-
-    const nLayers = this.flamechart.getLayers().length
-    const y = this.options.inverted ? nLayers - 1 - stackDepth : stackDepth
-    return new Rect(new Vec2(width * index, y), new Vec2(width, 1))
-  }
-
-  render(props: FlamechartRendererProps) {
-    const {configSpaceSrcRect, physicalSpaceDstRect} = props
-
-    const atlasKeysToRender: FlamechartRowAtlasKey[] = []
-
-    // We want to render the lowest resolution we can while still guaranteeing that the
-    // atlas line is higher resolution than its corresponding destination rectangle on
-    // the screen.
-    const configToPhysical = AffineTransform.betweenRects(configSpaceSrcRect, physicalSpaceDstRect)
-    if (configSpaceSrcRect.isEmpty()) {
-      // Prevent an infinite loop
-      return
-    }
-
-    let zoomLevel = 0
-    while (true) {
-      const key = FlamechartRowAtlasKey.getOrInsert(this.atlasKeys, {
-        stackDepth: 0,
-        zoomLevel,
-        index: 0,
-      })
-      const configSpaceBounds = this.configSpaceBoundsForKey(key)
-      const physicalBounds = configToPhysical.transformRect(configSpaceBounds)
-      if (physicalBounds.width() < this.rowAtlas.getResolution()) {
-        break
-      }
-      zoomLevel++
-    }
-
-    const top = Math.max(0, Math.floor(configSpaceSrcRect.top()))
-    const bottom = Math.min(this.layers.length, Math.ceil(configSpaceSrcRect.bottom()))
-
-    const configSpaceContentWidth = this.flamechart.getTotalWeight()
-    const numAtlasEntriesPerLayer = Math.pow(2, zoomLevel)
-    const left = Math.floor(
-      numAtlasEntriesPerLayer * configSpaceSrcRect.left() / configSpaceContentWidth,
-    )
-    const right = Math.ceil(
-      numAtlasEntriesPerLayer * configSpaceSrcRect.right() / configSpaceContentWidth,
-    )
-
-    const nLayers = this.flamechart.getLayers().length
-
-    for (let y = top; y < bottom; y++) {
-      for (let index = left; index <= right; index++) {
-        const stackDepth = this.options.inverted ? nLayers - 1 - y : y
-        const key = FlamechartRowAtlasKey.getOrInsert(this.atlasKeys, {
-          stackDepth,
-          zoomLevel,
-          index,
-        })
-        const configSpaceBounds = this.configSpaceBoundsForKey(key)
-        if (!configSpaceBounds.hasIntersectionWith(configSpaceSrcRect)) continue
-        atlasKeysToRender.push(key)
-      }
-    }
-
-    // TODO(jlfwong): When I switched the GL backend from regl to the port from
-    // evanw/sky, rendering uncached even for massive documents seemed fast
-    // enough. It's possible that the row cache is now unnecessary, but I'll
-    // leave it around for now since it's not causing issues.
-
-    const cacheCapacity = this.rowAtlas.getCapacity()
-    const keysToRenderCached = atlasKeysToRender.slice(0, cacheCapacity)
-    const keysToRenderUncached = atlasKeysToRender.slice(cacheCapacity)
-
-    // Fill the cache
-    this.rowAtlas.writeToAtlasIfNeeded(keysToRenderCached, (textureDstRect, key) => {
-      const configSpaceBounds = this.configSpaceBoundsForKey(key)
-      this.layers[key.stackDepth].forEachLeafNodeWithinBounds(configSpaceBounds, leaf => {
-        this.rectangleBatchRenderer.render({
-          batch: leaf.getBatch(),
-          configSpaceSrcRect: configSpaceBounds,
-          physicalSpaceDstRect: textureDstRect,
-        })
-      })
-    })
-
-    const renderTarget = this.getRectInfoRenderTarget(
-      physicalSpaceDstRect.width(),
-      physicalSpaceDstRect.height(),
-    )
-
-    renderInto(this.gl, renderTarget, () => {
-      this.gl.clear(new Graphics.Color(0, 0, 0, 0))
-
-      const viewportRect = new Rect(
-        Vec2.zero,
-        new Vec2(this.gl.viewport.width, this.gl.viewport.height),
-      )
-      const configToViewport = AffineTransform.betweenRects(configSpaceSrcRect, viewportRect)
-
-      // Render from the cache
-      for (let key of keysToRenderCached) {
-        const configSpaceSrcRect = this.configSpaceBoundsForKey(key)
-        this.rowAtlas.renderViaAtlas(key, configToViewport.transformRect(configSpaceSrcRect))
-      }
-
-      // Render entries that didn't make it into the cache
-      for (let key of keysToRenderUncached) {
-        const configSpaceBounds = this.configSpaceBoundsForKey(key)
-        const physicalBounds = configToViewport.transformRect(configSpaceBounds)
-        this.layers[key.stackDepth].forEachLeafNodeWithinBounds(configSpaceBounds, leaf => {
-          this.rectangleBatchRenderer.render({
-            batch: leaf.getBatch(),
-            configSpaceSrcRect: configSpaceBounds,
-            physicalSpaceDstRect: physicalBounds,
-          })
-        })
-      }
-    })
-
-    const rectInfoTexture = this.getRectInfoTexture(
-      physicalSpaceDstRect.width(),
-      physicalSpaceDstRect.height(),
-    )
-
-    this.colorPassRenderer.render({
-      rectInfoTexture,
-      srcRect: new Rect(Vec2.zero, new Vec2(rectInfoTexture.width, rectInfoTexture.height)),
-      dstRect: physicalSpaceDstRect,
-      renderOutlines: props.renderOutlines,
-    })
-  }
-}
diff --git a/src/speedscope/gl/graphics.ts b/src/speedscope/gl/graphics.ts
deleted file mode 100644
index 57edd08..0000000
--- a/src/speedscope/gl/graphics.ts
+++ /dev/null
@@ -1,1373 +0,0 @@
-// This is a port of the GPU APIs from https://github.com/evanw/sky from Skew to
-// TypeScript.
-//
-// The MIT License (MIT)
-// Original work Copyright (c) 2016 Evan Wallace
-// Modified work Copyright (c) 2018 Jamie Wong
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-// SOFTWARE.
-
-// NOTE: This file intentionally has no dependencies.
-
-// Dependencies & polyfills for import from skew
-const RELEASE =
-  typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'production'
-
-function assert(condition: boolean) {
-  if (!RELEASE) {
-    if (!condition) throw new Error('Assertion failed.')
-  }
-}
-
-function appendOne(ts: T[], t: T): void {
-  if (ts.indexOf(t) === -1) ts.push(t)
-}
-
-function removeOne(ts: T[], t: T): void {
-  const index = ts.indexOf(t)
-  if (index !== -1) ts.splice(index, 1)
-}
-
-function TEXTURE_N(gl: WebGLRenderingContext, index: number) {
-  assert(index >= 0 && index <= 31)
-  return (gl.TEXTURE0 + index) as GLenum
-}
-
-export namespace Graphics {
-  export class Rect {
-    constructor(
-      public x: number = 0,
-      public y: number = 0,
-      public width: number = 0,
-      public height: number = 0,
-    ) {}
-
-    set(x: number, y: number, width: number, height: number) {
-      this.x = x
-      this.y = y
-      this.width = width
-      this.height = height
-    }
-
-    equals(other: Rect) {
-      return (
-        this.x === other.x &&
-        this.y === other.y &&
-        this.width === other.width &&
-        this.height === other.height
-      )
-    }
-  }
-
-  export class Color {
-    constructor(
-      public redF: number,
-      public greenF: number,
-      public blueF: number,
-      public alphaF: number,
-    ) {}
-
-    static TRANSPARENT = new Color(0, 0, 0, 0)
-  }
-
-  // Converted from https://github.com/evanw/sky/blob/c72de77/src/graphics/context.sk
-  export enum BlendOperation {
-    ZERO = 0,
-    ONE = 1,
-
-    SOURCE_COLOR = 2,
-    TARGET_COLOR = 3,
-    INVERSE_SOURCE_COLOR = 4,
-    INVERSE_TARGET_COLOR = 5,
-
-    SOURCE_ALPHA = 6,
-    TARGET_ALPHA = 7,
-    INVERSE_SOURCE_ALPHA = 8,
-    INVERSE_TARGET_ALPHA = 9,
-
-    CONSTANT = 10,
-    INVERSE_CONSTANT = 11,
-  }
-
-  export enum Primitive {
-    TRIANGLES,
-    TRIANGLE_STRIP,
-  }
-
-  export abstract class Context {
-    abstract addContextResetHandler(callback: () => void): void
-    abstract beginFrame(): void
-    abstract clear(color: Color): void
-
-    abstract createMaterial(
-      format: VertexFormat,
-      vertexSource: string,
-      fragmentSource: string,
-    ): Material
-    abstract createTexture(
-      format: TextureFormat,
-      width: number,
-      height: number,
-      pixels?: Uint8Array,
-    ): Texture
-    abstract createRenderTarget(texture: Texture): RenderTarget
-    abstract createVertexBuffer(byteCount: number): VertexBuffer
-    abstract currentRenderTarget: RenderTarget | null
-    abstract draw(primitive: Primitive, material: Material, vertices: VertexBuffer): void
-    abstract endFrame(): void
-    abstract removeContextResetHandler(callback: () => void): void
-    abstract resize(
-      widthInPixels: number,
-      heightInPixels: number,
-      widthInAppUnits: number,
-      heightInAppUnits: number,
-    ): void
-    abstract setRenderTarget(renderTarget: RenderTarget | null): void
-    abstract setViewport(x: number, y: number, width: number, height: number): void
-    abstract viewport: Rect
-    abstract widthInPixels: number
-    abstract heightInPixels: number
-
-    abstract renderTargetHeightInPixels: number
-    abstract renderTargetWidthInPixels: number
-
-    abstract setBlendState(source: BlendOperation, target: BlendOperation): void
-    setCopyBlendState() {
-      this.setBlendState(BlendOperation.ONE, BlendOperation.ZERO)
-    }
-    setAddBlendState() {
-      this.setBlendState(BlendOperation.ONE, BlendOperation.ONE)
-    }
-    setPremultipliedBlendState() {
-      this.setBlendState(BlendOperation.ONE, BlendOperation.INVERSE_SOURCE_ALPHA)
-    }
-    setUnpremultipliedBlendState() {
-      this.setBlendState(BlendOperation.SOURCE_ALPHA, BlendOperation.INVERSE_SOURCE_ALPHA)
-    }
-  }
-
-  export interface Material {
-    context: Context
-    format: VertexFormat
-    fragmentSource: string
-    vertexSource: string
-    setUniformFloat(name: string, x: number): void
-    setUniformInt(name: string, x: number): void
-    setUniformVec2(name: string, x: number, y: number): void
-    setUniformVec3(name: string, x: number, y: number, z: number): void
-    setUniformVec4(name: string, x: number, y: number, z: number, w: number): void
-    setUniformMat3(
-      name: string,
-      m00: number,
-      m01: number,
-      m02: number,
-      m10: number,
-      m11: number,
-      m12: number,
-      m20: number,
-      m21: number,
-      m22: number,
-    ): void
-    setUniformSampler(name: string, texture: Texture, index: number): void
-  }
-
-  export enum AttributeType {
-    FLOAT,
-    BYTE,
-  }
-
-  export function attributeByteLength(type: AttributeType) {
-    return type == AttributeType.FLOAT ? 4 : 1
-  }
-
-  export class Attribute {
-    constructor(
-      readonly name: string,
-      readonly type: AttributeType,
-      readonly count: number,
-      readonly byteOffset: number,
-    ) {}
-  }
-
-  export class VertexFormat {
-    private _attributes: Attribute[] = []
-    private _stride = 0
-
-    get attributes() {
-      return this._attributes
-    }
-    get stride() {
-      return this._stride
-    }
-
-    add(name: string, type: AttributeType, count: number): VertexFormat {
-      this.attributes.push(new Attribute(name, type, count, this.stride))
-      this._stride += count * attributeByteLength(type)
-      return this
-    }
-  }
-
-  export abstract class VertexBuffer {
-    abstract byteCount: number
-    abstract context: Context
-    abstract move(sourceByteOffset: number, targetByteOffset: number, byteCount: number): void
-    abstract upload(bytes: Uint8Array, byteOffset?: number): void
-    uploadFloat32Array(floats: Float32Array) {
-      this.upload(new Uint8Array(floats.buffer), 0)
-    }
-    uploadFloats(floats: number[]) {
-      this.uploadFloat32Array(new Float32Array(floats))
-    }
-    abstract free(): void
-  }
-
-  export enum PixelFilter {
-    NEAREST,
-    LINEAR,
-  }
-
-  export enum PixelWrap {
-    REPEAT,
-    CLAMP,
-  }
-
-  export class TextureFormat {
-    constructor(
-      readonly minFilter: PixelFilter,
-      readonly magFilter: PixelFilter,
-      readonly wrap: PixelWrap,
-    ) {}
-
-    static LINEAR_CLAMP = new TextureFormat(PixelFilter.LINEAR, PixelFilter.LINEAR, PixelWrap.CLAMP)
-    static LINEAR_MIN_NEAREST_MAG_CLAMP = new TextureFormat(
-      PixelFilter.LINEAR,
-      PixelFilter.NEAREST,
-      PixelWrap.CLAMP,
-    )
-    static NEAREST_CLAMP = new TextureFormat(
-      PixelFilter.NEAREST,
-      PixelFilter.NEAREST,
-      PixelWrap.CLAMP,
-    )
-  }
-
-  export interface Texture {
-    context: Context
-    format: TextureFormat
-    width: number
-    height: number
-    resize(width: number, height: number, pixels?: Uint8Array): void
-    setFormat(format: TextureFormat): void
-    free(): void
-  }
-
-  export interface RenderTarget {
-    context: Context
-    texture: Texture
-    setColor(texture: Texture): void
-    free(): void
-  }
-}
-
-// Converted from https://github.com/evanw/sky/blob/c72de77/src/browser/context.sk
-export namespace WebGL {
-  export class Context extends Graphics.Context {
-    private _attributeCount = 0
-    private _blendOperationMap: {[key: number]: GLenum}
-    private _blendOperations = 0
-    private _contextResetHandlers: (() => void)[] = []
-    private _currentClearColor = Graphics.Color.TRANSPARENT
-    private _currentRenderTarget: RenderTarget | null = null
-    private _defaultViewport = new Graphics.Rect()
-    private _forceStateUpdate = true
-    private _generation = 1
-    private _gl: WebGLRenderingContext
-    private _height = 0
-    private _oldBlendOperations = 0
-    private _oldRenderTarget: RenderTarget | null = null
-    private _oldViewport = new Graphics.Rect()
-    private _width = 0
-
-    get widthInPixels() {
-      return this._width
-    }
-    get heightInPixels() {
-      return this._height
-    }
-
-    constructor(canvas: HTMLCanvasElement = document.createElement('canvas')) {
-      super()
-      let gl = canvas.getContext('webgl', {
-        alpha: false,
-        antialias: false,
-        depth: false,
-        preserveDrawingBuffer: false,
-        stencil: false,
-      })
-
-      if (gl == null) {
-        throw new Error('Setup failure')
-      }
-
-      this._gl = gl
-      let style = canvas.style
-      canvas.width = 0
-      canvas.height = 0
-      style.width = style.height = '0'
-
-      canvas.addEventListener('webglcontextlost', (e: Event) => {
-        e.preventDefault()
-      })
-
-      canvas.addEventListener('webglcontextrestored', this.handleWebglContextRestored)
-
-      // Using maps makes these compact in release
-      this._blendOperationMap = {
-        [Graphics.BlendOperation.ZERO]: this._gl.ZERO,
-        [Graphics.BlendOperation.ONE]: this._gl.ONE,
-
-        [Graphics.BlendOperation.SOURCE_COLOR]: this._gl.SRC_COLOR,
-        [Graphics.BlendOperation.TARGET_COLOR]: this._gl.DST_COLOR,
-        [Graphics.BlendOperation.INVERSE_SOURCE_COLOR]: this._gl.ONE_MINUS_SRC_COLOR,
-        [Graphics.BlendOperation.INVERSE_TARGET_COLOR]: this._gl.ONE_MINUS_DST_COLOR,
-
-        [Graphics.BlendOperation.SOURCE_ALPHA]: this._gl.SRC_ALPHA,
-        [Graphics.BlendOperation.TARGET_ALPHA]: this._gl.DST_ALPHA,
-        [Graphics.BlendOperation.INVERSE_SOURCE_ALPHA]: this._gl.ONE_MINUS_SRC_ALPHA,
-        [Graphics.BlendOperation.INVERSE_TARGET_ALPHA]: this._gl.ONE_MINUS_DST_ALPHA,
-
-        [Graphics.BlendOperation.CONSTANT]: this._gl.CONSTANT_COLOR,
-        [Graphics.BlendOperation.INVERSE_CONSTANT]: this._gl.ONE_MINUS_CONSTANT_COLOR,
-      }
-    }
-
-    private handleWebglContextRestored = () => {
-      this._attributeCount = 0
-      this._currentClearColor = Graphics.Color.TRANSPARENT
-      this._forceStateUpdate = true
-      this._generation++
-      for (let handler of this._contextResetHandlers) {
-        handler()
-      }
-    }
-
-    public testContextLoss() {
-      this.handleWebglContextRestored()
-    }
-
-    get gl() {
-      return this._gl
-    }
-    get generation() {
-      return this._generation
-    }
-    addContextResetHandler(callback: () => void) {
-      appendOne(this._contextResetHandlers, callback)
-    }
-    removeContextResetHandler(callback: () => void) {
-      removeOne(this._contextResetHandlers, callback)
-    }
-
-    get currentRenderTarget() {
-      return this._currentRenderTarget
-    }
-
-    beginFrame() {
-      this.setRenderTarget(null)
-    }
-
-    endFrame() {}
-
-    setBlendState(source: Graphics.BlendOperation, target: Graphics.BlendOperation) {
-      this._blendOperations = Context._packBlendModes(source, target)
-    }
-
-    setViewport(x: number, y: number, width: number, height: number) {
-      ;(this._currentRenderTarget != null
-        ? this._currentRenderTarget.viewport
-        : this._defaultViewport
-      ).set(x, y, width, height)
-    }
-
-    get viewport() {
-      return this._currentRenderTarget != null
-        ? this._currentRenderTarget.viewport
-        : this._defaultViewport
-    }
-
-    get renderTargetWidthInPixels() {
-      return this._currentRenderTarget != null
-        ? this._currentRenderTarget.viewport.width
-        : this._width
-    }
-
-    get renderTargetHeightInPixels() {
-      return this._currentRenderTarget != null
-        ? this._currentRenderTarget.viewport.height
-        : this._height
-    }
-
-    draw(
-      primitive: Graphics.Primitive,
-      material: Graphics.Material,
-      vertices: Graphics.VertexBuffer,
-    ) {
-      // Update the texture set before preparing the material so uniform samplers can check for that they use different textures
-      this._updateRenderTargetAndViewport()
-      Material.from(material).prepare()
-
-      // Update the vertex buffer before updating the format so attributes can bind correctly
-      VertexBuffer.from(vertices).prepare()
-      this._updateFormat(material.format)
-
-      // Draw now that everything is ready
-      this._updateBlendState()
-
-      this._gl.drawArrays(
-        primitive == Graphics.Primitive.TRIANGLES ? this._gl.TRIANGLES : this._gl.TRIANGLE_STRIP,
-        0,
-        Math.floor(vertices.byteCount / material.format.stride),
-      )
-
-      // Forced state updates are done once after a context loss
-      this._forceStateUpdate = false
-    }
-
-    resize(
-      widthInPixels: number,
-      heightInPixels: number,
-      widthInAppUnits: number,
-      heightInAppUnits: number,
-    ) {
-      const bounds = this._gl.canvas.getBoundingClientRect()
-
-      if (
-        this._width === widthInAppUnits &&
-        this._height === heightInPixels &&
-        bounds.width === widthInAppUnits &&
-        bounds.height === heightInAppUnits
-      ) {
-        // Nothing to do here!
-        return
-      }
-
-      let canvas = this._gl.canvas
-      let style = canvas.style
-      canvas.width = widthInPixels
-      canvas.height = heightInPixels
-      style.width = `${widthInAppUnits}px`
-      style.height = `${heightInAppUnits}px`
-      this.setViewport(0, 0, widthInPixels, heightInPixels)
-      this._width = widthInPixels
-      this._height = heightInPixels
-    }
-
-    clear(color: Graphics.Color) {
-      this._updateRenderTargetAndViewport()
-      this._updateBlendState()
-
-      if (color != this._currentClearColor) {
-        this._gl.clearColor(color.redF, color.greenF, color.blueF, color.alphaF)
-        this._currentClearColor = color
-      }
-
-      this._gl.clear(this._gl.COLOR_BUFFER_BIT)
-    }
-
-    setRenderTarget(renderTarget: Graphics.RenderTarget | null) {
-      this._currentRenderTarget = RenderTarget.from(renderTarget)
-    }
-
-    createMaterial(
-      format: Graphics.VertexFormat,
-      vertexSource: string,
-      fragmentSource: string,
-    ): Graphics.Material {
-      let material = new Material(this, format, vertexSource, fragmentSource)
-
-      // Compiling shaders is really expensive so we want to get that started
-      // as early as possible. In Chrome and possibly other browsers, shader
-      // compilation can happen asynchronously as long as you don't call
-      // useProgram().
-      //
-      //   https://plus.google.com/+BrandonJonesToji/posts/4ERHkicC5Ny
-      //
-      material.program
-
-      return material
-    }
-
-    createVertexBuffer(byteCount: number): Graphics.VertexBuffer {
-      assert(byteCount > 0 && byteCount % 4 == 0)
-      return new VertexBuffer(this, byteCount)
-    }
-
-    createTexture(
-      format: Graphics.TextureFormat,
-      width: number,
-      height: number,
-      pixels?: Uint8Array,
-    ): Graphics.Texture {
-      return new Texture(this, format, width, height, pixels)
-    }
-
-    createRenderTarget(texture: Graphics.Texture): Graphics.RenderTarget {
-      return new RenderTarget(this, Texture.from(texture))
-    }
-
-    private ANGLE_instanced_arrays: ANGLE_instanced_arrays | null = null
-    private ANGLE_instanced_arrays_generation: number = -1
-    getANGLE_instanced_arrays(): ANGLE_instanced_arrays {
-      if (this.ANGLE_instanced_arrays_generation !== this._generation) {
-        this.ANGLE_instanced_arrays = null
-      }
-      if (!this.ANGLE_instanced_arrays) {
-        this.ANGLE_instanced_arrays = this.gl.getExtension('ANGLE_instanced_arrays')
-        if (!this.ANGLE_instanced_arrays) {
-          throw new Error('Failed to get extension ANGLE_instanced_arrays')
-        }
-      }
-      return this.ANGLE_instanced_arrays!
-    }
-
-    _updateRenderTargetAndViewport() {
-      let renderTarget = this._currentRenderTarget
-      let viewport = renderTarget != null ? renderTarget.viewport : this._defaultViewport
-      let gl = this._gl
-
-      if (this._forceStateUpdate || this._oldRenderTarget != renderTarget) {
-        gl.bindFramebuffer(gl.FRAMEBUFFER, renderTarget ? renderTarget.framebuffer : null)
-        this._oldRenderTarget = renderTarget
-      }
-
-      if (this._forceStateUpdate || !this._oldViewport.equals(viewport)) {
-        gl.viewport(
-          viewport.x,
-          this.renderTargetHeightInPixels - viewport.y - viewport.height,
-          viewport.width,
-          viewport.height,
-        )
-        this._oldViewport.set(viewport.x, viewport.y, viewport.width, viewport.height)
-      }
-    }
-
-    _updateBlendState() {
-      if (this._forceStateUpdate || this._oldBlendOperations != this._blendOperations) {
-        let gl = this._gl
-        let operations = this._blendOperations
-        let oldOperations = this._oldBlendOperations
-        let source = (operations & 0xf) as Graphics.BlendOperation
-        let target = (operations >> 4) as Graphics.BlendOperation
-
-        assert(source in this._blendOperationMap)
-        assert(target in this._blendOperationMap)
-
-        // Special-case the blend mode that just writes over the target buffer
-        if (operations == Context.COPY_BLEND_OPERATIONS) {
-          gl.disable(gl.BLEND)
-        } else {
-          if (this._forceStateUpdate || oldOperations == Context.COPY_BLEND_OPERATIONS) {
-            gl.enable(gl.BLEND)
-          }
-
-          // Otherwise, use actual blending
-          gl.blendFunc(this._blendOperationMap[source], this._blendOperationMap[target])
-        }
-
-        this._oldBlendOperations = operations
-      }
-    }
-
-    _updateFormat(format: Graphics.VertexFormat) {
-      // Update the attributes
-      let gl = this._gl
-      let attributes = format.attributes
-      let count = attributes.length
-      for (let i = 0; i < count; i++) {
-        let attribute = attributes[i]
-        let isByte = attribute.type == Graphics.AttributeType.BYTE
-        gl.vertexAttribPointer(
-          i,
-          attribute.count,
-          isByte ? gl.UNSIGNED_BYTE : gl.FLOAT,
-          isByte,
-          format.stride,
-          attribute.byteOffset,
-        )
-      }
-
-      // Update the attribute count
-      while (this._attributeCount < count) {
-        gl.enableVertexAttribArray(this._attributeCount)
-        this._attributeCount++
-      }
-      while (this._attributeCount > count) {
-        this._attributeCount--
-        gl.disableVertexAttribArray(this._attributeCount)
-      }
-      this._attributeCount = count
-    }
-
-    getWebGLInfo(): {renderer: string | null; vendor: string | null; version: string | null} {
-      const ext = this.gl.getExtension('WEBGL_debug_renderer_info')
-      const renderer = ext ? this.gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) : null
-      const vendor = ext ? this.gl.getParameter(ext.UNMASKED_VENDOR_WEBGL) : null
-      const version = this.gl.getParameter(this.gl.VERSION)
-      return {renderer, vendor, version}
-    }
-
-    static from(context: Graphics.Context): Context {
-      assert(context == null || context instanceof Context)
-      return context as Context
-    }
-
-    static _packBlendModes(
-      source: Graphics.BlendOperation,
-      target: Graphics.BlendOperation,
-    ): number {
-      return source | (target << 4)
-    }
-
-    static COPY_BLEND_OPERATIONS = Context._packBlendModes(
-      Graphics.BlendOperation.ONE,
-      Graphics.BlendOperation.ZERO,
-    )
-  }
-
-  abstract class Uniform {
-    constructor(
-      protected readonly _material: Material,
-      protected readonly _name: string,
-      protected _generation = 0,
-      protected _location: WebGLUniformLocation | null = null,
-      protected _isDirty = true,
-    ) {}
-
-    // Upload this uniform if it's dirty
-    abstract prepare(): void
-
-    get location(): WebGLUniformLocation {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation) {
-        this._location = context.gl.getUniformLocation(this._material.program, this._name)
-        this._generation = context.generation
-
-        // Validate the shader against this uniform
-        if (!RELEASE) {
-          let program = this._material.program
-          let gl = context.gl
-          for (let i = 0, ii = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); i < ii; i++) {
-            let info = gl.getActiveUniform(program, i)
-            if (info && info.name == this._name) {
-              assert(info.size == 1)
-              switch (info.type) {
-                case gl.FLOAT: {
-                  assert(this instanceof UniformFloat)
-                  break
-                }
-                case gl.FLOAT_MAT3: {
-                  assert(this instanceof UniformMat3)
-                  break
-                }
-                case gl.FLOAT_VEC2: {
-                  assert(this instanceof UniformVec2)
-                  break
-                }
-                case gl.FLOAT_VEC3: {
-                  assert(this instanceof UniformVec3)
-                  break
-                }
-                case gl.FLOAT_VEC4: {
-                  assert(this instanceof UniformVec4)
-                  break
-                }
-                case gl.INT: {
-                  assert(this instanceof UniformInt)
-                  break
-                }
-                case gl.SAMPLER_2D: {
-                  assert(this instanceof UniformSampler)
-                  break
-                }
-                default:
-                  assert(false)
-              }
-            }
-          }
-        }
-      }
-      if (!this._location) {
-        throw new Error('Failed to get uniform location')
-      }
-      return this._location
-    }
-  }
-
-  class UniformFloat extends Uniform {
-    private _x = 0.0
-
-    set(x: number) {
-      if (x != this._x) {
-        this._x = x
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniform1f(this.location, this._x)
-        this._isDirty = false
-      }
-    }
-  }
-
-  class UniformInt extends Uniform {
-    private _x = 0
-
-    set(x: number) {
-      if (x != this._x) {
-        this._x = x
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniform1i(this.location, this._x)
-        this._isDirty = false
-      }
-    }
-  }
-
-  class UniformVec2 extends Uniform {
-    private _x = 0.0
-    private _y = 0.0
-
-    set(x: number, y: number) {
-      if (x != this._x || y != this._y) {
-        this._x = x
-        this._y = y
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniform2f(this.location, this._x, this._y)
-        this._isDirty = false
-      }
-    }
-  }
-
-  class UniformVec3 extends Uniform {
-    private _x = 0.0
-    private _y = 0.0
-    private _z = 0.0
-
-    set(x: number, y: number, z: number) {
-      if (x != this._x || y != this._y || z != this._z) {
-        this._x = x
-        this._y = y
-        this._z = z
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniform3f(this.location, this._x, this._y, this._z)
-        this._isDirty = false
-      }
-    }
-  }
-
-  class UniformVec4 extends Uniform {
-    private _x = 0.0
-    private _y = 0.0
-    private _z = 0.0
-    private _w = 0.0
-
-    set(x: number, y: number, z: number, w: number) {
-      if (x != this._x || y != this._y || z != this._z || w != this._w) {
-        this._x = x
-        this._y = y
-        this._z = z
-        this._w = w
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniform4f(this.location, this._x, this._y, this._z, this._w)
-        this._isDirty = false
-      }
-    }
-  }
-
-  class UniformMat3 extends Uniform {
-    private _values = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
-
-    set(
-      m00: number,
-      m01: number,
-      m02: number,
-      m10: number,
-      m11: number,
-      m12: number,
-      m20: number,
-      m21: number,
-      m22: number,
-    ) {
-      // These values are deliberately transposed because WebGL requires the "transpose" argument of uniformMatrix() to be false
-      UniformMat3._cachedValues[0] = m00
-      UniformMat3._cachedValues[1] = m10
-      UniformMat3._cachedValues[2] = m20
-      UniformMat3._cachedValues[3] = m01
-      UniformMat3._cachedValues[4] = m11
-      UniformMat3._cachedValues[5] = m21
-      UniformMat3._cachedValues[6] = m02
-      UniformMat3._cachedValues[7] = m12
-      UniformMat3._cachedValues[8] = m22
-
-      for (let i = 0; i < 9; i++) {
-        if (UniformMat3._cachedValues[i] != this._values[i]) {
-          let swap = this._values
-          this._values = UniformMat3._cachedValues
-          UniformMat3._cachedValues = swap
-          this._isDirty = true
-          break
-        }
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      if (this._generation != context.generation || this._isDirty) {
-        context.gl.uniformMatrix3fv(this.location, false, this._values)
-        this._isDirty = false
-      }
-    }
-
-    // Statically allocate this to avoid allocations
-    static _cachedValues = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
-  }
-
-  class UniformSampler extends Uniform {
-    private _texture: Texture | null = null
-    private _index = -1
-
-    set(texture: Graphics.Texture, index: number) {
-      if (this._texture != texture || this._index != index) {
-        this._texture = Texture.from(texture)
-        this._index = index
-        this._isDirty = true
-      }
-    }
-
-    prepare() {
-      let context = Context.from(this._material.context)
-      let gl = context.gl
-      assert(
-        this._texture == null ||
-          context.currentRenderTarget == null ||
-          this._texture != context.currentRenderTarget.texture,
-      )
-      if (this._generation != context.generation || this._isDirty) {
-        gl.uniform1i(this.location, this._index)
-        this._isDirty = false
-      }
-      gl.activeTexture(TEXTURE_N(gl, this._index))
-      gl.bindTexture(
-        gl.TEXTURE_2D,
-        this._texture != null && this._texture.width > 0 && this._texture.height > 0
-          ? this._texture.texture
-          : null,
-      )
-    }
-  }
-
-  class Material implements Graphics.Material {
-    constructor(
-      private readonly _context: Context,
-      private readonly _format: Graphics.VertexFormat,
-      private readonly _vertexSource: string,
-      private readonly _fragmentSource: string,
-      private readonly _uniformsMap: {[key: string]: Uniform} = {},
-      private readonly _uniformsList: Uniform[] = [],
-      private _generation = 0,
-      private _program: WebGLProgram | null = null,
-    ) {}
-
-    get context() {
-      return this._context
-    }
-    get format() {
-      return this._format
-    }
-    get vertexSource() {
-      return this._vertexSource
-    }
-    get fragmentSource() {
-      return this._fragmentSource
-    }
-
-    setUniformFloat(name: string, x: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformFloat(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformFloat)
-      ;(uniform as UniformFloat).set(x)
-    }
-
-    setUniformInt(name: string, x: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformInt(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformInt)
-      ;(uniform as UniformInt).set(x)
-    }
-
-    setUniformVec2(name: string, x: number, y: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformVec2(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformVec2)
-      ;(uniform as UniformVec2).set(x, y)
-    }
-
-    setUniformVec3(name: string, x: number, y: number, z: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformVec3(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformVec3)
-      ;(uniform as UniformVec3).set(x, y, z)
-    }
-
-    setUniformVec4(name: string, x: number, y: number, z: number, w: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformVec4(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformVec4)
-      ;(uniform as UniformVec4).set(x, y, z, w)
-    }
-
-    setUniformMat3(
-      name: string,
-      m00: number,
-      m01: number,
-      m02: number,
-      m10: number,
-      m11: number,
-      m12: number,
-      m20: number,
-      m21: number,
-      m22: number,
-    ) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformMat3(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformMat3)
-      ;(uniform as UniformMat3).set(m00, m01, m02, m10, m11, m12, m20, m21, m22)
-    }
-
-    setUniformSampler(name: string, texture: Graphics.Texture, index: number) {
-      let uniform = this._uniformsMap[name] || null
-      if (uniform == null) {
-        uniform = new UniformSampler(this, name)
-        this._uniformsMap[name] = uniform
-        this._uniformsList.push(uniform)
-      }
-      assert(uniform instanceof UniformSampler)
-      ;(uniform as UniformSampler).set(texture, index)
-    }
-
-    get program(): WebGLProgram {
-      let gl = this._context.gl
-      if (this._generation != this._context.generation) {
-        this._program = gl.createProgram()!
-        this._compileShader(gl, gl.VERTEX_SHADER, this.vertexSource)
-        this._compileShader(gl, gl.FRAGMENT_SHADER, this.fragmentSource)
-        let attributes = this.format.attributes
-        for (let i = 0; i < attributes.length; i++) {
-          gl.bindAttribLocation(this._program, i, attributes[i].name)
-        }
-        gl.linkProgram(this._program)
-        if (!gl.getProgramParameter(this._program, gl.LINK_STATUS)) {
-          throw new Error(`${gl.getProgramInfoLog(this._program)}`)
-        }
-        this._generation = this._context.generation
-
-        // Validate this shader against the format
-        if (!RELEASE) {
-          for (let attribute of attributes) {
-            for (
-              let i = 0, ii = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);
-              i < ii;
-              i++
-            ) {
-              let info = gl.getActiveAttrib(this.program, i)
-              if (info && info.name == attribute.name) {
-                assert(info.size == 1)
-                switch (attribute.count) {
-                  case 1: {
-                    assert(info.type == gl.FLOAT)
-                    break
-                  }
-                  case 2: {
-                    assert(info.type == gl.FLOAT_VEC2)
-                    break
-                  }
-                  case 3: {
-                    assert(info.type == gl.FLOAT_VEC3)
-                    break
-                  }
-                  case 4: {
-                    assert(info.type == gl.FLOAT_VEC4)
-                    break
-                  }
-                  default: {
-                    assert(false)
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      return this._program!
-    }
-
-    prepare(): void {
-      this._context.gl.useProgram(this.program)
-      for (let uniform of this._uniformsList) {
-        uniform.prepare()
-      }
-    }
-
-    _compileShader(gl: WebGLRenderingContext, type: GLenum, source: string) {
-      let shader = gl.createShader(type)
-      gl.shaderSource(shader, source)
-      gl.compileShader(shader)
-      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
-        throw new Error(`${gl.getShaderInfoLog(shader)}`)
-      }
-      gl.attachShader(this._program, shader)
-    }
-
-    static from(material: Graphics.Material): Material {
-      assert(material == null || material instanceof Material)
-      return material as Material
-    }
-  }
-
-  class VertexBuffer extends Graphics.VertexBuffer {
-    private readonly _context: Context
-    private _generation = 0
-    private _buffer: WebGLBuffer | null = null
-    private _bytes: Uint8Array | null = null
-    private _isDirty = true
-    private _dirtyMin = VertexBuffer.INT_MAX
-    private _dirtyMax = 0
-    private _totalMin = VertexBuffer.INT_MAX
-    private _totalMax = 0
-    private _byteCount = 0
-
-    constructor(context: Context, byteCount: number) {
-      super()
-      this._context = context
-      this._byteCount = byteCount
-      this._bytes = new Uint8Array(byteCount)
-    }
-
-    get context() {
-      return this._context
-    }
-    get byteCount() {
-      return this._byteCount
-    }
-
-    move(sourceByteOffset: number, targetByteOffset: number, byteCount: number) {
-      assert(byteCount >= 0)
-      assert(0 <= sourceByteOffset && sourceByteOffset + byteCount <= this._byteCount)
-      assert(0 <= targetByteOffset && targetByteOffset + byteCount <= this._byteCount)
-
-      if (this._bytes && sourceByteOffset != targetByteOffset && byteCount != 0) {
-        this._bytes.set(this._bytes.subarray(sourceByteOffset, this._byteCount), targetByteOffset)
-        this._growDirtyRegion(
-          Math.min(sourceByteOffset, targetByteOffset),
-          Math.max(sourceByteOffset, targetByteOffset) + byteCount,
-        )
-      }
-    }
-
-    upload(bytes: Uint8Array, byteOffset: number = 0) {
-      assert(0 <= byteOffset && byteOffset + bytes.length <= this._byteCount)
-      assert(this._bytes != null)
-      this._bytes!.set(bytes, byteOffset)
-      this._growDirtyRegion(byteOffset, byteOffset + bytes.length)
-    }
-
-    free() {
-      if (this._buffer) {
-        this._context.gl.deleteBuffer(this._buffer)
-      }
-
-      // Reset the generation to force this to be re-uploaded if it's used again
-      // in the future.
-      this._generation = 0
-    }
-
-    prepare(): void {
-      let gl = this._context.gl
-
-      if (this._generation !== this._context.generation) {
-        this._buffer = gl.createBuffer()
-        this._generation = this._context.generation
-        this._isDirty = true
-      }
-
-      gl.bindBuffer(gl.ARRAY_BUFFER, this._buffer)
-
-      if (this._isDirty) {
-        gl.bufferData(gl.ARRAY_BUFFER, this._byteCount, gl.DYNAMIC_DRAW)
-        this._dirtyMin = this._totalMin
-        this._dirtyMax = this._totalMax
-        this._isDirty = false
-      }
-
-      if (this._dirtyMin < this._dirtyMax) {
-        gl.bufferSubData(
-          gl.ARRAY_BUFFER,
-          this._dirtyMin,
-          this._bytes!.subarray(this._dirtyMin, this._dirtyMax),
-        )
-        this._dirtyMin = VertexBuffer.INT_MAX
-        this._dirtyMax = 0
-      }
-    }
-
-    _growDirtyRegion(min: number, max: number) {
-      this._dirtyMin = Math.min(this._dirtyMin, min)
-      this._dirtyMax = Math.max(this._dirtyMax, max)
-      this._totalMin = Math.min(this._totalMin, min)
-      this._totalMax = Math.max(this._totalMax, max)
-    }
-
-    static INT_MAX = 0x7fffffff
-
-    static from(buffer: Graphics.VertexBuffer): VertexBuffer {
-      assert(buffer == null || buffer instanceof VertexBuffer)
-      return buffer as VertexBuffer
-    }
-  }
-
-  class Texture implements Graphics.Texture {
-    constructor(
-      private readonly _context: Context,
-      private _format: Graphics.TextureFormat,
-      private _width: number,
-      private _height: number,
-      private _pixels: Uint8Array | null = null,
-      private _texture: WebGLTexture | null = null,
-      private _generation = 0,
-      private _isFormatDirty = true,
-      private _isContentDirty = true,
-    ) {}
-
-    get context() {
-      return this._context
-    }
-    get format() {
-      return this._format
-    }
-    get width() {
-      return this._width
-    }
-    get height() {
-      return this._height
-    }
-
-    resize(width: number, height: number, pixels: Uint8Array | null = null) {
-      this._width = width
-      this._height = height
-      this._pixels = pixels
-      this._isContentDirty = true
-    }
-
-    setFormat(format: Graphics.TextureFormat) {
-      if (this._format != format) {
-        this._format = format
-        this._isFormatDirty = true
-      }
-    }
-
-    get texture(): WebGLTexture {
-      let gl = this._context.gl
-
-      // Create
-      if (this._generation != this._context.generation) {
-        this._texture = gl.createTexture()
-        this._generation = this._context.generation
-        this._isFormatDirty = true
-        this._isContentDirty = true
-      }
-
-      // Format
-      if (this._isFormatDirty) {
-        gl.bindTexture(gl.TEXTURE_2D, this._texture)
-        gl.texParameteri(
-          gl.TEXTURE_2D,
-          gl.TEXTURE_MAG_FILTER,
-          this.format.magFilter == Graphics.PixelFilter.NEAREST ? gl.NEAREST : gl.LINEAR,
-        )
-        gl.texParameteri(
-          gl.TEXTURE_2D,
-          gl.TEXTURE_MIN_FILTER,
-          this.format.minFilter == Graphics.PixelFilter.NEAREST ? gl.NEAREST : gl.LINEAR,
-        )
-        gl.texParameteri(
-          gl.TEXTURE_2D,
-          gl.TEXTURE_WRAP_S,
-          this.format.wrap == Graphics.PixelWrap.REPEAT ? gl.REPEAT : gl.CLAMP_TO_EDGE,
-        )
-        gl.texParameteri(
-          gl.TEXTURE_2D,
-          gl.TEXTURE_WRAP_T,
-          this.format.wrap == Graphics.PixelWrap.REPEAT ? gl.REPEAT : gl.CLAMP_TO_EDGE,
-        )
-        this._isFormatDirty = false
-      }
-
-      if (this._isContentDirty) {
-        gl.bindTexture(gl.TEXTURE_2D, this._texture)
-        gl.texImage2D(
-          gl.TEXTURE_2D,
-          0,
-          gl.RGBA,
-          this._width,
-          this._height,
-          0,
-          gl.RGBA,
-          gl.UNSIGNED_BYTE,
-          this._pixels,
-        )
-        this._isContentDirty = false
-      }
-
-      return this._texture!
-    }
-
-    free() {
-      if (this.texture) {
-        this._context.gl.deleteTexture(this.texture)
-        this._generation = 0
-      }
-    }
-
-    static from(texture: Graphics.Texture): Texture {
-      assert(texture == null || texture instanceof Texture)
-      return texture as Texture
-    }
-  }
-
-  class RenderTarget implements Graphics.RenderTarget {
-    constructor(
-      private _context: Context,
-      private _texture: Texture,
-      private _framebuffer: WebGLFramebuffer | null = null,
-      private _generation = 0,
-      private _isDirty = true,
-      private _viewport = new Graphics.Rect(),
-    ) {}
-
-    get context() {
-      return this._context
-    }
-    get texture() {
-      return this._texture
-    }
-    get viewport() {
-      return this._viewport
-    }
-    setColor(texture: Graphics.Texture) {
-      if (this._texture != texture) {
-        this._texture = Texture.from(texture)
-        this._isDirty = true
-      }
-    }
-
-    get framebuffer(): WebGLFramebuffer {
-      let gl = this._context.gl
-      let texture = this._texture.texture
-
-      // Create
-      if (this._generation != this._context.generation) {
-        this._framebuffer = gl.createFramebuffer()
-        this._generation = this._context.generation
-        this._isDirty = true
-      }
-
-      // Update
-      if (this._isDirty) {
-        gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer)
-        gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)
-        assert(gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE)
-        this._isDirty = false
-      }
-
-      return this._framebuffer!
-    }
-
-    free() {
-      if (this._framebuffer) {
-        this._context.gl.deleteFramebuffer(this._framebuffer)
-        this._generation = 0
-      }
-    }
-
-    static from(renderTarget: Graphics.RenderTarget | null): RenderTarget | null {
-      assert(renderTarget == null || renderTarget instanceof RenderTarget)
-      return renderTarget as RenderTarget | null
-    }
-  }
-}
diff --git a/src/speedscope/gl/overlay-rectangle-renderer.ts b/src/speedscope/gl/overlay-rectangle-renderer.ts
deleted file mode 100644
index 6634355..0000000
--- a/src/speedscope/gl/overlay-rectangle-renderer.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import {AffineTransform, Rect} from '../lib/math'
-import {Graphics} from './graphics'
-import {setUniformAffineTransform, setUniformVec2} from './utils'
-
-export interface ViewportRectangleRendererProps {
-  configSpaceToPhysicalViewSpace: AffineTransform
-  configSpaceViewportRect: Rect
-}
-
-const vertexFormat = new Graphics.VertexFormat()
-vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
-
-const vert = `
-  attribute vec2 position;
-
-  void main() {
-    gl_Position = vec4(position, 0, 1);
-  }
-`
-
-const frag = `
-  precision mediump float;
-
-  uniform mat3 configSpaceToPhysicalViewSpace;
-  uniform vec2 physicalSize;
-  uniform vec2 physicalOrigin;
-  uniform vec2 configSpaceViewportOrigin;
-  uniform vec2 configSpaceViewportSize;
-  uniform float framebufferHeight;
-
-  void main() {
-    vec2 origin = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportOrigin, 1.0)).xy;
-    vec2 size = (configSpaceToPhysicalViewSpace * vec3(configSpaceViewportSize, 0.0)).xy;
-
-    vec2 halfSize = physicalSize / 2.0;
-
-    float borderWidth = 2.0;
-
-    origin = floor(origin * halfSize) / halfSize + borderWidth * vec2(1.0, 1.0);
-    size = floor(size * halfSize) / halfSize - 2.0 * borderWidth * vec2(1.0, 1.0);
-
-    vec2 coord = gl_FragCoord.xy;
-    coord.x = coord.x - physicalOrigin.x;
-    coord.y = framebufferHeight - coord.y - physicalOrigin.y;
-    vec2 clamped = clamp(coord, origin, origin + size);
-    vec2 gap = clamped - coord;
-    float maxdist = max(abs(gap.x), abs(gap.y));
-
-    // TOOD(jlfwong): Could probably optimize this to use mix somehow.
-    if (maxdist == 0.0) {
-      // Inside viewport rectangle
-      gl_FragColor = vec4(0, 0, 0, 0);
-    } else if (maxdist < borderWidth) {
-      // Inside viewport rectangle at border
-      gl_FragColor = vec4(0.7, 0.7, 0.7, 0.8);
-    } else {
-      // Outside viewport rectangle
-      gl_FragColor = vec4(0.7, 0.7, 0.7, 0.5);
-    }
-  }
-`
-
-export class ViewportRectangleRenderer {
-  private material: Graphics.Material
-  private buffer: Graphics.VertexBuffer
-
-  constructor(private gl: Graphics.Context) {
-    const vertices = [[-1, 1], [1, 1], [-1, -1], [1, -1]]
-    const floats: number[] = []
-    for (let v of vertices) {
-      floats.push(v[0])
-      floats.push(v[1])
-    }
-    this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
-    this.buffer.upload(new Uint8Array(new Float32Array(floats).buffer))
-    this.material = gl.createMaterial(vertexFormat, vert, frag)
-  }
-
-  render(props: ViewportRectangleRendererProps) {
-    setUniformAffineTransform(
-      this.material,
-      'configSpaceToPhysicalViewSpace',
-      props.configSpaceToPhysicalViewSpace,
-    )
-
-    // TODO(jlfwong): Pack these into a Vec4 instead
-    setUniformVec2(this.material, 'configSpaceViewportOrigin', props.configSpaceViewportRect.origin)
-    setUniformVec2(this.material, 'configSpaceViewportSize', props.configSpaceViewportRect.size)
-    // TODO(jlfwong): Pack these into a Vec4 instead
-
-    const viewport = this.gl.viewport
-    this.material.setUniformVec2('physicalOrigin', viewport.x, viewport.y)
-    this.material.setUniformVec2('physicalSize', viewport.width, viewport.height)
-
-    this.material.setUniformFloat('framebufferHeight', this.gl.renderTargetHeightInPixels)
-
-    this.gl.setBlendState(
-      Graphics.BlendOperation.SOURCE_ALPHA,
-      Graphics.BlendOperation.INVERSE_SOURCE_ALPHA,
-    )
-    this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
-  }
-}
diff --git a/src/speedscope/gl/rectangle-batch-renderer.ts b/src/speedscope/gl/rectangle-batch-renderer.ts
deleted file mode 100644
index 5848935..0000000
--- a/src/speedscope/gl/rectangle-batch-renderer.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import {Rect, Vec2, AffineTransform} from '../lib/math'
-import {Color} from '../lib/color'
-import {Graphics} from './graphics'
-import {setUniformAffineTransform} from './utils'
-
-const vertexFormat = new Graphics.VertexFormat()
-vertexFormat.add('configSpacePos', Graphics.AttributeType.FLOAT, 2)
-vertexFormat.add('color', Graphics.AttributeType.FLOAT, 3)
-
-const vert = `
-  uniform mat3 configSpaceToNDC;
-
-  attribute vec2 configSpacePos;
-  attribute vec3 color;
-  varying vec3 vColor;
-
-  void main() {
-    vColor = color;
-    vec2 position = (configSpaceToNDC * vec3(configSpacePos, 1)).xy;
-    gl_Position = vec4(position, 1, 1);
-  }
-`
-
-const frag = `
-  precision mediump float;
-  varying vec3 vColor;
-
-  void main() {
-    gl_FragColor = vec4(vColor.rgb, 1);
-  }
-`
-
-export class RectangleBatch {
-  private rects: Rect[] = []
-  private colors: Color[] = []
-  constructor(private gl: Graphics.Context) {}
-
-  getRectCount() {
-    return this.rects.length
-  }
-
-  private buffer: Graphics.VertexBuffer | null = null
-  getBuffer(): Graphics.VertexBuffer {
-    if (this.buffer) {
-      return this.buffer
-    }
-
-    const corners = [[0, 0], [1, 0], [0, 1], [1, 0], [0, 1], [1, 1]]
-
-    const bytes = new Uint8Array(vertexFormat.stride * corners.length * this.rects.length)
-    const floats = new Float32Array(bytes.buffer)
-    let idx = 0
-
-    for (let i = 0; i < this.rects.length; i++) {
-      const rect = this.rects[i]
-      const color = this.colors[i]
-
-      // TODO(jlfwong): In the conversion from regl to graphics.ts, I lost the
-      // ability to do instanced drawing. This is a pretty significant hit to
-      // the performance here since I need 6x the memory to allocate these
-      // things. Adding instanced drawing to graphics.ts is non-trivial, so I'm
-      // just going to try this for now.
-      for (let corner of corners) {
-        floats[idx++] = rect.origin.x + corner[0] * rect.size.x
-        floats[idx++] = rect.origin.y + corner[1] * rect.size.y
-
-        floats[idx++] = color.r
-        floats[idx++] = color.g
-        floats[idx++] = color.b
-      }
-    }
-
-    if (idx !== floats.length) {
-      throw new Error("Buffer expected to be full but wasn't")
-    }
-
-    this.buffer = this.gl.createVertexBuffer(bytes.length)
-    this.buffer.upload(bytes)
-    return this.buffer
-  }
-
-  addRect(rect: Rect, color: Color) {
-    this.rects.push(rect)
-    this.colors.push(color)
-
-    if (this.buffer) {
-      this.buffer.free()
-      this.buffer = null
-    }
-  }
-
-  free() {
-    if (this.buffer) {
-      this.buffer.free()
-      this.buffer = null
-    }
-  }
-}
-
-export interface RectangleBatchRendererProps {
-  batch: RectangleBatch
-  configSpaceSrcRect: Rect
-  physicalSpaceDstRect: Rect
-}
-
-export class RectangleBatchRenderer {
-  material: Graphics.Material
-  constructor(private gl: Graphics.Context) {
-    this.material = gl.createMaterial(vertexFormat, vert, frag)
-  }
-
-  render(props: RectangleBatchRendererProps) {
-    setUniformAffineTransform(
-      this.material,
-      'configSpaceToNDC',
-      (() => {
-        const configToPhysical = AffineTransform.betweenRects(
-          props.configSpaceSrcRect,
-          props.physicalSpaceDstRect,
-        )
-
-        const viewportSize = new Vec2(this.gl.viewport.width, this.gl.viewport.height)
-
-        const physicalToNDC = AffineTransform.withTranslation(new Vec2(-1, 1)).times(
-          AffineTransform.withScale(new Vec2(2, -2).dividedByPointwise(viewportSize)),
-        )
-
-        return physicalToNDC.times(configToPhysical)
-      })(),
-    )
-
-    this.gl.setUnpremultipliedBlendState()
-    this.gl.draw(Graphics.Primitive.TRIANGLES, this.material, props.batch.getBuffer())
-  }
-}
diff --git a/src/speedscope/gl/row-atlas.ts b/src/speedscope/gl/row-atlas.ts
deleted file mode 100644
index 9b9a75a..0000000
--- a/src/speedscope/gl/row-atlas.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-import {LRUCache} from '../lib/lru-cache'
-import {RectangleBatch, RectangleBatchRenderer} from './rectangle-batch-renderer'
-import {Rect, Vec2} from '../lib/math'
-import {Color} from '../lib/color'
-import {Graphics} from './graphics'
-import {TextureRenderer} from './texture-renderer'
-import {renderInto} from './utils'
-
-export class RowAtlas {
-  private texture: Graphics.Texture
-  private renderTarget: Graphics.RenderTarget
-  private rowCache: LRUCache
-  private clearLineBatch: RectangleBatch
-
-  constructor(
-    private gl: Graphics.Context,
-    private rectangleBatchRenderer: RectangleBatchRenderer,
-    private textureRenderer: TextureRenderer,
-  ) {
-    this.texture = gl.createTexture(Graphics.TextureFormat.NEAREST_CLAMP, 4096, 4096)
-    this.renderTarget = gl.createRenderTarget(this.texture)
-    this.rowCache = new LRUCache(this.texture.height)
-    this.clearLineBatch = new RectangleBatch(gl)
-    this.clearLineBatch.addRect(Rect.unit, new Color(0, 0, 0, 0))
-
-    // All of the cached data is stored GPU-side, and we don't retain a copy of
-    // it client-side. This means when we get a context loss event, the data is
-    // totally gone. So let's clear our CPU-side cache to reflect that fact.
-    gl.addContextResetHandler(() => {
-      this.rowCache.clear()
-    })
-  }
-
-  has(key: K) {
-    return this.rowCache.has(key)
-  }
-  getResolution() {
-    return this.texture.width
-  }
-  getCapacity() {
-    return this.texture.height
-  }
-
-  private allocateLine(key: K): number {
-    if (this.rowCache.getSize() < this.rowCache.getCapacity()) {
-      // Not in cache, but cache isn't full
-      const row = this.rowCache.getSize()
-      this.rowCache.insert(key, row)
-      return row
-    } else {
-      // Not in cache, and cache is full. Evict something.
-      const [, row] = this.rowCache.removeLRU()!
-      this.rowCache.insert(key, row)
-      return row
-    }
-  }
-
-  writeToAtlasIfNeeded(keys: K[], render: (textureDstRect: Rect, key: K) => void) {
-    renderInto(this.gl, this.renderTarget, () => {
-      for (let key of keys) {
-        let row = this.rowCache.get(key)
-        if (row != null) {
-          // Already cached!
-          continue
-        }
-        // Not cached -- we'll have to actually render
-        row = this.allocateLine(key)
-
-        const textureRect = new Rect(new Vec2(0, row), new Vec2(this.texture.width, 1))
-        this.rectangleBatchRenderer.render({
-          batch: this.clearLineBatch,
-          configSpaceSrcRect: Rect.unit,
-          physicalSpaceDstRect: textureRect,
-        })
-        render(textureRect, key)
-      }
-    })
-  }
-
-  renderViaAtlas(key: K, dstRect: Rect): boolean {
-    let row = this.rowCache.get(key)
-    if (row == null) {
-      return false
-    }
-
-    const textureRect = new Rect(new Vec2(0, row), new Vec2(this.texture.width, 1))
-
-    // At this point, we have the row in cache, and we can
-    // paint directly from it into the framebuffer.
-    this.textureRenderer.render({
-      texture: this.texture,
-      srcRect: textureRect,
-      dstRect: dstRect,
-    })
-    return true
-  }
-}
diff --git a/src/speedscope/gl/texture-renderer.ts b/src/speedscope/gl/texture-renderer.ts
deleted file mode 100644
index 29dca6c..0000000
--- a/src/speedscope/gl/texture-renderer.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import {Vec2, Rect, AffineTransform} from '../lib/math'
-import {Graphics} from './graphics'
-import {setUniformAffineTransform} from './utils'
-
-export interface TextureRendererProps {
-  texture: Graphics.Texture
-  srcRect: Rect
-  dstRect: Rect
-}
-
-const vert = `
-  uniform mat3 uvTransform;
-  uniform mat3 positionTransform;
-
-  attribute vec2 position;
-  attribute vec2 uv;
-  varying vec2 vUv;
-
-  void main() {
-    vUv = (uvTransform * vec3(uv, 1)).xy;
-    gl_Position = vec4((positionTransform * vec3(position, 1)).xy, 0, 1);
-  }
-`
-
-const frag = `
-  precision mediump float;
-
-  varying vec2 vUv;
-  uniform sampler2D texture;
-
-  void main() {
-   gl_FragColor = texture2D(texture, vUv);
-  }
-`
-
-export interface TextureRendererProps {
-  texture: Graphics.Texture
-  srcRect: Rect
-  dstRect: Rect
-}
-
-export class TextureRenderer {
-  private buffer: Graphics.VertexBuffer
-  private material: Graphics.Material
-
-  constructor(private gl: Graphics.Context) {
-    const vertexFormat = new Graphics.VertexFormat()
-    vertexFormat.add('position', Graphics.AttributeType.FLOAT, 2)
-    vertexFormat.add('uv', Graphics.AttributeType.FLOAT, 2)
-
-    const vertices = [
-      {pos: [-1, 1], uv: [0, 1]},
-      {pos: [1, 1], uv: [1, 1]},
-      {pos: [-1, -1], uv: [0, 0]},
-      {pos: [1, -1], uv: [1, 0]},
-    ]
-    const floats: number[] = []
-    for (let v of vertices) {
-      floats.push(v.pos[0])
-      floats.push(v.pos[1])
-      floats.push(v.uv[0])
-      floats.push(v.uv[1])
-    }
-
-    this.buffer = gl.createVertexBuffer(vertexFormat.stride * vertices.length)
-    this.buffer.upload(new Uint8Array(new Float32Array(floats).buffer))
-    this.material = gl.createMaterial(vertexFormat, vert, frag)
-  }
-
-  render(props: TextureRendererProps) {
-    this.material.setUniformSampler('texture', props.texture, 0)
-    setUniformAffineTransform(
-      this.material,
-      'uvTransform',
-      (() => {
-        const {srcRect, texture} = props
-        const physicalToUV = AffineTransform.withTranslation(new Vec2(0, 1))
-          .times(AffineTransform.withScale(new Vec2(1, -1)))
-          .times(
-            AffineTransform.betweenRects(
-              new Rect(Vec2.zero, new Vec2(texture.width, texture.height)),
-              Rect.unit,
-            ),
-          )
-        const uvRect = physicalToUV.transformRect(srcRect)
-        return AffineTransform.betweenRects(Rect.unit, uvRect)
-      })(),
-    )
-    setUniformAffineTransform(
-      this.material,
-      'positionTransform',
-      (() => {
-        const {dstRect} = props
-
-        const {viewport} = this.gl
-        const viewportSize = new Vec2(viewport.width, viewport.height)
-
-        const physicalToNDC = AffineTransform.withScale(new Vec2(1, -1)).times(
-          AffineTransform.betweenRects(new Rect(Vec2.zero, viewportSize), Rect.NDC),
-        )
-        const ndcRect = physicalToNDC.transformRect(dstRect)
-        return AffineTransform.betweenRects(Rect.NDC, ndcRect)
-      })(),
-    )
-
-    this.gl.setUnpremultipliedBlendState()
-    this.gl.draw(Graphics.Primitive.TRIANGLE_STRIP, this.material, this.buffer)
-  }
-}
diff --git a/src/speedscope/gl/utils.ts b/src/speedscope/gl/utils.ts
deleted file mode 100644
index f4c2410..0000000
--- a/src/speedscope/gl/utils.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import {Graphics} from './graphics'
-import {AffineTransform, Vec2} from '../lib/math'
-
-export function setUniformAffineTransform(
-  material: Graphics.Material,
-  name: string,
-  transform: AffineTransform,
-) {
-  let {m00, m01, m02, m10, m11, m12} = transform
-  material.setUniformMat3(name, m00, m01, m02, m10, m11, m12, 0, 0, 1)
-}
-export function setUniformVec2(material: Graphics.Material, name: string, vec: Vec2) {
-  material.setUniformVec2(name, vec.x, vec.y)
-}
-
-export function renderInto(gl: Graphics.Context, target: Graphics.RenderTarget, cb: () => void) {
-  gl.setRenderTarget(target)
-  gl.setViewport(0, 0, target.texture.width, target.texture.height)
-  cb()
-  gl.setRenderTarget(null)
-}
diff --git a/src/speedscope/import/__snapshots__/bg-flamegraph.test.ts.snap b/src/speedscope/import/__snapshots__/bg-flamegraph.test.ts.snap
deleted file mode 100644
index 68bb66d..0000000
--- a/src/speedscope/import/__snapshots__/bg-flamegraph.test.ts.snap
+++ /dev/null
@@ -1,109 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromBGFlameGraph 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "a",
-      "line": undefined,
-      "name": "a",
-      "selfWeight": 0,
-      "totalWeight": 14,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "b",
-      "line": undefined,
-      "name": "b",
-      "selfWeight": 5,
-      "totalWeight": 14,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "c",
-      "line": undefined,
-      "name": "c",
-      "selfWeight": 5,
-      "totalWeight": 5,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "d",
-      "line": undefined,
-      "name": "d",
-      "selfWeight": 4,
-      "totalWeight": 4,
-    },
-  ],
-  "name": "simple.txt",
-  "stacks": Array [
-    "a;b;c 2",
-    "a;b;d 4",
-    "a;b;c 3",
-    "a;b 5",
-  ],
-}
-`;
-
-exports[`importFromBGFlameGraph with CRLF 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "a",
-      "line": undefined,
-      "name": "a",
-      "selfWeight": 0,
-      "totalWeight": 14,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "b",
-      "line": undefined,
-      "name": "b",
-      "selfWeight": 5,
-      "totalWeight": 14,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "c",
-      "line": undefined,
-      "name": "c",
-      "selfWeight": 5,
-      "totalWeight": 5,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "d",
-      "line": undefined,
-      "name": "d",
-      "selfWeight": 4,
-      "totalWeight": 4,
-    },
-  ],
-  "name": "simple-crlf.txt",
-  "stacks": Array [
-    "a;b;c 2",
-    "a;b;d 4",
-    "a;b;c 3",
-    "a;b 5",
-  ],
-}
-`;
-
-exports[`importFromBGFlameGraph with CRLF: indexToView 1`] = `0`;
-
-exports[`importFromBGFlameGraph with CRLF: profileGroup.name 1`] = `"simple-crlf.txt"`;
-
-exports[`importFromBGFlameGraph: indexToView 1`] = `0`;
-
-exports[`importFromBGFlameGraph: profileGroup.name 1`] = `"simple.txt"`;
diff --git a/src/speedscope/import/__snapshots__/chrome.test.ts.snap b/src/speedscope/import/__snapshots__/chrome.test.ts.snap
deleted file mode 100644
index a00aed8..0000000
--- a/src/speedscope/import/__snapshots__/chrome.test.ts.snap
+++ /dev/null
@@ -1,520 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromChromeCPUProfile 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": 0,
-      "file": "",
-      "key": "(anonymous)::0:0",
-      "line": 0,
-      "name": "(anonymous)",
-      "selfWeight": 1060,
-      "totalWeight": 34345,
-    },
-    Frame {
-      "col": 10,
-      "file": "",
-      "key": "a::0:10",
-      "line": 0,
-      "name": "a",
-      "selfWeight": 0,
-      "totalWeight": 33285,
-    },
-    Frame {
-      "col": 10,
-      "file": "",
-      "key": "b::5:10",
-      "line": 5,
-      "name": "b",
-      "selfWeight": 0,
-      "totalWeight": 17002,
-    },
-    Frame {
-      "col": 10,
-      "file": "",
-      "key": "d::13:10",
-      "line": 13,
-      "name": "d",
-      "selfWeight": 33285,
-      "totalWeight": 33285,
-    },
-    Frame {
-      "col": 10,
-      "file": "",
-      "key": "c::9:10",
-      "line": 9,
-      "name": "c",
-      "selfWeight": 0,
-      "totalWeight": 16283,
-    },
-  ],
-  "name": "simple.cpuprofile",
-  "stacks": Array [
-    " 11.57ms",
-    "(anonymous) 1.06ms",
-    "(anonymous);a;b;d 17.00ms",
-    "(anonymous);a;c;d 16.28ms",
-  ],
-}
-`;
-
-exports[`importFromChromeCPUProfile: indexToView 1`] = `0`;
-
-exports[`importFromChromeCPUProfile: profileGroup.name 1`] = `"simple.cpuprofile"`;
-
-exports[`importFromChromeTimeline 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": -1,
-      "file": "",
-      "key": "(program)::-1:-1",
-      "line": -1,
-      "name": "(program)",
-      "selfWeight": 2299,
-      "totalWeight": 2299,
-    },
-    Frame {
-      "col": 10,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "a:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:0:10",
-      "line": 0,
-      "name": "a",
-      "selfWeight": 0,
-      "totalWeight": 33186,
-    },
-    Frame {
-      "col": 10,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "c:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:13:10",
-      "line": 13,
-      "name": "c",
-      "selfWeight": 16275,
-      "totalWeight": 16275,
-    },
-    Frame {
-      "col": 10,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "b:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:7:10",
-      "line": 7,
-      "name": "b",
-      "selfWeight": 16911,
-      "totalWeight": 16911,
-    },
-  ],
-  "name": "simple-timeline.json",
-  "stacks": Array [
-    " 10.06ms",
-    "(program) 202.00µs",
-    " 1.97ms",
-    "(program) 1.04ms",
-    " 85.89ms",
-    "(program) 132.00µs",
-    " 8.40ms",
-    "(program) 134.00µs",
-    "a;c 273.00µs",
-    "a;b 513.00µs",
-    "a;c 512.00µs",
-    "a;b 513.00µs",
-    "a;c 262.00µs",
-    "a;b 514.00µs",
-    "a;c 517.00µs",
-    "a;b 261.00µs",
-    "a;c 515.00µs",
-    "a;b 273.00µs",
-    "a;c 134.00µs",
-    "a;b 146.00µs",
-    "a;c 291.00µs",
-    "a;b 256.00µs",
-    "a;c 145.00µs",
-    "a;b 134.00µs",
-    "a;c 273.00µs",
-    "a;b 141.00µs",
-    "a;c 139.00µs",
-    "a;b 130.00µs",
-    "a;c 393.00µs",
-    "a;b 131.00µs",
-    "a;c 126.00µs",
-    "a;b 129.00µs",
-    "a;c 520.00µs",
-    "a;b 129.00µs",
-    "a;c 259.00µs",
-    "a;b 130.00µs",
-    "a;c 128.00µs",
-    "a;b 136.00µs",
-    "a;c 137.00µs",
-    "a;b 281.00µs",
-    "a;c 150.00µs",
-    "a;b 624.00µs",
-    "a;c 135.00µs",
-    "a;b 129.00µs",
-    "a;c 604.00µs",
-    "a;b 292.00µs",
-    "a;c 257.00µs",
-    "a;b 127.00µs",
-    "a;c 128.00µs",
-    "a;b 118.00µs",
-    "a;c 256.00µs",
-    "a;b 524.00µs",
-    "a;c 129.00µs",
-    "a;b 131.00µs",
-    "a;c 125.00µs",
-    "a;b 263.00µs",
-    "a;c 123.00µs",
-    "a;b 128.00µs",
-    "a;c 129.00µs",
-    "a;b 265.00µs",
-    "a;c 128.00µs",
-    "a;b 280.00µs",
-    "a;c 366.00µs",
-    "a;b 931.00µs",
-    "a;c 148.00µs",
-    "a;b 147.00µs",
-    "a;c 302.00µs",
-    "a;b 151.00µs",
-    "a;c 158.00µs",
-    "a;b 456.00µs",
-    "a;c 170.00µs",
-    "a;b 139.00µs",
-    "a;c 145.00µs",
-    "a;b 260.00µs",
-    "a;c 141.00µs",
-    "a;b 280.00µs",
-    "a;c 268.00µs",
-    "a;b 289.00µs",
-    "a;c 146.00µs",
-    "a;b 120.00µs",
-    "a;c 436.00µs",
-    "a;b 147.00µs",
-    "a;c 164.00µs",
-    "a;b 294.00µs",
-    "a;c 147.00µs",
-    "a;b 856.00µs",
-    "a;c 273.00µs",
-    "a;b 139.00µs",
-    "a;c 269.00µs",
-    "a;b 256.00µs",
-    "a;c 258.00µs",
-    "a;b 128.00µs",
-    "a;c 255.00µs",
-    "a;b 140.00µs",
-    "a;c 514.00µs",
-    "a;b 129.00µs",
-    "a;c 395.00µs",
-    "a;b 389.00µs",
-    "a;c 257.00µs",
-    "a;b 686.00µs",
-    "a;c 147.00µs",
-    "a;b 156.00µs",
-    "a;c 137.00µs",
-    "a;b 141.00µs",
-    "a;c 140.00µs",
-    "a;b 141.00µs",
-    "a;c 141.00µs",
-    "a;b 140.00µs",
-    "a;c 140.00µs",
-    "a;b 139.00µs",
-    "a;c 129.00µs",
-    "a;b 149.00µs",
-    "a;c 267.00µs",
-    "a;b 294.00µs",
-    "a;c 145.00µs",
-    "a;b 294.00µs",
-    "a;c 294.00µs",
-    "a;b 295.00µs",
-    "a;c 140.00µs",
-    "a;b 139.00µs",
-    "a;c 139.00µs",
-    "a;b 127.00µs",
-    "a;c 513.00µs",
-    "a;b 516.00µs",
-    "a;c 385.00µs",
-    "a;b 520.00µs",
-    "a;c 252.00µs",
-    "a;b 255.00µs",
-    "a;c 134.00µs",
-    "a;b 112.00µs",
-    "a;c 140.00µs",
-    "a;b 296.00µs",
-    "a;c 441.00µs",
-    "a;b 145.00µs",
-    "a;c 292.00µs",
-    "a;b 130.00µs",
-    "a;c 277.00µs",
-    "a;b 147.00µs",
-    "a;c 286.00µs",
-    "a;b 140.00µs",
-    "a;c 136.00µs",
-    " 61.59ms",
-    "(program) 134.00µs",
-    " 128.00µs",
-    "(program) 141.00µs",
-    " 16.39ms",
-    "(program) 145.00µs",
-    " 16.63ms",
-    "(program) 131.00µs",
-    " 16.71ms",
-    "(program) 131.00µs",
-    " 294.15ms",
-    "(program) 109.00µs",
-  ],
-}
-`;
-
-exports[`importFromChromeTimeline Chrome 69 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": 0,
-      "file": "extensions::SafeBuiltins",
-      "key": "(anonymous):extensions::SafeBuiltins:0:0",
-      "line": 0,
-      "name": "(anonymous)",
-      "selfWeight": 0,
-      "totalWeight": 3188,
-    },
-    Frame {
-      "col": 9,
-      "file": "extensions::SafeBuiltins",
-      "key": "(anonymous):extensions::SafeBuiltins:0:9",
-      "line": 0,
-      "name": "(anonymous)",
-      "selfWeight": 0,
-      "totalWeight": 3188,
-    },
-    Frame {
-      "col": 20,
-      "file": "extensions::SafeBuiltins",
-      "key": "saveBuiltin:extensions::SafeBuiltins:24:20",
-      "line": 24,
-      "name": "saveBuiltin",
-      "selfWeight": 302,
-      "totalWeight": 3188,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "(program):undefined:undefined:undefined",
-      "line": undefined,
-      "name": "(program)",
-      "selfWeight": 6862,
-      "totalWeight": 6862,
-    },
-    Frame {
-      "col": 0,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "(anonymous):file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:0:0",
-      "line": 0,
-      "name": "(anonymous)",
-      "selfWeight": 136,
-      "totalWeight": 37217,
-    },
-    Frame {
-      "col": 14,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "alpha:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:0:14",
-      "line": 0,
-      "name": "alpha",
-      "selfWeight": 873,
-      "totalWeight": 37081,
-    },
-    Frame {
-      "col": 13,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "beta:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:7:13",
-      "line": 7,
-      "name": "beta",
-      "selfWeight": 7552,
-      "totalWeight": 17562,
-    },
-    Frame {
-      "col": 14,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "gamma:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:19:14",
-      "line": 19,
-      "name": "gamma",
-      "selfWeight": 20018,
-      "totalWeight": 20018,
-    },
-    Frame {
-      "col": 14,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js",
-      "key": "delta:file:///Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:13:14",
-      "line": 13,
-      "name": "delta",
-      "selfWeight": 7179,
-      "totalWeight": 18646,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "(garbage collector):undefined:undefined:undefined",
-      "line": undefined,
-      "name": "(garbage collector)",
-      "selfWeight": 646,
-      "totalWeight": 778,
-    },
-  ],
-  "name": "simple.json",
-  "stacks": Array [
-    " 6.85ms",
-    "(anonymous);(anonymous);saveBuiltin 302.00µs",
-    "(anonymous);(anonymous);saveBuiltin;(program) 2.89ms",
-    " 230.00µs",
-    "(program) 828.00µs",
-    " 110.00µs",
-    "(program) 118.00µs",
-    " 323.00µs",
-    "(program) 123.00µs",
-    " 139.00µs",
-    "(program) 400.00µs",
-    "(anonymous) 136.00µs",
-    "(anonymous);alpha;beta 108.00µs",
-    "(anonymous);alpha;beta;gamma 268.00µs",
-    "(anonymous);alpha 137.00µs",
-    "(anonymous);alpha;delta 139.00µs",
-    "(anonymous);alpha;delta;gamma 261.00µs",
-    "(anonymous);alpha;beta;gamma 964.00µs",
-    "(anonymous);alpha;delta;gamma 268.00µs",
-    "(anonymous);alpha;beta;gamma 265.00µs",
-    "(anonymous);alpha;delta;gamma 582.00µs",
-    "(anonymous);alpha;beta;gamma 135.00µs",
-    "(anonymous);alpha;delta;gamma 147.00µs",
-    "(anonymous);alpha;beta;gamma 163.00µs",
-    "(anonymous);alpha;delta;gamma 133.00µs",
-    "(anonymous);alpha;beta;gamma 144.00µs",
-    "(anonymous);alpha;delta;gamma 276.00µs",
-    "(anonymous);alpha;delta 136.00µs",
-    "(anonymous);alpha;beta;gamma 144.00µs",
-    "(anonymous);alpha;delta;gamma 431.00µs",
-    "(anonymous);alpha;beta;gamma 419.00µs",
-    "(anonymous);alpha;delta;gamma 134.00µs",
-    "(anonymous);alpha;beta;gamma 136.00µs",
-    "(anonymous);alpha;delta;gamma 144.00µs",
-    "(anonymous);alpha;beta;gamma 269.00µs",
-    "(anonymous);alpha;delta;gamma 160.00µs",
-    "(anonymous);alpha;beta;gamma 141.00µs",
-    "(anonymous);alpha;delta;gamma 292.00µs",
-    "(anonymous);alpha;beta;gamma 583.00µs",
-    "(anonymous);alpha;delta;gamma 149.00µs",
-    "(anonymous);alpha;beta;gamma 139.00µs",
-    "(anonymous);alpha;delta;gamma 133.00µs",
-    "(anonymous);alpha;beta;gamma 386.00µs",
-    "(anonymous);alpha;delta;gamma 385.00µs",
-    "(anonymous);alpha;beta;gamma 391.00µs",
-    "(anonymous);alpha;delta;gamma 261.00µs",
-    "(anonymous);alpha;beta;gamma 131.00µs",
-    "(anonymous);alpha;delta;gamma 132.00µs",
-    "(anonymous);alpha 144.00µs",
-    "(anonymous);alpha;delta;gamma 134.00µs",
-    "(anonymous);alpha;beta;gamma 146.00µs",
-    "(anonymous);alpha;delta;gamma 119.00µs",
-    "(anonymous);alpha;beta;gamma 120.00µs",
-    "(anonymous);alpha;delta;gamma 134.00µs",
-    "(anonymous);alpha;beta;gamma 1.47ms",
-    "(anonymous);alpha;delta;gamma 148.00µs",
-    "(anonymous);alpha;beta;gamma 147.00µs",
-    "(anonymous);alpha;delta;gamma 146.00µs",
-    "(anonymous);alpha;beta;gamma 269.00µs",
-    "(anonymous);alpha;delta;gamma 138.00µs",
-    "(anonymous);alpha;beta;gamma 509.00µs",
-    "(anonymous);alpha;delta;gamma 1.63ms",
-    "(anonymous);alpha;beta;gamma 432.00µs",
-    "(anonymous);alpha;delta;gamma 129.00µs",
-    "(anonymous);alpha;beta;gamma 139.00µs",
-    "(anonymous);alpha;delta;gamma 389.00µs",
-    "(anonymous);alpha;beta 133.00µs",
-    "(anonymous);alpha;beta;gamma 133.00µs",
-    "(anonymous);alpha;delta;gamma 803.00µs",
-    "(anonymous);alpha;beta;gamma 283.00µs",
-    "(anonymous);alpha;delta;gamma 152.00µs",
-    "(anonymous);alpha;beta;gamma 135.00µs",
-    "(anonymous);alpha;delta;gamma 132.00µs",
-    "(anonymous);alpha;beta;gamma 134.00µs",
-    "(anonymous);alpha;delta;gamma 154.00µs",
-    "(anonymous);alpha;beta;gamma 145.00µs",
-    "(anonymous);alpha;delta;gamma 516.00µs",
-    "(anonymous);alpha;delta 128.00µs",
-    "(anonymous);alpha;delta;gamma 138.00µs",
-    "(anonymous);alpha;beta;gamma 139.00µs",
-    "(anonymous);alpha;delta;gamma 253.00µs",
-    "(anonymous);alpha;beta;gamma 145.00µs",
-    "(anonymous);alpha;delta;gamma 450.00µs",
-    "(anonymous);alpha;beta;gamma 142.00µs",
-    "(anonymous);alpha;delta;gamma 125.00µs",
-    "(anonymous);alpha;beta;gamma 289.00µs",
-    "(anonymous);alpha;delta;gamma 293.00µs",
-    "(anonymous);alpha;beta;gamma 147.00µs",
-    "(anonymous);alpha 443.00µs",
-    "(anonymous);alpha;delta;gamma 133.00µs",
-    "(anonymous);alpha;beta;gamma 409.00µs",
-    "(anonymous);alpha;beta 385.00µs",
-    "(anonymous);alpha;delta 659.00µs",
-    "(anonymous);alpha;beta 253.00µs",
-    "(anonymous);alpha;delta 257.00µs",
-    "(anonymous);alpha;beta 256.00µs",
-    "(anonymous);alpha;delta 129.00µs",
-    "(anonymous);alpha;beta 260.00µs",
-    "(anonymous);alpha;delta 255.00µs",
-    "(anonymous);alpha;beta 129.00µs",
-    "(anonymous);alpha;delta 140.00µs",
-    "(anonymous);alpha;beta 136.00µs",
-    "(anonymous);alpha;delta 134.00µs",
-    "(anonymous);alpha;beta 283.00µs",
-    "(anonymous);alpha;delta 253.00µs",
-    "(anonymous);alpha;beta 397.00µs",
-    "(anonymous);alpha;delta 401.00µs",
-    "(anonymous);alpha;beta 267.00µs",
-    "(anonymous);alpha;delta 283.00µs",
-    "(anonymous);alpha;beta 137.00µs",
-    "(anonymous);alpha;delta 134.00µs",
-    "(anonymous);alpha;beta 403.00µs",
-    "(anonymous);alpha;delta 135.00µs",
-    "(anonymous);alpha;beta 658.00µs",
-    "(anonymous);alpha;delta 117.00µs",
-    "(anonymous);alpha;beta 257.00µs",
-    "(anonymous);alpha;delta 134.00µs",
-    "(anonymous);alpha;beta 143.00µs",
-    "(anonymous);alpha;delta 260.00µs",
-    "(anonymous);alpha 149.00µs",
-    "(anonymous);alpha;delta 146.00µs",
-    "(anonymous);alpha;beta 129.00µs",
-    "(anonymous);alpha;delta 131.00µs",
-    "(anonymous);alpha;beta 130.00µs",
-    "(anonymous);alpha;delta 665.00µs",
-    "(anonymous);alpha;beta 415.00µs",
-    "(anonymous);alpha;delta 264.00µs",
-    "(anonymous);alpha;beta 527.00µs",
-    "(anonymous);alpha;delta 140.00µs",
-    "(anonymous);alpha;beta 269.00µs",
-    "(anonymous);alpha;delta 135.00µs",
-    "(anonymous);alpha;beta 386.00µs",
-    "(anonymous);alpha;delta 559.00µs",
-    "(anonymous);alpha;beta 131.00µs",
-    "(anonymous);alpha;delta 140.00µs",
-    "(anonymous);alpha;beta 129.00µs",
-    "(anonymous);alpha;delta 400.00µs",
-    "(anonymous);alpha;beta 134.00µs",
-    "(anonymous);alpha;delta 634.00µs",
-    "(anonymous);alpha;beta 1.10ms",
-    "(anonymous);alpha;delta 271.00µs",
-    "(anonymous);alpha;delta;(program) 1.46ms",
-    " 430.00µs",
-    "(program) 781.00µs",
-    " 273.00µs",
-    "(garbage collector) 646.00µs",
-    "(garbage collector);(program) 132.00µs",
-    " 26.36ms",
-    "(program) 135.00µs",
-  ],
-}
-`;
-
-exports[`importFromChromeTimeline Chrome 69: indexToView 1`] = `0`;
-
-exports[`importFromChromeTimeline Chrome 69: profileGroup.name 1`] = `"simple.json"`;
-
-exports[`importFromChromeTimeline: indexToView 1`] = `0`;
-
-exports[`importFromChromeTimeline: profileGroup.name 1`] = `"simple-timeline.json"`;
diff --git a/src/speedscope/import/__snapshots__/firefox.test.ts.snap b/src/speedscope/import/__snapshots__/firefox.test.ts.snap
deleted file mode 100644
index 1f70e22..0000000
--- a/src/speedscope/import/__snapshots__/firefox.test.ts.snap
+++ /dev/null
@@ -1,199 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromFirefox 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
-      "key": "a (file:///Users/jlfwong/code/speedscope/sample/simple.js:1)",
-      "line": 1,
-      "name": "a",
-      "selfWeight": 0,
-      "totalWeight": 31.992820999992546,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
-      "key": "b (file:///Users/jlfwong/code/speedscope/sample/simple.js:8)",
-      "line": 8,
-      "name": "b",
-      "selfWeight": 0,
-      "totalWeight": 20.971447000018088,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
-      "key": "d (file:///Users/jlfwong/code/speedscope/sample/simple.js:20)",
-      "line": 20,
-      "name": "d",
-      "selfWeight": 31.992820999992546,
-      "totalWeight": 31.992820999992546,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/simple.js",
-      "key": "c (file:///Users/jlfwong/code/speedscope/sample/simple.js:14)",
-      "line": 14,
-      "name": "c",
-      "selfWeight": 0,
-      "totalWeight": 11.021373999974458,
-    },
-  ],
-  "name": "simple-firefox.json",
-  "stacks": Array [
-    " 2.04ms",
-    "a;b;d 989.53µs",
-    "a;c;d 1.02ms",
-    "a;b;d 982.04µs",
-    "a;c;d 1.02ms",
-    "a;b;d 7.00ms",
-    "a;c;d 2.00ms",
-    "a;b;d 981.44µs",
-    "a;c;d 2.00ms",
-    "a;b;d 2.00ms",
-    "a;c;d 3.02ms",
-    "a;b;d 4.03ms",
-    "a;c;d 1.96ms",
-    "a;b;d 4.99ms",
-  ],
-}
-`;
-
-exports[`importFromFirefox ignore self-hosted 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "http://localhost:8000/simple.js:1",
-      "key": "alpha (http://localhost:8000/simple.js:1:14)",
-      "line": 14,
-      "name": "alpha",
-      "selfWeight": 0,
-      "totalWeight": 26.983816999942064,
-    },
-    Frame {
-      "col": undefined,
-      "file": "http://localhost:8000/simple.js:14",
-      "key": "delta (http://localhost:8000/simple.js:14:14)",
-      "line": 14,
-      "name": "delta",
-      "selfWeight": 0,
-      "totalWeight": 11.946324001066387,
-    },
-    Frame {
-      "col": undefined,
-      "file": "http://localhost:8000/simple.js:20",
-      "key": "gamma (http://localhost:8000/simple.js:20:14)",
-      "line": 14,
-      "name": "gamma",
-      "selfWeight": 26.983816999942064,
-      "totalWeight": 26.983816999942064,
-    },
-    Frame {
-      "col": undefined,
-      "file": "http://localhost:8000/simple.js:8",
-      "key": "beta (http://localhost:8000/simple.js:8:13)",
-      "line": 13,
-      "name": "beta",
-      "selfWeight": 0,
-      "totalWeight": 15.037492998875678,
-    },
-  ],
-  "name": "simple-firefox.json",
-  "stacks": Array [
-    " 4.61ms",
-    "alpha;delta;gamma 999.57µs",
-    "alpha;beta;gamma 2.01ms",
-    "alpha;delta;gamma 1.00ms",
-    "alpha;beta;gamma 995.68µs",
-    "alpha;delta;gamma 996.27µs",
-    "alpha;beta;gamma 4.01ms",
-    "alpha;delta;gamma 2.02ms",
-    "alpha;beta;gamma 959.44µs",
-    "alpha;delta;gamma 2.01ms",
-    "alpha;beta;gamma 4.01ms",
-    "alpha;delta;gamma 959.28µs",
-    "alpha;beta;gamma 2.03ms",
-    "alpha;delta;gamma 3.96ms",
-    "alpha;beta;gamma 1.02ms",
-  ],
-}
-`;
-
-exports[`importFromFirefox ignore self-hosted: indexToView 1`] = `0`;
-
-exports[`importFromFirefox ignore self-hosted: profileGroup.name 1`] = `"simple-firefox.json"`;
-
-exports[`importFromFirefox recursion 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js",
-      "key": "main (file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js:31)",
-      "line": 31,
-      "name": "main",
-      "selfWeight": 1.1944820000207983,
-      "totalWeight": 11.149112000013702,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js",
-      "key": "alpha (file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js:1)",
-      "line": 1,
-      "name": "alpha",
-      "selfWeight": 0,
-      "totalWeight": 9.954629999992903,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js",
-      "key": "beta (file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js:10)",
-      "line": 10,
-      "name": "beta",
-      "selfWeight": 0,
-      "totalWeight": 8.962158999987878,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js",
-      "key": "delta (file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js:17)",
-      "line": 17,
-      "name": "delta",
-      "selfWeight": 0,
-      "totalWeight": 6.859736999962479,
-    },
-    Frame {
-      "col": undefined,
-      "file": "file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js",
-      "key": "gamma (file:///Users/jlfwong/code/speedscope/sample/programs/javascript/recursion.js:23)",
-      "line": 23,
-      "name": "gamma",
-      "selfWeight": 9.954629999992903,
-      "totalWeight": 9.954629999992903,
-    },
-  ],
-  "name": "recursion.json",
-  "stacks": Array [
-    " 1.71ms",
-    "main;alpha;beta;alpha;beta;alpha;beta;alpha;delta;gamma 998.89µs",
-    "main 1.19ms",
-    "main;alpha;beta;alpha;delta;gamma 1.83ms",
-    "main;alpha;beta;alpha;beta;alpha;beta;gamma 1.16ms",
-    "main;alpha;beta;alpha;delta;gamma 1.84ms",
-    "main;alpha;beta;alpha;beta;alpha;beta;alpha;gamma 964.81µs",
-    "main;alpha;beta;alpha;beta;alpha;beta;alpha;delta;gamma 1.19ms",
-    "main;alpha;beta;gamma 965.25µs",
-    "main;alpha;delta;gamma 992.47µs",
-  ],
-}
-`;
-
-exports[`importFromFirefox recursion: indexToView 1`] = `0`;
-
-exports[`importFromFirefox recursion: profileGroup.name 1`] = `"recursion.json"`;
-
-exports[`importFromFirefox: indexToView 1`] = `0`;
-
-exports[`importFromFirefox: profileGroup.name 1`] = `"simple-firefox.json"`;
diff --git a/src/speedscope/import/__snapshots__/instruments.test.ts.snap b/src/speedscope/import/__snapshots__/instruments.test.ts.snap
deleted file mode 100644
index d0e185d..0000000
--- a/src/speedscope/import/__snapshots__/instruments.test.ts.snap
+++ /dev/null
@@ -1,8751 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromInstrumentsDeepCopy allocations profile 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":start",
-      "line": undefined,
-      "name": "start",
-      "selfWeight": 0,
-      "totalWeight": 449839104,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":main",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 1048576,
-      "totalWeight": 449839104,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":delta()",
-      "line": undefined,
-      "name": "delta()",
-      "selfWeight": 1048576,
-      "totalWeight": 227540992,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":alpha()",
-      "line": undefined,
-      "name": "alpha()",
-      "selfWeight": 0,
-      "totalWeight": 150994944,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":leakMemory()",
-      "line": undefined,
-      "name": "leakMemory()",
-      "selfWeight": 0,
-      "totalWeight": 447741952,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":malloc",
-      "line": undefined,
-      "name": "malloc",
-      "selfWeight": 0,
-      "totalWeight": 447741952,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":malloc_zone_malloc",
-      "line": undefined,
-      "name": "malloc_zone_malloc",
-      "selfWeight": 447741952,
-      "totalWeight": 447741952,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":beta()",
-      "line": undefined,
-      "name": "beta()",
-      "selfWeight": 0,
-      "totalWeight": 147849216,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":gamma()",
-      "line": undefined,
-      "name": "gamma()",
-      "selfWeight": 0,
-      "totalWeight": 74448896,
-    },
-  ],
-  "name": "random-allocations-deep-copy.txt",
-  "stacks": Array [
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc 73.00 MB",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc 72.00 MB",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc 71.00 MB",
-    "start;main;delta() 1.00 MB",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc 71.00 MB",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc 71.00 MB",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc 69.00 MB",
-    "start;main 1.00 MB",
-  ],
-}
-`;
-
-exports[`importFromInstrumentsDeepCopy allocations profile: indexToView 1`] = `0`;
-
-exports[`importFromInstrumentsDeepCopy allocations profile: profileGroup.name 1`] = `"random-allocations-deep-copy.txt"`;
-
-exports[`importFromInstrumentsDeepCopy time profile 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":start",
-      "line": undefined,
-      "name": "start",
-      "selfWeight": 0,
-      "totalWeight": 4273,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":main",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 4273,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":delta()",
-      "line": undefined,
-      "name": "delta()",
-      "selfWeight": 693,
-      "totalWeight": 2126,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":alpha()",
-      "line": undefined,
-      "name": "alpha()",
-      "selfWeight": 1411,
-      "totalWeight": 1438,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":leakMemory()",
-      "line": undefined,
-      "name": "leakMemory()",
-      "selfWeight": 1,
-      "totalWeight": 67,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":malloc",
-      "line": undefined,
-      "name": "malloc",
-      "selfWeight": 3,
-      "totalWeight": 66,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":malloc_zone_malloc",
-      "line": undefined,
-      "name": "malloc_zone_malloc",
-      "selfWeight": 3,
-      "totalWeight": 62,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":szone_malloc_should_clear",
-      "line": undefined,
-      "name": "szone_malloc_should_clear",
-      "selfWeight": 21,
-      "totalWeight": 39,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":small_malloc_from_free_list",
-      "line": undefined,
-      "name": "small_malloc_from_free_list",
-      "selfWeight": 17,
-      "totalWeight": 17,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":allocate_pages_securely",
-      "line": undefined,
-      "name": "allocate_pages_securely",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":mach_vm_map",
-      "line": undefined,
-      "name": "mach_vm_map",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":_kernelrpc_mach_vm_map_trap",
-      "line": undefined,
-      "name": "_kernelrpc_mach_vm_map_trap",
-      "selfWeight": 2,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":_os_lock_spin_lock",
-      "line": undefined,
-      "name": "_os_lock_spin_lock",
-      "selfWeight": 14,
-      "totalWeight": 14,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":os_lock_lock",
-      "line": undefined,
-      "name": "os_lock_lock",
-      "selfWeight": 3,
-      "totalWeight": 3,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":beta()",
-      "line": undefined,
-      "name": "beta()",
-      "selfWeight": 1406,
-      "totalWeight": 1427,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":",
-      "line": undefined,
-      "name": "",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":szone_malloc",
-      "line": undefined,
-      "name": "szone_malloc",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":DYLD-STUB$$os_lock_unlock",
-      "line": undefined,
-      "name": "DYLD-STUB$$os_lock_unlock",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":gamma()",
-      "line": undefined,
-      "name": "gamma()",
-      "selfWeight": 696,
-      "totalWeight": 706,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": ":os_lock_unlock",
-      "line": undefined,
-      "name": "os_lock_unlock",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-  ],
-  "name": "simple-time-profile-deep-copy.txt",
-  "stacks": Array [
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 4.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;allocate_pages_securely;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 2.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 5.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;os_lock_lock 2.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc 1.00ms",
-    "start;main;delta();alpha();leakMemory() 1.00ms",
-    "start;main;delta();alpha() 696.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 6.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 2.00ms",
-    "start;main;delta();beta() 702.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 4.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 2.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;os_lock_lock 1.00ms",
-    "start;main;delta();leakMemory();malloc;;szone_malloc 1.00ms",
-    "start;main;delta() 693.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 4.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 2.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 2.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc 1.00ms",
-    "start;main;alpha() 715.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 3.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;allocate_pages_securely;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 5.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;DYLD-STUB$$os_lock_unlock 1.00ms",
-    "start;main;beta();leakMemory();malloc 1.00ms",
-    "start;main;beta() 704.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 3.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 2.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;_os_lock_spin_lock 2.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;os_lock_unlock 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;;small_malloc_from_free_list 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;gamma() 696.00ms",
-  ],
-}
-`;
-
-exports[`importFromInstrumentsDeepCopy time profile: indexToView 1`] = `0`;
-
-exports[`importFromInstrumentsDeepCopy time profile: profileGroup.name 1`] = `"simple-time-profile-deep-copy.txt"`;
-
-exports[`importFromInstrumentsTrace Instruments 8.3.3 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_dyld_start",
-      "line": undefined,
-      "name": "_dyld_start",
-      "selfWeight": 0,
-      "totalWeight": 8065764,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)",
-      "line": undefined,
-      "name": "dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)",
-      "selfWeight": 0,
-      "totalWeight": 8065764,
-    },
-    Frame {
-      "col": undefined,
-      "file": "C",
-      "key": "C:dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*)",
-      "line": undefined,
-      "name": "dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*)",
-      "selfWeight": 0,
-      "totalWeight": 8065764,
-    },
-    Frame {
-      "col": undefined,
-      "file": "C",
-      "key": "C:dyld::link(ImageLoader*, bool, bool, ImageLoader::RPathChain const&, unsigned int)",
-      "line": undefined,
-      "name": "dyld::link(ImageLoader*, bool, bool, ImageLoader::RPathChain const&, unsigned int)",
-      "selfWeight": 0,
-      "totalWeight": 5058859,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, bool, ImageLoader::RPathChain const&, char const*)",
-      "line": undefined,
-      "name": "ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, bool, ImageLoader::RPathChain const&, char const*)",
-      "selfWeight": 0,
-      "totalWeight": 5058859,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool)",
-      "line": undefined,
-      "name": "ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool)",
-      "selfWeight": 0,
-      "totalWeight": 5058859,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoaderMachOCompressed::doBind(ImageLoader::LinkContext const&, bool)",
-      "line": undefined,
-      "name": "ImageLoaderMachOCompressed::doBind(ImageLoader::LinkContext const&, bool)",
-      "selfWeight": 0,
-      "totalWeight": 5058859,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoaderMachO::setupLazyPointerHandler(ImageLoader::LinkContext const&)",
-      "line": undefined,
-      "name": "ImageLoaderMachO::setupLazyPointerHandler(ImageLoader::LinkContext const&)",
-      "selfWeight": 5058859,
-      "totalWeight": 5058859,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:dyld::initializeMainExecutable()",
-      "line": undefined,
-      "name": "dyld::initializeMainExecutable()",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&)",
-      "line": undefined,
-      "name": "ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&)",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "line": undefined,
-      "name": "ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "line": undefined,
-      "name": "ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&)",
-      "line": undefined,
-      "name": "ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&)",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&)",
-      "line": undefined,
-      "name": "ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&)",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:libSystem_initializer",
-      "line": undefined,
-      "name": "libSystem_initializer",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_libtrace_init",
-      "line": undefined,
-      "name": "_libtrace_init",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_os_log_init",
-      "line": undefined,
-      "name": "_os_log_init",
-      "selfWeight": 0,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:rb_tree_init",
-      "line": undefined,
-      "name": "rb_tree_init",
-      "selfWeight": 3006905,
-      "totalWeight": 3006905,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:start",
-      "line": undefined,
-      "name": "start",
-      "selfWeight": 0,
-      "totalWeight": 3355361365,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:main",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 3355361365,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:beta()",
-      "line": undefined,
-      "name": "beta()",
-      "selfWeight": 632450531,
-      "totalWeight": 972281109,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:delta()",
-      "line": undefined,
-      "name": "delta()",
-      "selfWeight": 377055585,
-      "totalWeight": 1693925861,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:gamma()",
-      "line": undefined,
-      "name": "gamma()",
-      "selfWeight": 370050499,
-      "totalWeight": 548449213,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:leakMemory()",
-      "line": undefined,
-      "name": "leakMemory()",
-      "selfWeight": 5019345,
-      "totalWeight": 1161400066,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:malloc",
-      "line": undefined,
-      "name": "malloc",
-      "selfWeight": 2002592,
-      "totalWeight": 1155366982,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:malloc_zone_malloc",
-      "line": undefined,
-      "name": "malloc_zone_malloc",
-      "selfWeight": 2028540,
-      "totalWeight": 1154378129,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:szone_malloc_should_clear",
-      "line": undefined,
-      "name": "szone_malloc_should_clear",
-      "selfWeight": 3018205,
-      "totalWeight": 1147318738,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:large_malloc",
-      "line": undefined,
-      "name": "large_malloc",
-      "selfWeight": 168400780,
-      "totalWeight": 1145301945,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:allocate_pages",
-      "line": undefined,
-      "name": "allocate_pages",
-      "selfWeight": 16125063,
-      "totalWeight": 790863526,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:mach_vm_map",
-      "line": undefined,
-      "name": "mach_vm_map",
-      "selfWeight": 15181612,
-      "totalWeight": 773734652,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_kernelrpc_mach_vm_map_trap",
-      "line": undefined,
-      "name": "_kernelrpc_mach_vm_map_trap",
-      "selfWeight": 759556851,
-      "totalWeight": 759556851,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/cpp/simple.cpp:alpha()",
-      "line": undefined,
-      "name": "alpha()",
-      "selfWeight": 813388281,
-      "totalWeight": 1287169747,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:large_entries_grow_no_lock",
-      "line": undefined,
-      "name": "large_entries_grow_no_lock",
-      "selfWeight": 170995767,
-      "totalWeight": 170995767,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:deallocate_pages",
-      "line": undefined,
-      "name": "deallocate_pages",
-      "selfWeight": 0,
-      "totalWeight": 15041872,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": 140736724633956,
-      "line": undefined,
-      "name": "0x00007fffd27a8964",
-      "selfWeight": 0,
-      "totalWeight": 15041872,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_kernelrpc_mach_vm_deallocate_trap",
-      "line": undefined,
-      "name": "_kernelrpc_mach_vm_deallocate_trap",
-      "selfWeight": 15041872,
-      "totalWeight": 15041872,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:default_zone_malloc",
-      "line": undefined,
-      "name": "default_zone_malloc",
-      "selfWeight": 4029439,
-      "totalWeight": 4029439,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:0x10000000000000000",
-      "line": undefined,
-      "name": "0x10000000000000000",
-      "selfWeight": 0,
-      "totalWeight": 2015151,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:DYLD-STUB$$malloc",
-      "line": undefined,
-      "name": "DYLD-STUB$$malloc",
-      "selfWeight": 1016403,
-      "totalWeight": 1016403,
-    },
-  ],
-  "name": "simple-time-profile.trace - thread 4",
-  "stacks": Array [
-    " 730.82ms",
-    "_dyld_start;dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*);dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*);dyld::link(ImageLoader*, bool, bool, ImageLoader::RPathChain const&, unsigned int);ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, bool, ImageLoader::RPathChain const&, char const*);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool, bool);ImageLoaderMachOCompressed::doBind(ImageLoader::LinkContext const&, bool);ImageLoaderMachO::setupLazyPointerHandler(ImageLoader::LinkContext const&) 5.06ms",
-    "_dyld_start;dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*);dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*);dyld::initializeMainExecutable();ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&);ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&);ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&);libSystem_initializer;_libtrace_init;_os_log_init;rb_tree_init 3.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 2.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 2.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 5.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;deallocate_pages;0x00007fffd27a8964;_kernelrpc_mach_vm_deallocate_trap 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 2.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 2.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 3.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 11.08ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;deallocate_pages;0x00007fffd27a8964;_kernelrpc_mach_vm_deallocate_trap 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.03ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.04ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 997.55µs",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 20.21ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;deallocate_pages;0x00007fffd27a8964;_kernelrpc_mach_vm_deallocate_trap 997.57µs",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 3.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 2.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.03ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 998.31µs",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 32.32ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;deallocate_pages;0x00007fffd27a8964;_kernelrpc_mach_vm_deallocate_trap 3.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;default_zone_malloc 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;0x10000000000000000;large_malloc 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.04ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 2.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 2.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.03ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.04ms",
-    "start;main;delta();alpha() 996.34µs",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 2.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.02ms",
-    "start;main;gamma() 2.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.03ms",
-    "start;main;gamma() 996.35µs",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 2.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 999.97µs",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 987.76µs",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();0x10000000000000000;malloc_zone_malloc 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 987.08µs",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 2.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 3.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;large_entries_grow_no_lock 99.37ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;deallocate_pages;0x00007fffd27a8964;_kernelrpc_mach_vm_deallocate_trap 9.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.04ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();DYLD-STUB$$malloc 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 2.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;default_zone_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;default_zone_malloc 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 2.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 999.80µs",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.03ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta() 999.51µs",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;default_zone_malloc 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;large_malloc;allocate_pages;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.02ms",
-  ],
-}
-`;
-
-exports[`importFromInstrumentsTrace Instruments 9.3.1 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_dyld_start",
-      "line": undefined,
-      "name": "_dyld_start",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)",
-      "line": undefined,
-      "name": "dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*)",
-      "line": undefined,
-      "name": "dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:dyld::initializeMainExecutable()",
-      "line": undefined,
-      "name": "dyld::initializeMainExecutable()",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&)",
-      "line": undefined,
-      "name": "ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "line": undefined,
-      "name": "ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "line": undefined,
-      "name": "ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&)",
-      "line": undefined,
-      "name": "ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&)",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": 4576336505,
-      "line": undefined,
-      "name": "0x0000000110c55a79",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:libSystem_initializer",
-      "line": undefined,
-      "name": "libSystem_initializer",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_libc_initializer",
-      "line": undefined,
-      "name": "_libc_initializer",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:__chk_init",
-      "line": undefined,
-      "name": "__chk_init",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_dyld_register_func_for_add_image",
-      "line": undefined,
-      "name": "_dyld_register_func_for_add_image",
-      "selfWeight": 0,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_dyld_func_lookup",
-      "line": undefined,
-      "name": "_dyld_func_lookup",
-      "selfWeight": 9020084,
-      "totalWeight": 9020084,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:start",
-      "line": undefined,
-      "name": "start",
-      "selfWeight": 0,
-      "totalWeight": 4702672068,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:main",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 4702672068,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:beta()",
-      "line": undefined,
-      "name": "beta()",
-      "selfWeight": 1543547693,
-      "totalWeight": 1579892502,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:gamma()",
-      "line": undefined,
-      "name": "gamma()",
-      "selfWeight": 758740644,
-      "totalWeight": 781022655,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:delta()",
-      "line": undefined,
-      "name": "delta()",
-      "selfWeight": 769905058,
-      "totalWeight": 2350478954,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:alpha()",
-      "line": undefined,
-      "name": "alpha()",
-      "selfWeight": 1534533258,
-      "totalWeight": 1554663995,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp",
-      "key": "/Users/jlfwong/code/speedscope/sample/programs/cpp/simple.cpp:leakMemory()",
-      "line": undefined,
-      "name": "leakMemory()",
-      "selfWeight": 1000940,
-      "totalWeight": 94944068,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:malloc",
-      "line": undefined,
-      "name": "malloc",
-      "selfWeight": 3018022,
-      "totalWeight": 93943128,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:malloc_zone_malloc",
-      "line": undefined,
-      "name": "malloc_zone_malloc",
-      "selfWeight": 4019328,
-      "totalWeight": 90925106,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:szone_malloc_should_clear",
-      "line": undefined,
-      "name": "szone_malloc_should_clear",
-      "selfWeight": 67687479,
-      "totalWeight": 86905778,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:small_malloc_from_free_list",
-      "line": undefined,
-      "name": "small_malloc_from_free_list",
-      "selfWeight": 18206242,
-      "totalWeight": 18206242,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:DYLD-STUB$$malloc",
-      "line": undefined,
-      "name": "DYLD-STUB$$malloc",
-      "selfWeight": 1001347,
-      "totalWeight": 1001347,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:mvm_allocate_pages_securely",
-      "line": undefined,
-      "name": "mvm_allocate_pages_securely",
-      "selfWeight": 0,
-      "totalWeight": 1012057,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:mach_vm_map",
-      "line": undefined,
-      "name": "mach_vm_map",
-      "selfWeight": 0,
-      "totalWeight": 1012057,
-    },
-    Frame {
-      "col": undefined,
-      "file": undefined,
-      "key": "null:_kernelrpc_mach_vm_map_trap",
-      "line": undefined,
-      "name": "_kernelrpc_mach_vm_map_trap",
-      "selfWeight": 1012057,
-      "totalWeight": 1012057,
-    },
-  ],
-  "name": "simple-time-profile.trace - thread 4",
-  "stacks": Array [
-    " 7.15ms",
-    "_dyld_start;dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*);dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*);dyld::initializeMainExecutable();ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&);ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&);ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&);0x0000000110c55a79;libSystem_initializer;_libc_initializer;__chk_init;_dyld_register_func_for_add_image;_dyld_func_lookup 9.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 3.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.04ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.05ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 998.26µs",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();alpha() 2.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.04ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.05ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.05ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.06ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 995.86µs",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 999.74µs",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.04ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;beta() 991.49µs",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 2.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta() 2.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.05ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;gamma() 997.66µs",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;beta() 2.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta();leakMemory() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.07ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;alpha() 2.03ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;delta();beta() 2.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.04ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.03ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.04ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 998.65µs",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 2.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1000.00µs",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 998.33µs",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();DYLD-STUB$$malloc 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 997.60µs",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 984.72µs",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.04ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 999.29µs",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta() 2.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 2.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 993.13µs",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;gamma() 2.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 997.91µs",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 995.99µs",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;mvm_allocate_pages_securely;mach_vm_map;_kernelrpc_mach_vm_map_trap 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();beta() 997.28µs",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;beta() 2.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear;small_malloc_from_free_list 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.04ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.03ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 996.58µs",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.04ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.03ms",
-    "start;main;alpha() 995.94µs",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.04ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.03ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.06ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.04ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 999.58µs",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 999.95µs",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.03ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.03ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 999.71µs",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.03ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.03ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.07ms",
-    "start;main;beta() 952.85µs",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.06ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.04ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc 1.02ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.06ms",
-    "start;main;beta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.07ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.03ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 4.01ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta() 2.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 3.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;delta();leakMemory();malloc;malloc_zone_malloc;szone_malloc_should_clear 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.02ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.02ms",
-    "start;main;alpha() 1.02ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.02ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;delta() 1.01ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.02ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.01ms",
-    "start;main;beta() 1.01ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;delta();alpha() 2.01ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.01ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.01ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.02ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();beta() 1.00ms",
-    "start;main;delta() 1.00ms",
-    "start;main;alpha() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.00ms",
-    "start;main;gamma() 1.00ms",
-    "start;main;delta();alpha() 1.00ms",
-    "start;main;beta() 1.01ms",
-  ],
-}
-`;
diff --git a/src/speedscope/import/__snapshots__/linux-tools-perf.test.ts.snap b/src/speedscope/import/__snapshots__/linux-tools-perf.test.ts.snap
deleted file mode 100644
index 604674b..0000000
--- a/src/speedscope/import/__snapshots__/linux-tools-perf.test.ts.snap
+++ /dev/null
@@ -1,1381 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromLinuxPerf forks.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.13909899999271147,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.13909899999271147,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "main (/workdir/forks)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.13909899999271147,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z5gammav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z5gammav",
-      "selfWeight": 0.0249014999717474,
-      "totalWeight": 0.0249014999717474,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z5deltav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0.023014500009594485,
-      "totalWeight": 0.0690374999830965,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z4betav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.04688100004568696,
-      "totalWeight": 0.04688100004568696,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z5alphav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.044301999965682626,
-      "totalWeight": 0.044301999965682626,
-    },
-  ],
-  "name": "forks tid: 9",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 489.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 938.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 991.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 939.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.44ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.51ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 3.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 945.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 919.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 2.15ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 988.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 985.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 935.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 2.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 970.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 968.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 986.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 994.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 935.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 911.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 976.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 952.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 984.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 915.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 981.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 926.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 987.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 985.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 952.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 980.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 939.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 2.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 964.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 939.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 988.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 985.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 996.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 933.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 982.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 987.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 964.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 985.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 950.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 919.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 2.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 983.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 935.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 979.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 499.00µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf forks.linux-perf.txt 2`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.1390899999823887,
-      "totalWeight": 0.1390899999823887,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0.0009860000282060355,
-      "totalWeight": 0.003918000002158806,
-    },
-  ],
-  "name": "swapper",
-  "stacks": Array [
-    "??? ([kernel.kallsyms]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 496.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 13.90ms",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 507.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 3.48ms",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]) 493.50µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 34.50µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 491.00µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]) 492.50µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 13.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 472.00µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 499.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 2.49ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 505.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.50ms",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 504.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 25.19ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 492.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 488.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.00ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 414.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 420.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 2.17ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 826.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.22ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 474.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 478.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 502.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 511.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 496.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 485.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 902.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 565.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 560.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 792.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 38.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 609.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 578.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 482.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 469.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 435.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 422.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.21ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 472.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 467.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.02ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 990.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.02ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 391.50µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 387.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.25ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 476.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 461.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 8.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 496.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 497.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 501.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 505.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.50ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 494.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 498.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 403.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 393.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 54.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.19ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 945.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 513.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 489.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 498.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 502.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 499.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 496.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 996.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 833.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 31.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 613.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 582.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 377.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 381.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 623.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 549.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 509.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 505.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 507.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 494.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 508.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 492.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 509.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 492.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.00ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 7.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 984.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 10.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 443.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 437.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.16ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 2.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 383.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 388.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.23ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 471.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 473.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 513.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 516.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 980.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.02ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 495.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 494.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 502.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 502.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 499.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 497.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 824.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.22ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 477.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 480.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 505.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 506.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 503.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 499.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 483.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 498.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 937.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.11ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 481.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 483.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 503.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 504.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 800.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.24ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 477.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 486.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 433.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 419.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 15.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.17ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 477.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 477.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 506.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 506.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 498.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 494.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 501.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 426.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 426.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.18ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 486.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 489.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 9.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 976.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 502.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 500.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 3.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 482.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 467.50µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf forks.linux-perf.txt 3`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.05253200000151992,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.05253200000151992,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "main (/workdir/forks)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.05253200000151992,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z4betav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.022044000070309266,
-      "totalWeight": 0.023026500042760745,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z5alphav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.029505499958759174,
-      "totalWeight": 0.029505499958759174,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.0014934999635443091,
-      "totalWeight": 0.0014934999635443091,
-    },
-  ],
-  "name": "forks tid: 11",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.50ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.94ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 4.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 3.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.94ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 932.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav;??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 982.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 8.49ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 3.60ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.94ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 5.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 3.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.95ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 4.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.01ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 511.00µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf forks.linux-perf.txt 4`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.049998999980743974,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.049998999980743974,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "main (/workdir/forks)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.049998999980743974,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z5alphav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.024442999972961843,
-      "totalWeight": 0.0259504999849014,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/forks",
-      "key": "_Z4betav (/workdir/forks)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.024048499995842576,
-      "totalWeight": 0.024048499995842576,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.0015075000119395554,
-      "totalWeight": 0.0015075000119395554,
-    },
-  ],
-  "name": "forks tid: 10",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.49ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 937.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 4.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 3.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 3.86ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.95ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav;??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 1.51ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 4.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.49ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 6.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 4.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.96ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 3.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.95ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 518.00µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf forks.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf forks.linux-perf.txt: profileGroup.name 1`] = `"forks.linux-perf.txt"`;
-
-exports[`importFromLinuxPerf one-sample.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "main (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5deltav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z4betav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-  ],
-  "name": "simple-terminat tid: 10",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf one-sample.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf one-sample.linux-perf.txt: profileGroup.name 1`] = `"simple-terminat tid: 10"`;
-
-exports[`importFromLinuxPerf simple.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "main (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5deltav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z4betav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-  ],
-  "name": "simple-terminat tid: 10",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf simple.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf simple.linux-perf.txt: profileGroup.name 1`] = `"simple-terminat tid: 10"`;
-
-exports[`importFromLinuxPerf simple-with-header.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.13538200000766665,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.13538200000766665,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "main (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.13538200000766665,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5deltav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0.023261499911313877,
-      "totalWeight": 0.06896450009662658,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z4betav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.04615200011176057,
-      "totalWeight": 0.04615200011176057,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5alphav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.04411000004620291,
-      "totalWeight": 0.04411000004620291,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5gammav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5gammav",
-      "selfWeight": 0.021858499938389286,
-      "totalWeight": 0.021858499938389286,
-    },
-  ],
-  "name": "simple-terminat tid: 9",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 494.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 990.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 897.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.12ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 979.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 984.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 933.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 958.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.13ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 949.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 969.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 922.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 996.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 996.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 972.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 907.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 2.11ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 984.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 952.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 956.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 983.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 962.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 897.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 977.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 996.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 924.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 979.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 982.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 996.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 939.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 938.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 2.14ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 989.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 995.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 952.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 989.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 930.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 964.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 964.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 933.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.10ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 883.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.09ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 967.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 996.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 956.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 987.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 964.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 992.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 995.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 957.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 990.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 960.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 991.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 944.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 968.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.16ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 988.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 984.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 476.50µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf simple-with-header.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf simple-with-header.linux-perf.txt: profileGroup.name 1`] = `"simple-terminat tid: 9"`;
-
-exports[`importFromLinuxPerf simple-with-pids.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.13586300000315532,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.13586300000315532,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "main (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.13586300000315532,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5deltav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0.01918700002715923,
-      "totalWeight": 0.06494599996949546,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z4betav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.05723400003626011,
-      "totalWeight": 0.05723400003626011,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5gammav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5gammav",
-      "selfWeight": 0.022971499915001914,
-      "totalWeight": 0.022971499915001914,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5alphav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.036470500024734065,
-      "totalWeight": 0.036470500024734065,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.0005990000208839774,
-      "totalWeight": 0.0005990000208839774,
-    },
-  ],
-  "name": "simple-terminat pid: 9 tid: 9",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 468.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 985.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 993.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 987.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 995.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 987.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 992.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 993.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 994.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 996.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 987.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 911.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 994.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.10ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 967.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 906.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 986.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 902.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 996.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.11ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 899.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 2.09ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 979.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 992.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 957.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 991.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 931.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 988.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 929.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 2.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 981.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 931.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 947.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 948.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 957.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 995.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 940.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.11ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 965.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.15ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 986.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 996.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 923.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 985.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 991.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 932.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 906.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 2.09ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 987.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 992.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 923.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.03ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 599.00µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf simple-with-pids.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf simple-with-pids.linux-perf.txt: profileGroup.name 1`] = `"simple-terminat pid: 9 tid: 9"`;
-
-exports[`importFromLinuxPerf system-wide.linux-perf.txt 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0,
-      "totalWeight": 0.13823499999125488,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/lib/x86_64-linux-gnu/libc-2.27.so",
-      "key": "__libc_start_main (/lib/x86_64-linux-gnu/libc-2.27.so)",
-      "line": undefined,
-      "name": "__libc_start_main",
-      "selfWeight": 0,
-      "totalWeight": 0.13823499999125488,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "main (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "main",
-      "selfWeight": 0,
-      "totalWeight": 0.13823499999125488,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5alphav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5alphav",
-      "selfWeight": 0.04059999997843988,
-      "totalWeight": 0.04059999997843988,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5deltav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5deltav",
-      "selfWeight": 0.023244000098202378,
-      "totalWeight": 0.07264250004664063,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z4betav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z4betav",
-      "selfWeight": 0.05354449988226406,
-      "totalWeight": 0.05447799988905899,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/workdir/simple-terminates",
-      "key": "_Z5gammav (/workdir/simple-terminates)",
-      "line": undefined,
-      "name": "_Z5gammav",
-      "selfWeight": 0.01991300002555363,
-      "totalWeight": 0.01991300002555363,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.0009335000067949295,
-      "totalWeight": 0.0009335000067949295,
-    },
-  ],
-  "name": "simple-terminat tid: 9",
-  "stacks": Array [
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 501.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 996.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 989.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav;??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 933.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.46ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.47ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.06ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 965.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 2.12ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 925.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 987.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 921.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.08ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 989.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 974.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 963.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.04ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 991.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 922.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.02ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.07ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 983.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 998.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 974.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.03ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 999.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 932.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 2.09ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 986.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 954.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 991.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.05ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 989.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 998.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1000.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 981.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 921.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 2.09ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.01ms",
-    "??? ([unknown]);__libc_start_main;main;_Z4betav 999.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5gammav 995.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z5alphav 997.50µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav 1.00ms",
-    "??? ([unknown]);__libc_start_main;main;_Z5alphav 980.00µs",
-    "??? ([unknown]);__libc_start_main;main;_Z5deltav;_Z4betav 476.00µs",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf system-wide.linux-perf.txt 2`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "[kernel.kallsyms]",
-      "key": "[unknown] ([kernel.kallsyms])",
-      "line": undefined,
-      "name": "??? ([kernel.kallsyms])",
-      "selfWeight": 0.1372890000056941,
-      "totalWeight": 0.1372890000056941,
-    },
-    Frame {
-      "col": undefined,
-      "file": "[unknown]",
-      "key": "[unknown] ([unknown])",
-      "line": undefined,
-      "name": "??? ([unknown])",
-      "selfWeight": 0.0009340000106021762,
-      "totalWeight": 0.0014475000207312405,
-    },
-  ],
-  "name": "swapper",
-  "stacks": Array [
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 17.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 9.55ms",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]) 487.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 486.00µs",
-    "??? ([unknown]);??? ([unknown]) 446.50µs",
-    "??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 34.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 38.00µs",
-    "??? ([kernel.kallsyms]);??? ([unknown]);??? ([unknown]);??? ([unknown]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 479.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 6.52ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 517.00µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 111.12ms",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 399.50µs",
-    "??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]);??? ([kernel.kallsyms]) 8.13ms",
-  ],
-}
-`;
-
-exports[`importFromLinuxPerf system-wide.linux-perf.txt: indexToView 1`] = `0`;
-
-exports[`importFromLinuxPerf system-wide.linux-perf.txt: profileGroup.name 1`] = `"system-wide.linux-perf.txt"`;
diff --git a/src/speedscope/import/__snapshots__/pprof.test.ts.snap b/src/speedscope/import/__snapshots__/pprof.test.ts.snap
deleted file mode 100644
index 7039b84..0000000
--- a/src/speedscope/import/__snapshots__/pprof.test.ts.snap
+++ /dev/null
@@ -1,249 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importAsPprofProfile 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.main:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.main",
-      "selfWeight": 0,
-      "totalWeight": 136,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/go/simple.go",
-      "key": "main.main:/Users/jlfwong/code/speedscope/sample/programs/go/simple.go:0",
-      "line": 0,
-      "name": "main.main",
-      "selfWeight": 0,
-      "totalWeight": 136,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/go/simple.go",
-      "key": "main.delta:/Users/jlfwong/code/speedscope/sample/programs/go/simple.go:0",
-      "line": 0,
-      "name": "main.delta",
-      "selfWeight": 22,
-      "totalWeight": 58,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/go/simple.go",
-      "key": "main.beta:/Users/jlfwong/code/speedscope/sample/programs/go/simple.go:0",
-      "line": 0,
-      "name": "main.beta",
-      "selfWeight": 39,
-      "totalWeight": 39,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/go/simple.go",
-      "key": "main.alpha:/Users/jlfwong/code/speedscope/sample/programs/go/simple.go:0",
-      "line": 0,
-      "name": "main.alpha",
-      "selfWeight": 48,
-      "totalWeight": 48,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/Users/jlfwong/code/speedscope/sample/programs/go/simple.go",
-      "key": "main.gamma:/Users/jlfwong/code/speedscope/sample/programs/go/simple.go:0",
-      "line": 0,
-      "name": "main.gamma",
-      "selfWeight": 27,
-      "totalWeight": 27,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/asm_amd64.s",
-      "key": "runtime.morestack:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/asm_amd64.s:0",
-      "line": 0,
-      "name": "runtime.morestack",
-      "selfWeight": 0,
-      "totalWeight": 11,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/stack.go",
-      "key": "runtime.newstack:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/stack.go:0",
-      "line": 0,
-      "name": "runtime.newstack",
-      "selfWeight": 0,
-      "totalWeight": 11,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/duff_amd64.s",
-      "key": "runtime.duffcopy:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/duff_amd64.s:0",
-      "line": 0,
-      "name": "runtime.duffcopy",
-      "selfWeight": 11,
-      "totalWeight": 11,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/time.go",
-      "key": "runtime.timerproc:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/time.go:0",
-      "line": 0,
-      "name": "runtime.timerproc",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/time.go",
-      "key": "runtime.goroutineReady:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/time.go:0",
-      "line": 0,
-      "name": "runtime.goroutineReady",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.goready:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.goready",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/asm_amd64.s",
-      "key": "runtime.systemstack:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/asm_amd64.s:0",
-      "line": 0,
-      "name": "runtime.systemstack",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.goready.func1:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.goready.func1",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.ready:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.ready",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.wakep:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.wakep",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.startm:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.startm",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/lock_sema.go",
-      "key": "runtime.notewakeup:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/lock_sema.go:0",
-      "line": 0,
-      "name": "runtime.notewakeup",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/os_darwin.go",
-      "key": "runtime.semawakeup:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/os_darwin.go:0",
-      "line": 0,
-      "name": "runtime.semawakeup",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/os_darwin.go",
-      "key": "runtime.mach_semrelease:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/os_darwin.go:0",
-      "line": 0,
-      "name": "runtime.mach_semrelease",
-      "selfWeight": 0,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/sys_darwin_amd64.s",
-      "key": "runtime.mach_semaphore_signal:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/sys_darwin_amd64.s:0",
-      "line": 0,
-      "name": "runtime.mach_semaphore_signal",
-      "selfWeight": 1,
-      "totalWeight": 1,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.mstart:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.mstart",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.mstart1:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.mstart1",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go",
-      "key": "runtime.sysmon:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/proc.go:0",
-      "line": 0,
-      "name": "runtime.sysmon",
-      "selfWeight": 0,
-      "totalWeight": 2,
-    },
-    Frame {
-      "col": undefined,
-      "file": "/usr/local/Cellar/go/1.10.1/libexec/src/runtime/sys_darwin_amd64.s",
-      "key": "runtime.usleep:/usr/local/Cellar/go/1.10.1/libexec/src/runtime/sys_darwin_amd64.s:0",
-      "line": 0,
-      "name": "runtime.usleep",
-      "selfWeight": 2,
-      "totalWeight": 2,
-    },
-  ],
-  "name": "simple.prof",
-  "stacks": Array [
-    "runtime.main;main.main;main.delta;main.beta 14",
-    "runtime.main;main.main;main.alpha 26",
-    "runtime.main;main.main;main.gamma 27",
-    "runtime.morestack;runtime.newstack;runtime.duffcopy 11",
-    "runtime.main;main.main;main.beta 25",
-    "runtime.main;main.main;main.delta 22",
-    "runtime.main;main.main;main.delta;main.alpha 22",
-    "runtime.timerproc;runtime.goroutineReady;runtime.goready;runtime.systemstack;runtime.goready.func1;runtime.ready;runtime.wakep;runtime.startm;runtime.notewakeup;runtime.semawakeup;runtime.mach_semrelease;runtime.mach_semaphore_signal 1",
-    "runtime.mstart;runtime.mstart1;runtime.sysmon;runtime.usleep 2",
-  ],
-}
-`;
-
-exports[`importAsPprofProfile: indexToView 1`] = `0`;
-
-exports[`importAsPprofProfile: profileGroup.name 1`] = `"simple.prof"`;
diff --git a/src/speedscope/import/__snapshots__/stackprof.test.ts.snap b/src/speedscope/import/__snapshots__/stackprof.test.ts.snap
deleted file mode 100644
index 6639ff4..0000000
--- a/src/speedscope/import/__snapshots__/stackprof.test.ts.snap
+++ /dev/null
@@ -1,856 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`importFromStackprof 1`] = `
-Object {
-  "frames": Array [
-    Frame {
-      "col": undefined,
-      "file": "simple.rb",
-      "key": 70098912279220,
-      "line": undefined,
-      "name": "
", - "selfWeight": 0, - "totalWeight": 1551604, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098928804560, - "line": undefined, - "name": "
", - "selfWeight": 0, - "totalWeight": 1551604, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098916424940, - "line": 31, - "name": "block in
", - "selfWeight": 0, - "totalWeight": 1551604, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098916485880, - "line": 4, - "name": "Object#a", - "selfWeight": 0, - "totalWeight": 1551604, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098916485860, - "line": 11, - "name": "Object#b", - "selfWeight": 0, - "totalWeight": 776898, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098916485820, - "line": 23, - "name": "Object#d", - "selfWeight": 1087582, - "totalWeight": 1551604, - }, - Frame { - "col": undefined, - "file": "", - "key": 313, - "line": undefined, - "name": "(garbage collection)", - "selfWeight": 464022, - "totalWeight": 464022, - }, - Frame { - "col": undefined, - "file": "/Users/jlfwong/code/speedscope/sample/programs/ruby/simple.rb", - "key": 70098916485840, - "line": 17, - "name": "Object#c", - "selfWeight": 0, - "totalWeight": 774706, - }, - ], - "name": "simple-stackprof.json", - "stacks": Array [ - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.11ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 919.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 955.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 892.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 995.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 899.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 7.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.95ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 998.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.07ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 892.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 969.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 986.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 926.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 989.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 977.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.16ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 921.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.84ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.87ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.87ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.82ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 946.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.92ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 965.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.95ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 996.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.82ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 980.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 988.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.93ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.85ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.94ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 4.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.85ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 989.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 962.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.85ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 942.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.93ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 4.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.86ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 985.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 996.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 974.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 998.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 845.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 3.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 803.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 959.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 3.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 970.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 903.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 4.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 979.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.87ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.13ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 930.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 943.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 871.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 987.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 898.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 968.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 879.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 934.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 4.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 998.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.13ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 909.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 996.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 4.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 995.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 986.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 944.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 972.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 964.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 4.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 898.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 4.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.85ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 4.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 901.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.86ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 938.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 981.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 981.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 974.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 910.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 978.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.84ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.94ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 888.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 981.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 939.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.91ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 936.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 895.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.11ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 713.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 899.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.87ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 847.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 986.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 936.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.28ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 780.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 4.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 947.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 983.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.88ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.94ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.67ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.27ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.82ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.93ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.89ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.14ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 951.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 836.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 996.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 908.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 883.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 898.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 969.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 913.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.37ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 681.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.93ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 904.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.18ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 899.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.82ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 963.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 956.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 774.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 966.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 803.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.15ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 969.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 992.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 977.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 979.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 885.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 918.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 968.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 5.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 987.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 987.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 980.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 984.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 977.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 995.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.88ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 999.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 937.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 861.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.11ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.87ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 942.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 986.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 7.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 949.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 992.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 955.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.19ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 769.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 6.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 999.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 3.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 954.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 995.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 971.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 901.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 881.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 954.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 907.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 834.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 993.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 923.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 977.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 903.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 943.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 982.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 948.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.92ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 990.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 993.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 922.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 854.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.17ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.82ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 922.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.26ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 683.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 989.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 996.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.88ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.80ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.12ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 973.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.97ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 980.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 872.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 982.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 966.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.90ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 997.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 994.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 968.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.89ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 962.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.94ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 956.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 982.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.03ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 956.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.28ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.65ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 925.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 950.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 5.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 933.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 990.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 998.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 929.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.16ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.91ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.18ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 766.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.91ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 969.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 882.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.13ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.48ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 510.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 4.96ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 4.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.90ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.10ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.98ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.92ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.97ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 970.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.05ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 981.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 975.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 991.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 990.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.03ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 902.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.12ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 7.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.89ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.10ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 967.00µs", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.84ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.09ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 3.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 6.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.99ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.95ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 2.11ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 3.88ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.07ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 974.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 2.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.00ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 976.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.00ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 974.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 925.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 994.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 1.99ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.87ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.16ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.96ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.02ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.98ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.01ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 994.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 932.00µs", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d 5.06ms", - "
;
;block in
;Object#a;Object#a;Object#b;Object#b;Object#d;Object#d;(garbage collection) 1.04ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 2.94ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d;(garbage collection) 1.08ms", - "
;
;block in
;Object#a;Object#a;Object#c;Object#c;Object#d;Object#d 1.93ms", - ], -} -`; - -exports[`importFromStackprof: indexToView 1`] = `0`; - -exports[`importFromStackprof: profileGroup.name 1`] = `"simple-stackprof.json"`; diff --git a/src/speedscope/import/__snapshots__/v8heapalloc.test.ts.snap b/src/speedscope/import/__snapshots__/v8heapalloc.test.ts.snap deleted file mode 100644 index dcedd2b..0000000 --- a/src/speedscope/import/__snapshots__/v8heapalloc.test.ts.snap +++ /dev/null @@ -1,4876 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`importV8HeapAlloc from Chrome 1`] = ` -Object { - "frames": Array [ - Frame { - "col": -1, - "file": "", - "key": "(root)::-1:-1", - "line": -1, - "name": "(root)", - "selfWeight": 0, - "totalWeight": 10030888, - }, - Frame { - "col": 0, - "file": "extensions::SafeBuiltins", - "key": "(anonymous):extensions::SafeBuiltins:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 82056, - }, - Frame { - "col": 9, - "file": "extensions::SafeBuiltins", - "key": "(anonymous):extensions::SafeBuiltins:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 32800, - "totalWeight": 82056, - }, - Frame { - "col": 20, - "file": "extensions::SafeBuiltins", - "key": "saveBuiltin:extensions::SafeBuiltins:24:20", - "line": 24, - "name": "saveBuiltin", - "selfWeight": 16400, - "totalWeight": 49256, - }, - Frame { - "col": 21, - "file": "extensions::SafeBuiltins", - "key": "makeCallable:extensions::SafeBuiltins:6:21", - "line": 6, - "name": "makeCallable", - "selfWeight": 0, - "totalWeight": 32856, - }, - Frame { - "col": -1, - "file": "", - "key": "forEach::-1:-1", - "line": -1, - "name": "forEach", - "selfWeight": 16400, - "totalWeight": 65672, - }, - Frame { - "col": 32, - "file": "extensions::SafeBuiltins", - "key": "(anonymous):extensions::SafeBuiltins:7:32", - "line": 7, - "name": "(anonymous)", - "selfWeight": 32856, - "totalWeight": 32856, - }, - Frame { - "col": 0, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi.js", - "key": "(anonymous):chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi.js:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 32808, - "totalWeight": 32808, - }, - Frame { - "col": 0, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "(anonymous):chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 393160, - }, - Frame { - "col": 30, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "domFilterer:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1548:30", - "line": 1548, - "name": "domFilterer", - "selfWeight": 0, - "totalWeight": 16440, - }, - Frame { - "col": 27, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "vAPI.DOMFilterer:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:113:27", - "line": 113, - "name": "vAPI.DOMFilterer", - "selfWeight": 16440, - "totalWeight": 16440, - }, - Frame { - "col": 29, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "(anonymous):chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1614:29", - "line": 1614, - "name": "(anonymous)", - "selfWeight": 16616, - "totalWeight": 16616, - }, - Frame { - "col": 19, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "bootstrap:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:2159:19", - "line": 2159, - "name": "bootstrap", - "selfWeight": 0, - "totalWeight": 360104, - }, - Frame { - "col": 18, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js", - "key": "send:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js:251:18", - "line": 251, - "name": "send", - "selfWeight": 0, - "totalWeight": 360104, - }, - Frame { - "col": 21, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js", - "key": "getPort:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js:247:21", - "line": 247, - "name": "getPort", - "selfWeight": 0, - "totalWeight": 360104, - }, - Frame { - "col": 24, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js", - "key": "createPort:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js:221:24", - "line": 221, - "name": "createPort", - "selfWeight": 33344, - "totalWeight": 360104, - }, - Frame { - "col": 9, - "file": "extensions::runtime", - "key": "(anonymous):extensions::runtime:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 58056, - "totalWeight": 277480, - }, - Frame { - "col": 9, - "file": "extensions::binding", - "key": "(anonymous):extensions::binding:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 52576, - "totalWeight": 169904, - }, - Frame { - "col": 9, - "file": "extensions::event_bindings", - "key": "(anonymous):extensions::event_bindings:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 16448, - "totalWeight": 117328, - }, - Frame { - "col": 9, - "file": "extensions::uncaught_exception_handler", - "key": "(anonymous):extensions::uncaught_exception_handler:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 9, - "file": "extensions::sendRequest", - "key": "(anonymous):extensions::sendRequest:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 32824, - "totalWeight": 84424, - }, - Frame { - "col": 9, - "file": "extensions::schemaUtils", - "key": "(anonymous):extensions::schemaUtils:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 35192, - "totalWeight": 51600, - }, - Frame { - "col": 9, - "file": "extensions::json_schema", - "key": "(anonymous):extensions::json_schema:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 9, - "file": "extensions::utils", - "key": "(anonymous):extensions::utils:0:9", - "line": 0, - "name": "(anonymous)", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 20, - "file": "extensions::binding", - "key": "generate:extensions::binding:198:20", - "line": 198, - "name": "generate", - "selfWeight": 0, - "totalWeight": 32816, - }, - Frame { - "col": 35, - "file": "extensions::SafeBuiltins", - "key": "target.(anonymous function):extensions::SafeBuiltins:9:35", - "line": 9, - "name": "target.(anonymous function)", - "selfWeight": 0, - "totalWeight": 116104, - }, - Frame { - "col": 47, - "file": "extensions::binding", - "key": "(anonymous):extensions::binding:322:47", - "line": 322, - "name": "(anonymous)", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 36, - "file": "extensions::binding", - "key": "shouldCheckUnprivileged:extensions::binding:208:36", - "line": 208, - "name": "shouldCheckUnprivileged", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 0, - "file": "extensions::messaging", - "key": "(anonymous):extensions::messaging:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 16704, - "totalWeight": 16704, - }, - Frame { - "col": 55, - "file": "extensions::binding", - "key": "(anonymous):extensions::binding:356:55", - "line": 356, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 49280, - }, - Frame { - "col": 12, - "file": "extensions::binding", - "key": "(anonymous):extensions::binding:62:12", - "line": 62, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32824, - }, - Frame { - "col": 51, - "file": "extensions::runtime", - "key": "(anonymous):extensions::runtime:65:51", - "line": 65, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32824, - }, - Frame { - "col": 21, - "file": "extensions::messaging", - "key": "createPort:extensions::messaging:148:21", - "line": 148, - "name": "createPort", - "selfWeight": 0, - "totalWeight": 32824, - }, - Frame { - "col": 15, - "file": "extensions::messaging", - "key": "Port:extensions::messaging:470:15", - "line": 470, - "name": "Port", - "selfWeight": 0, - "totalWeight": 32824, - }, - Frame { - "col": 51, - "file": "extensions::utils", - "key": "privates.constructPrivate:extensions::utils:101:51", - "line": 101, - "name": "privates.constructPrivate", - "selfWeight": 0, - "totalWeight": 32824, - }, - Frame { - "col": 19, - "file": "extensions::messaging", - "key": "PortImpl:extensions::messaging:76:19", - "line": 76, - "name": "PortImpl", - "selfWeight": 16416, - "totalWeight": 32824, - }, - Frame { - "col": 31, - "file": "extensions::messaging", - "key": "createAnonymousEvent:extensions::messaging:24:31", - "line": 24, - "name": "createAnonymousEvent", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 16, - "file": "extensions::event_bindings", - "key": "Event:extensions::event_bindings:512:16", - "line": 512, - "name": "Event", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": -1, - "file": "", - "key": "create::-1:-1", - "line": -1, - "name": "create", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 38, - "file": "extensions::schemaUtils", - "key": "normalizeArgumentsAndValidate:extensions::schemaUtils:106:38", - "line": 106, - "name": "normalizeArgumentsAndValidate", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 25, - "file": "extensions::schemaUtils", - "key": "resolveSignature:extensions::schemaUtils:70:25", - "line": 70, - "name": "resolveSignature", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 38, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "safeObserverHandler:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1079:38", - "line": 1079, - "name": "safeObserverHandler", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 58, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "(anonymous):chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1963:58", - "line": 1963, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 115224, - }, - Frame { - "col": 31, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "surveyPhase1:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:2021:31", - "line": 2021, - "name": "surveyPhase1", - "selfWeight": 115224, - "totalWeight": 115224, - }, - Frame { - "col": 34, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "bootstrapPhase2:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:2161:34", - "line": 2161, - "name": "bootstrapPhase2", - "selfWeight": 0, - "totalWeight": 49496, - }, - Frame { - "col": 24, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "start:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1200:24", - "line": 1200, - "name": "start", - "selfWeight": 0, - "totalWeight": 49496, - }, - Frame { - "col": 30, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "onDOMCreated:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1815:30", - "line": 1815, - "name": "onDOMCreated", - "selfWeight": 33088, - "totalWeight": 33088, - }, - Frame { - "col": 30, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "onDOMCreated:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:2088:30", - "line": 2088, - "name": "onDOMCreated", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 28, - "file": "extensions::messaging", - "key": "dispatchOnMessage:extensions::messaging:386:28", - "line": 386, - "name": "dispatchOnMessage", - "selfWeight": 16592, - "totalWeight": 67056, - }, - Frame { - "col": 43, - "file": "extensions::utils", - "key": "publicClassPrototype.(anonymous function):extensions::utils:135:43", - "line": 135, - "name": "publicClassPrototype.(anonymous function)", - "selfWeight": 0, - "totalWeight": 50464, - }, - Frame { - "col": 41, - "file": "extensions::event_bindings", - "key": "EventImpl.dispatch:extensions::event_bindings:407:41", - "line": 407, - "name": "EventImpl.dispatch", - "selfWeight": 0, - "totalWeight": 50464, - }, - Frame { - "col": 42, - "file": "extensions::event_bindings", - "key": "EventImpl.dispatch_:extensions::event_bindings:362:42", - "line": 362, - "name": "EventImpl.dispatch_", - "selfWeight": 0, - "totalWeight": 50464, - }, - Frame { - "col": 51, - "file": "extensions::event_bindings", - "key": "EventImpl.dispatchToListener:extensions::event_bindings:401:51", - "line": 401, - "name": "EventImpl.dispatchToListener", - "selfWeight": 0, - "totalWeight": 50464, - }, - Frame { - "col": 29, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js", - "key": "messageListener:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/vapi-client.js:114:29", - "line": 114, - "name": "messageListener", - "selfWeight": 17136, - "totalWeight": 50464, - }, - Frame { - "col": 31, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "surveyPhase3:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:1907:31", - "line": 1907, - "name": "surveyPhase3", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 34, - "file": "chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js", - "key": "bootstrapPhase1:chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/js/contentscript.js:2222:34", - "line": 2222, - "name": "bootstrapPhase1", - "selfWeight": 16912, - "totalWeight": 16912, - }, - Frame { - "col": 282, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:0:282", - "line": 0, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 523, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "google.startTick:https://www.google.fr/?gws_rd=ssl:0:523", - "line": 0, - "name": "google.startTick", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 2992, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "d:https://www.google.fr/?gws_rd=ssl:0:2992", - "line": 0, - "name": "d", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 1011, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:400:1011", - "line": 400, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 2821, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "google.c.u:https://www.google.fr/?gws_rd=ssl:0:2821", - "line": 0, - "name": "google.c.u", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 660, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1655:660", - "line": 1655, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 467, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1663:467", - "line": 1663, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 350, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1658:350", - "line": 1658, - "name": "(anonymous)", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 3737, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:0:3737", - "line": 0, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 65648, - }, - Frame { - "col": 3746, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:0:3746", - "line": 0, - "name": "(anonymous)", - "selfWeight": 32848, - "totalWeight": 49248, - }, - Frame { - "col": 275, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "V:https://www.google.fr/?gws_rd=ssl:5:275", - "line": 5, - "name": "V", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 633, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "T:https://www.google.fr/?gws_rd=ssl:5:633", - "line": 5, - "name": "T", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 229, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:4:229", - "line": 4, - "name": "(anonymous)", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 1623, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:6:1623", - "line": 6, - "name": "(anonymous)", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 5972, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:0:5972", - "line": 0, - "name": "(anonymous)", - "selfWeight": 82056, - "totalWeight": 152280, - }, - Frame { - "col": 5456, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "L.h:https://www.google.fr/?gws_rd=ssl:0:5456", - "line": 0, - "name": "L.h", - "selfWeight": 53768, - "totalWeight": 53768, - }, - Frame { - "col": 2464, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:11:2464", - "line": 11, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 65776, - }, - Frame { - "col": 4396, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:11:4396", - "line": 11, - "name": "(anonymous)", - "selfWeight": 16432, - "totalWeight": 65776, - }, - Frame { - "col": 276, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "ja:https://www.google.fr/?gws_rd=ssl:14:276", - "line": 14, - "name": "ja", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:20:17", - "line": 20, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 32, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:20:32", - "line": 20, - "name": "(anonymous)", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 330, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "$b:https://www.google.fr/?gws_rd=ssl:46:330", - "line": 46, - "name": "$b", - "selfWeight": 0, - "totalWeight": 16520, - }, - Frame { - "col": 345, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.E:https://www.google.fr/?gws_rd=ssl:41:345", - "line": 41, - "name": "_.E", - "selfWeight": 16408, - "totalWeight": 32928, - }, - Frame { - "col": 87, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.v:https://www.google.fr/?gws_rd=ssl:27:87", - "line": 27, - "name": "_.v", - "selfWeight": 16520, - "totalWeight": 16520, - }, - Frame { - "col": 18282, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:58:18282", - "line": 58, - "name": "(anonymous)", - "selfWeight": 33416, - "totalWeight": 33416, - }, - Frame { - "col": 564, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:94:564", - "line": 94, - "name": "(anonymous)", - "selfWeight": 65328, - "totalWeight": 577856, - }, - Frame { - "col": 599, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:94:599", - "line": 94, - "name": "(anonymous)", - "selfWeight": 329736, - "totalWeight": 512528, - }, - Frame { - "col": 209, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.z:https://www.google.fr/?gws_rd=ssl:28:209", - "line": 28, - "name": "_.z", - "selfWeight": 148000, - "totalWeight": 148000, - }, - Frame { - "col": 9, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:162:9", - "line": 162, - "name": "(anonymous)", - "selfWeight": 16392, - "totalWeight": 16392, - }, - Frame { - "col": 145, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.fm:https://www.google.fr/?gws_rd=ssl:311:145", - "line": 311, - "name": "_.fm", - "selfWeight": 0, - "totalWeight": 34864, - }, - Frame { - "col": 419, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Kl.log:https://www.google.fr/?gws_rd=ssl:299:419", - "line": 299, - "name": "Kl.log", - "selfWeight": 0, - "totalWeight": 18456, - }, - Frame { - "col": 314, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Xl.C:https://www.google.fr/?gws_rd=ssl:307:314", - "line": 307, - "name": "Xl.C", - "selfWeight": 0, - "totalWeight": 18456, - }, - Frame { - "col": 19, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Vl:https://www.google.fr/?gws_rd=ssl:305:19", - "line": 305, - "name": "Vl", - "selfWeight": 18456, - "totalWeight": 18456, - }, - Frame { - "col": 28, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.em:https://www.google.fr/?gws_rd=ssl:311:28", - "line": 311, - "name": "_.em", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Xl:https://www.google.fr/?gws_rd=ssl:307:15", - "line": 307, - "name": "Xl", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "fq:https://www.google.fr/?gws_rd=ssl:352:15", - "line": 352, - "name": "fq", - "selfWeight": 16576, - "totalWeight": 16576, - }, - Frame { - "col": 110, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:355:110", - "line": 355, - "name": "(anonymous)", - "selfWeight": 16392, - "totalWeight": 32808, - }, - Frame { - "col": 297, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.W:https://www.google.fr/?gws_rd=ssl:310:297", - "line": 310, - "name": "_.W", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 214, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:356:214", - "line": 356, - "name": "(anonymous)", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 90, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:343:90", - "line": 343, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 98776, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Xp:https://www.google.fr/?gws_rd=ssl:348:15", - "line": 348, - "name": "Xp", - "selfWeight": 0, - "totalWeight": 98776, - }, - Frame { - "col": 218, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "ck.w:https://www.google.fr/?gws_rd=ssl:253:218", - "line": 253, - "name": "ck.w", - "selfWeight": 0, - "totalWeight": 98776, - }, - Frame { - "col": 28, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.bk:https://www.google.fr/?gws_rd=ssl:253:28", - "line": 253, - "name": "_.bk", - "selfWeight": 0, - "totalWeight": 82368, - }, - Frame { - "col": 22, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Zj:https://www.google.fr/?gws_rd=ssl:250:22", - "line": 250, - "name": "Zj", - "selfWeight": 16544, - "totalWeight": 82368, - }, - Frame { - "col": 13, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.Xj:https://www.google.fr/?gws_rd=ssl:248:13", - "line": 248, - "name": "_.Xj", - "selfWeight": 32960, - "totalWeight": 65824, - }, - Frame { - "col": 135, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.lj:https://www.google.fr/?gws_rd=ssl:230:135", - "line": 230, - "name": "_.lj", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 161, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.U:https://www.google.fr/?gws_rd=ssl:229:161", - "line": 229, - "name": "_.U", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Sj:https://www.google.fr/?gws_rd=ssl:241:15", - "line": 241, - "name": "Sj", - "selfWeight": 0, - "totalWeight": 16464, - }, - Frame { - "col": 96, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.M:https://www.google.fr/?gws_rd=ssl:123:96", - "line": 123, - "name": "_.M", - "selfWeight": 0, - "totalWeight": 49296, - }, - Frame { - "col": 11, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "oe:https://www.google.fr/?gws_rd=ssl:124:11", - "line": 124, - "name": "oe", - "selfWeight": 32880, - "totalWeight": 49296, - }, - Frame { - "col": 12, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:340:12", - "line": 340, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 240, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.H:https://www.google.fr/?gws_rd=ssl:42:240", - "line": 42, - "name": "_.H", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 186, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.hp:https://www.google.fr/?gws_rd=ssl:315:186", - "line": 315, - "name": "_.hp", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 712, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:398:712", - "line": 398, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32848, - }, - Frame { - "col": 721, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:398:721", - "line": 398, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32848, - }, - Frame { - "col": 445, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "(anonymous):https://www.google.fr/?gws_rd=ssl:400:445", - "line": 400, - "name": "(anonymous)", - "selfWeight": 16456, - "totalWeight": 32848, - }, - Frame { - "col": 867, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "p:https://www.google.fr/?gws_rd=ssl:398:867", - "line": 398, - "name": "p", - "selfWeight": 16392, - "totalWeight": 16392, - }, - Frame { - "col": 0, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 1366768, - "totalWeight": 3017528, - }, - Frame { - "col": 63, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_qa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:7:63", - "line": 7, - "name": "s_qa", - "selfWeight": 16480, - "totalWeight": 32880, - }, - Frame { - "col": 262, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_va:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:10:262", - "line": 10, - "name": "s_va", - "selfWeight": 16536, - "totalWeight": 32952, - }, - Frame { - "col": 19, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:27:19", - "line": 27, - "name": "(anonymous)", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 257, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_f:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:19:257", - "line": 19, - "name": "s_f", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 259, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:44:259", - "line": 44, - "name": "s_Ka", - "selfWeight": 16592, - "totalWeight": 16592, - }, - Frame { - "col": 484, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_i:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:44:484", - "line": 44, - "name": "s_i", - "selfWeight": 115264, - "totalWeight": 115264, - }, - Frame { - "col": 75, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_s:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:167:75", - "line": 167, - "name": "s_s", - "selfWeight": 0, - "totalWeight": 32880, - }, - Frame { - "col": 293, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Tda:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:167:293", - "line": 167, - "name": "s_Tda", - "selfWeight": 16400, - "totalWeight": 32880, - }, - Frame { - "col": 419, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Id.add:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:164:419", - "line": 164, - "name": "s_Id.add", - "selfWeight": 16480, - "totalWeight": 16480, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Xd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:182:17", - "line": 182, - "name": "s_Xd", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 48, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:181:48", - "line": 181, - "name": "(anonymous)", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Dma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:269:15", - "line": 269, - "name": "s_.Dma", - "selfWeight": 328416, - "totalWeight": 787840, - }, - Frame { - "col": 300, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_$e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:246:300", - "line": 246, - "name": "s_$e", - "selfWeight": 426672, - "totalWeight": 426672, - }, - Frame { - "col": 14, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_0fa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:274:14", - "line": 274, - "name": "s_0fa", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 69, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ifa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:247:69", - "line": 247, - "name": "s_Ifa", - "selfWeight": 82080, - "totalWeight": 180784, - }, - Frame { - "col": -1, - "file": "", - "key": "split::-1:-1", - "line": -1, - "name": "split", - "selfWeight": 164000, - "totalWeight": 164000, - }, - Frame { - "col": 100, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_z:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:274:100", - "line": 274, - "name": "s_z", - "selfWeight": 0, - "totalWeight": 164352, - }, - Frame { - "col": 34, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Cj.initialize:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1585:34", - "line": 1585, - "name": "s_Cj.initialize", - "selfWeight": 0, - "totalWeight": 98704, - }, - Frame { - "col": 497, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_qaa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:3:497", - "line": 3, - "name": "s_qaa", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:175:17", - "line": 175, - "name": "s_ka", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 49, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:4:49", - "line": 4, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 254, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "CQa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:346:254", - "line": 346, - "name": "CQa", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Iia:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:347:18", - "line": 347, - "name": "s_Iia", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_paa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:248:18", - "line": 248, - "name": "s_paa", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 186, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_8e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:245:186", - "line": 245, - "name": "s_8e", - "selfWeight": 16432, - "totalWeight": 16432, - }, - Frame { - "col": 24, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_lpa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1227:24", - "line": 1227, - "name": "s_lpa", - "selfWeight": 16416, - "totalWeight": 65816, - }, - Frame { - "col": 269, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_2F:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:306:269", - "line": 306, - "name": "s_2F", - "selfWeight": 0, - "totalWeight": 49400, - }, - Frame { - "col": 51, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_YF:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:306:51", - "line": 306, - "name": "s_YF", - "selfWeight": 16456, - "totalWeight": 49400, - }, - Frame { - "col": 125, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Qe:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:223:125", - "line": 223, - "name": "s_Qe", - "selfWeight": 16544, - "totalWeight": 32944, - }, - Frame { - "col": 16, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Qe.wa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:224:16", - "line": 224, - "name": "s_Qe.wa", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_xsa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1583:18", - "line": 1583, - "name": "s_xsa", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 227, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_A:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:275:227", - "line": 275, - "name": "s_A", - "selfWeight": 0, - "totalWeight": 328032, - }, - Frame { - "col": 93, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_bga.LL:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:279:93", - "line": 279, - "name": "s_bga.LL", - "selfWeight": 245952, - "totalWeight": 328032, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_bga:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:279:18", - "line": 279, - "name": "s_bga", - "selfWeight": 0, - "totalWeight": 16800, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_gf:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:268:17", - "line": 268, - "name": "s_gf", - "selfWeight": 16800, - "totalWeight": 16800, - }, - Frame { - "col": 40, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Y_:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:361:40", - "line": 361, - "name": "s_Y_", - "selfWeight": 16464, - "totalWeight": 16464, - }, - Frame { - "col": 236, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_O:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:480:236", - "line": 480, - "name": "s_O", - "selfWeight": 49248, - "totalWeight": 73880, - }, - Frame { - "col": 370, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ema:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:480:370", - "line": 480, - "name": "s_Ema", - "selfWeight": 24632, - "totalWeight": 24632, - }, - Frame { - "col": 286, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_xka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:577:286", - "line": 577, - "name": "s_xka", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 373, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_uka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:576:373", - "line": 576, - "name": "s_uka", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 31, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ika.update:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:574:31", - "line": 574, - "name": "s_ika.update", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_jka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:575:18", - "line": 575, - "name": "s_jka", - "selfWeight": 0, - "totalWeight": 181952, - }, - Frame { - "col": 389, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_1ja:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:567:389", - "line": 567, - "name": "s_1ja", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 67, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_rja:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:715:67", - "line": 715, - "name": "s_rja", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 152, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_rla:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:730:152", - "line": 730, - "name": "s_rla", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 210, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_7g:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:738:210", - "line": 738, - "name": "s_7g", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 263, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "b:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:168:263", - "line": 168, - "name": "b", - "selfWeight": 16456, - "totalWeight": 32872, - }, - Frame { - "col": 253, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Wda:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:171:253", - "line": 171, - "name": "s_Wda", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 168, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Yda:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:171:168", - "line": 171, - "name": "s_Yda", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 171, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.LJa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1556:171", - "line": 1556, - "name": "s_.LJa", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_vb:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:60:17", - "line": 60, - "name": "s_vb", - "selfWeight": 16448, - "totalWeight": 65736, - }, - Frame { - "col": 230, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1556:230", - "line": 1556, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 85, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_iua:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1557:85", - "line": 1557, - "name": "s_iua", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 234, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "b.port1.onmessage:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:225:234", - "line": 225, - "name": "b.port1.onmessage", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 8, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ao:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:8:8", - "line": 8, - "name": "s_ao", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 387, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_cg.play:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:305:387", - "line": 305, - "name": "s_cg.play", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 186, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Te:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:229:186", - "line": 229, - "name": "s_Te", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 425, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:305:425", - "line": 305, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 477, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_cg.finish:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:305:477", - "line": 305, - "name": "s_cg.finish", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 54, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1227:54", - "line": 1227, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 372, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1586:372", - "line": 1586, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.toa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1555:15", - "line": 1555, - "name": "s_.toa", - "selfWeight": 0, - "totalWeight": 82152, - }, - Frame { - "col": 345, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1555:345", - "line": 1555, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 13, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ki:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:592:13", - "line": 592, - "name": "s_ki", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 484, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1555:484", - "line": 1555, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 51, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ii:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:591:51", - "line": 591, - "name": "s_ii", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 115, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_xj.trigger:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1563:115", - "line": 1563, - "name": "s_xj.trigger", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 1152, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "trigger:https://www.google.fr/?gws_rd=ssl:6:1152", - "line": 6, - "name": "trigger", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 27, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_lja.Da:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:713:27", - "line": 713, - "name": "s_lja.Da", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 26, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_xj.Ka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1566:26", - "line": 1566, - "name": "s_xj.Ka", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Zra:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1567:18", - "line": 1567, - "name": "s_Zra", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 284, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_df.addCallback:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:264:284", - "line": 264, - "name": "s_df.addCallback", - "selfWeight": 0, - "totalWeight": 82136, - }, - Frame { - "col": 335, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ff:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:264:335", - "line": 264, - "name": "s_ff", - "selfWeight": 0, - "totalWeight": 147776, - }, - Frame { - "col": 86, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Vfa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:266:86", - "line": 266, - "name": "s_Vfa", - "selfWeight": 0, - "totalWeight": 249832, - }, - Frame { - "col": 49, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1568:49", - "line": 1568, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 350, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_2ra:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1569:350", - "line": 1569, - "name": "s_2ra", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.MJa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1554:15", - "line": 1554, - "name": "s_.MJa", - "selfWeight": 0, - "totalWeight": 32832, - }, - Frame { - "col": 501, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Nma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:498:501", - "line": 498, - "name": "s_Nma", - "selfWeight": 0, - "totalWeight": 69120, - }, - Frame { - "col": 174, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Mma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:498:174", - "line": 498, - "name": "s_Mma", - "selfWeight": 16416, - "totalWeight": 69120, - }, - Frame { - "col": 498, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Pa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:45:498", - "line": 45, - "name": "s_Pa", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": -1, - "file": "", - "key": "filter::-1:-1", - "line": -1, - "name": "filter", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 284, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_1ea:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:228:284", - "line": 228, - "name": "s_1ea", - "selfWeight": 0, - "totalWeight": 781240, - }, - Frame { - "col": 205, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Te.Ga:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:235:205", - "line": 235, - "name": "s_Te.Ga", - "selfWeight": 0, - "totalWeight": 781240, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_dfa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:236:18", - "line": 236, - "name": "s_dfa", - "selfWeight": 0, - "totalWeight": 781240, - }, - Frame { - "col": 215, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_hfa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:236:215", - "line": 236, - "name": "s_hfa", - "selfWeight": 0, - "totalWeight": 781240, - }, - Frame { - "col": 465, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "e.Ba:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:232:465", - "line": 232, - "name": "e.Ba", - "selfWeight": 0, - "totalWeight": 781240, - }, - Frame { - "col": 98, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:497:98", - "line": 497, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 233376, - }, - Frame { - "col": 156, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_df.callback:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:264:156", - "line": 264, - "name": "s_df.callback", - "selfWeight": 0, - "totalWeight": 233376, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ufa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:264:18", - "line": 264, - "name": "s_Ufa", - "selfWeight": 0, - "totalWeight": 233376, - }, - Frame { - "col": 283, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Mh.Qa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:499:283", - "line": 499, - "name": "s_Mh.Qa", - "selfWeight": 0, - "totalWeight": 82040, - }, - Frame { - "col": 437, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_df.Ka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:263:437", - "line": 263, - "name": "s_df.Ka", - "selfWeight": 0, - "totalWeight": 82040, - }, - Frame { - "col": 61, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:599:61", - "line": 599, - "name": "(anonymous)", - "selfWeight": 16456, - "totalWeight": 98528, - }, - Frame { - "col": 137, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_N7e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:815:137", - "line": 815, - "name": "s_N7e", - "selfWeight": 0, - "totalWeight": 65640, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_Vtd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:733:18", - "line": 733, - "name": "s_Vtd", - "selfWeight": 0, - "totalWeight": 65640, - }, - Frame { - "col": 270, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_Utd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:733:270", - "line": 733, - "name": "s_Utd", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ng:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:510:17", - "line": 510, - "name": "s_ng", - "selfWeight": 0, - "totalWeight": 65632, - }, - Frame { - "col": 211, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "c:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:509:211", - "line": 509, - "name": "c", - "selfWeight": 32800, - "totalWeight": 32800, - }, - Frame { - "col": 314, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_Utd.from:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:733:314", - "line": 733, - "name": "s_Utd.from", - "selfWeight": 0, - "totalWeight": 49240, - }, - Frame { - "col": 51, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:508:51", - "line": 508, - "name": "e", - "selfWeight": 0, - "totalWeight": 49240, - }, - Frame { - "col": 68, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_5td.from:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:742:68", - "line": 742, - "name": "s_5td.from", - "selfWeight": 0, - "totalWeight": 49240, - }, - Frame { - "col": 65, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_5ud.$:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:748:65", - "line": 748, - "name": "s_5ud.$", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_ws:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:269:17", - "line": 269, - "name": "s_ws", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 195, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_3Xa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:269:195", - "line": 269, - "name": "s_3Xa", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_Ttd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:725:18", - "line": 725, - "name": "s_Ttd", - "selfWeight": 0, - "totalWeight": 32832, - }, - Frame { - "col": 186, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Qia:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:509:186", - "line": 509, - "name": "s_Qia", - "selfWeight": 16400, - "totalWeight": 32832, - }, - Frame { - "col": 468, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1564:468", - "line": 1564, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 522, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1569:522", - "line": 1569, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 94, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_4ra:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1570:94", - "line": 1570, - "name": "s_4ra", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 308, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1570:308", - "line": 1570, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 243, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_0ra:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1572:243", - "line": 1572, - "name": "s_0ra", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 77, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_2na:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:680:77", - "line": 680, - "name": "s_2na", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 448, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:672:448", - "line": 672, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 349, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:672:349", - "line": 672, - "name": "e", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 224, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "b.Vva:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1328:224", - "line": 1328, - "name": "b.Vva", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 27, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_iqa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1328:27", - "line": 1328, - "name": "s_iqa", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_qna:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:599:18", - "line": 599, - "name": "s_qna", - "selfWeight": 16400, - "totalWeight": 151336, - }, - Frame { - "col": 400, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1564:400", - "line": 1564, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 134880, - }, - Frame { - "col": 234, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "b.create:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:671:234", - "line": 671, - "name": "b.create", - "selfWeight": 0, - "totalWeight": 134880, - }, - Frame { - "col": 56, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_yze:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:687:56", - "line": 687, - "name": "s_yze", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 324, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_U:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:662:324", - "line": 662, - "name": "s_U", - "selfWeight": 16432, - "totalWeight": 16432, - }, - Frame { - "col": 347, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_pna:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:599:347", - "line": 599, - "name": "s_pna", - "selfWeight": 16416, - "totalWeight": 102048, - }, - Frame { - "col": 171, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Oh:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:500:171", - "line": 500, - "name": "s_Oh", - "selfWeight": 0, - "totalWeight": 85632, - }, - Frame { - "col": 73, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_wb:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:60:73", - "line": 60, - "name": "s_wb", - "selfWeight": 16536, - "totalWeight": 69240, - }, - Frame { - "col": 203, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:500:203", - "line": 500, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 69240, - }, - Frame { - "col": 424, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Tma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:500:424", - "line": 500, - "name": "s_Tma", - "selfWeight": 0, - "totalWeight": 69240, - }, - Frame { - "col": 632, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Csa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1583:632", - "line": 1583, - "name": "s_Csa", - "selfWeight": 0, - "totalWeight": 52824, - }, - Frame { - "col": 22, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "service:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:673:22", - "line": 673, - "name": "service", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 443, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Jh.yb.wa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1585:443", - "line": 1585, - "name": "s_Jh.yb.wa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 203, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Jma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:492:203", - "line": 492, - "name": "s_Jma", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 135, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_vaa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:275:135", - "line": 275, - "name": "s_vaa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 161, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_5fa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:271:161", - "line": 271, - "name": "s_5fa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 29, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_4fa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:272:29", - "line": 272, - "name": "s_4fa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 103, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_gf.Ta:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:272:103", - "line": 272, - "name": "s_gf.Ta", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 27, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_paa.Ka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:249:27", - "line": 249, - "name": "s_paa.Ka", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 27, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Iia.Ga:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:348:27", - "line": 348, - "name": "s_Iia.Ga", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Lfa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:250:18", - "line": 250, - "name": "s_Lfa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 279, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Mfa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:250:279", - "line": 250, - "name": "s_Mfa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 463, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ofa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:250:463", - "line": 250, - "name": "s_Ofa", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": -1, - "file": "", - "key": "Promise::-1:-1", - "line": -1, - "name": "Promise", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 514, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:250:514", - "line": 250, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 36288, - }, - Frame { - "col": 37, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_oe:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:203:37", - "line": 203, - "name": "s_oe", - "selfWeight": 36288, - "totalWeight": 36288, - }, - Frame { - "col": 584, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Oma:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:499:584", - "line": 499, - "name": "s_Oma", - "selfWeight": 0, - "totalWeight": 16392, - }, - Frame { - "col": 634, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:499:634", - "line": 499, - "name": "(anonymous)", - "selfWeight": 16392, - "totalWeight": 16392, - }, - Frame { - "col": 482, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:500:482", - "line": 500, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 404, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "Xw:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:501:404", - "line": 501, - "name": "Xw", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 275, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "Hm:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:598:275", - "line": 598, - "name": "Hm", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 126, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1227:126", - "line": 1227, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 531448, - }, - Frame { - "col": 336, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_rpa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1628:336", - "line": 1628, - "name": "s_rpa", - "selfWeight": 0, - "totalWeight": 531448, - }, - Frame { - "col": 335, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ofa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:238:335", - "line": 238, - "name": "s_ofa", - "selfWeight": 0, - "totalWeight": 580840, - }, - Frame { - "col": 103, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "b.init:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:361:103", - "line": 361, - "name": "b.init", - "selfWeight": 0, - "totalWeight": 531448, - }, - Frame { - "col": 113, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.JT:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1181:113", - "line": 1181, - "name": "s_.JT", - "selfWeight": 0, - "totalWeight": 531448, - }, - Frame { - "col": 14, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1182:14", - "line": 1182, - "name": "s_.Sd", - "selfWeight": 17120, - "totalWeight": 531448, - }, - Frame { - "col": 291, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Qd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:175:291", - "line": 175, - "name": "s_Qd", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 19, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.install:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:855:19", - "line": 855, - "name": "s_.install", - "selfWeight": 16432, - "totalWeight": 365400, - }, - Frame { - "col": 257, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_YOa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:846:257", - "line": 846, - "name": "s_YOa", - "selfWeight": 0, - "totalWeight": 331968, - }, - Frame { - "col": 14, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Zc:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:848:14", - "line": 848, - "name": "s_.Zc", - "selfWeight": 65704, - "totalWeight": 331968, - }, - Frame { - "col": 45, - "file": "native array.js", - "key": "sort:native array.js:599:45", - "line": 599, - "name": "sort", - "selfWeight": 0, - "totalWeight": 16512, - }, - Frame { - "col": 23, - "file": "native array.js", - "key": "InnerArraySort:native array.js:475:23", - "line": 475, - "name": "InnerArraySort", - "selfWeight": 0, - "totalWeight": 16512, - }, - Frame { - "col": 18, - "file": "native array.js", - "key": "QuickSort:native array.js:519:18", - "line": 519, - "name": "QuickSort", - "selfWeight": 0, - "totalWeight": 16512, - }, - Frame { - "col": 170, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_XOa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:846:170", - "line": 846, - "name": "s_XOa", - "selfWeight": 16512, - "totalWeight": 16512, - }, - Frame { - "col": 27, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Q8d.Gq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:436:27", - "line": 436, - "name": "s_Q8d.Gq", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 250, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Sp.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:802:250", - "line": 802, - "name": "s_Sp.Sd", - "selfWeight": 16640, - "totalWeight": 33368, - }, - Frame { - "col": 26, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Sp.Ha:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:803:26", - "line": 803, - "name": "s_Sp.Ha", - "selfWeight": 0, - "totalWeight": 16728, - }, - Frame { - "col": 518, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.bU:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1166:518", - "line": 1166, - "name": "s_.bU", - "selfWeight": 16728, - "totalWeight": 16728, - }, - Frame { - "col": 823, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:885:823", - "line": 885, - "name": "s_.Sd", - "selfWeight": 0, - "totalWeight": 17000, - }, - Frame { - "col": 74, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.reset:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:891:74", - "line": 891, - "name": "s_.reset", - "selfWeight": 17000, - "totalWeight": 17000, - }, - Frame { - "col": 14, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Gq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:932:14", - "line": 932, - "name": "s_.Gq", - "selfWeight": 16416, - "totalWeight": 32832, - }, - Frame { - "col": 165, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_xQa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:937:165", - "line": 937, - "name": "s_xQa", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 194, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_nq.wa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:881:194", - "line": 881, - "name": "s_nq.wa", - "selfWeight": 16512, - "totalWeight": 49344, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_JPa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:884:18", - "line": 884, - "name": "s_JPa", - "selfWeight": 16416, - "totalWeight": 32832, - }, - Frame { - "col": 116, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_9aa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:43:116", - "line": 43, - "name": "s_9aa", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": -1, - "file": "", - "key": "bind::-1:-1", - "line": -1, - "name": "bind", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 422, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:953:422", - "line": 953, - "name": "s_.Sd", - "selfWeight": 16448, - "totalWeight": 16448, - }, - Frame { - "col": 82, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Oe:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:958:82", - "line": 958, - "name": "s_.Oe", - "selfWeight": 0, - "totalWeight": 18720, - }, - Frame { - "col": 221, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Xha:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:852:221", - "line": 852, - "name": "s_Xha", - "selfWeight": 18720, - "totalWeight": 18720, - }, - Frame { - "col": 166, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Gq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1064:166", - "line": 1064, - "name": "s_.Gq", - "selfWeight": 0, - "totalWeight": 16408, - }, - Frame { - "col": 242, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_nnc:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1066:242", - "line": 1066, - "name": "s_nnc", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 401, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.setup:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1124:401", - "line": 1124, - "name": "s_.setup", - "selfWeight": 0, - "totalWeight": 16512, - }, - Frame { - "col": 143, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.ih:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:882:143", - "line": 882, - "name": "s_.ih", - "selfWeight": 0, - "totalWeight": 32928, - }, - Frame { - "col": 333, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_k0.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1142:333", - "line": 1142, - "name": "s_k0.Sd", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 541, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_k0.Ca:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1142:541", - "line": 1142, - "name": "s_k0.Ca", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 196, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Vo:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:882:196", - "line": 882, - "name": "s_.Vo", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 47, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:884:47", - "line": 884, - "name": "(anonymous)", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.setup:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1145:17", - "line": 1145, - "name": "s_.setup", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 244, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.Sd:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1145:244", - "line": 1145, - "name": "s_.Sd", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 14, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.cq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1188:14", - "line": 1188, - "name": "s_.cq", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 99, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_tk:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:780:99", - "line": 780, - "name": "s_tk", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 13, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_he:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:200:13", - "line": 200, - "name": "s_he", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 121, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_3d:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:193:121", - "line": 193, - "name": "s_3d", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": -1, - "file": "", - "key": "push::-1:-1", - "line": -1, - "name": "push", - "selfWeight": 49248, - "totalWeight": 49248, - }, - Frame { - "col": 111, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_cPa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:859:111", - "line": 859, - "name": "s_cPa", - "selfWeight": 0, - "totalWeight": 17000, - }, - Frame { - "col": 195, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_VOa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:844:195", - "line": 844, - "name": "s_VOa", - "selfWeight": 17000, - "totalWeight": 17000, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_D8d:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1179:18", - "line": 1179, - "name": "s_D8d", - "selfWeight": 32856, - "totalWeight": 132512, - }, - Frame { - "col": 276, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "e:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:508:276", - "line": 508, - "name": "e", - "selfWeight": 16536, - "totalWeight": 16536, - }, - Frame { - "col": 29, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Hq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:972:29", - "line": 972, - "name": "s_Hq", - "selfWeight": 0, - "totalWeight": 50304, - }, - Frame { - "col": 395, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_7p.$:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:845:395", - "line": 845, - "name": "s_7p.$", - "selfWeight": 33888, - "totalWeight": 33888, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Eq:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:955:17", - "line": 955, - "name": "s_Eq", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_37d:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1144:18", - "line": 1144, - "name": "s_37d", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 128, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_o8d:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1160:128", - "line": 1160, - "name": "s_o8d", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 835, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1583:835", - "line": 1583, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 175, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2", - "key": "s_Wte.resolve:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2:14:175", - "line": 14, - "name": "s_Wte.resolve", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2", - "key": "s_y3:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2:15:17", - "line": 15, - "name": "s_y3", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 76, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2", - "key": "s_Yte:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2:16:76", - "line": 16, - "name": "s_Yte", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 196, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_taa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:238:196", - "line": 238, - "name": "s_taa", - "selfWeight": 0, - "totalWeight": 49392, - }, - Frame { - "col": 134, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:44:134", - "line": 44, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 49392, - }, - Frame { - "col": 32, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_DAa.init:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:351:32", - "line": 351, - "name": "s_DAa.init", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 234, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:339:234", - "line": 339, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 240, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_zAa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:348:240", - "line": 348, - "name": "s_zAa", - "selfWeight": 16560, - "totalWeight": 16560, - }, - Frame { - "col": 197, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_oNd.init:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:423:197", - "line": 423, - "name": "s_oNd.init", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 157, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Pg:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:724:157", - "line": 724, - "name": "s_Pg", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 34, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Og:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:724:34", - "line": 724, - "name": "s_Og", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 32, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_CYd.init:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:440:32", - "line": 440, - "name": "s_CYd.init", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 294, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ska:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:576:294", - "line": 576, - "name": "s_ska", - "selfWeight": 0, - "totalWeight": 165496, - }, - Frame { - "col": 12, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_J:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:106:12", - "line": 106, - "name": "s_J", - "selfWeight": 0, - "totalWeight": 32848, - }, - Frame { - "col": 89, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Yga:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:106:89", - "line": 106, - "name": "s_Yga", - "selfWeight": 32848, - "totalWeight": 32848, - }, - Frame { - "col": 124, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_3ja:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:568:124", - "line": 568, - "name": "s_3ja", - "selfWeight": 0, - "totalWeight": 116232, - }, - Frame { - "col": 63, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:617:63", - "line": 617, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 33984, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_is:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:609:17", - "line": 609, - "name": "s_is", - "selfWeight": 0, - "totalWeight": 33984, - }, - Frame { - "col": 2580, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "google.dclc:https://www.google.fr/?gws_rd=ssl:11:2580", - "line": 11, - "name": "google.dclc", - "selfWeight": 17424, - "totalWeight": 33984, - }, - Frame { - "col": 74, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:609:74", - "line": 609, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 226, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_gka.$:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:571:226", - "line": 571, - "name": "s_gka.$", - "selfWeight": 0, - "totalWeight": 49376, - }, - Frame { - "col": 305, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_gka.get:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:571:305", - "line": 571, - "name": "s_gka.get", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_hka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:572:18", - "line": 572, - "name": "s_hka", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 418, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_I:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:105:418", - "line": 105, - "name": "s_I", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 360, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_$ja:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:570:360", - "line": 570, - "name": "s_$ja", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 279, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_E:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:101:279", - "line": 101, - "name": "s_E", - "selfWeight": 16560, - "totalWeight": 16560, - }, - Frame { - "col": 63, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:640:63", - "line": 640, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32816, - }, - Frame { - "col": 17, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_B6:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:630:17", - "line": 630, - "name": "s_B6", - "selfWeight": 0, - "totalWeight": 32816, - }, - Frame { - "col": 370, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_aNe:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:639:370", - "line": 639, - "name": "s_aNe", - "selfWeight": 0, - "totalWeight": 32816, - }, - Frame { - "col": 60, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_fka.get:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:571:60", - "line": 571, - "name": "s_fka.get", - "selfWeight": 32816, - "totalWeight": 32816, - }, - Frame { - "col": 148, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:647:148", - "line": 647, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 49432, - }, - Frame { - "col": 30, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_RWa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:646:30", - "line": 646, - "name": "s_RWa", - "selfWeight": 0, - "totalWeight": 49432, - }, - Frame { - "col": 226, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_JWa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:555:226", - "line": 555, - "name": "s_JWa", - "selfWeight": 0, - "totalWeight": 49432, - }, - Frame { - "col": 72, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_a:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:2:72", - "line": 2, - "name": "s_a", - "selfWeight": 0, - "totalWeight": 49432, - }, - Frame { - "col": 373, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_jaa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:2:373", - "line": 2, - "name": "s_jaa", - "selfWeight": 0, - "totalWeight": 49432, - }, - Frame { - "col": 329, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_kaa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:220:329", - "line": 220, - "name": "s_kaa", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 76, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ne:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:220:76", - "line": 220, - "name": "s_Ne", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 568, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ne.log:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:220:568", - "line": 220, - "name": "s_Ne.log", - "selfWeight": 0, - "totalWeight": 32976, - }, - Frame { - "col": 297, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ke.$:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:219:297", - "line": 219, - "name": "s_Ke.$", - "selfWeight": 16512, - "totalWeight": 32976, - }, - Frame { - "col": 259, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Lea:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:218:259", - "line": 218, - "name": "s_Lea", - "selfWeight": 16464, - "totalWeight": 16464, - }, - Frame { - "col": 167, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_gka:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:571:167", - "line": 571, - "name": "s_gka", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 0, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 197528, - "totalWeight": 394816, - }, - Frame { - "col": 196, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_ra:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:7:196", - "line": 7, - "name": "s_ra", - "selfWeight": 0, - "totalWeight": 16448, - }, - Frame { - "col": 140, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.get:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:304:140", - "line": 304, - "name": "s_.get", - "selfWeight": 0, - "totalWeight": 16448, - }, - Frame { - "col": 88, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Dga.get:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:293:88", - "line": 293, - "name": "s_Dga.get", - "selfWeight": 0, - "totalWeight": 16448, - }, - Frame { - "col": 289, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_.get:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:290:289", - "line": 290, - "name": "s_.get", - "selfWeight": 16448, - "totalWeight": 16448, - }, - Frame { - "col": 40, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Ba:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:41:40", - "line": 41, - "name": "s_Ba", - "selfWeight": 16576, - "totalWeight": 16576, - }, - Frame { - "col": 52, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_We:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:231:52", - "line": 231, - "name": "s_We", - "selfWeight": 16464, - "totalWeight": 16464, - }, - Frame { - "col": 84, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_N:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:1619:84", - "line": 1619, - "name": "s_N", - "selfWeight": 0, - "totalWeight": 16448, - }, - Frame { - "col": 96, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:647:96", - "line": 647, - "name": "(anonymous)", - "selfWeight": 16448, - "totalWeight": 16448, - }, - Frame { - "col": 29, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_8j:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:72:29", - "line": 72, - "name": "s_8j", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 220, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Oaa:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:303:220", - "line": 303, - "name": "s_Oaa", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 18, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg", - "key": "s_Dga:https://www.google.fr/xjs/_/js/k=xjs.s.fr._CsyJPwz9fU.O/m=sx,sb,cdos,hsm,jsa,r,d,csi/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/dg=2/rs=ACT90oH-QI7BTF_hlP74YBi49CfsN-AIPg:293:18", - "line": 293, - "name": "s_Dga", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 385, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1", - "key": "s_9j.OJ:https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic?xjs=s1:85:385", - "line": 85, - "name": "s_9j.OJ", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 0, - "file": "https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2", - "key": "(anonymous):https://www.google.fr/xjs/_/js/k=xjs.s.fr._kIHmdZ_ZUA.O/am=AsIi7Mc_QPL_S4ACQU3BDBaYQInBJg/rt=j/d=1/exm=sx,sb,cdos,hsm,jsa,r,d,csi,aa,abd,async,dvl,foot,ipv6,lu,m,mu,sf,sonic,spch,cbin,tnqaT,cbhb,xz7cCd,fEVMic/ed=1/dg=2/rs=ACT90oEFKEEbFCkOVrsQSB1KUho5PP9EuA/m=RMhBfe?xjs=s2:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 32848, - "totalWeight": 32848, - }, - Frame { - "col": 0, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 16400, - "totalWeight": 589664, - }, - Frame { - "col": 35, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:0:35", - "line": 0, - "name": "(anonymous)", - "selfWeight": 225368, - "totalWeight": 573264, - }, - Frame { - "col": 159, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.V:https://www.google.fr/?gws_rd=ssl:253:159", - "line": 253, - "name": "_.V", - "selfWeight": 32968, - "totalWeight": 148232, - }, - Frame { - "col": 12, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:127:12", - "line": 127, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 49512, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Ur:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:72:15", - "line": 72, - "name": "Ur", - "selfWeight": 16640, - "totalWeight": 49512, - }, - Frame { - "col": 257, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "_.eh:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:7:257", - "line": 7, - "name": "_.eh", - "selfWeight": 0, - "totalWeight": 16456, - }, - Frame { - "col": 221, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Ag.L:https://www.google.fr/?gws_rd=ssl:186:221", - "line": 186, - "name": "Ag.L", - "selfWeight": 0, - "totalWeight": 32872, - }, - Frame { - "col": 40, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "_.qr.L:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:52:40", - "line": 52, - "name": "_.qr.L", - "selfWeight": 16456, - "totalWeight": 32872, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "zr:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:57:15", - "line": 57, - "name": "zr", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 12, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:257:12", - "line": 257, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32872, - }, - Frame { - "col": 249, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "_.Xv:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:209:249", - "line": 209, - "name": "_.Xv", - "selfWeight": 16456, - "totalWeight": 16456, - }, - Frame { - "col": 277, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "_.k.init:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:214:277", - "line": 214, - "name": "_.k.init", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 26, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Wv.init:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:210:26", - "line": 210, - "name": "Wv.init", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 12, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:322:12", - "line": 322, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32880, - }, - Frame { - "col": 104, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Vy:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:319:104", - "line": 319, - "name": "Vy", - "selfWeight": 16464, - "totalWeight": 32880, - }, - Frame { - "col": 183, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "_.hu:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:131:183", - "line": 131, - "name": "_.hu", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 101, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.ye.L:https://www.google.fr/?gws_rd=ssl:129:101", - "line": 129, - "name": "_.ye.L", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 215, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Ae:https://www.google.fr/?gws_rd=ssl:129:215", - "line": 129, - "name": "Ae", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 385, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "ge.add:https://www.google.fr/?gws_rd=ssl:120:385", - "line": 120, - "name": "ge.add", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 26, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "bs.init:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:89:26", - "line": 89, - "name": "bs.init", - "selfWeight": 0, - "totalWeight": 68104, - }, - Frame { - "col": 221, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Gs.load:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:118:221", - "line": 118, - "name": "Gs.load", - "selfWeight": 0, - "totalWeight": 68104, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "ot:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:118:15", - "line": 118, - "name": "ot", - "selfWeight": 0, - "totalWeight": 721712, - }, - Frame { - "col": 245, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:118:245", - "line": 118, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 68104, - }, - Frame { - "col": 150, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "st:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:115:150", - "line": 115, - "name": "st", - "selfWeight": 16512, - "totalWeight": 68104, - }, - Frame { - "col": 142, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "rt:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:116:142", - "line": 116, - "name": "rt", - "selfWeight": 0, - "totalWeight": 51592, - }, - Frame { - "col": 104, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Qs:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:108:104", - "line": 108, - "name": "Qs", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 398, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "bt:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:109:398", - "line": 109, - "name": "bt", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 350, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Rs.m:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:112:350", - "line": 112, - "name": "Rs.m", - "selfWeight": 0, - "totalWeight": 16432, - }, - Frame { - "col": 661, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "et:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:109:661", - "line": 109, - "name": "et", - "selfWeight": 16432, - "totalWeight": 16432, - }, - Frame { - "col": 154, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "lt:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:114:154", - "line": 114, - "name": "lt", - "selfWeight": 18760, - "totalWeight": 18760, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "My:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:314:15", - "line": 314, - "name": "My", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Ty:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:318:15", - "line": 318, - "name": "Ty", - "selfWeight": 32888, - "totalWeight": 32888, - }, - Frame { - "col": 0, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "(anonymous):https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:0:0", - "line": 0, - "name": "(anonymous)", - "selfWeight": 30960, - "totalWeight": 766672, - }, - Frame { - "col": 531, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Gs.(anonymous function):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:117:531", - "line": 117, - "name": "Gs.(anonymous function)", - "selfWeight": 0, - "totalWeight": 735712, - }, - Frame { - "col": 293, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "od.(anonymous function):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:117:293", - "line": 117, - "name": "od.(anonymous function)", - "selfWeight": 0, - "totalWeight": 735712, - }, - Frame { - "col": 342, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "c:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:117:342", - "line": 117, - "name": "c", - "selfWeight": 0, - "totalWeight": 735712, - }, - Frame { - "col": 356, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Ks:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:107:356", - "line": 107, - "name": "Ks", - "selfWeight": 0, - "totalWeight": 82104, - }, - Frame { - "col": 379, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:117:379", - "line": 117, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 82104, - }, - Frame { - "col": 132, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.yk.Ab:https://www.google.fr/?gws_rd=ssl:270:132", - "line": 270, - "name": "_.yk.Ab", - "selfWeight": 0, - "totalWeight": 82104, - }, - Frame { - "col": 15, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Bk:https://www.google.fr/?gws_rd=ssl:270:15", - "line": 270, - "name": "Bk", - "selfWeight": 0, - "totalWeight": 82104, - }, - Frame { - "col": 82, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Ck:https://www.google.fr/?gws_rd=ssl:271:82", - "line": 271, - "name": "Ck", - "selfWeight": 0, - "totalWeight": 82104, - }, - Frame { - "col": 160, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "$r.A:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:87:160", - "line": 87, - "name": "$r.A", - "selfWeight": 16400, - "totalWeight": 82104, - }, - Frame { - "col": 62, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "_.Ic:https://www.google.fr/?gws_rd=ssl:96:62", - "line": 96, - "name": "_.Ic", - "selfWeight": 16448, - "totalWeight": 16448, - }, - Frame { - "col": 128, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Ay.o:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:305:128", - "line": 305, - "name": "Ay.o", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 88, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:280:88", - "line": 280, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 15, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "ey:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:279:15", - "line": 279, - "name": "ey", - "selfWeight": 0, - "totalWeight": 16400, - }, - Frame { - "col": 566, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "Rx:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:269:566", - "line": 269, - "name": "Rx", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 191, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "update:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:229:191", - "line": 229, - "name": "update", - "selfWeight": 0, - "totalWeight": 32856, - }, - Frame { - "col": 465, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "_.se:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:66:465", - "line": 66, - "name": "_.se", - "selfWeight": 0, - "totalWeight": 32856, - }, - Frame { - "col": 11, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "re:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:65:11", - "line": 65, - "name": "re", - "selfWeight": 32856, - "totalWeight": 82120, - }, - Frame { - "col": 11, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "oe:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:62:11", - "line": 62, - "name": "oe", - "selfWeight": 49264, - "totalWeight": 49264, - }, - Frame { - "col": 465, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "fc:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:116:465", - "line": 116, - "name": "fc", - "selfWeight": 0, - "totalWeight": 653608, - }, - Frame { - "col": 29, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "pt:https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:115:29", - "line": 115, - "name": "pt", - "selfWeight": 0, - "totalWeight": 653608, - }, - Frame { - "col": 48, - "file": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA", - "key": "(anonymous):https://www.gstatic.com/og/_/js/k=og.og2.en_US.U9Y0iA5RGsA.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTufkNBilfz6JsqaapvGPsEnP6nRsA:115:48", - "line": 115, - "name": "(anonymous)", - "selfWeight": 232280, - "totalWeight": 653608, - }, - Frame { - "col": 31, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "(anonymous):https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:0:31", - "line": 0, - "name": "(anonymous)", - "selfWeight": 221704, - "totalWeight": 421328, - }, - Frame { - "col": 11, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "Fa:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:4:11", - "line": 4, - "name": "Fa", - "selfWeight": 0, - "totalWeight": 16520, - }, - Frame { - "col": 17, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "(anonymous):https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:12:17", - "line": 12, - "name": "(anonymous)", - "selfWeight": 16520, - "totalWeight": 16520, - }, - Frame { - "col": 330, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "_.sd:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:45:330", - "line": 45, - "name": "_.sd", - "selfWeight": 16400, - "totalWeight": 16400, - }, - Frame { - "col": 88, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "_.$d:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:58:88", - "line": 58, - "name": "_.$d", - "selfWeight": 17512, - "totalWeight": 17512, - }, - Frame { - "col": 15, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "fi:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:92:15", - "line": 92, - "name": "fi", - "selfWeight": 16544, - "totalWeight": 32960, - }, - Frame { - "col": 275, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "_.yi:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:98:275", - "line": 98, - "name": "_.yi", - "selfWeight": 16480, - "totalWeight": 16480, - }, - Frame { - "col": 13, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "_.Pi:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:102:13", - "line": 102, - "name": "_.Pi", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 401, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "fi.Ec:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:94:401", - "line": 94, - "name": "fi.Ec", - "selfWeight": 0, - "totalWeight": 16560, - }, - Frame { - "col": 332, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "bL:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:102:332", - "line": 102, - "name": "bL", - "selfWeight": 16560, - "totalWeight": 16560, - }, - Frame { - "col": 197, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "sn:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:334:197", - "line": 334, - "name": "sn", - "selfWeight": 17512, - "totalWeight": 17512, - }, - Frame { - "col": 9, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "(anonymous):https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:335:9", - "line": 335, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 16416, - }, - Frame { - "col": 54, - "file": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0", - "key": "tick:https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.7_zYrcOKhe0.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_tirFeAub0r3Y1DFynYgUbfJZWLA/cb=gapi.loaded_0:335:54", - "line": 335, - "name": "tick", - "selfWeight": 16416, - "totalWeight": 16416, - }, - Frame { - "col": 478, - "file": "https://www.google.fr/?gws_rd=ssl", - "key": "Aa.A:https://www.google.fr/?gws_rd=ssl:29:478", - "line": 29, - "name": "Aa.A", - "selfWeight": 16408, - "totalWeight": 16408, - }, - Frame { - "col": -1, - "file": "", - "key": "(JS)::-1:-1", - "line": -1, - "name": "(JS)", - "selfWeight": 33440, - "totalWeight": 33440, - }, - Frame { - "col": -1, - "file": "", - "key": "(BYTECODE_COMPILER)::-1:-1", - "line": -1, - "name": "(BYTECODE_COMPILER)", - "selfWeight": 354560, - "totalWeight": 354560, - }, - Frame { - "col": -1, - "file": "", - "key": "(EXTERNAL)::-1:-1", - "line": -1, - "name": "(EXTERNAL)", - "selfWeight": 36128, - "totalWeight": 36128, - }, - Frame { - "col": -1, - "file": "", - "key": "(V8 API)::-1:-1", - "line": -1, - "name": "(V8 API)", - "selfWeight": 1894920, - "totalWeight": 1894920, - }, - ], - "name": "Heap-20181005T144546.heapprofile", - "stacks": Array [ - "(root);(anonymous);(anonymous) 32.03 KB", - "(root);(anonymous);(anonymous);saveBuiltin 16.02 KB", - "(root);(anonymous);(anonymous);saveBuiltin;makeCallable;forEach;(anonymous) 32.09 KB", - "(root);(anonymous) 32.04 KB", - "(root);(anonymous);domFilterer;vAPI.DOMFilterer 16.05 KB", - "(root);(anonymous);(anonymous) 16.23 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort 32.56 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous) 56.70 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous) 51.34 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous);(anonymous) 16.06 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous);(anonymous);(anonymous) 16.07 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous);(anonymous);(anonymous) 32.05 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous);(anonymous);(anonymous);(anonymous) 34.37 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous);(anonymous);(anonymous);(anonymous);(anonymous);(anonymous) 16.02 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);generate;target.(anonymous function);forEach;(anonymous) 16.03 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);generate;shouldCheckUnprivileged;target.(anonymous function);forEach 16.02 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);(anonymous) 16.31 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);target.(anonymous function);(anonymous);target.(anonymous function);(anonymous);createPort;Port;privates.constructPrivate;target.(anonymous function);PortImpl 16.03 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);target.(anonymous function);(anonymous);target.(anonymous function);(anonymous);createPort;Port;privates.constructPrivate;target.(anonymous function);PortImpl;createAnonymousEvent;Event;privates.constructPrivate;target.(anonymous function);create 16.02 KB", - "(root);(anonymous);bootstrap;send;getPort;createPort;(anonymous);normalizeArgumentsAndValidate;resolveSignature 16.07 KB", - "(root);safeObserverHandler 16.03 KB", - "(root);(anonymous);surveyPhase1 112.52 KB", - "(root);bootstrapPhase2;start;onDOMCreated 32.31 KB", - "(root);bootstrapPhase2;start;onDOMCreated 16.02 KB", - "(root);dispatchOnMessage 16.20 KB", - "(root);dispatchOnMessage;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatch;EventImpl.dispatch_;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatchToListener;target.(anonymous function);messageListener 16.73 KB", - "(root);dispatchOnMessage;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatch;EventImpl.dispatch_;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatchToListener;target.(anonymous function);messageListener;surveyPhase3 16.03 KB", - "(root);dispatchOnMessage;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatch;EventImpl.dispatch_;publicClassPrototype.(anonymous function);target.(anonymous function);EventImpl.dispatchToListener;target.(anonymous function);messageListener;bootstrapPhase1 16.52 KB", - "(root);(anonymous);google.startTick 16.02 KB", - "(root);d;(anonymous);google.c.u;(anonymous);(anonymous);(anonymous);(anonymous) 16.02 KB", - "(root);(anonymous);(anonymous) 32.08 KB", - "(root);(anonymous);(anonymous);V;T;(anonymous) 16.02 KB", - "(root);(anonymous);(anonymous) 16.02 KB", - "(root);(anonymous) 80.13 KB", - "(root);(anonymous);L.h 52.51 KB", - "(root);(anonymous);(anonymous);ja;(anonymous);(anonymous) 16.03 KB", - "(root);(anonymous);(anonymous);$b;_.E;_.v 16.13 KB", - "(root);(anonymous) 32.63 KB", - "(root);(anonymous) 63.80 KB", - "(root);(anonymous);(anonymous) 322.01 KB", - "(root);(anonymous);(anonymous);_.z 48.13 KB", - "(root);(anonymous);(anonymous);(anonymous) 16.01 KB", - "(root);(anonymous);(anonymous);_.fm;Kl.log;Xl.C;Vl 18.02 KB", - "(root);(anonymous);(anonymous);_.fm;_.em;Xl 16.02 KB", - "(root);(anonymous);(anonymous);fq 16.19 KB", - "(root);(anonymous);(anonymous);(anonymous) 16.01 KB", - "(root);(anonymous);(anonymous);(anonymous);_.W 16.03 KB", - "(root);(anonymous);(anonymous);(anonymous) 16.03 KB", - "(root);(anonymous);(anonymous);_.z 16.06 KB", - "(root);(anonymous);Xp;ck.w;_.bk;Zj 16.16 KB", - "(root);(anonymous);Xp;ck.w;_.bk;Zj;_.Xj 32.19 KB", - "(root);(anonymous);Xp;ck.w;_.bk;Zj;_.Xj;_.lj;_.U 16.02 KB", - "(root);(anonymous);Xp;ck.w;_.bk;Zj;_.Xj;Sj;_.M;oe 16.08 KB", - "(root);(anonymous);Xp;ck.w;(anonymous);_.H;_.hp;_.E 16.02 KB", - "(root);(anonymous);(anonymous);(anonymous) 16.07 KB", - "(root);(anonymous);(anonymous);(anonymous);p 16.01 KB", - "(root);(anonymous) 1.30 MB", - "(root);(anonymous);s_qa 16.09 KB", - "(root);(anonymous);s_va 16.15 KB", - "(root);(anonymous);s_va;(anonymous) 16.03 KB", - "(root);(anonymous);s_f 16.03 KB", - "(root);(anonymous);s_Ka 16.20 KB", - "(root);(anonymous);s_i 64.44 KB", - "(root);(anonymous);s_s;s_Tda 16.02 KB", - "(root);(anonymous);s_s;s_Tda;s_Id.add 16.09 KB", - "(root);(anonymous);s_Xd;(anonymous) 16.02 KB", - "(root);(anonymous);s_.Dma 320.72 KB", - "(root);(anonymous);s_.Dma;s_$e 336.52 KB", - "(root);(anonymous);s_.Dma;s_0fa;s_Ifa 16.05 KB", - "(root);(anonymous);s_.Dma;split 96.09 KB", - "(root);(anonymous);s_z;s_Ifa 48.09 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_qaa;s_ka;(anonymous);CQa;s_Iia;s_paa;s_8e 16.05 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_lpa 16.03 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_lpa;s_2F;s_YF 16.07 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_lpa;s_2F;s_YF;s_Qe 16.16 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_lpa;s_2F;s_YF;s_Qe;s_Qe.wa 16.02 KB", - "(root);(anonymous);s_z;s_Ifa;s_Cj.initialize;s_xsa 16.07 KB", - "(root);(anonymous);s_A;s_bga.LL 224.16 KB", - "(root);(anonymous);s_A;s_bga.LL;s_$e 48.09 KB", - "(root);(anonymous);s_bga;s_gf 16.41 KB", - "(root);(anonymous);s_Y_ 16.08 KB", - "(root);(anonymous);s_O 48.09 KB", - "(root);(anonymous);s_O;s_Ema 24.05 KB", - "(root);(anonymous);s_xka;s_uka;s_ika.update;s_jka;s_1ja 16.07 KB", - "(root);(anonymous);s_rja 16.07 KB", - "(root);(anonymous);s_rla 16.03 KB", - "(root);(anonymous);s_7g 16.02 KB", - "(root);(anonymous);split 64.06 KB", - "(root);b 16.07 KB", - "(root);b;s_Wda;s_Yda;s_.LJa;s_vb;(anonymous);s_iua 16.03 KB", - "(root);b.port1.onmessage;s_ao;s_cg.play;s_Te;(anonymous);s_cg.finish;(anonymous);(anonymous);s_.toa;s_vb 16.06 KB", - "(root);b.port1.onmessage;s_ao;s_cg.play;s_Te;(anonymous);s_cg.finish;(anonymous);(anonymous);s_.toa;s_vb;(anonymous);s_ki 16.03 KB", - "(root);b.port1.onmessage;s_ao;s_cg.play;s_Te;(anonymous);s_cg.finish;(anonymous);(anonymous);s_.toa;s_vb;(anonymous);s_ii;s_xj.trigger;trigger;(anonymous);s_lja.Da;s_xj.Ka;s_Zra;s_df.addCallback;s_ff;s_Vfa;(anonymous);s_2ra 16.07 KB", - "(root);b.port1.onmessage;s_ao;s_cg.play;s_Te;(anonymous);s_cg.finish;(anonymous);(anonymous);s_.toa;s_.MJa;s_Nma;s_Mma 16.03 KB", - "(root);b.port1.onmessage;s_ao;s_cg.play;s_Te;(anonymous);s_cg.finish;(anonymous);(anonymous);s_.toa;s_.MJa;s_Nma;s_Mma;s_Pa;filter 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_Mh.Qa;s_df.callback;s_Ufa;s_Vfa;s_ff;s_Vfa;s_df.Ka;s_Ufa;s_Vfa;(anonymous);s_N7e;s_Vtd;s_Utd;s_ng;c 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_Mh.Qa;s_df.callback;s_Ufa;s_Vfa;s_ff;s_Vfa;s_df.Ka;s_Ufa;s_Vfa;(anonymous);s_N7e;s_Vtd;s_Utd.from;e;s_5td.from;e;s_5ud.$;s_ws;s_3Xa 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_Mh.Qa;s_df.callback;s_Ufa;s_Vfa;s_ff;s_Vfa;s_df.Ka;s_Ufa;s_Vfa;(anonymous);s_N7e;s_Vtd;s_Utd.from;e;s_5td.from;s_Ttd;s_ng;s_Qia;s_i 16.05 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_Mh.Qa;s_df.callback;s_Ufa;s_Vfa;s_ff;s_Vfa;s_df.Ka;s_Ufa;s_Vfa;(anonymous);s_N7e;s_Vtd;s_Utd.from;e;s_5td.from;s_Ttd;s_ng;c 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_Mh.Qa;s_df.callback;s_Ufa;s_Vfa;s_ff;s_Vfa;s_df.Ka;s_Ufa;s_Vfa;(anonymous);s_df.callback;s_Ufa;s_Vfa;s_df.callback;s_Ufa;s_Vfa;(anonymous);s_4ra;s_df.addCallback;s_ff;s_Vfa;(anonymous);s_0ra;s_2na 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);e;b.Vva;s_iqa;s_qna;s_df.addCallback;s_ff;s_Vfa;(anonymous) 16.07 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_df.addCallback;s_ff;s_Vfa;(anonymous);s_yze;s_U 16.05 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_pna 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_pna;s_Oh;s_wb;(anonymous);s_Tma;s_Csa;s_wb 16.15 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_pna;s_Oh;s_wb;(anonymous);s_Tma;s_Csa;s_Oh;s_wb;(anonymous);s_Tma;service;s_Nma;s_Mma;s_Jh.yb.wa;s_Jma;s_vaa;s_5fa;s_4fa;s_gf.Ta;s_paa.Ka;s_Iia.Ga;s_Lfa;s_Mfa;s_Ofa;Promise;(anonymous);s_oe 35.44 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_pna;s_Oh;s_Oma;s_df.addCallback;s_ff;s_Vfa;(anonymous) 16.01 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_df.callback;s_Ufa;s_Vfa;(anonymous);b.create;s_qna;s_pna;s_pna;s_pna;s_Oh;s_wb;(anonymous);s_Tma;s_wb;(anonymous);Xw;Hm 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd 16.72 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_Qd 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install 16.05 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc 64.16 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;sort;InnerArraySort;QuickSort;s_XOa 16.13 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_Q8d.Gq 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_Sp.Sd 16.25 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_Sp.Sd;s_Sp.Ha;s_.bU 16.34 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Sd;s_.reset 16.60 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Gq 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Gq;s_xQa;s_nq.wa;s_JPa;s_9aa;bind 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Sd 16.06 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Oe;s_Xha 18.28 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Gq;s_nnc 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.setup;s_.ih;s_nq.wa 16.13 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_k0.Sd;s_k0.Ca;s_.Vo;(anonymous) 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.setup;s_.ih;s_nq.wa;s_JPa 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.Sd 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;s_.cq;s_tk;s_he;s_3d 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_YOa;s_.Zc;push 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_.install;s_cPa;s_VOa 16.60 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d 32.09 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d;e 16.15 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d;s_Hq;s_7p.$ 33.09 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d;s_Hq;s_Eq 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d;s_37d 16.03 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_rpa;s_ofa;b.init;s_.JT;s_.Sd;s_D8d;s_o8d;s_ng;s_Qia 16.02 KB", - "(root);s_1ea;s_Te.Ga;s_dfa;s_hfa;e.Ba;(anonymous);s_Wte.resolve;s_y3;s_Yte 16.03 KB", - "(root);s_taa;(anonymous);s_ofa;s_DAa.init;(anonymous);s_zAa 16.17 KB", - "(root);s_taa;(anonymous);s_ofa;s_oNd.init;s_Pg;s_Og 16.03 KB", - "(root);s_taa;(anonymous);s_ofa;s_CYd.init 16.03 KB", - "(root);s_ska;s_jka;s_J;s_Yga 32.08 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_is;google.dclc 17.02 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_is;google.dclc;(anonymous);s_gka.$;s_gka.get;s_hka;s_I;s_$ja;s_E 16.17 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_B6;s_aNe;s_gka.$;s_fka.get 32.05 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_RWa;s_JWa;s_a;s_jaa;s_kaa;s_Ne 16.07 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_RWa;s_JWa;s_a;s_jaa;s_Ne.log;s_Ke.$ 16.13 KB", - "(root);s_ska;s_jka;s_3ja;(anonymous);s_RWa;s_JWa;s_a;s_jaa;s_Ne.log;s_Ke.$;s_Lea 16.08 KB", - "(root);s_ska;s_jka;s_gka 16.03 KB", - "(root);(anonymous) 192.90 KB", - "(root);(anonymous);s_ra;s_.get;s_Dga.get;s_.get 16.06 KB", - "(root);(anonymous);s_Ba 16.19 KB", - "(root);(anonymous);s_i 32.08 KB", - "(root);(anonymous);s_We 16.08 KB", - "(root);(anonymous);s_z;s_Ifa 16.02 KB", - "(root);(anonymous);s_A;s_bga.LL 16.03 KB", - "(root);(anonymous);s_A;s_bga.LL;s_$e 32.06 KB", - "(root);(anonymous);s_N;(anonymous) 16.06 KB", - "(root);(anonymous);s_8j;s_qa;s_Oaa;s_Dga 16.02 KB", - "(root);(anonymous);s_9j.OJ 16.07 KB", - "(root);(anonymous) 32.08 KB", - "(root);(anonymous) 16.02 KB", - "(root);(anonymous);(anonymous) 220.09 KB", - "(root);(anonymous);(anonymous);_.V 32.20 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);Ur 16.25 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);Ur;_.eh;Ag.L;_.qr.L 16.07 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);Ur;zr;_.M;oe 16.03 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);_.Xv 16.07 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);_.k.init;Wv.init 16.03 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);Vy 16.08 KB", - "(root);(anonymous);(anonymous);_.V;(anonymous);Vy;_.hu;Ag.L;_.qr.L;_.ye.L;Ae;_.M;oe;ge.add;push 16.03 KB", - "(root);(anonymous);(anonymous);bs.init;Gs.load;ot;(anonymous);st 16.13 KB", - "(root);(anonymous);(anonymous);bs.init;Gs.load;ot;(anonymous);st;rt;Qs 16.02 KB", - "(root);(anonymous);(anonymous);bs.init;Gs.load;ot;(anonymous);st;rt;bt;Rs.m;et 16.05 KB", - "(root);(anonymous);(anonymous);bs.init;Gs.load;ot;(anonymous);st;rt;lt 18.32 KB", - "(root);(anonymous);(anonymous);My 16.02 KB", - "(root);(anonymous);(anonymous);Ty 32.12 KB", - "(root);(anonymous);(anonymous);_.z 80.34 KB", - "(root);(anonymous) 30.23 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;Ks;(anonymous);_.yk.Ab;Bk;Ck;$r.A 16.02 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;Ks;(anonymous);_.yk.Ab;Bk;Ck;$r.A;_.Ic 16.06 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;Ks;(anonymous);_.yk.Ab;Bk;Ck;$r.A;_.yk.Ab;Bk;Ck;Ay.o;(anonymous);ey;Rx 16.02 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;Ks;(anonymous);_.yk.Ab;Bk;Ck;$r.A;update;_.se;re 16.02 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;Ks;(anonymous);_.yk.Ab;Bk;Ck;$r.A;update;_.se;re;oe;oe 16.07 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous) 226.84 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous) 216.51 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);Fa;(anonymous) 16.13 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);_.sd 16.02 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);_.$d 17.10 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);re 16.07 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);re;oe;oe 32.04 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);fi 16.16 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);fi;push 16.03 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);_.yi 16.09 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);_.Pi;fi.Ec;bL 16.17 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);sn 17.10 KB", - "(root);(anonymous);Gs.(anonymous function);od.(anonymous function);c;fc;pt;ot;(anonymous);(anonymous);(anonymous);tick 16.03 KB", - "(root);(anonymous);(anonymous) 16.05 KB", - "(root);(anonymous);(anonymous);Aa.A 16.02 KB", - "(root);(JS) 32.66 KB", - "(root);(BYTECODE_COMPILER) 346.25 KB", - "(root);(EXTERNAL) 35.28 KB", - "(root);(V8 API) 1.81 MB", - ], -} -`; - -exports[`importV8HeapAlloc from Chrome: indexToView 1`] = `0`; - -exports[`importV8HeapAlloc from Chrome: profileGroup.name 1`] = `"Heap-20181005T144546.heapprofile"`; - -exports[`importV8HeapAlloc from NodeJS 1`] = ` -Object { - "frames": Array [ - Frame { - "col": -1, - "file": "", - "key": "(root)::-1:-1", - "line": -1, - "name": "(root)", - "selfWeight": 0, - "totalWeight": 525704, - }, - Frame { - "col": 30, - "file": "internal/process/next_tick.js", - "key": "_tickDomainCallback:internal/process/next_tick.js:192:30", - "line": 192, - "name": "_tickDomainCallback", - "selfWeight": 0, - "totalWeight": 263232, - }, - Frame { - "col": 15, - "file": "internal/child_process.js", - "key": "emit:internal/child_process.js:770:15", - "line": 770, - "name": "emit", - "selfWeight": 0, - "totalWeight": 65800, - }, - Frame { - "col": 16, - "file": "events.js", - "key": "emitTwo:events.js:123:16", - "line": 123, - "name": "emitTwo", - "selfWeight": 0, - "totalWeight": 65800, - }, - Frame { - "col": 35, - "file": "internal/cluster/utils.js", - "key": "onInternalMessage:internal/cluster/utils.js:30:35", - "line": 30, - "name": "onInternalMessage", - "selfWeight": 0, - "totalWeight": 33000, - }, - Frame { - "col": 20, - "file": "internal/cluster/child.js", - "key": "onmessage:internal/cluster/child.js:41:20", - "line": 41, - "name": "onmessage", - "selfWeight": 0, - "totalWeight": 33000, - }, - Frame { - "col": 21, - "file": "internal/cluster/child.js", - "key": "onconnection:internal/cluster/child.js:169:21", - "line": 169, - "name": "onconnection", - "selfWeight": 0, - "totalWeight": 33000, - }, - Frame { - "col": 21, - "file": "net.js", - "key": "onconnection:net.js:1533:21", - "line": 1533, - "name": "onconnection", - "selfWeight": 0, - "totalWeight": 33000, - }, - Frame { - "col": 37, - "file": "/usr/app/node_modules/pm2-axon/lib/sockets/sock.js", - "key": "Socket.onconnect:/usr/app/node_modules/pm2-axon/lib/sockets/sock.js:305:37", - "line": 305, - "name": "Socket.onconnect", - "selfWeight": 0, - "totalWeight": 33000, - }, - Frame { - "col": 37, - "file": "/usr/app/node_modules/pm2-axon/lib/sockets/sock.js", - "key": "Socket.addSocket:/usr/app/node_modules/pm2-axon/lib/sockets/sock.js:173:37", - "line": 173, - "name": "Socket.addSocket", - "selfWeight": 33000, - "totalWeight": 33000, - }, - Frame { - "col": 12, - "file": "/usr/app/node_modules/@pm2/io/build/main/src/features/actions.js", - "key": "listener:/usr/app/node_modules/@pm2/io/build/main/src/features/actions.js:14:12", - "line": 14, - "name": "listener", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 59, - "file": "/usr/app/node_modules/@pm2/io/build/main/src/actions/profilingHeap.js", - "key": "actionFeature.action:/usr/app/node_modules/@pm2/io/build/main/src/actions/profilingHeap.js:51:59", - "line": 51, - "name": "actionFeature.action", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 25, - "file": "/usr/app/node_modules/tslib/tslib.js", - "key": "__awaiter:/usr/app/node_modules/tslib/tslib.js:101:25", - "line": 101, - "name": "__awaiter", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": -1, - "file": "", - "key": "Promise::-1:-1", - "line": -1, - "name": "Promise", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 49, - "file": "/usr/app/node_modules/tslib/tslib.js", - "key": "(anonymous):/usr/app/node_modules/tslib/tslib.js:102:49", - "line": 102, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": -1, - "file": "", - "key": "next::-1:-1", - "line": -1, - "name": "next", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 120, - "file": "/usr/app/node_modules/@pm2/io/build/main/src/actions/profilingHeap.js", - "key": "(anonymous):/usr/app/node_modules/@pm2/io/build/main/src/actions/profilingHeap.js:51:120", - "line": 51, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 8, - "file": "/usr/app/node_modules/@pm2/io/build/main/src/profiling/profilingHeap.js", - "key": "stop:/usr/app/node_modules/@pm2/io/build/main/src/profiling/profilingHeap.js:32:8", - "line": 32, - "name": "stop", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 65, - "file": "/usr/app/node_modules/@pm2/io/build/main/src/profiling/profilingHeap.js", - "key": "(anonymous):/usr/app/node_modules/@pm2/io/build/main/src/profiling/profilingHeap.js:33:65", - "line": 33, - "name": "(anonymous)", - "selfWeight": 32800, - "totalWeight": 32800, - }, - Frame { - "col": 36, - "file": "/usr/app/node_modules/kareem/index.js", - "key": "(anonymous):/usr/app/node_modules/kareem/index.js:16:36", - "line": 16, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 38, - "file": "/usr/app/node_modules/kareem/index.js", - "key": "(anonymous):/usr/app/node_modules/kareem/index.js:145:38", - "line": 145, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 35, - "file": "/usr/app/node_modules/mongoose/lib/query.js", - "key": "Query._findOne:/usr/app/node_modules/mongoose/lib/query.js:1139:35", - "line": 1139, - "name": "Query._findOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 35, - "file": "/usr/app/node_modules/mquery/lib/mquery.js", - "key": "Query.findOne:/usr/app/node_modules/mquery/lib/mquery.js:1762:35", - "line": 1762, - "name": "Query.findOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 44, - "file": "/usr/app/node_modules/mquery/lib/collection/node.js", - "key": "NodeCollection.findOne:/usr/app/node_modules/mquery/lib/collection/node.js:36:44", - "line": 36, - "name": "NodeCollection.findOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 42, - "file": "/usr/app/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js", - "key": "NativeCollection.(anonymous function):/usr/app/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:103:42", - "line": 103, - "name": "NativeCollection.(anonymous function)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 39, - "file": "/usr/app/node_modules/mongodb/lib/collection.js", - "key": "Collection.findOne:/usr/app/node_modules/mongodb/lib/collection.js:1333:39", - "line": 1333, - "name": "Collection.findOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 22, - "file": "/usr/app/node_modules/mongodb/lib/collection.js", - "key": "findOne:/usr/app/node_modules/mongodb/lib/collection.js:1351:22", - "line": 1351, - "name": "findOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 32, - "file": "/usr/app/node_modules/mongodb/lib/cursor.js", - "key": "Cursor.next:/usr/app/node_modules/mongodb/lib/cursor.js:248:32", - "line": 248, - "name": "Cursor.next", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 25, - "file": "/usr/app/node_modules/mongodb/lib/cursor.js", - "key": "nextObject:/usr/app/node_modules/mongodb/lib/cursor.js:646:25", - "line": 646, - "name": "nextObject", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 32, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js", - "key": "Cursor.next:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:691:32", - "line": 691, - "name": "Cursor.next", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 27, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js", - "key": "nextFunction:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:515:27", - "line": 515, - "name": "nextFunction", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 41, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/wireprotocol/2_4_support.js", - "key": "WireProtocol.command:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/wireprotocol/2_4_support.js:134:41", - "line": 134, - "name": "WireProtocol.command", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 31, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/wireprotocol/2_4_support.js", - "key": "setupClassicFind:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/wireprotocol/2_4_support.js:148:31", - "line": 148, - "name": "setupClassicFind", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 20, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/commands.js", - "key": "Query:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/commands.js:38:20", - "line": 38, - "name": "Query", - "selfWeight": 32800, - "totalWeight": 32800, - }, - Frame { - "col": 36, - "file": "/usr/app/node_modules/kareem/index.js", - "key": "(anonymous):/usr/app/node_modules/kareem/index.js:107:36", - "line": 107, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 62, - "file": "/usr/app/node_modules/kareem/index.js", - "key": "(anonymous):/usr/app/node_modules/kareem/index.js:168:62", - "line": 168, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 40, - "file": "/usr/app/node_modules/mongoose/lib/query.js", - "key": "(anonymous):/usr/app/node_modules/mongoose/lib/query.js:2173:40", - "line": 2173, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 47, - "file": "/usr/app/src/shared/lib/cache.js", - "key": "global._db.Bucket.findOne.exec:/usr/app/src/shared/lib/cache.js:63:47", - "line": 63, - "name": "global._db.Bucket.findOne.exec", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 38, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "Document.toObject:/usr/app/node_modules/mongoose/lib/document.js:2120:38", - "line": 2120, - "name": "Document.toObject", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 39, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "Document.$toObject:/usr/app/node_modules/mongoose/lib/document.js:1913:39", - "line": 1913, - "name": "Document.$toObject", - "selfWeight": 0, - "totalWeight": 164632, - }, - Frame { - "col": 30, - "file": "/usr/app/node_modules/mongoose/lib/utils.js", - "key": "clone:/usr/app/node_modules/mongoose/lib/utils.js:238:30", - "line": 238, - "name": "clone", - "selfWeight": 0, - "totalWeight": 131200, - }, - Frame { - "col": 20, - "file": "/usr/app/node_modules/mongoose/lib/utils.js", - "key": "cloneObject:/usr/app/node_modules/mongoose/lib/utils.js:287:20", - "line": 287, - "name": "cloneObject", - "selfWeight": 32800, - "totalWeight": 131200, - }, - Frame { - "col": -1, - "file": "", - "key": "keys::-1:-1", - "line": -1, - "name": "keys", - "selfWeight": 32832, - "totalWeight": 32832, - }, - Frame { - "col": 19, - "file": "/usr/app/node_modules/mongoose/lib/utils.js", - "key": "cloneArray:/usr/app/node_modules/mongoose/lib/utils.js:330:19", - "line": 330, - "name": "cloneArray", - "selfWeight": 65568, - "totalWeight": 65568, - }, - Frame { - "col": 21, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "applyGetters:/usr/app/node_modules/mongoose/lib/document.js:2168:21", - "line": 2168, - "name": "applyGetters", - "selfWeight": 33432, - "totalWeight": 33432, - }, - Frame { - "col": 15, - "file": "net.js", - "key": "onread:net.js:578:15", - "line": 578, - "name": "onread", - "selfWeight": 0, - "totalWeight": 229672, - }, - Frame { - "col": 17, - "file": "_stream_readable.js", - "key": "addChunk:_stream_readable.js:260:17", - "line": 260, - "name": "addChunk", - "selfWeight": 0, - "totalWeight": 229672, - }, - Frame { - "col": 43, - "file": "events.js", - "key": "emit:events.js:155:43", - "line": 155, - "name": "emit", - "selfWeight": 0, - "totalWeight": 229672, - }, - Frame { - "col": 17, - "file": "_stream_readable.js", - "key": "ondata:_stream_readable.js:635:17", - "line": 635, - "name": "ondata", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 34, - "file": "/usr/app/node_modules/amp/lib/stream.js", - "key": "Parser._write:/usr/app/node_modules/amp/lib/stream.js:37:34", - "line": 37, - "name": "Parser._write", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 23, - "file": "buffer.js", - "key": "Buffer.alloc:buffer.js:231:23", - "line": 231, - "name": "Buffer.alloc", - "selfWeight": 32800, - "totalWeight": 32800, - }, - Frame { - "col": 36, - "file": "/usr/app/node_modules/redis/index.js", - "key": "(anonymous):/usr/app/node_modules/redis/index.js:270:36", - "line": 270, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 164072, - }, - Frame { - "col": 59, - "file": "/usr/app/node_modules/redis-parser/lib/parser.js", - "key": "execute:/usr/app/node_modules/redis-parser/lib/parser.js:520:59", - "line": 520, - "name": "execute", - "selfWeight": 0, - "totalWeight": 164072, - }, - Frame { - "col": 30, - "file": "/usr/app/node_modules/redis/index.js", - "key": "returnReply:/usr/app/node_modules/redis/index.js:190:30", - "line": 190, - "name": "returnReply", - "selfWeight": 0, - "totalWeight": 164072, - }, - Frame { - "col": 32, - "file": "/usr/app/node_modules/node-redis-pubsub/lib/node-redis-pubsub.js", - "key": "pmessageHandler:/usr/app/node_modules/node-redis-pubsub/lib/node-redis-pubsub.js:69:32", - "line": 69, - "name": "pmessageHandler", - "selfWeight": 164072, - "totalWeight": 164072, - }, - Frame { - "col": 17, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js", - "key": "(anonymous):/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:179:17", - "line": 179, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 17, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js", - "key": "(anonymous):/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:333:17", - "line": 333, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 35, - "file": "/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/commands.js", - "key": "Response.parse:/usr/app/node_modules/mongodb/node_modules/mongodb-core/lib/connection/commands.js:472:35", - "line": 472, - "name": "Response.parse", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 37, - "file": "/usr/app/node_modules/bson/lib/bson/bson.js", - "key": "BSON.deserialize:/usr/app/node_modules/bson/lib/bson/bson.js:89:37", - "line": 89, - "name": "BSON.deserialize", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 32, - "file": "/usr/app/node_modules/bson/lib/bson/parser/deserializer.js", - "key": "deserializeObject:/usr/app/node_modules/bson/lib/bson/parser/deserializer.js:36:32", - "line": 36, - "name": "deserializeObject", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 20, - "file": "buffer.js", - "key": "stringSlice:buffer.js:554:20", - "line": 554, - "name": "stringSlice", - "selfWeight": 32800, - "totalWeight": 32800, - }, - Frame { - "col": 25, - "file": "timers.js", - "key": "processImmediate:timers.js:719:25", - "line": 719, - "name": "processImmediate", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 23, - "file": "timers.js", - "key": "tryOnImmediate:timers.js:762:23", - "line": 762, - "name": "tryOnImmediate", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 20, - "file": "timers.js", - "key": "runCallback:timers.js:801:20", - "line": 801, - "name": "runCallback", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 17, - "file": "/usr/app/node_modules/mquery/lib/utils.js", - "key": "(anonymous):/usr/app/node_modules/mquery/lib/utils.js:135:17", - "line": 135, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 45, - "file": "/usr/app/node_modules/mongoose/lib/query.js", - "key": "(anonymous):/usr/app/node_modules/mongoose/lib/query.js:1152:45", - "line": 1152, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 20, - "file": "/usr/app/node_modules/mongoose/lib/query.js", - "key": "completeOne:/usr/app/node_modules/mongoose/lib/query.js:1488:20", - "line": 1488, - "name": "completeOne", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 34, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "Document.init:/usr/app/node_modules/mongoose/lib/document.js:267:34", - "line": 267, - "name": "Document.init", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 39, - "file": "/usr/app/node_modules/mongoose/lib/schema/documentarray.js", - "key": "DocumentArray.cast:/usr/app/node_modules/mongoose/lib/schema/documentarray.js:192:39", - "line": 192, - "name": "DocumentArray.cast", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 27, - "file": "/usr/app/node_modules/mongoose/lib/schema/documentarray.js", - "key": "EmbeddedDocument:/usr/app/node_modules/mongoose/lib/schema/documentarray.js:24:27", - "line": 24, - "name": "EmbeddedDocument", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 25, - "file": "/usr/app/node_modules/mongoose/lib/types/embedded.js", - "key": "EmbeddedDocument:/usr/app/node_modules/mongoose/lib/types/embedded.js:19:25", - "line": 19, - "name": "EmbeddedDocument", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 17, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "Document:/usr/app/node_modules/mongoose/lib/document.js:37:17", - "line": 37, - "name": "Document", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": -1, - "file": "", - "key": "forEach::-1:-1", - "line": -1, - "name": "forEach", - "selfWeight": 0, - "totalWeight": 32800, - }, - Frame { - "col": 38, - "file": "/usr/app/node_modules/mongoose/lib/document.js", - "key": "(anonymous):/usr/app/node_modules/mongoose/lib/document.js:1848:38", - "line": 1848, - "name": "(anonymous)", - "selfWeight": 32800, - "totalWeight": 32800, - }, - ], - "name": "Heap-20181003T105432.heapprofile", - "stacks": Array [ - "(root);_tickDomainCallback;emit;emitTwo;onInternalMessage;onmessage;onconnection;onconnection;Socket.onconnect;Socket.addSocket 32.23 KB", - "(root);_tickDomainCallback;emit;emitTwo;listener;actionFeature.action;__awaiter;Promise;(anonymous);next;(anonymous);stop;__awaiter;Promise;(anonymous);(anonymous) 32.03 KB", - "(root);_tickDomainCallback;(anonymous);(anonymous);Query._findOne;Query.findOne;NodeCollection.findOne;NativeCollection.(anonymous function);Collection.findOne;findOne;Cursor.next;nextObject;Cursor.next;nextFunction;WireProtocol.command;setupClassicFind;Query 32.03 KB", - "(root);_tickDomainCallback;(anonymous);(anonymous);(anonymous);global._db.Bucket.findOne.exec;Document.toObject;Document.$toObject;clone;cloneObject 32.03 KB", - "(root);_tickDomainCallback;(anonymous);(anonymous);(anonymous);global._db.Bucket.findOne.exec;Document.toObject;Document.$toObject;clone;cloneObject;keys 32.06 KB", - "(root);_tickDomainCallback;(anonymous);(anonymous);(anonymous);global._db.Bucket.findOne.exec;Document.toObject;Document.$toObject;clone;cloneObject;cloneArray 64.03 KB", - "(root);_tickDomainCallback;(anonymous);(anonymous);(anonymous);global._db.Bucket.findOne.exec;Document.toObject;Document.$toObject;applyGetters 32.65 KB", - "(root);onread;addChunk;emit;ondata;Parser._write;Buffer.alloc 32.03 KB", - "(root);onread;addChunk;emit;(anonymous);execute;returnReply;emit;pmessageHandler 160.23 KB", - "(root);onread;addChunk;emit;(anonymous);(anonymous);Response.parse;BSON.deserialize;deserializeObject;deserializeObject;deserializeObject;stringSlice 32.03 KB", - "(root);processImmediate;tryOnImmediate;runCallback;(anonymous);(anonymous);completeOne;Document.init;DocumentArray.cast;EmbeddedDocument;EmbeddedDocument;Document;forEach;(anonymous) 32.03 KB", - ], -} -`; - -exports[`importV8HeapAlloc from NodeJS: indexToView 1`] = `0`; - -exports[`importV8HeapAlloc from NodeJS: profileGroup.name 1`] = `"Heap-20181003T105432.heapprofile"`; diff --git a/src/speedscope/import/__snapshots__/v8proflog.test.ts.snap b/src/speedscope/import/__snapshots__/v8proflog.test.ts.snap deleted file mode 100644 index 118d69a..0000000 --- a/src/speedscope/import/__snapshots__/v8proflog.test.ts.snap +++ /dev/null @@ -1,265 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`importFromV8ProfLog 1`] = ` -Object { - "frames": Array [ - Frame { - "col": 10, - "file": "bootstrap_node.js", - "key": " bootstrap_node.js:10:10", - "line": 10, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 116424, - }, - Frame { - "col": 19, - "file": "bootstrap_node.js", - "key": "startup bootstrap_node.js:12:19", - "line": 12, - "name": "startup", - "selfWeight": 0, - "totalWeight": 116424, - }, - Frame { - "col": 32, - "file": "bootstrap_node.js", - "key": "setupGlobalVariables bootstrap_node.js:265:32", - "line": 265, - "name": "setupGlobalVariables", - "selfWeight": 0, - "totalWeight": 29385, - }, - Frame { - "col": 34, - "file": "bootstrap_node.js", - "key": "NativeModule.require bootstrap_node.js:534:34", - "line": 534, - "name": "NativeModule.require", - "selfWeight": 0, - "totalWeight": 52273, - }, - Frame { - "col": 44, - "file": "bootstrap_node.js", - "key": "NativeModule.compile bootstrap_node.js:602:44", - "line": 602, - "name": "NativeModule.compile", - "selfWeight": 0, - "totalWeight": 52273, - }, - Frame { - "col": 11, - "file": "util.js", - "key": " util.js:1:11", - "line": 1, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 29385, - }, - Frame { - "col": 11, - "file": "internal/encoding.js", - "key": " internal/encoding.js:1:11", - "line": 1, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 29385, - }, - Frame { - "col": undefined, - "file": undefined, - "key": "(c++) v8::internal::Runtime_CreateArrayLiteral", - "line": undefined, - "name": "(c++) v8::internal::Runtime_CreateArrayLiteral", - "selfWeight": 0, - "totalWeight": 29385, - }, - Frame { - "col": undefined, - "file": undefined, - "key": "(c++) v8::internal::JSFunction::EnsureHasInitialMap", - "line": undefined, - "name": "(c++) v8::internal::JSFunction::EnsureHasInitialMap", - "selfWeight": 29385, - "totalWeight": 29385, - }, - Frame { - "col": 30, - "file": "bootstrap_node.js", - "key": "setupGlobalConsole bootstrap_node.js:320:30", - "line": 320, - "name": "setupGlobalConsole", - "selfWeight": 0, - "totalWeight": 22888, - }, - Frame { - "col": 40, - "file": "bootstrap_node.js", - "key": "setupInspectorCommandLineAPI bootstrap_node.js:364:40", - "line": 364, - "name": "setupInspectorCommandLineAPI", - "selfWeight": 0, - "totalWeight": 22888, - }, - Frame { - "col": 11, - "file": "module.js", - "key": " module.js:1:11", - "line": 1, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 22888, - }, - Frame { - "col": 11, - "file": "fs.js", - "key": " fs.js:1:11", - "line": 1, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 22888, - }, - Frame { - "col": undefined, - "file": undefined, - "key": "(c++) v8::internal::Runtime_StoreIC_Miss", - "line": undefined, - "name": "(c++) v8::internal::Runtime_StoreIC_Miss", - "selfWeight": 0, - "totalWeight": 22888, - }, - Frame { - "col": undefined, - "file": undefined, - "key": "(c++) v8::internal::Map::RawCopy", - "line": undefined, - "name": "(c++) v8::internal::Map::RawCopy", - "selfWeight": 22888, - "totalWeight": 22888, - }, - Frame { - "col": 26, - "file": "module.js", - "key": "Module.runMain module.js:663:26", - "line": 663, - "name": "Module.runMain", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 24, - "file": "module.js", - "key": "Module._load module.js:443:24", - "line": 443, - "name": "Module._load", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 23, - "file": "module.js", - "key": "tryModuleLoad module.js:505:23", - "line": 505, - "name": "tryModuleLoad", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 33, - "file": "module.js", - "key": "Module.load module.js:536:33", - "line": 536, - "name": "Module.load", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 37, - "file": "module.js", - "key": "Module._extensions..js module.js:633:37", - "line": 633, - "name": "Module._extensions..js", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 37, - "file": "module.js", - "key": "Module._compile module.js:581:37", - "line": 581, - "name": "Module._compile", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 11, - "file": "/Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js", - "key": " /Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:1:11", - "line": 1, - "name": "(anonymous)", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 73, - "file": "/Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js", - "key": "a /Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:1:73", - "line": 1, - "name": "a", - "selfWeight": 0, - "totalWeight": 64151, - }, - Frame { - "col": 11, - "file": "/Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js", - "key": "b /Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:8:11", - "line": 8, - "name": "b", - "selfWeight": 10044, - "totalWeight": 53997, - }, - Frame { - "col": 11, - "file": "/Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js", - "key": "d /Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:20:11", - "line": 20, - "name": "d", - "selfWeight": 51562, - "totalWeight": 51562, - }, - Frame { - "col": 11, - "file": "/Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js", - "key": "c /Users/jlfwong/code/speedscope/sample/programs/javascript/simple.js:14:11", - "line": 14, - "name": "c", - "selfWeight": 2545, - "totalWeight": 10154, - }, - ], - "name": "simple.v8log.json", - "stacks": Array [ - "(anonymous);startup;setupGlobalVariables;NativeModule.require;NativeModule.compile;(anonymous);NativeModule.require;NativeModule.compile;(anonymous);(c++) v8::internal::Runtime_CreateArrayLiteral;(c++) v8::internal::JSFunction::EnsureHasInitialMap 29.38ms", - "(anonymous);startup;setupGlobalConsole;setupInspectorCommandLineAPI;NativeModule.require;NativeModule.compile;(anonymous);NativeModule.require;NativeModule.compile;(anonymous);(c++) v8::internal::Runtime_StoreIC_Miss;(c++) v8::internal::Map::RawCopy 22.89ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b;d 37.52ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c;d 1.28ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b;d 2.55ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c;d 1.27ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b;d 1.28ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c;d 1.27ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b;d 1.29ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c;d 1.26ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b;d 1.31ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c;d 2.52ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c 1.27ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b 3.62ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;c 1.28ms", - "(anonymous);startup;Module.runMain;Module._load;tryModuleLoad;Module.load;Module._extensions..js;Module._compile;(anonymous);a;b 6.42ms", - ], -} -`; - -exports[`importFromV8ProfLog: indexToView 1`] = `0`; - -exports[`importFromV8ProfLog: profileGroup.name 1`] = `"simple.v8log.json"`; diff --git a/src/speedscope/import/bg-flamegraph.test.ts b/src/speedscope/import/bg-flamegraph.test.ts deleted file mode 100644 index ffe5c5b..0000000 --- a/src/speedscope/import/bg-flamegraph.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importFromBGFlameGraph', async () => { - await checkProfileSnapshot('./sample/profiles/stackcollapse/simple.txt') -}) - -test('importFromBGFlameGraph with CRLF', async () => { - await checkProfileSnapshot('./sample/profiles/stackcollapse/simple-crlf.txt') -}) diff --git a/src/speedscope/import/bg-flamegraph.ts b/src/speedscope/import/bg-flamegraph.ts deleted file mode 100644 index 8502531..0000000 --- a/src/speedscope/import/bg-flamegraph.ts +++ /dev/null @@ -1,33 +0,0 @@ -// https://github.com/brendangregg/FlameGraph#2-fold-stacks - -import {Profile, FrameInfo, StackListProfileBuilder} from '../lib/profile' - -interface BGSample { - stack: FrameInfo[] - duration: number -} - -function parseBGFoldedStacks(contents: string): BGSample[] { - const samples: BGSample[] = [] - contents.replace(/^(.*) (\d+)$/gm, (match: string, stack: string, n: string) => { - samples.push({ - stack: stack.split(';').map(name => ({key: name, name: name})), - duration: parseInt(n, 10), - }) - return match - }) - return samples -} - -export function importFromBGFlameGraph(contents: string): Profile | null { - const parsed = parseBGFoldedStacks(contents) - const duration = parsed.reduce((prev: number, cur: BGSample) => prev + cur.duration, 0) - const profile = new StackListProfileBuilder(duration) - if (parsed.length === 0) { - return null - } - for (let sample of parsed) { - profile.appendSampleWithWeight(sample.stack, sample.duration) - } - return profile.build() -} diff --git a/src/speedscope/import/chrome.test.ts b/src/speedscope/import/chrome.test.ts deleted file mode 100644 index 013240f..0000000 --- a/src/speedscope/import/chrome.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importFromChromeCPUProfile', async () => { - await checkProfileSnapshot('./sample/profiles/Chrome/65/simple.cpuprofile') -}) - -test('importFromChromeTimeline', async () => { - await checkProfileSnapshot('./sample/profiles/Chrome/65/simple-timeline.json') -}) - -test('importFromChromeTimeline Chrome 69', async () => { - await checkProfileSnapshot('./sample/profiles/Chrome/69/simple.json') -}) diff --git a/src/speedscope/import/chrome.ts b/src/speedscope/import/chrome.ts deleted file mode 100644 index f1e7754..0000000 --- a/src/speedscope/import/chrome.ts +++ /dev/null @@ -1,266 +0,0 @@ -import {Profile, FrameInfo, CallTreeProfileBuilder} from '../lib/profile' -import {getOrInsert, lastOf, sortBy} from '../lib/utils' -import {TimeFormatter} from '../lib/value-formatters' - -// See: https://github.com/v8/v8/blob/master/src/inspector/js_protocol.json - -interface TimelineEvent { - pid: number - tid: number - ts: number - ph: string - cat: string - name: string - dur: number - tdur: number - tts: number - args: {[key: string]: any} -} - -interface PositionTickInfo { - line: number - ticks: number -} - -interface CPUProfileCallFrame { - columnNumber: number - functionName: string - lineNumber: number - scriptId: string - url: string -} - -interface CPUProfileNode { - callFrame: CPUProfileCallFrame - hitCount: number - id: number - children?: number[] - positionTicks?: PositionTickInfo[] - parent?: CPUProfileNode -} - -interface CPUProfile { - startTime: number - endTime: number - nodes: CPUProfileNode[] - samples: number[] - timeDeltas: number[] -} - -export function isChromeTimeline(rawProfile: any): boolean { - if (!Array.isArray(rawProfile)) return false - if (rawProfile.length < 1) return false - const first = rawProfile[0] - if (!('pid' in first && 'tid' in first && 'ph' in first && 'cat' in first)) return false - if ( - !rawProfile.find( - e => e.name === 'CpuProfile' || e.name === 'Profile' || e.name === 'ProfileChunk', - ) - ) - return false - return true -} - -export function importFromChromeTimeline(events: TimelineEvent[]): Profile { - // It seems like sometimes Chrome timeline files contain multiple CpuProfiles? - // For now, choose the first one in the list. - - let cpuProfile: CPUProfile | null = null - - // The events aren't necessarily recorded in chronological order. Sort them so - // that they are. - sortBy(events, e => e.ts) - - for (let event of events) { - if (event.name == 'CpuProfile') { - cpuProfile = event.args.data.cpuProfile as CPUProfile - } - - if (event.name == 'Profile') { - cpuProfile = { - startTime: 0, - endTime: 0, - nodes: [], - samples: [], - timeDeltas: [], - ...event.args.data, - } - } - - if (event.name == 'ProfileChunk') { - if (cpuProfile) { - const chunk = event.args.data - if (chunk.cpuProfile) { - if (chunk.cpuProfile.nodes) { - cpuProfile.nodes = cpuProfile.nodes.concat(chunk.cpuProfile.nodes) - } - if (chunk.cpuProfile.samples) { - cpuProfile.samples = cpuProfile.samples.concat(chunk.cpuProfile.samples) - } - } - if (chunk.timeDeltas) { - cpuProfile.timeDeltas = cpuProfile.timeDeltas.concat(chunk.timeDeltas) - } - if (chunk.startTime != null) { - cpuProfile.startTime = chunk.startTime - } - if (chunk.endTime != null) { - cpuProfile.endTime = chunk.endTime - } - } else { - console.log('Ignoring ProfileChunk when no Profile is active') - } - } - } - - if (cpuProfile) { - return importFromChromeCPUProfile(cpuProfile as CPUProfile) - } else { - throw new Error('Could not find CPU profile in Timeline') - } -} - -const callFrameToFrameInfo = new Map() -function frameInfoForCallFrame(callFrame: CPUProfileCallFrame) { - return getOrInsert(callFrameToFrameInfo, callFrame, callFrame => { - const name = callFrame.functionName || '(anonymous)' - const file = callFrame.url - const line = callFrame.lineNumber - const col = callFrame.columnNumber - return { - key: `${name}:${file}:${line}:${col}`, - name, - file, - line, - col, - } - }) -} - -function shouldIgnoreFunction(callFrame: CPUProfileCallFrame) { - const {functionName, url} = callFrame - if (url === 'native dummy.js') { - // I'm not really sure what this is about, but this seems to be used - // as a way of avoiding edge cases in V8's implementation. - // See: https://github.com/v8/v8/blob/b8626ca4/tools/js2c.py#L419-L424 - return true - } - return functionName === '(root)' || functionName === '(idle)' -} - -function shouldPlaceOnTopOfPreviousStack(functionName: string) { - return functionName === '(garbage collector)' || functionName === '(program)' -} - -export function importFromChromeCPUProfile(chromeProfile: CPUProfile): Profile { - const profile = new CallTreeProfileBuilder(chromeProfile.endTime - chromeProfile.startTime) - - const nodeById = new Map() - for (let node of chromeProfile.nodes) { - nodeById.set(node.id, node) - } - for (let node of chromeProfile.nodes) { - if (typeof node.parent === 'number') { - node.parent = nodeById.get(node.parent) - } - - if (!node.children) continue - for (let childId of node.children) { - const child = nodeById.get(childId) - if (!child) continue - child.parent = node - } - } - - const samples: number[] = [] - const sampleTimes: number[] = [] - - // The first delta is relative to the profile startTime. - // Ref: https://github.com/v8/v8/blob/44bd8fd7/src/inspector/js_protocol.json#L1485 - let elapsed = chromeProfile.timeDeltas[0] - - let lastNodeId = NaN - - // The chrome CPU profile format doesn't collapse identical samples. We'll do that - // here to save a ton of work later doing mergers. - for (let i = 0; i < chromeProfile.samples.length; i++) { - const nodeId = chromeProfile.samples[i] - if (nodeId != lastNodeId) { - samples.push(nodeId) - sampleTimes.push(elapsed) - } - - if (i === chromeProfile.samples.length - 1) { - if (!isNaN(lastNodeId)) { - samples.push(lastNodeId) - sampleTimes.push(elapsed) - } - } else { - let timeDelta = chromeProfile.timeDeltas[i + 1] - if (timeDelta < 0) { - console.warn('Substituting zero for unexpected time delta:', timeDelta, 'at index', i) - timeDelta = 0 - } - - elapsed += timeDelta - lastNodeId = nodeId - } - } - - let prevStack: CPUProfileNode[] = [] - - for (let i = 0; i < samples.length; i++) { - const value = sampleTimes[i] - const nodeId = samples[i] - let stackTop = nodeById.get(nodeId) - if (!stackTop) continue - - // Find lowest common ancestor of the current stack and the previous one - let lca: CPUProfileNode | null = null - - // This is O(n^2), but n should be relatively small here (stack height), - // so hopefully this isn't much of a problem - for ( - lca = stackTop; - lca && prevStack.indexOf(lca) === -1; - lca = shouldPlaceOnTopOfPreviousStack(lca.callFrame.functionName) - ? lastOf(prevStack) - : lca.parent || null - ) {} - - // Close frames that are no longer open - while (prevStack.length > 0 && lastOf(prevStack) != lca) { - const closingNode = prevStack.pop()! - const frame = frameInfoForCallFrame(closingNode.callFrame) - profile.leaveFrame(frame, value) - } - - // Open frames that are now becoming open - const toOpen: CPUProfileNode[] = [] - for ( - let node: CPUProfileNode | null = stackTop; - node && node != lca && !shouldIgnoreFunction(node.callFrame); - // Place Chrome internal functions on top of the previous call stack - node = shouldPlaceOnTopOfPreviousStack(node.callFrame.functionName) - ? lastOf(prevStack) - : node.parent || null - ) { - toOpen.push(node) - } - toOpen.reverse() - - for (let node of toOpen) { - profile.enterFrame(frameInfoForCallFrame(node.callFrame), value) - } - - prevStack = prevStack.concat(toOpen) - } - - // Close frames that are open at the end of the trace - for (let i = prevStack.length - 1; i >= 0; i--) { - profile.leaveFrame(frameInfoForCallFrame(prevStack[i].callFrame), lastOf(sampleTimes)!) - } - - profile.setValueFormatter(new TimeFormatter('microseconds')) - return profile.build() -} diff --git a/src/speedscope/import/file-system-entry.ts b/src/speedscope/import/file-system-entry.ts deleted file mode 100644 index 95138e1..0000000 --- a/src/speedscope/import/file-system-entry.ts +++ /dev/null @@ -1,17 +0,0 @@ -// The bits of this API that we care about. This is implemented by WebKitEntry -// https://wicg.github.io/entries-api/#api-entry -export interface FileSystemDirectoryReader { - readEntries(cb: (entries: FileSystemEntry[]) => void, error: (err: Error) => void): void -} -export interface FileSystemEntry { - readonly isFile: boolean - readonly isDirectory: boolean - readonly name: string - readonly fullPath: string -} -export interface FileSystemDirectoryEntry extends FileSystemEntry { - createReader(): FileSystemDirectoryReader -} -export interface FileSystemFileEntry extends FileSystemEntry { - file(cb: (file: File) => void, errCb: (err: Error) => void): void -} diff --git a/src/speedscope/import/firefox.test.ts b/src/speedscope/import/firefox.test.ts deleted file mode 100644 index d9a676c..0000000 --- a/src/speedscope/import/firefox.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importFromFirefox', async () => { - await checkProfileSnapshot('./sample/profiles/Firefox/59/simple-firefox.json') -}) - -test('importFromFirefox recursion', async () => { - await checkProfileSnapshot('./sample/profiles/Firefox/61/recursion.json') -}) - -test('importFromFirefox ignore self-hosted', async () => { - await checkProfileSnapshot('./sample/profiles/Firefox/63/simple-firefox.json') -}) diff --git a/src/speedscope/import/firefox.ts b/src/speedscope/import/firefox.ts deleted file mode 100644 index 1a12d75..0000000 --- a/src/speedscope/import/firefox.ts +++ /dev/null @@ -1,233 +0,0 @@ -import {Profile, FrameInfo, CallTreeProfileBuilder} from '../lib/profile' -import {getOrInsert} from '../lib/utils' -import {TimeFormatter} from '../lib/value-formatters' - -interface Allocations { - frames: any[] - sites: any[] - sizes: any[] - timestamps: any[] -} - -interface Configuration { - allocationsMaxLogLength: number - allocationsSampleProbability: number - bufferSize: number - sampleFrequency: number - withAllocations: boolean - withMarkers: boolean - withMemory: boolean - withTicks: boolean -} - -interface Lib { - arch: string - breakpadId: string - debugName: string - debugPath: string - end: any - name: string - offset: number - path: string - start: any -} - -interface Meta { - abi: string - asyncstack: number - debug: number - gcpoison: number - interval: number - misc: string - oscpu: string - platform: string - processType: number - product: string - shutdownTime?: any - stackwalk: number - startTime: number - toolkit: string - version: number -} - -interface PausedRange { - endTime: number - reason: string - startTime: number -} - -type Frame = [number] | [number, number | null, number | null, number, number] - -interface FrameTable { - data: Frame[] - /* - schema: { - location: 0 - implementation: 1 - optimizations: 2 - line: 3 - category: 4 - } - */ -} - -interface MarkerMeta { - category: string - interval: string - type: string -} -type Marker = [number, number] | [number, number, MarkerMeta] - -interface Markers { - data: Marker[] - /* - schema: { - name: 0 - time: 1 - data: 2 - } - */ -} - -type Sample = [number, number, number] | [number, number, number, number, number] - -interface Samples { - data: Sample[] - /* - schema: { - stack: 0 - time: 1 - responsiveness: 2 - rss: 3 - uss: 4 - } - */ -} - -export interface StackTable { - data: [number | null, number][] - /* - schema: { - prefix: 0 - frame: 1 - } - */ -} - -export interface Thread { - frameTable: FrameTable - markers: Markers - name: string - pid: number - processType: string - registerTime: number - samples: Samples - stackTable: StackTable - stringTable: string[] - tid: number - unregisterTime?: any -} - -export interface FirefoxCPUProfile { - libs: Lib[] - meta: Meta - pausedRanges: PausedRange[] - processes: any[] - threads: Thread[] -} - -export interface FirefoxProfile { - allocations: Allocations - configuration: Configuration - duration: number - fileType: string - frames: any[] - label: string - markers: any[] - memory: any[] - profile: FirefoxCPUProfile - ticks: any[] - version: number -} - -export function importFromFirefox(firefoxProfile: FirefoxProfile): Profile { - const cpuProfile = firefoxProfile.profile - - const thread = - cpuProfile.threads.length === 1 - ? cpuProfile.threads[0] - : cpuProfile.threads.filter(t => t.name === 'GeckoMain')[0] - - const frameKeyToFrameInfo = new Map() - - function extractStack(sample: Sample): FrameInfo[] { - let stackFrameId: number | null = sample[0] - const ret: number[] = [] - - while (stackFrameId != null) { - const nextStackFrame: [number | null, number] = thread.stackTable.data[stackFrameId] - const [nextStackId, frameId] = nextStackFrame - ret.push(frameId) - stackFrameId = nextStackId - } - ret.reverse() - return ret - .map(f => { - const frameData = thread.frameTable.data[f] - const location = thread.stringTable[frameData[0]] - - const match = /(.*)\s+\((.*?):?(\d+)?\)$/.exec(location) - - if (!match) return null - - if ( - match[2].startsWith('resource:') || - match[2] === 'self-hosted' || - match[2].startsWith('self-hosted:') - ) { - // Ignore Firefox-internals stuff - return null - } - - return getOrInsert(frameKeyToFrameInfo, location, () => ({ - key: location, - name: match[1]!, - file: match[2]!, - line: match[3] ? parseInt(match[3]) : undefined, - })) - }) - .filter(f => f != null) as FrameInfo[] - } - - const profile = new CallTreeProfileBuilder(firefoxProfile.duration) - - let prevStack: FrameInfo[] = [] - for (let sample of thread.samples.data) { - const stack = extractStack(sample) - const value = sample[1] - - // Find lowest common ancestor of the current stack and the previous one - let lcaIndex = -1 - - for (let i = 0; i < Math.min(stack.length, prevStack.length); i++) { - if (prevStack[i] !== stack[i]) { - break - } - lcaIndex = i - } - - // Close frames that are no longer open - for (let i = prevStack.length - 1; i > lcaIndex; i--) { - profile.leaveFrame(prevStack[i], value) - } - - for (let i = lcaIndex + 1; i < stack.length; i++) { - profile.enterFrame(stack[i], value) - } - - prevStack = stack - } - - profile.setValueFormatter(new TimeFormatter('milliseconds')) - return profile.build() -} diff --git a/src/speedscope/import/index.test.ts b/src/speedscope/import/index.test.ts deleted file mode 100644 index 0368143..0000000 --- a/src/speedscope/import/index.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {importProfileGroupFromText} from '.' - -test('importProfileGroup', async () => { - // Importing garbage should return null - expect(await importProfileGroupFromText('unknown', '')).toBe(null) - expect(await importProfileGroupFromText('unknown', 'Hello world')).toBe(null) - expect(await importProfileGroupFromText('unknown', 'Hello\n\nWorld')).toBe(null) -}) diff --git a/src/speedscope/import/index.ts b/src/speedscope/import/index.ts deleted file mode 100644 index 64d4ed9..0000000 --- a/src/speedscope/import/index.ts +++ /dev/null @@ -1,171 +0,0 @@ -import {Profile, ProfileGroup} from '../lib/profile' -import {FileSystemDirectoryEntry} from './file-system-entry' - -import {importFromChromeCPUProfile, importFromChromeTimeline, isChromeTimeline} from './chrome' -import {importFromStackprof} from './stackprof' -import {importFromInstrumentsDeepCopy, importFromInstrumentsTrace} from './instruments' -import {importFromBGFlameGraph} from './bg-flamegraph' -import {importFromFirefox} from './firefox' -import {importSpeedscopeProfiles} from '../lib/file-format' -import {importFromV8ProfLog} from './v8proflog' -import {importFromLinuxPerf} from './linux-tools-perf' -import {ProfileDataSource, TextProfileDataSource, MaybeCompressedDataReader} from './utils' -import {importAsPprofProfile} from './pprof' -import {decodeBase64} from '../lib/utils' -import {importFromChromeHeapProfile} from './v8heapalloc' - -export async function importProfileGroupFromText( - fileName: string, - contents: string, -): Promise { - return await importProfileGroup(new TextProfileDataSource(fileName, contents)) -} - -export async function importProfileGroupFromBase64( - fileName: string, - b64contents: string, -): Promise { - return await importProfileGroup( - MaybeCompressedDataReader.fromArrayBuffer(fileName, decodeBase64(b64contents).buffer), - ) -} - -export async function importProfilesFromFile(file: File): Promise { - return importProfileGroup(MaybeCompressedDataReader.fromFile(file)) -} - -export async function importProfilesFromArrayBuffer( - fileName: string, - buffer: ArrayBuffer, -): Promise { - return importProfileGroup(MaybeCompressedDataReader.fromArrayBuffer(fileName, buffer)) -} - -async function importProfileGroup(dataSource: ProfileDataSource): Promise { - const fileName = await dataSource.name() - - const profileGroup = await _importProfileGroup(dataSource) - if (profileGroup) { - if (!profileGroup.name) { - profileGroup.name = fileName - } - for (let profile of profileGroup.profiles) { - if (profile && !profile.getName()) { - profile.setName(fileName) - } - } - return profileGroup - } - return null -} - -function toGroup(profile: Profile | null): ProfileGroup | null { - if (!profile) return null - return {name: profile.getName(), indexToView: 0, profiles: [profile]} -} - -async function _importProfileGroup(dataSource: ProfileDataSource): Promise { - const fileName = await dataSource.name() - - const buffer = await dataSource.readAsArrayBuffer() - - { - const profile = importAsPprofProfile(buffer) - if (profile) { - console.log('Importing as protobuf encoded pprof file') - return toGroup(profile) - } - } - - const contents = await dataSource.readAsText() - - // First pass: Check known file format names to infer the file type - if (fileName.endsWith('.speedscope.json')) { - console.log('Importing as speedscope json file') - return importSpeedscopeProfiles(JSON.parse(contents)) - } else if (fileName.endsWith('.cpuprofile')) { - console.log('Importing as Chrome CPU Profile') - return toGroup(importFromChromeCPUProfile(JSON.parse(contents))) - } else if (fileName.endsWith('.chrome.json') || /Profile-\d{8}T\d{6}/.exec(fileName)) { - console.log('Importing as Chrome Timeline') - return toGroup(importFromChromeTimeline(JSON.parse(contents))) - } else if (fileName.endsWith('.stackprof.json')) { - console.log('Importing as stackprof profile') - return toGroup(importFromStackprof(JSON.parse(contents))) - } else if (fileName.endsWith('.instruments.txt')) { - console.log('Importing as Instruments.app deep copy') - return toGroup(importFromInstrumentsDeepCopy(contents)) - } else if (fileName.endsWith('.linux-perf.txt')) { - console.log('Importing as output of linux perf script') - return importFromLinuxPerf(contents) - } else if (fileName.endsWith('.collapsedstack.txt')) { - console.log('Importing as collapsed stack format') - return toGroup(importFromBGFlameGraph(contents)) - } else if (fileName.endsWith('.v8log.json')) { - console.log('Importing as --prof-process v8 log') - return toGroup(importFromV8ProfLog(JSON.parse(contents))) - } else if (fileName.endsWith('.heapprofile')) { - console.log('Importing as Chrome Heap Profile') - return toGroup(importFromChromeHeapProfile(JSON.parse(contents))) - } - - // Second pass: Try to guess what file format it is based on structure - let parsed: any - try { - parsed = JSON.parse(contents) - } catch (e) {} - if (parsed) { - if (parsed['$schema'] === 'https://www.speedscope.app/file-format-schema.json') { - console.log('Importing as speedscope json file') - return importSpeedscopeProfiles(JSON.parse(contents)) - } else if (parsed['systemHost'] && parsed['systemHost']['name'] == 'Firefox') { - console.log('Importing as Firefox profile') - return toGroup(importFromFirefox(parsed)) - } else if (isChromeTimeline(parsed)) { - console.log('Importing as Chrome CPU Profile') - return toGroup(importFromChromeTimeline(parsed)) - } else if ('nodes' in parsed && 'samples' in parsed && 'timeDeltas' in parsed) { - console.log('Importing as Chrome Timeline') - return toGroup(importFromChromeCPUProfile(parsed)) - } else if ('mode' in parsed && 'frames' in parsed) { - console.log('Importing as stackprof profile') - return toGroup(importFromStackprof(parsed)) - } else if ('code' in parsed && 'functions' in parsed && 'ticks' in parsed) { - console.log('Importing as --prof-process v8 log') - return toGroup(importFromV8ProfLog(parsed)) - } else if ('head' in parsed && 'selfSize' in parsed['head']) { - console.log('Importing as Chrome Heap Profile') - return toGroup(importFromChromeHeapProfile(JSON.parse(contents))) - } - } else { - // Format is not JSON - - // If the first line contains "Symbol Name", preceded by a tab, it's probably - // a deep copy from OS X Instruments.app - if (/^[\w \t\(\)]*\tSymbol Name/.exec(contents)) { - console.log('Importing as Instruments.app deep copy') - return toGroup(importFromInstrumentsDeepCopy(contents)) - } - - // If every line ends with a space followed by a number, it's probably - // the collapsed stack format. - const lineCount = contents.split(/\n/).length - if (lineCount >= 1 && lineCount === contents.split(/ \d+\r?\n/).length) { - console.log('Importing as collapsed stack format') - return toGroup(importFromBGFlameGraph(contents)) - } - - const fromLinuxPerf = importFromLinuxPerf(contents) - if (fromLinuxPerf) { - console.log('Importing from linux perf script output') - return fromLinuxPerf - } - } - - // Unrecognized format - return null -} - -export async function importFromFileSystemDirectoryEntry(entry: FileSystemDirectoryEntry) { - return importFromInstrumentsTrace(entry) -} diff --git a/src/speedscope/import/instruments.test.ts b/src/speedscope/import/instruments.test.ts deleted file mode 100644 index 33a2e08..0000000 --- a/src/speedscope/import/instruments.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -import * as fs from 'fs' -import * as path from 'path' -import {dumpProfile, checkProfileSnapshot} from '../lib/test-utils' - -import * as JSZip from 'jszip' -import {FileSystemEntry} from './file-system-entry' -import {importFromFileSystemDirectoryEntry} from '.' - -describe('importFromInstrumentsDeepCopy', () => { - test('time profile', async () => { - await checkProfileSnapshot( - './sample/profiles/Instruments/7.3.1/simple-time-profile-deep-copy.txt', - ) - }) - - test('allocations profile', async () => { - await checkProfileSnapshot( - './sample/profiles/Instruments/7.3.1/random-allocations-deep-copy.txt', - ) - }) -}) - -class ZipBackedFileSystemEntry implements FileSystemEntry { - readonly isFile: boolean - readonly isDirectory: boolean - readonly name: string - readonly fullPath: string - - private zipDir: any | null - private zipFile: JSZip.JSZipObject | null - - constructor(private zip: JSZip, fullPath: string) { - this.fullPath = fullPath - - this.zipFile = zip.file(fullPath) - this.isFile = !!this.zipFile - - if (this.isFile) { - this.zipDir = null - this.isDirectory = false - } else { - this.zipDir = zip.folder(fullPath) - this.isDirectory = true - } - - this.name = path.basename(this.fullPath) - } - - file(cb: (file: File) => void, errCb: (error: Error) => void) { - if (!this.zipFile) return errCb(new Error('Failed to extract file')) - this.zipFile - .async('blob') - .then( - blob => { - ;(blob as any).name = this.name - cb(blob as File) - }, - err => { - errCb(err) - }, - ) - .catch(errCb) - } - - createReader() { - return { - readEntries: (cb: (entries: FileSystemEntry[]) => void, errCb: (error: Error) => void) => { - if (!this.zipDir) return errCb(new Error('Failed to read folder entries')) - const ret: FileSystemEntry[] = [] - this.zipDir.forEach((relativePath: string, file: {name: string}) => { - if (relativePath.split('/').length === (relativePath.endsWith('/') ? 2 : 1)) { - ret.push(new ZipBackedFileSystemEntry(this.zip, file.name)) - } - }) - cb(ret) - }, - } - } -} - -describe('importFromInstrumentsTrace', () => { - async function importFromTrace(tracePath: string) { - const zip = await new Promise((resolve, reject) => { - fs.readFile(tracePath, (err, data) => { - if (err) return reject(err) - JSZip.loadAsync(data).then(resolve) - }) - }) - const root = new ZipBackedFileSystemEntry(zip, 'simple-time-profile.trace') - const profileGroup = await importFromFileSystemDirectoryEntry(root) - const profile = profileGroup.profiles[profileGroup.indexToView] - expect(dumpProfile(profile)).toMatchSnapshot() - } - - test('Instruments 8.3.3', async () => { - await importFromTrace('./sample/profiles/Instruments/8.3.3/simple-time-profile.trace.zip') - }) - test('Instruments 9.3.1', async () => { - await importFromTrace('./sample/profiles/Instruments/9.3.1/simple-time-profile.trace.zip') - }) -}) diff --git a/src/speedscope/import/instruments.ts b/src/speedscope/import/instruments.ts deleted file mode 100644 index c795568..0000000 --- a/src/speedscope/import/instruments.ts +++ /dev/null @@ -1,990 +0,0 @@ -// This file contains methods to import data from OS X Instruments.app -// https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html - -import { - Profile, - FrameInfo, - CallTreeProfileBuilder, - StackListProfileBuilder, - ProfileGroup, -} from '../lib/profile' -import {sortBy, getOrThrow, getOrInsert, lastOf, getOrElse, zeroPad} from '../lib/utils' -import {ByteFormatter, TimeFormatter} from '../lib/value-formatters' -import {FileSystemDirectoryEntry, FileSystemEntry, FileSystemFileEntry} from './file-system-entry' -import {MaybeCompressedDataReader} from './utils' - -function parseTSV(contents: string): T[] { - const lines = contents.split('\n').map(l => l.split('\t')) - - const headerLine = lines.shift() - if (!headerLine) return [] - - const indexToField = new Map() - for (let i = 0; i < headerLine.length; i++) { - indexToField.set(i, headerLine[i]) - } - - const ret: T[] = [] - for (let line of lines) { - const row = {} as T - for (let i = 0; i < line.length; i++) { - ;(row as any)[indexToField.get(i)!] = line[i] - } - ret.push(row) - } - return ret -} - -interface PastedTimeProfileRow { - Weight?: string - 'Source Path'?: string - 'Symbol Name'?: string -} - -interface PastedAllocationsProfileRow { - 'Bytes Used'?: string - 'Source Path'?: string - 'Symbol Name'?: string -} - -interface FrameInfoWithWeight extends FrameInfo { - endValue: number -} - -function getWeight(deepCopyRow: any): number { - if ('Bytes Used' in deepCopyRow) { - const bytesUsedString = deepCopyRow['Bytes Used'] - const parts = /\s*(\d+(?:[.]\d+)?) (\w+)\s+(?:\d+(?:[.]\d+))%/.exec(bytesUsedString) - if (!parts) return 0 - const value = parseInt(parts[1], 10) - const units = parts[2] - - switch (units) { - case 'Bytes': - return value - case 'KB': - return 1024 * value - case 'MB': - return 1024 * 1024 * value - case 'GB': - return 1024 * 1024 * 1024 * value - } - throw new Error(`Unrecognized units ${units}`) - } - - if ('Weight' in deepCopyRow || 'Running Time' in deepCopyRow) { - const weightString = deepCopyRow['Weight'] || deepCopyRow['Running Time'] - const parts = /\s*(\d+(?:[.]\d+)?) ?(\w+)\s+(?:\d+(?:[.]\d+))%/.exec(weightString) - if (!parts) return 0 - const value = parseInt(parts[1], 10) - const units = parts[2] - - switch (units) { - case 'ms': - return value - case 's': - return 1000 * value - case 'min': - return 1000 * value - } - throw new Error(`Unrecognized units ${units}`) - } - - return -1 -} - -// Import from a deep copy made of a profile -export function importFromInstrumentsDeepCopy(contents: string): Profile { - const profile = new CallTreeProfileBuilder() - const rows = parseTSV(contents) - - const stack: FrameInfoWithWeight[] = [] - let cumulativeValue: number = 0 - - for (let row of rows) { - const symbolName = row['Symbol Name'] - if (!symbolName) continue - const trimmedSymbolName = symbolName.trim() - let stackDepth = symbolName.length - trimmedSymbolName.length - - if (stack.length - stackDepth < 0) { - throw new Error('Invalid format') - } - - let framesToLeave: FrameInfoWithWeight[] = [] - - while (stackDepth < stack.length) { - const stackTop = stack.pop()! - framesToLeave.push(stackTop) - } - - for (let frameToLeave of framesToLeave) { - cumulativeValue = Math.max(cumulativeValue, frameToLeave.endValue) - profile.leaveFrame(frameToLeave, cumulativeValue) - } - - const newFrameInfo: FrameInfoWithWeight = { - key: `${row['Source Path'] || ''}:${trimmedSymbolName}`, - name: trimmedSymbolName, - file: row['Source Path'], - endValue: cumulativeValue + getWeight(row), - } - - profile.enterFrame(newFrameInfo, cumulativeValue) - stack.push(newFrameInfo) - } - - while (stack.length > 0) { - const frameToLeave = stack.pop()! - cumulativeValue = Math.max(cumulativeValue, frameToLeave.endValue) - profile.leaveFrame(frameToLeave, cumulativeValue) - } - - if ('Bytes Used' in rows[0]) { - profile.setValueFormatter(new ByteFormatter()) - } else if ('Weight' in rows[0] || 'Running Time' in rows[0]) { - profile.setValueFormatter(new TimeFormatter('milliseconds')) - } - - return profile.build() -} - -interface TraceDirectoryTree { - name: string - files: Map - subdirectories: Map -} - -async function extractDirectoryTree(entry: FileSystemDirectoryEntry): Promise { - const node: TraceDirectoryTree = { - name: entry.name, - files: new Map(), - subdirectories: new Map(), - } - - const children = await new Promise((resolve, reject) => { - entry.createReader().readEntries((entries: any[]) => { - resolve(entries) - }, reject) - }) - - for (let child of children) { - if (child.isDirectory) { - const subtree = await extractDirectoryTree(child as FileSystemDirectoryEntry) - node.subdirectories.set(subtree.name, subtree) - } else { - const file = await new Promise((resolve, reject) => { - ;(child as FileSystemFileEntry).file(resolve, reject) - }) - node.files.set(file.name, file) - } - } - - return node -} - -function readAsArrayBuffer(file: File): Promise { - return MaybeCompressedDataReader.fromFile(file).readAsArrayBuffer() -} - -function readAsText(file: File): Promise { - return MaybeCompressedDataReader.fromFile(file).readAsText() -} - -function getCoreDirForRun(tree: TraceDirectoryTree, selectedRun: number): TraceDirectoryTree { - const corespace = getOrThrow(tree.subdirectories, 'corespace') - const corespaceRunDir = getOrThrow(corespace.subdirectories, `run${selectedRun}`) - return getOrThrow(corespaceRunDir.subdirectories, 'core') -} - -class BinReader { - private bytePos: number = 0 - private view: DataView - constructor(buffer: ArrayBuffer) { - this.view = new DataView(buffer) - } - seek(pos: number) { - this.bytePos = pos - } - skip(byteCount: number) { - this.bytePos += byteCount - } - hasMore() { - return this.bytePos < this.view.byteLength - } - bytesLeft() { - return this.view.byteLength - this.bytePos - } - readUint8() { - this.bytePos++ - if (this.bytePos > this.view.byteLength) return 0 - return this.view.getUint8(this.bytePos - 1) - } - - // Note: we intentionally use Math.pow here rather than bit shifts - // because JavaScript doesn't have true 64 bit integers. - readUint32() { - this.bytePos += 4 - if (this.bytePos > this.view.byteLength) return 0 - return this.view.getUint32(this.bytePos - 4, true) - } - readUint48() { - this.bytePos += 6 - if (this.bytePos > this.view.byteLength) return 0 - - return ( - this.view.getUint32(this.bytePos - 6, true) + - this.view.getUint16(this.bytePos - 2, true) * Math.pow(2, 32) - ) - } - readUint64() { - this.bytePos += 8 - if (this.bytePos > this.view.byteLength) return 0 - return ( - this.view.getUint32(this.bytePos - 8, true) + - this.view.getUint32(this.bytePos - 4, true) * Math.pow(2, 32) - ) - } -} - -interface Sample { - timestamp: number - threadID: number - backtraceID: number -} - -async function getRawSampleList(core: TraceDirectoryTree): Promise { - const stores = getOrThrow(core.subdirectories, 'stores') - for (let storedir of stores.subdirectories.values()) { - const schemaFile = storedir.files.get('schema.xml') - if (!schemaFile) continue - const schema = await readAsText(schemaFile) - if (!/name="time-profile"/.exec(schema)) { - continue - } - const bulkstore = new BinReader( - await readAsArrayBuffer(getOrThrow(storedir.files, 'bulkstore')), - ) - // Ignore the first 3 words - bulkstore.readUint32() - bulkstore.readUint32() - bulkstore.readUint32() - const headerSize = bulkstore.readUint32() - const bytesPerEntry = bulkstore.readUint32() - - bulkstore.seek(headerSize) - - const samples: Sample[] = [] - while (true) { - // Schema as of Instruments 8.3.3 is a 6 byte timestamp, followed by a bunch - // of stuff we don't care about, followed by a 4 byte backtrace ID - const timestamp = bulkstore.readUint48() - if (timestamp === 0) break - - const threadID = bulkstore.readUint32() - - bulkstore.skip(bytesPerEntry - 6 - 4 - 4) - const backtraceID = bulkstore.readUint32() - samples.push({timestamp, threadID, backtraceID}) - } - return samples - } - throw new Error('Could not find sample list') -} - -async function getIntegerArrays(samples: Sample[], core: TraceDirectoryTree): Promise { - const uniquing = getOrThrow(core.subdirectories, 'uniquing') - const arrayUniquer = getOrThrow(uniquing.subdirectories, 'arrayUniquer') - const integeruniquerindex = getOrThrow(arrayUniquer.files, 'integeruniquer.index') - const integeruniquerdata = getOrThrow(arrayUniquer.files, 'integeruniquer.data') - - // integeruniquer.index is a binary file containing an array of [byte offset, MB offset] pairs - // that indicate where array data starts in the .data file - - // integeruniquer.data is a binary file containing an array of arrays of 64 bit integer. - // The schema is a 32 byte header followed by a stream of arrays. - // Each array consists of a 4 byte size N followed by N 8 byte little endian integers - - // This table contains the memory addresses of stack frames - - const indexreader = new BinReader(await readAsArrayBuffer(integeruniquerindex)) - const datareader = new BinReader(await readAsArrayBuffer(integeruniquerdata)) - - // Header we don't care about - indexreader.seek(32) - - let arrays: number[][] = [] - - while (indexreader.hasMore()) { - const byteOffset = indexreader.readUint32() + indexreader.readUint32() * (1024 * 1024) - - if (byteOffset === 0) { - // The first entry in the index table seems to just indicate the offset of - // the header into the data file - continue - } - - datareader.seek(byteOffset) - - let length = datareader.readUint32() - let array: number[] = [] - - while (length--) { - array.push(datareader.readUint64()) - } - arrays.push(array) - } - - return arrays -} - -interface SymbolInfo { - symbolName: string | null - sourcePath: string | null - addressToLine: Map -} - -interface FormTemplateRunData { - number: number - addressToFrameMap: Map -} - -interface FormTemplateData { - version: number - selectedRunNumber: number - instrument: string - runs: FormTemplateRunData[] -} - -async function readFormTemplate(tree: TraceDirectoryTree): Promise { - const formTemplate = getOrThrow(tree.files, 'form.template') - const archive = readInstrumentsKeyedArchive(await readAsArrayBuffer(formTemplate)) - - const version = archive['com.apple.xray.owner.template.version'] - const selectedRunNumber = archive['com.apple.xray.owner.template'].get('_selectedRunNumber') - let instrument = archive['$1'] - if ('stubInfoByUUID' in archive) { - instrument = Array.from(archive['stubInfoByUUID'].keys())[0] - } - const allRunData = archive['com.apple.xray.run.data'] - - const runs: FormTemplateRunData[] = [] - for (let runNumber of allRunData.runNumbers) { - const runData = getOrThrow>(allRunData.runData, runNumber) - - const symbolsByPid = getOrThrow>( - runData, - 'symbolsByPid', - ) - - const addressToFrameMap = new Map() - - // TODO(jlfwong): Deal with profiles with conflicting addresses? - for (let symbols of symbolsByPid.values()) { - for (let symbol of symbols.symbols) { - if (!symbol) continue - const {sourcePath, symbolName, addressToLine} = symbol - for (let address of addressToLine.keys()) { - getOrInsert(addressToFrameMap, address, () => { - const name = symbolName || `0x${zeroPad(address.toString(16), 16)}` - const frame: FrameInfo = { - key: `${sourcePath}:${name}`, - name: name, - } - if (sourcePath) { - frame.file = sourcePath - } - return frame - }) - } - } - - runs.push({ - number: runNumber, - addressToFrameMap, - }) - } - } - - return { - version, - instrument, - selectedRunNumber, - runs, - } -} - -// Import from a .trace file saved from Mac Instruments.app -export async function importFromInstrumentsTrace( - entry: FileSystemDirectoryEntry, -): Promise { - const tree = await extractDirectoryTree(entry) - - const {version, runs, instrument, selectedRunNumber} = await readFormTemplate(tree) - if (instrument !== 'com.apple.xray.instrument-type.coresampler2') { - throw new Error( - `The only supported instrument from .trace import is "com.apple.xray.instrument-type.coresampler2". Got ${instrument}`, - ) - } - console.log('version: ', version) - console.log(`Importing time profile`) - - const profiles: Profile[] = [] - let indexToView = 0 - - for (let run of runs) { - const {addressToFrameMap, number} = run - const group = await importRunFromInstrumentsTrace({ - fileName: entry.name, - tree, - addressToFrameMap, - runNumber: number, - }) - - if (run.number === selectedRunNumber) { - indexToView = profiles.length + group.indexToView - } - - profiles.push(...group.profiles) - } - - return {name: entry.name, indexToView, profiles} -} - -export async function importRunFromInstrumentsTrace(args: { - fileName: string - tree: TraceDirectoryTree - addressToFrameMap: Map - runNumber: number -}): Promise { - const {fileName, tree, addressToFrameMap, runNumber} = args - const core = getCoreDirForRun(tree, runNumber) - let samples = await getRawSampleList(core) - const arrays = await getIntegerArrays(samples, core) - - // We'll try to guess which thread is the main thread by assuming - // it's the one with the most samples. - const sampleCountByThreadID = new Map() - for (let sample of samples) { - sampleCountByThreadID.set( - sample.threadID, - getOrElse(sampleCountByThreadID, sample.threadID, () => 0) + 1, - ) - } - const counts = Array.from(sampleCountByThreadID.entries()) - sortBy(counts, c => -c[1]) - const threadIDs = counts.map(c => c[0]) - - return { - name: fileName, - indexToView: 0, - profiles: threadIDs.map(threadID => - importThreadFromInstrumentsTrace({ - threadID, - fileName, - arrays, - addressToFrameMap, - samples, - }), - ), - } -} - -export function importThreadFromInstrumentsTrace(args: { - fileName: string - addressToFrameMap: Map - threadID: number - arrays: number[][] - samples: Sample[] -}): Profile { - let {fileName, addressToFrameMap, arrays, threadID, samples} = args - - const backtraceIDtoStack = new Map() - samples = samples.filter(s => s.threadID === threadID) - - const profile = new StackListProfileBuilder(lastOf(samples)!.timestamp) - profile.setName(`${fileName} - thread ${threadID}`) - - function appendRecursive(k: number, stack: FrameInfo[]) { - const frame = addressToFrameMap.get(k) - if (frame) { - stack.push(frame) - } else if (k in arrays) { - for (let addr of arrays[k]) { - appendRecursive(addr, stack) - } - } else { - const rawAddressFrame: FrameInfo = { - key: k, - name: `0x${zeroPad(k.toString(16), 16)}`, - } - addressToFrameMap.set(k, rawAddressFrame) - stack.push(rawAddressFrame) - } - } - - let lastTimestamp: null | number = null - for (let sample of samples) { - const stackForSample = getOrInsert(backtraceIDtoStack, sample.backtraceID, id => { - const stack: FrameInfo[] = [] - appendRecursive(id, stack) - stack.reverse() - return stack - }) - - if (lastTimestamp === null) { - // The first sample is sometimes fairly late in the profile for some reason. - // We'll just say nothing was known to be on the stack in that time. - profile.appendSampleWithWeight([], sample.timestamp) - lastTimestamp = sample.timestamp - } - - if (sample.timestamp < lastTimestamp) { - throw new Error('Timestamps out of order!') - } - - profile.appendSampleWithWeight(stackForSample, sample.timestamp - lastTimestamp) - lastTimestamp = sample.timestamp - } - - profile.setValueFormatter(new TimeFormatter('nanoseconds')) - return profile.build() -} - -export function readInstrumentsKeyedArchive(buffer: ArrayBuffer): any { - const byteArray = new Uint8Array(buffer) - const parsedPlist = parseBinaryPlist(byteArray) - const data = expandKeyedArchive(parsedPlist, ($classname, object) => { - switch ($classname) { - case 'NSTextStorage': - case 'NSParagraphStyle': - case 'NSFont': - // Stuff that's irrelevant for constructing a flamegraph - return null - - case 'PFTSymbolData': { - const ret = Object.create(null) - ret.symbolName = object.$0 - ret.sourcePath = object.$1 - ret.addressToLine = new Map() - for (let i = 3; ; i += 2) { - const address = object['$' + i] - const line = object['$' + (i + 1)] - if (address == null || line == null) { - break - } - ret.addressToLine.set(address, line) - } - return ret - } - - case 'PFTOwnerData': { - const ret = Object.create(null) - ret.ownerName = object.$0 - ret.ownerPath = object.$1 - return ret - } - - case 'PFTPersistentSymbols': { - const ret = Object.create(null) - const symbolCount = object.$4 - - ret.threadNames = object.$3 - ret.symbols = [] - for (let i = 1; i < symbolCount; i++) { - ret.symbols.push(object['$' + (4 + i)]) - } - return ret - } - - case 'XRRunListData': { - const ret = Object.create(null) - ret.runNumbers = object.$0 - ret.runData = object.$1 - return ret - } - - case 'XRIntKeyedDictionary': { - const ret = new Map() - const size = object.$0 - for (let i = 0; i < size; i++) { - const key = object['$' + (1 + 2 * i)] - const value = object['$' + (1 + (2 * i + 1))] - ret.set(key, value) - } - return ret - } - - case 'XRCore': { - const ret = Object.create(null) - ret.number = object.$0 - ret.name = object.$1 - return ret - } - } - return object - }) - return data -} - -//////////////////////////////////////////////////////////////////////////////// - -export function decodeUTF8(bytes: Uint8Array): string { - let text = String.fromCharCode.apply(String, bytes) - if (text.slice(-1) === '\0') text = text.slice(0, -1) // Remove a single trailing null character if present - return decodeURIComponent(escape(text)) -} - -function isArray(value: any): boolean { - return value instanceof Array -} - -function isDictionary(value: any): boolean { - return value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === null -} - -function followUID(objects: any[], value: any): any { - return value instanceof UID ? objects[value.index] : value -} - -function expandKeyedArchive( - root: any, - interpretClass: ($classname: string, obj: any) => any = x => x, -): any { - // Sanity checks - if ( - root.$version !== 100000 || - root.$archiver !== 'NSKeyedArchiver' || - !isDictionary(root.$top) || - !isArray(root.$objects) - ) { - throw new Error('Invalid keyed archive') - } - - // Substitute NSNull - if (root.$objects[0] === '$null') { - root.$objects[0] = null - } - - // Pattern-match Objective-C constructs - for (let i = 0; i < root.$objects.length; i++) { - root.$objects[i] = paternMatchObjectiveC(root.$objects, root.$objects[i], interpretClass) - } - - // Reconstruct the DAG from the parse tree - let visit = (object: any) => { - if (object instanceof UID) { - return root.$objects[object.index] - } else if (isArray(object)) { - for (let i = 0; i < object.length; i++) { - object[i] = visit(object[i]) - } - } else if (isDictionary(object)) { - for (let key in object) { - object[key] = visit(object[key]) - } - } else if (object instanceof Map) { - const clone = new Map(object) - object.clear() - for (let [k, v] of clone.entries()) { - object.set(visit(k), visit(v)) - } - } - return object - } - for (let i = 0; i < root.$objects.length; i++) { - visit(root.$objects[i]) - } - return visit(root.$top) -} - -function paternMatchObjectiveC( - objects: any[], - value: any, - interpretClass: ($classname: string, obj: any) => any = x => x, -): any { - if (isDictionary(value) && value.$class) { - let name = followUID(objects, value.$class).$classname - switch (name) { - case 'NSDecimalNumberPlaceholder': { - let length: number = value['NS.length'] - let exponent: number = value['NS.exponent'] - let byteOrder: number = value['NS.mantissa.bo'] - let negative: boolean = value['NS.negative'] - let mantissa = new Uint16Array(new Uint8Array(value['NS.mantissa']).buffer) - let decimal = 0 - - for (let i = 0; i < length; i++) { - let digit = mantissa[i] - - if (byteOrder !== 1) { - // I assume this is how this works but I am unable to test it - digit = ((digit & 0xff00) >> 8) | ((digit & 0x00ff) << 8) - } - - decimal += digit * Math.pow(65536, i) - } - - decimal *= Math.pow(10, exponent) - return negative ? -decimal : decimal - } - - // Replace NSData with a Uint8Array - case 'NSData': - case 'NSMutableData': - return value['NS.bytes'] || value['NS.data'] - - // Replace NSString with a string - case 'NSString': - case 'NSMutableString': - return decodeUTF8(value['NS.bytes']) - - // Replace NSArray with an Array - case 'NSArray': - case 'NSMutableArray': - if ('NS.objects' in value) { - return value['NS.objects'] - } - let array: any[] = [] - while (true) { - let object = 'NS.object.' + array.length - if (!(object in value)) { - break - } - array.push(value[object]) - } - return array - - case '_NSKeyedCoderOldStyleArray': { - const count = value['NS.count'] - - // const size = value['NS.size'] - // Types are encoded as single printable characters. - // See: https://github.com/apple/swift-corelibs-foundation/blob/76995e8d3d8c10f3f3ec344dace43426ab941d0e/Foundation/NSObjCRuntime.swift#L19 - // const type = String.fromCharCode(value['NS.type']) - - let array: any[] = [] - for (let i = 0; i < count; i++) { - const element = value['$' + i] - array.push(element) - } - return array - } - - case 'NSDictionary': - case 'NSMutableDictionary': - let map = new Map() - if ('NS.keys' in value && 'NS.objects' in value) { - for (let i = 0; i < value['NS.keys'].length; i++) { - map.set(value['NS.keys'][i], value['NS.objects'][i]) - } - } else { - while (true) { - let key = 'NS.key.' + map.size - let object = 'NS.object.' + map.size - if (!(key in value) || !(object in value)) { - break - } - map.set(value[key], value[object]) - } - } - return map - - default: - const converted = interpretClass(name, value) - if (converted !== value) return converted - } - } - return value -} - -//////////////////////////////////////////////////////////////////////////////// - -export class UID { - constructor(public index: number) {} -} - -function parseBinaryPlist(bytes: Uint8Array): any { - let text = 'bplist00' - for (let i = 0; i < 8; i++) { - if (bytes[i] !== text.charCodeAt(i)) { - throw new Error('File is not a binary plist') - } - } - return new BinaryPlistParser( - new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength), - ).parseRoot() -} - -interface LengthAndOffset { - length: number - offset: number -} - -// See http://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c for details -class BinaryPlistParser { - referenceSize = 0 - objects: number[] = [] - offsetTable: number[] = [] - - constructor(public view: DataView) {} - - parseRoot(): any { - let trailer = this.view.byteLength - 32 - let offsetSize = this.view.getUint8(trailer + 6) - this.referenceSize = this.view.getUint8(trailer + 7) - - // Just use the last 32-bits of these 64-bit big-endian values - let objectCount = this.view.getUint32(trailer + 12, false) - let rootIndex = this.view.getUint32(trailer + 20, false) - let tableOffset = this.view.getUint32(trailer + 28, false) - - // Parse all offsets before starting to parse objects - for (let i = 0; i < objectCount; i++) { - this.offsetTable.push(this.parseInteger(tableOffset, offsetSize)) - tableOffset += offsetSize - } - - // Parse the root object assuming the graph is a tree - return this.parseObject(this.offsetTable[rootIndex]) - } - - parseLengthAndOffset(offset: number, extra: number): LengthAndOffset { - if (extra !== 0x0f) return {length: extra, offset: 0} - let marker = this.view.getUint8(offset++) - if ((marker & 0xf0) !== 0x10) - throw new Error('Unexpected non-integer length at offset ' + offset) - let size = 1 << (marker & 0x0f) - return {length: this.parseInteger(offset, size), offset: size + 1} - } - - parseSingleton(offset: number, extra: number): any { - if (extra === 0) return null - if (extra === 8) return false - if (extra === 9) return true - throw new Error('Unexpected extra value ' + extra + ' at offset ' + offset) - } - - parseInteger(offset: number, size: number): number { - if (size === 1) return this.view.getUint8(offset) - if (size === 2) return this.view.getUint16(offset, false) - if (size === 4) return this.view.getUint32(offset, false) - - if (size === 8) { - return ( - Math.pow(2, 32 * 1) * this.view.getUint32(offset + 0, false) + - Math.pow(2, 32 * 0) * this.view.getUint32(offset + 4, false) - ) - } - - if (size === 16) { - return ( - Math.pow(2, 32 * 3) * this.view.getUint32(offset + 0, false) + - Math.pow(2, 32 * 2) * this.view.getUint32(offset + 4, false) + - Math.pow(2, 32 * 1) * this.view.getUint32(offset + 8, false) + - Math.pow(2, 32 * 0) * this.view.getUint32(offset + 12, false) - ) - } - - throw new Error('Unexpected integer of size ' + size + ' at offset ' + offset) - } - - parseFloat(offset: number, size: number): number { - if (size === 4) return this.view.getFloat32(offset, false) - if (size === 8) return this.view.getFloat64(offset, false) - throw new Error('Unexpected float of size ' + size + ' at offset ' + offset) - } - - parseDate(offset: number, size: number): Date { - if (size !== 8) throw new Error('Unexpected date of size ' + size + ' at offset ' + offset) - let seconds = this.view.getFloat64(offset, false) - return new Date(978307200000 + seconds * 1000) // Starts from January 1st, 2001 - } - - parseData(offset: number, extra: number): Uint8Array { - let both = this.parseLengthAndOffset(offset, extra) - return new Uint8Array(this.view.buffer, offset + both.offset, both.length) - } - - parseStringASCII(offset: number, extra: number): string { - let both = this.parseLengthAndOffset(offset, extra) - let text = '' - offset += both.offset - for (let i = 0; i < both.length; i++) { - text += String.fromCharCode(this.view.getUint8(offset++)) - } - return text - } - - parseStringUTF16(offset: number, extra: number): string { - let both = this.parseLengthAndOffset(offset, extra) - let text = '' - offset += both.offset - for (let i = 0; i < both.length; i++) { - text += String.fromCharCode(this.view.getUint16(offset, false)) - offset += 2 - } - return text - } - - parseUID(offset: number, size: number): UID { - return new UID(this.parseInteger(offset, size)) - } - - parseArray(offset: number, extra: number): any[] { - let both = this.parseLengthAndOffset(offset, extra) - let array: any[] = [] - let size = this.referenceSize - offset += both.offset - for (let i = 0; i < both.length; i++) { - array.push(this.parseObject(this.offsetTable[this.parseInteger(offset, size)])) - offset += size - } - return array - } - - parseDictionary(offset: number, extra: number): Object { - let both = this.parseLengthAndOffset(offset, extra) - let dictionary = Object.create(null) - let size = this.referenceSize - let nextKey = offset + both.offset - let nextValue = nextKey + both.length * size - for (let i = 0; i < both.length; i++) { - let key = this.parseObject(this.offsetTable[this.parseInteger(nextKey, size)]) - let value = this.parseObject(this.offsetTable[this.parseInteger(nextValue, size)]) - if (typeof key !== 'string') throw new Error('Unexpected non-string key at offset ' + nextKey) - dictionary[key] = value - nextKey += size - nextValue += size - } - return dictionary - } - - parseObject(offset: number): any { - let marker = this.view.getUint8(offset++) - let extra = marker & 0x0f - switch (marker >> 4) { - case 0x0: - return this.parseSingleton(offset, extra) - case 0x1: - return this.parseInteger(offset, 1 << extra) - case 0x2: - return this.parseFloat(offset, 1 << extra) - case 0x3: - return this.parseDate(offset, 1 << extra) - case 0x4: - return this.parseData(offset, extra) - case 0x5: - return this.parseStringASCII(offset, extra) - case 0x6: - return this.parseStringUTF16(offset, extra) - case 0x8: - return this.parseUID(offset, extra + 1) - case 0xa: - return this.parseArray(offset, extra) - case 0xd: - return this.parseDictionary(offset, extra) - } - throw new Error('Unexpected marker ' + marker + ' at offset ' + --offset) - } -} diff --git a/src/speedscope/import/linux-tools-perf.test.ts b/src/speedscope/import/linux-tools-perf.test.ts deleted file mode 100644 index 097e699..0000000 --- a/src/speedscope/import/linux-tools-perf.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -describe('importFromLinuxPerf', async () => { - test('simple.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/simple.linux-perf.txt') - }) - test('one-sample.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/one-sample.linux-perf.txt') - }) - test('forks.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/forks.linux-perf.txt') - }) - test('simple-with-header.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/simple-with-header.linux-perf.txt') - }) - test('simple-with-pids.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/simple-with-pid.linux-perf.txt') - }) - test('system-wide.linux-perf.txt', async () => { - await checkProfileSnapshot('./sample/profiles/linux-perf/system-wide.linux-perf.txt') - }) -}) diff --git a/src/speedscope/import/linux-tools-perf.ts b/src/speedscope/import/linux-tools-perf.ts deleted file mode 100644 index 889d336..0000000 --- a/src/speedscope/import/linux-tools-perf.ts +++ /dev/null @@ -1,130 +0,0 @@ -import {StackListProfileBuilder, ProfileGroup} from '../lib/profile' -import {itMap, getOrInsert} from '../lib/utils' -import {TimeFormatter} from '../lib/value-formatters' - -// This imports the output of the "perf script" command on linux. -// -// Reference: https://github.com/torvalds/linux/blob/0fbc4aea/tools/perf/builtin-script.c#L1622 -// Reference: https://github.com/brendangregg/FlameGraph/blob/18c3dea/stackcollapse-perf.pl#L163 - -interface PerfStackFrame { - address: string - symbolName: string - file: string -} - -interface PerfEvent { - command: string | null - processID: number | null - threadID: number | null - time: number | null - eventType: string - stack: PerfStackFrame[] -} - -function parseEvent(rawEvent: string): PerfEvent | null { - const lines = rawEvent.split('\n').filter(l => !/^\s*#/.exec(l)) - - const event: PerfEvent = { - command: null, - processID: null, - threadID: null, - time: null, - eventType: '', - stack: [], - } - - const firstLine = lines.shift() - if (!firstLine) return null - - // Note: command name may contain spaces, e.g. - // - // V8 WorkerThread 25607 4794564.109216: cycles: - const eventStartMatch = /^(\S.+?)\s+(\d+)(?:\/?(\d+))?\s+/.exec(firstLine) - if (!eventStartMatch) return null - - event.command = eventStartMatch[1] - - // default "perf script" output has TID but not PID - if (eventStartMatch[3]) { - event.processID = parseInt(eventStartMatch[2], 10) - event.threadID = parseInt(eventStartMatch[3], 10) - } else { - event.threadID = parseInt(eventStartMatch[2], 10) - } - - const timeMatch = /\s+(\d+\.\d+):\s+/.exec(firstLine) - if (timeMatch) { - event.time = parseFloat(timeMatch[1]) - } - - const evName = /(\S+):\s*$/.exec(firstLine) - if (evName) { - event.eventType = evName[1] - } - - for (let line of lines) { - const lineMatch = /^\s*(\w+)\s*(.+) \((\S*)\)/.exec(line) - if (!lineMatch) continue - let [, address, symbolName, file] = lineMatch - - // Linux 4.8 included symbol offsets in perf script output by default, eg: - // 7fffb84c9afc cpu_startup_entry+0x800047c022ec ([kernel.kallsyms]) - // strip these off: - symbolName = symbolName.replace(/\+0x[\da-f]+$/, '') - - event.stack.push({address: `0x${address}`, symbolName, file}) - } - event.stack.reverse() - - return event -} - -export function importFromLinuxPerf(contents: string): ProfileGroup | null { - const profiles = new Map() - - let eventType: string | null = null - const events = contents.split('\n\n').map(parseEvent) - - for (let event of events) { - if (event == null) continue - if (eventType != null && eventType != event.eventType) continue - if (event.time == null) continue - eventType = event.eventType - - let profileNameParts = [] - if (event.command) profileNameParts.push(event.command) - if (event.processID) profileNameParts.push(`pid: ${event.processID}`) - if (event.threadID) profileNameParts.push(`tid: ${event.threadID}`) - const profileName = profileNameParts.join(' ') - const builderState = getOrInsert(profiles, profileName, () => { - const builder = new StackListProfileBuilder() - builder.setName(profileName) - builder.setValueFormatter(new TimeFormatter('seconds')) - return builder - }) - - const builder = builderState - - builder.appendSampleWithTimestamp( - event.stack.map(({symbolName, file}) => { - return { - key: `${symbolName} (${file})`, - name: symbolName === '[unknown]' ? `??? (${file})` : symbolName, - file: file, - } - }), - event.time!, - ) - } - - if (profiles.size === 0) { - return null - } - - return { - name: profiles.size === 1 ? Array.from(profiles.keys())[0] : '', - indexToView: 0, - profiles: Array.from(itMap(profiles.values(), builder => builder.build())), - } -} diff --git a/src/speedscope/import/pprof.test.ts b/src/speedscope/import/pprof.test.ts deleted file mode 100644 index 41d08ba..0000000 --- a/src/speedscope/import/pprof.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importAsPprofProfile', async () => { - await checkProfileSnapshot('./sample/profiles/pprof/simple.prof') -}) diff --git a/src/speedscope/import/pprof.ts b/src/speedscope/import/pprof.ts deleted file mode 100644 index 1f02f79..0000000 --- a/src/speedscope/import/pprof.ts +++ /dev/null @@ -1,134 +0,0 @@ -import {perftools} from './profile.proto.js' -import {FrameInfo, StackListProfileBuilder, Profile} from '../lib/profile' -import {lastOf} from '../lib/utils' -import {TimeFormatter, ByteFormatter} from '../lib/value-formatters' - -interface SampleType { - type: string - unit: string -} - -export function importAsPprofProfile(rawProfile: ArrayBuffer): Profile | null { - if (rawProfile.byteLength === 0) return null - - let protoProfile: perftools.profiles.Profile - try { - protoProfile = perftools.profiles.Profile.decode(new Uint8Array(rawProfile)) - } catch (e) { - return null - } - - function i32(n: number | Long): number { - return typeof n === 'number' ? n : (n as Long).low - } - - function stringVal(key: number | Long): string | null { - return protoProfile.stringTable[i32(key)] || null - } - - const frameInfoByFunctionID = new Map() - - function frameInfoForFunction(f: perftools.profiles.IFunction): FrameInfo | null { - const {name, filename, startLine} = f - - const nameString = (name != null && stringVal(name)) || '(unknown)' - const fileNameString = filename != null ? stringVal(filename) : null - const line = startLine != null ? +startLine : null - - const key = `${nameString}:${fileNameString}:${line}` - - const frameInfo: FrameInfo = { - key, - name: nameString, - } - - if (fileNameString != null) { - frameInfo.file = fileNameString - } - - if (line != null) { - frameInfo.line = line - } - - return frameInfo - } - - for (let f of protoProfile.function) { - if (f.id) { - const frameInfo = frameInfoForFunction(f) - if (frameInfo != null) { - frameInfoByFunctionID.set(i32(f.id), frameInfo) - } - } - } - - function frameInfoForLocation(location: perftools.profiles.ILocation): FrameInfo | null { - const {line} = location - if (line == null) return null - - // From a comment on profile.proto: - // - // Multiple line indicates this location has inlined functions, - // where the last entry represents the caller into which the - // preceding entries were inlined. - // - // E.g., if memcpy() is inlined into printf: - // line[0].function_name == "memcpy" - // line[1].function_name == "printf" - // - // Let's just take the last line then - const lastLine = lastOf(line) - if (lastLine == null) return null - - if (lastLine.functionId) { - return frameInfoByFunctionID.get(i32(lastLine.functionId)) || null - } else { - return null - } - } - - const frameByLocationID = new Map() - - for (let l of protoProfile.location) { - if (l.id != null) { - const frameInfo = frameInfoForLocation(l) - if (frameInfo) { - frameByLocationID.set(i32(l.id), frameInfo) - } - } - } - - const sampleTypes: SampleType[] = protoProfile.sampleType.map(type => ({ - type: (type.type && stringVal(type.type)) || 'samples', - unit: (type.unit && stringVal(type.unit)) || 'count', - })) - - const sampleTypeIndex = protoProfile.defaultSampleType - ? +protoProfile.defaultSampleType - : sampleTypes.length - 1 - const sampleType = sampleTypes[sampleTypeIndex] - - const profileBuilder = new StackListProfileBuilder() - - switch (sampleType.unit) { - case 'nanoseconds': - case 'microseconds': - case 'milliseconds': - case 'seconds': - profileBuilder.setValueFormatter(new TimeFormatter(sampleType.unit)) - break - - case 'bytes': - profileBuilder.setValueFormatter(new ByteFormatter()) - break - } - - for (let s of protoProfile.sample) { - const stack = s.locationId ? s.locationId.map(l => frameByLocationID.get(i32(l))) : [] - stack.reverse() - const value = s.value![sampleTypeIndex] - profileBuilder.appendSampleWithWeight(stack.filter(f => f != null) as FrameInfo[], +value) - } - - return profileBuilder.build() -} diff --git a/src/speedscope/import/profile.proto b/src/speedscope/import/profile.proto deleted file mode 100644 index a6e6a89..0000000 --- a/src/speedscope/import/profile.proto +++ /dev/null @@ -1,206 +0,0 @@ -// THIS FILE WAS IMPORTED FROM AN EXTERNAL SOURCE. DO NOT MODIFY THIS FILE -// MANUALLY. -// -// Original from: https://github.com/google/pprof/blob/e027b50/proto/profile.proto -// -// This file is licensed under the Apache License 2.0 -// (https://github.com/google/pprof/blob/e027b5/LICENSE) - -// Profile is a common stacktrace profile format. -// -// Measurements represented with this format should follow the -// following conventions: -// -// - Consumers should treat unset optional fields as if they had been -// set with their default value. -// -// - When possible, measurements should be stored in "unsampled" form -// that is most useful to humans. There should be enough -// information present to determine the original sampled values. -// -// - On-disk, the serialized proto must be gzip-compressed. -// -// - The profile is represented as a set of samples, where each sample -// references a sequence of locations, and where each location belongs -// to a mapping. -// - There is a N->1 relationship from sample.location_id entries to -// locations. For every sample.location_id entry there must be a -// unique Location with that id. -// - There is an optional N->1 relationship from locations to -// mappings. For every nonzero Location.mapping_id there must be a -// unique Mapping with that id. - -syntax = "proto3"; - -package perftools.profiles; - -option java_package = "com.google.perftools.profiles"; -option java_outer_classname = "ProfileProto"; - -message Profile { - // A description of the samples associated with each Sample.value. - // For a cpu profile this might be: - // [["cpu","nanoseconds"]] or [["wall","seconds"]] or [["syscall","count"]] - // For a heap profile, this might be: - // [["allocations","count"], ["space","bytes"]], - // If one of the values represents the number of events represented - // by the sample, by convention it should be at index 0 and use - // sample_type.unit == "count". - repeated ValueType sample_type = 1; - // The set of samples recorded in this profile. - repeated Sample sample = 2; - // Mapping from address ranges to the image/binary/library mapped - // into that address range. mapping[0] will be the main binary. - repeated Mapping mapping = 3; - // Useful program location - repeated Location location = 4; - // Functions referenced by locations - repeated Function function = 5; - // A common table for strings referenced by various messages. - // string_table[0] must always be "". - repeated string string_table = 6; - // frames with Function.function_name fully matching the following - // regexp will be dropped from the samples, along with their successors. - int64 drop_frames = 7; // Index into string table. - // frames with Function.function_name fully matching the following - // regexp will be kept, even if it matches drop_functions. - int64 keep_frames = 8; // Index into string table. - - // The following fields are informational, do not affect - // interpretation of results. - - // Time of collection (UTC) represented as nanoseconds past the epoch. - int64 time_nanos = 9; - // Duration of the profile, if a duration makes sense. - int64 duration_nanos = 10; - // The kind of events between sampled ocurrences. - // e.g [ "cpu","cycles" ] or [ "heap","bytes" ] - ValueType period_type = 11; - // The number of events between sampled occurrences. - int64 period = 12; - // Freeform text associated to the profile. - repeated int64 comment = 13; // Indices into string table. - // Index into the string table of the type of the preferred sample - // value. If unset, clients should default to the last sample value. - int64 default_sample_type = 14; -} - -// ValueType describes the semantics and measurement units of a value. -message ValueType { - int64 type = 1; // Index into string table. - int64 unit = 2; // Index into string table. -} - -// Each Sample records values encountered in some program -// context. The program context is typically a stack trace, perhaps -// augmented with auxiliary information like the thread-id, some -// indicator of a higher level request being handled etc. -message Sample { - // The ids recorded here correspond to a Profile.location.id. - // The leaf is at location_id[0]. - repeated uint64 location_id = 1; - // The type and unit of each value is defined by the corresponding - // entry in Profile.sample_type. All samples must have the same - // number of values, the same as the length of Profile.sample_type. - // When aggregating multiple samples into a single sample, the - // result has a list of values that is the elemntwise sum of the - // lists of the originals. - repeated int64 value = 2; - // label includes additional context for this sample. It can include - // things like a thread id, allocation size, etc - repeated Label label = 3; -} - -message Label { - int64 key = 1; // Index into string table - - // At most one of the following must be present - int64 str = 2; // Index into string table - int64 num = 3; - - // Should only be present when num is present. - // Specifies the units of num. - // Use arbitrary string (for example, "requests") as a custom count unit. - // If no unit is specified, consumer may apply heuristic to deduce the unit. - // Consumers may also interpret units like "bytes" and "kilobytes" as memory - // units and units like "seconds" and "nanoseconds" as time units, - // and apply appropriate unit conversions to these. - int64 num_unit = 4; // Index into string table -} - -message Mapping { - // Unique nonzero id for the mapping. - uint64 id = 1; - // Address at which the binary (or DLL) is loaded into memory. - uint64 memory_start = 2; - // The limit of the address range occupied by this mapping. - uint64 memory_limit = 3; - // Offset in the binary that corresponds to the first mapped address. - uint64 file_offset = 4; - // The object this entry is loaded from. This can be a filename on - // disk for the main binary and shared libraries, or virtual - // abstractions like "[vdso]". - int64 filename = 5; // Index into string table - // A string that uniquely identifies a particular program version - // with high probability. E.g., for binaries generated by GNU tools, - // it could be the contents of the .note.gnu.build-id field. - int64 build_id = 6; // Index into string table - - // The following fields indicate the resolution of symbolic info. - bool has_functions = 7; - bool has_filenames = 8; - bool has_line_numbers = 9; - bool has_inline_frames = 10; -} - -// Describes function and line table debug information. -message Location { - // Unique nonzero id for the location. A profile could use - // instruction addresses or any integer sequence as ids. - uint64 id = 1; - // The id of the corresponding profile.Mapping for this location. - // It can be unset if the mapping is unknown or not applicable for - // this profile type. - uint64 mapping_id = 2; - // The instruction address for this location, if available. It - // should be within [Mapping.memory_start...Mapping.memory_limit] - // for the corresponding mapping. A non-leaf address may be in the - // middle of a call instruction. It is up to display tools to find - // the beginning of the instruction if necessary. - uint64 address = 3; - // Multiple line indicates this location has inlined functions, - // where the last entry represents the caller into which the - // preceding entries were inlined. - // - // E.g., if memcpy() is inlined into printf: - // line[0].function_name == "memcpy" - // line[1].function_name == "printf" - repeated Line line = 4; - // Provides an indication that multiple symbols map to this location's - // address, for example due to identical code folding by the linker. In that - // case the line information above represents one of the multiple - // symbols. This field must be recomputed when the symbolization state of the - // profile changes. - bool is_folded = 5; -} - -message Line { - // The id of the corresponding profile.Function for this line. - uint64 function_id = 1; - // Line number in source code. - int64 line = 2; -} - -message Function { - // Unique nonzero id for the function. - uint64 id = 1; - // Name of the function, in human-readable form if available. - int64 name = 2; // Index into string table - // Name of the function, as identified by the system. - // For instance, it can be a C++ mangled name. - int64 system_name = 3; // Index into string table - // Source file containing the function. - int64 filename = 4; // Index into string table - // Line number in source file. - int64 start_line = 5; -} \ No newline at end of file diff --git a/src/speedscope/import/profile.proto.d.ts b/src/speedscope/import/profile.proto.d.ts deleted file mode 100644 index 1721b8e..0000000 --- a/src/speedscope/import/profile.proto.d.ts +++ /dev/null @@ -1,1047 +0,0 @@ -// THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT MODIFY THIS FILE MANUALLY. -// -// To regenerate this file, run the following in the repository root: -// -// node node_modules/protobufjs/cli/bin/pbts -o src/import/profile.proto.d.ts src/import/profile.proto.j -// -// Then prepend this comment to the result. -import * as $protobuf from 'protobufjs' -/** Namespace perftools. */ -export namespace perftools { - /** Namespace profiles. */ - namespace profiles { - /** Properties of a Profile. */ - interface IProfile { - /** Profile sampleType */ - sampleType?: perftools.profiles.IValueType[] | null - - /** Profile sample */ - sample?: perftools.profiles.ISample[] | null - - /** Profile mapping */ - mapping?: perftools.profiles.IMapping[] | null - - /** Profile location */ - location?: perftools.profiles.ILocation[] | null - - /** Profile function */ - function?: perftools.profiles.IFunction[] | null - - /** Profile stringTable */ - stringTable?: string[] | null - - /** Profile dropFrames */ - dropFrames?: number | Long | null - - /** Profile keepFrames */ - keepFrames?: number | Long | null - - /** Profile timeNanos */ - timeNanos?: number | Long | null - - /** Profile durationNanos */ - durationNanos?: number | Long | null - - /** Profile periodType */ - periodType?: perftools.profiles.IValueType | null - - /** Profile period */ - period?: number | Long | null - - /** Profile comment */ - comment?: (number | Long)[] | null - - /** Profile defaultSampleType */ - defaultSampleType?: number | Long | null - } - - /** Represents a Profile. */ - class Profile implements IProfile { - /** - * Constructs a new Profile. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.IProfile) - - /** Profile sampleType. */ - public sampleType: perftools.profiles.IValueType[] - - /** Profile sample. */ - public sample: perftools.profiles.ISample[] - - /** Profile mapping. */ - public mapping: perftools.profiles.IMapping[] - - /** Profile location. */ - public location: perftools.profiles.ILocation[] - - /** Profile function. */ - public function: perftools.profiles.IFunction[] - - /** Profile stringTable. */ - public stringTable: string[] - - /** Profile dropFrames. */ - public dropFrames: number | Long - - /** Profile keepFrames. */ - public keepFrames: number | Long - - /** Profile timeNanos. */ - public timeNanos: number | Long - - /** Profile durationNanos. */ - public durationNanos: number | Long - - /** Profile periodType. */ - public periodType?: perftools.profiles.IValueType | null - - /** Profile period. */ - public period: number | Long - - /** Profile comment. */ - public comment: (number | Long)[] - - /** Profile defaultSampleType. */ - public defaultSampleType: number | Long - - /** - * Creates a new Profile instance using the specified properties. - * @param [properties] Properties to set - * @returns Profile instance - */ - public static create(properties?: perftools.profiles.IProfile): perftools.profiles.Profile - - /** - * Encodes the specified Profile message. Does not implicitly {@link perftools.profiles.Profile.verify|verify} messages. - * @param message Profile message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.IProfile, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Profile message, length delimited. Does not implicitly {@link perftools.profiles.Profile.verify|verify} messages. - * @param message Profile message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.IProfile, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Profile message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Profile - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Profile - - /** - * Decodes a Profile message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Profile - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.Profile - - /** - * Verifies a Profile message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Profile message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Profile - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Profile - - /** - * Creates a plain object from a Profile message. Also converts values to other types if specified. - * @param message Profile - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Profile, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Profile to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a ValueType. */ - interface IValueType { - /** ValueType type */ - type?: number | Long | null - - /** ValueType unit */ - unit?: number | Long | null - } - - /** Represents a ValueType. */ - class ValueType implements IValueType { - /** - * Constructs a new ValueType. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.IValueType) - - /** ValueType type. */ - public type: number | Long - - /** ValueType unit. */ - public unit: number | Long - - /** - * Creates a new ValueType instance using the specified properties. - * @param [properties] Properties to set - * @returns ValueType instance - */ - public static create(properties?: perftools.profiles.IValueType): perftools.profiles.ValueType - - /** - * Encodes the specified ValueType message. Does not implicitly {@link perftools.profiles.ValueType.verify|verify} messages. - * @param message ValueType message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.IValueType, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified ValueType message, length delimited. Does not implicitly {@link perftools.profiles.ValueType.verify|verify} messages. - * @param message ValueType message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.IValueType, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a ValueType message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ValueType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.ValueType - - /** - * Decodes a ValueType message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ValueType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.ValueType - - /** - * Verifies a ValueType message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a ValueType message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ValueType - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.ValueType - - /** - * Creates a plain object from a ValueType message. Also converts values to other types if specified. - * @param message ValueType - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.ValueType, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this ValueType to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Sample. */ - interface ISample { - /** Sample locationId */ - locationId?: (number | Long)[] | null - - /** Sample value */ - value?: (number | Long)[] | null - - /** Sample label */ - label?: perftools.profiles.ILabel[] | null - } - - /** Represents a Sample. */ - class Sample implements ISample { - /** - * Constructs a new Sample. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.ISample) - - /** Sample locationId. */ - public locationId: (number | Long)[] - - /** Sample value. */ - public value: (number | Long)[] - - /** Sample label. */ - public label: perftools.profiles.ILabel[] - - /** - * Creates a new Sample instance using the specified properties. - * @param [properties] Properties to set - * @returns Sample instance - */ - public static create(properties?: perftools.profiles.ISample): perftools.profiles.Sample - - /** - * Encodes the specified Sample message. Does not implicitly {@link perftools.profiles.Sample.verify|verify} messages. - * @param message Sample message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.ISample, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Sample message, length delimited. Does not implicitly {@link perftools.profiles.Sample.verify|verify} messages. - * @param message Sample message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.ISample, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Sample message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Sample - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Sample - - /** - * Decodes a Sample message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Sample - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.Sample - - /** - * Verifies a Sample message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Sample message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Sample - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Sample - - /** - * Creates a plain object from a Sample message. Also converts values to other types if specified. - * @param message Sample - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Sample, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Sample to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Label. */ - interface ILabel { - /** Label key */ - key?: number | Long | null - - /** Label str */ - str?: number | Long | null - - /** Label num */ - num?: number | Long | null - - /** Label numUnit */ - numUnit?: number | Long | null - } - - /** Represents a Label. */ - class Label implements ILabel { - /** - * Constructs a new Label. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.ILabel) - - /** Label key. */ - public key: number | Long - - /** Label str. */ - public str: number | Long - - /** Label num. */ - public num: number | Long - - /** Label numUnit. */ - public numUnit: number | Long - - /** - * Creates a new Label instance using the specified properties. - * @param [properties] Properties to set - * @returns Label instance - */ - public static create(properties?: perftools.profiles.ILabel): perftools.profiles.Label - - /** - * Encodes the specified Label message. Does not implicitly {@link perftools.profiles.Label.verify|verify} messages. - * @param message Label message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.ILabel, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Label message, length delimited. Does not implicitly {@link perftools.profiles.Label.verify|verify} messages. - * @param message Label message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.ILabel, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Label message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Label - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Label - - /** - * Decodes a Label message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Label - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: $protobuf.Reader | Uint8Array): perftools.profiles.Label - - /** - * Verifies a Label message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Label message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Label - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Label - - /** - * Creates a plain object from a Label message. Also converts values to other types if specified. - * @param message Label - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Label, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Label to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Mapping. */ - interface IMapping { - /** Mapping id */ - id?: number | Long | null - - /** Mapping memoryStart */ - memoryStart?: number | Long | null - - /** Mapping memoryLimit */ - memoryLimit?: number | Long | null - - /** Mapping fileOffset */ - fileOffset?: number | Long | null - - /** Mapping filename */ - filename?: number | Long | null - - /** Mapping buildId */ - buildId?: number | Long | null - - /** Mapping hasFunctions */ - hasFunctions?: boolean | null - - /** Mapping hasFilenames */ - hasFilenames?: boolean | null - - /** Mapping hasLineNumbers */ - hasLineNumbers?: boolean | null - - /** Mapping hasInlineFrames */ - hasInlineFrames?: boolean | null - } - - /** Represents a Mapping. */ - class Mapping implements IMapping { - /** - * Constructs a new Mapping. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.IMapping) - - /** Mapping id. */ - public id: number | Long - - /** Mapping memoryStart. */ - public memoryStart: number | Long - - /** Mapping memoryLimit. */ - public memoryLimit: number | Long - - /** Mapping fileOffset. */ - public fileOffset: number | Long - - /** Mapping filename. */ - public filename: number | Long - - /** Mapping buildId. */ - public buildId: number | Long - - /** Mapping hasFunctions. */ - public hasFunctions: boolean - - /** Mapping hasFilenames. */ - public hasFilenames: boolean - - /** Mapping hasLineNumbers. */ - public hasLineNumbers: boolean - - /** Mapping hasInlineFrames. */ - public hasInlineFrames: boolean - - /** - * Creates a new Mapping instance using the specified properties. - * @param [properties] Properties to set - * @returns Mapping instance - */ - public static create(properties?: perftools.profiles.IMapping): perftools.profiles.Mapping - - /** - * Encodes the specified Mapping message. Does not implicitly {@link perftools.profiles.Mapping.verify|verify} messages. - * @param message Mapping message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.IMapping, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Mapping message, length delimited. Does not implicitly {@link perftools.profiles.Mapping.verify|verify} messages. - * @param message Mapping message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.IMapping, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Mapping message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Mapping - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Mapping - - /** - * Decodes a Mapping message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Mapping - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.Mapping - - /** - * Verifies a Mapping message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Mapping message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Mapping - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Mapping - - /** - * Creates a plain object from a Mapping message. Also converts values to other types if specified. - * @param message Mapping - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Mapping, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Mapping to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Location. */ - interface ILocation { - /** Location id */ - id?: number | Long | null - - /** Location mappingId */ - mappingId?: number | Long | null - - /** Location address */ - address?: number | Long | null - - /** Location line */ - line?: perftools.profiles.ILine[] | null - - /** Location isFolded */ - isFolded?: boolean | null - } - - /** Represents a Location. */ - class Location implements ILocation { - /** - * Constructs a new Location. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.ILocation) - - /** Location id. */ - public id: number | Long - - /** Location mappingId. */ - public mappingId: number | Long - - /** Location address. */ - public address: number | Long - - /** Location line. */ - public line: perftools.profiles.ILine[] - - /** Location isFolded. */ - public isFolded: boolean - - /** - * Creates a new Location instance using the specified properties. - * @param [properties] Properties to set - * @returns Location instance - */ - public static create(properties?: perftools.profiles.ILocation): perftools.profiles.Location - - /** - * Encodes the specified Location message. Does not implicitly {@link perftools.profiles.Location.verify|verify} messages. - * @param message Location message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.ILocation, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Location message, length delimited. Does not implicitly {@link perftools.profiles.Location.verify|verify} messages. - * @param message Location message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.ILocation, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Location message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Location - - /** - * Decodes a Location message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.Location - - /** - * Verifies a Location message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Location message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Location - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Location - - /** - * Creates a plain object from a Location message. Also converts values to other types if specified. - * @param message Location - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Location, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Location to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Line. */ - interface ILine { - /** Line functionId */ - functionId?: number | Long | null - - /** Line line */ - line?: number | Long | null - } - - /** Represents a Line. */ - class Line implements ILine { - /** - * Constructs a new Line. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.ILine) - - /** Line functionId. */ - public functionId: number | Long - - /** Line line. */ - public line: number | Long - - /** - * Creates a new Line instance using the specified properties. - * @param [properties] Properties to set - * @returns Line instance - */ - public static create(properties?: perftools.profiles.ILine): perftools.profiles.Line - - /** - * Encodes the specified Line message. Does not implicitly {@link perftools.profiles.Line.verify|verify} messages. - * @param message Line message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.ILine, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Line message, length delimited. Does not implicitly {@link perftools.profiles.Line.verify|verify} messages. - * @param message Line message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.ILine, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Line message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Line - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Line - - /** - * Decodes a Line message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Line - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: $protobuf.Reader | Uint8Array): perftools.profiles.Line - - /** - * Verifies a Line message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Line message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Line - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Line - - /** - * Creates a plain object from a Line message. Also converts values to other types if specified. - * @param message Line - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Line, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Line to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - - /** Properties of a Function. */ - interface IFunction { - /** Function id */ - id?: number | Long | null - - /** Function name */ - name?: number | Long | null - - /** Function systemName */ - systemName?: number | Long | null - - /** Function filename */ - filename?: number | Long | null - - /** Function startLine */ - startLine?: number | Long | null - } - - /** Represents a Function. */ - class Function implements IFunction { - /** - * Constructs a new Function. - * @param [properties] Properties to set - */ - constructor(properties?: perftools.profiles.IFunction) - - /** Function id. */ - public id: number | Long - - /** Function name. */ - public name: number | Long - - /** Function systemName. */ - public systemName: number | Long - - /** Function filename. */ - public filename: number | Long - - /** Function startLine. */ - public startLine: number | Long - - /** - * Creates a new Function instance using the specified properties. - * @param [properties] Properties to set - * @returns Function instance - */ - public static create(properties?: perftools.profiles.IFunction): perftools.profiles.Function - - /** - * Encodes the specified Function message. Does not implicitly {@link perftools.profiles.Function.verify|verify} messages. - * @param message Function message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode( - message: perftools.profiles.IFunction, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Encodes the specified Function message, length delimited. Does not implicitly {@link perftools.profiles.Function.verify|verify} messages. - * @param message Function message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited( - message: perftools.profiles.IFunction, - writer?: $protobuf.Writer, - ): $protobuf.Writer - - /** - * Decodes a Function message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Function - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode( - reader: $protobuf.Reader | Uint8Array, - length?: number, - ): perftools.profiles.Function - - /** - * Decodes a Function message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Function - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited( - reader: $protobuf.Reader | Uint8Array, - ): perftools.profiles.Function - - /** - * Verifies a Function message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: {[k: string]: any}): string | null - - /** - * Creates a Function message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Function - */ - public static fromObject(object: {[k: string]: any}): perftools.profiles.Function - - /** - * Creates a plain object from a Function message. Also converts values to other types if specified. - * @param message Function - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject( - message: perftools.profiles.Function, - options?: $protobuf.IConversionOptions, - ): {[k: string]: any} - - /** - * Converts this Function to JSON. - * @returns JSON object - */ - public toJSON(): {[k: string]: any} - } - } -} diff --git a/src/speedscope/import/profile.proto.js b/src/speedscope/import/profile.proto.js deleted file mode 100644 index b8252da..0000000 --- a/src/speedscope/import/profile.proto.js +++ /dev/null @@ -1,3543 +0,0 @@ -// THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT MODIFY THIS FILE MANUALLY. -// -// To regenerate this file, run the following in the repository root: -// -// node node_modules/protobufjs/cli/bin/pbjs -t static-module -w commonjs -o src/import/profile.proto.js src/import/profile.proto -// -// Then prepend this comment to the result. -/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/ -'use strict' - -var $protobuf = require('protobufjs/minimal') - -// Common aliases -var $Reader = $protobuf.Reader, - $Writer = $protobuf.Writer, - $util = $protobuf.util - -// Exported root namespace -var $root = $protobuf.roots['default'] || ($protobuf.roots['default'] = {}) - -$root.perftools = (function() { - /** - * Namespace perftools. - * @exports perftools - * @namespace - */ - var perftools = {} - - perftools.profiles = (function() { - /** - * Namespace profiles. - * @memberof perftools - * @namespace - */ - var profiles = {} - - profiles.Profile = (function() { - /** - * Properties of a Profile. - * @memberof perftools.profiles - * @interface IProfile - * @property {Array.|null} [sampleType] Profile sampleType - * @property {Array.|null} [sample] Profile sample - * @property {Array.|null} [mapping] Profile mapping - * @property {Array.|null} [location] Profile location - * @property {Array.|null} ["function"] Profile function - * @property {Array.|null} [stringTable] Profile stringTable - * @property {number|Long|null} [dropFrames] Profile dropFrames - * @property {number|Long|null} [keepFrames] Profile keepFrames - * @property {number|Long|null} [timeNanos] Profile timeNanos - * @property {number|Long|null} [durationNanos] Profile durationNanos - * @property {perftools.profiles.IValueType|null} [periodType] Profile periodType - * @property {number|Long|null} [period] Profile period - * @property {Array.|null} [comment] Profile comment - * @property {number|Long|null} [defaultSampleType] Profile defaultSampleType - */ - - /** - * Constructs a new Profile. - * @memberof perftools.profiles - * @classdesc Represents a Profile. - * @implements IProfile - * @constructor - * @param {perftools.profiles.IProfile=} [properties] Properties to set - */ - function Profile(properties) { - this.sampleType = [] - this.sample = [] - this.mapping = [] - this.location = [] - this['function'] = [] - this.stringTable = [] - this.comment = [] - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Profile sampleType. - * @member {Array.} sampleType - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.sampleType = $util.emptyArray - - /** - * Profile sample. - * @member {Array.} sample - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.sample = $util.emptyArray - - /** - * Profile mapping. - * @member {Array.} mapping - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.mapping = $util.emptyArray - - /** - * Profile location. - * @member {Array.} location - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.location = $util.emptyArray - - /** - * Profile function. - * @member {Array.} function - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype['function'] = $util.emptyArray - - /** - * Profile stringTable. - * @member {Array.} stringTable - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.stringTable = $util.emptyArray - - /** - * Profile dropFrames. - * @member {number|Long} dropFrames - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.dropFrames = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Profile keepFrames. - * @member {number|Long} keepFrames - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.keepFrames = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Profile timeNanos. - * @member {number|Long} timeNanos - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.timeNanos = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Profile durationNanos. - * @member {number|Long} durationNanos - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.durationNanos = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Profile periodType. - * @member {perftools.profiles.IValueType|null|undefined} periodType - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.periodType = null - - /** - * Profile period. - * @member {number|Long} period - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.period = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Profile comment. - * @member {Array.} comment - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.comment = $util.emptyArray - - /** - * Profile defaultSampleType. - * @member {number|Long} defaultSampleType - * @memberof perftools.profiles.Profile - * @instance - */ - Profile.prototype.defaultSampleType = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Creates a new Profile instance using the specified properties. - * @function create - * @memberof perftools.profiles.Profile - * @static - * @param {perftools.profiles.IProfile=} [properties] Properties to set - * @returns {perftools.profiles.Profile} Profile instance - */ - Profile.create = function create(properties) { - return new Profile(properties) - } - - /** - * Encodes the specified Profile message. Does not implicitly {@link perftools.profiles.Profile.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Profile - * @static - * @param {perftools.profiles.IProfile} message Profile message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Profile.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.sampleType != null && message.sampleType.length) - for (var i = 0; i < message.sampleType.length; ++i) - $root.perftools.profiles.ValueType.encode( - message.sampleType[i], - writer.uint32(/* id 1, wireType 2 =*/ 10).fork(), - ).ldelim() - if (message.sample != null && message.sample.length) - for (var i = 0; i < message.sample.length; ++i) - $root.perftools.profiles.Sample.encode( - message.sample[i], - writer.uint32(/* id 2, wireType 2 =*/ 18).fork(), - ).ldelim() - if (message.mapping != null && message.mapping.length) - for (var i = 0; i < message.mapping.length; ++i) - $root.perftools.profiles.Mapping.encode( - message.mapping[i], - writer.uint32(/* id 3, wireType 2 =*/ 26).fork(), - ).ldelim() - if (message.location != null && message.location.length) - for (var i = 0; i < message.location.length; ++i) - $root.perftools.profiles.Location.encode( - message.location[i], - writer.uint32(/* id 4, wireType 2 =*/ 34).fork(), - ).ldelim() - if (message['function'] != null && message['function'].length) - for (var i = 0; i < message['function'].length; ++i) - $root.perftools.profiles.Function.encode( - message['function'][i], - writer.uint32(/* id 5, wireType 2 =*/ 42).fork(), - ).ldelim() - if (message.stringTable != null && message.stringTable.length) - for (var i = 0; i < message.stringTable.length; ++i) - writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.stringTable[i]) - if (message.dropFrames != null && message.hasOwnProperty('dropFrames')) - writer.uint32(/* id 7, wireType 0 =*/ 56).int64(message.dropFrames) - if (message.keepFrames != null && message.hasOwnProperty('keepFrames')) - writer.uint32(/* id 8, wireType 0 =*/ 64).int64(message.keepFrames) - if (message.timeNanos != null && message.hasOwnProperty('timeNanos')) - writer.uint32(/* id 9, wireType 0 =*/ 72).int64(message.timeNanos) - if (message.durationNanos != null && message.hasOwnProperty('durationNanos')) - writer.uint32(/* id 10, wireType 0 =*/ 80).int64(message.durationNanos) - if (message.periodType != null && message.hasOwnProperty('periodType')) - $root.perftools.profiles.ValueType.encode( - message.periodType, - writer.uint32(/* id 11, wireType 2 =*/ 90).fork(), - ).ldelim() - if (message.period != null && message.hasOwnProperty('period')) - writer.uint32(/* id 12, wireType 0 =*/ 96).int64(message.period) - if (message.comment != null && message.comment.length) { - writer.uint32(/* id 13, wireType 2 =*/ 106).fork() - for (var i = 0; i < message.comment.length; ++i) writer.int64(message.comment[i]) - writer.ldelim() - } - if (message.defaultSampleType != null && message.hasOwnProperty('defaultSampleType')) - writer.uint32(/* id 14, wireType 0 =*/ 112).int64(message.defaultSampleType) - return writer - } - - /** - * Encodes the specified Profile message, length delimited. Does not implicitly {@link perftools.profiles.Profile.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Profile - * @static - * @param {perftools.profiles.IProfile} message Profile message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Profile.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Profile message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Profile - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Profile} Profile - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Profile.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Profile() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - if (!(message.sampleType && message.sampleType.length)) message.sampleType = [] - message.sampleType.push( - $root.perftools.profiles.ValueType.decode(reader, reader.uint32()), - ) - break - case 2: - if (!(message.sample && message.sample.length)) message.sample = [] - message.sample.push($root.perftools.profiles.Sample.decode(reader, reader.uint32())) - break - case 3: - if (!(message.mapping && message.mapping.length)) message.mapping = [] - message.mapping.push($root.perftools.profiles.Mapping.decode(reader, reader.uint32())) - break - case 4: - if (!(message.location && message.location.length)) message.location = [] - message.location.push( - $root.perftools.profiles.Location.decode(reader, reader.uint32()), - ) - break - case 5: - if (!(message['function'] && message['function'].length)) message['function'] = [] - message['function'].push( - $root.perftools.profiles.Function.decode(reader, reader.uint32()), - ) - break - case 6: - if (!(message.stringTable && message.stringTable.length)) message.stringTable = [] - message.stringTable.push(reader.string()) - break - case 7: - message.dropFrames = reader.int64() - break - case 8: - message.keepFrames = reader.int64() - break - case 9: - message.timeNanos = reader.int64() - break - case 10: - message.durationNanos = reader.int64() - break - case 11: - message.periodType = $root.perftools.profiles.ValueType.decode( - reader, - reader.uint32(), - ) - break - case 12: - message.period = reader.int64() - break - case 13: - if (!(message.comment && message.comment.length)) message.comment = [] - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos - while (reader.pos < end2) message.comment.push(reader.int64()) - } else message.comment.push(reader.int64()) - break - case 14: - message.defaultSampleType = reader.int64() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Profile message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Profile - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Profile} Profile - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Profile.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Profile message. - * @function verify - * @memberof perftools.profiles.Profile - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Profile.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.sampleType != null && message.hasOwnProperty('sampleType')) { - if (!Array.isArray(message.sampleType)) return 'sampleType: array expected' - for (var i = 0; i < message.sampleType.length; ++i) { - var error = $root.perftools.profiles.ValueType.verify(message.sampleType[i]) - if (error) return 'sampleType.' + error - } - } - if (message.sample != null && message.hasOwnProperty('sample')) { - if (!Array.isArray(message.sample)) return 'sample: array expected' - for (var i = 0; i < message.sample.length; ++i) { - var error = $root.perftools.profiles.Sample.verify(message.sample[i]) - if (error) return 'sample.' + error - } - } - if (message.mapping != null && message.hasOwnProperty('mapping')) { - if (!Array.isArray(message.mapping)) return 'mapping: array expected' - for (var i = 0; i < message.mapping.length; ++i) { - var error = $root.perftools.profiles.Mapping.verify(message.mapping[i]) - if (error) return 'mapping.' + error - } - } - if (message.location != null && message.hasOwnProperty('location')) { - if (!Array.isArray(message.location)) return 'location: array expected' - for (var i = 0; i < message.location.length; ++i) { - var error = $root.perftools.profiles.Location.verify(message.location[i]) - if (error) return 'location.' + error - } - } - if (message['function'] != null && message.hasOwnProperty('function')) { - if (!Array.isArray(message['function'])) return 'function: array expected' - for (var i = 0; i < message['function'].length; ++i) { - var error = $root.perftools.profiles.Function.verify(message['function'][i]) - if (error) return 'function.' + error - } - } - if (message.stringTable != null && message.hasOwnProperty('stringTable')) { - if (!Array.isArray(message.stringTable)) return 'stringTable: array expected' - for (var i = 0; i < message.stringTable.length; ++i) - if (!$util.isString(message.stringTable[i])) return 'stringTable: string[] expected' - } - if (message.dropFrames != null && message.hasOwnProperty('dropFrames')) - if ( - !$util.isInteger(message.dropFrames) && - !( - message.dropFrames && - $util.isInteger(message.dropFrames.low) && - $util.isInteger(message.dropFrames.high) - ) - ) - return 'dropFrames: integer|Long expected' - if (message.keepFrames != null && message.hasOwnProperty('keepFrames')) - if ( - !$util.isInteger(message.keepFrames) && - !( - message.keepFrames && - $util.isInteger(message.keepFrames.low) && - $util.isInteger(message.keepFrames.high) - ) - ) - return 'keepFrames: integer|Long expected' - if (message.timeNanos != null && message.hasOwnProperty('timeNanos')) - if ( - !$util.isInteger(message.timeNanos) && - !( - message.timeNanos && - $util.isInteger(message.timeNanos.low) && - $util.isInteger(message.timeNanos.high) - ) - ) - return 'timeNanos: integer|Long expected' - if (message.durationNanos != null && message.hasOwnProperty('durationNanos')) - if ( - !$util.isInteger(message.durationNanos) && - !( - message.durationNanos && - $util.isInteger(message.durationNanos.low) && - $util.isInteger(message.durationNanos.high) - ) - ) - return 'durationNanos: integer|Long expected' - if (message.periodType != null && message.hasOwnProperty('periodType')) { - var error = $root.perftools.profiles.ValueType.verify(message.periodType) - if (error) return 'periodType.' + error - } - if (message.period != null && message.hasOwnProperty('period')) - if ( - !$util.isInteger(message.period) && - !( - message.period && - $util.isInteger(message.period.low) && - $util.isInteger(message.period.high) - ) - ) - return 'period: integer|Long expected' - if (message.comment != null && message.hasOwnProperty('comment')) { - if (!Array.isArray(message.comment)) return 'comment: array expected' - for (var i = 0; i < message.comment.length; ++i) - if ( - !$util.isInteger(message.comment[i]) && - !( - message.comment[i] && - $util.isInteger(message.comment[i].low) && - $util.isInteger(message.comment[i].high) - ) - ) - return 'comment: integer|Long[] expected' - } - if (message.defaultSampleType != null && message.hasOwnProperty('defaultSampleType')) - if ( - !$util.isInteger(message.defaultSampleType) && - !( - message.defaultSampleType && - $util.isInteger(message.defaultSampleType.low) && - $util.isInteger(message.defaultSampleType.high) - ) - ) - return 'defaultSampleType: integer|Long expected' - return null - } - - /** - * Creates a Profile message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Profile - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Profile} Profile - */ - Profile.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Profile) return object - var message = new $root.perftools.profiles.Profile() - if (object.sampleType) { - if (!Array.isArray(object.sampleType)) - throw TypeError('.perftools.profiles.Profile.sampleType: array expected') - message.sampleType = [] - for (var i = 0; i < object.sampleType.length; ++i) { - if (typeof object.sampleType[i] !== 'object') - throw TypeError('.perftools.profiles.Profile.sampleType: object expected') - message.sampleType[i] = $root.perftools.profiles.ValueType.fromObject( - object.sampleType[i], - ) - } - } - if (object.sample) { - if (!Array.isArray(object.sample)) - throw TypeError('.perftools.profiles.Profile.sample: array expected') - message.sample = [] - for (var i = 0; i < object.sample.length; ++i) { - if (typeof object.sample[i] !== 'object') - throw TypeError('.perftools.profiles.Profile.sample: object expected') - message.sample[i] = $root.perftools.profiles.Sample.fromObject(object.sample[i]) - } - } - if (object.mapping) { - if (!Array.isArray(object.mapping)) - throw TypeError('.perftools.profiles.Profile.mapping: array expected') - message.mapping = [] - for (var i = 0; i < object.mapping.length; ++i) { - if (typeof object.mapping[i] !== 'object') - throw TypeError('.perftools.profiles.Profile.mapping: object expected') - message.mapping[i] = $root.perftools.profiles.Mapping.fromObject(object.mapping[i]) - } - } - if (object.location) { - if (!Array.isArray(object.location)) - throw TypeError('.perftools.profiles.Profile.location: array expected') - message.location = [] - for (var i = 0; i < object.location.length; ++i) { - if (typeof object.location[i] !== 'object') - throw TypeError('.perftools.profiles.Profile.location: object expected') - message.location[i] = $root.perftools.profiles.Location.fromObject(object.location[i]) - } - } - if (object['function']) { - if (!Array.isArray(object['function'])) - throw TypeError('.perftools.profiles.Profile.function: array expected') - message['function'] = [] - for (var i = 0; i < object['function'].length; ++i) { - if (typeof object['function'][i] !== 'object') - throw TypeError('.perftools.profiles.Profile.function: object expected') - message['function'][i] = $root.perftools.profiles.Function.fromObject( - object['function'][i], - ) - } - } - if (object.stringTable) { - if (!Array.isArray(object.stringTable)) - throw TypeError('.perftools.profiles.Profile.stringTable: array expected') - message.stringTable = [] - for (var i = 0; i < object.stringTable.length; ++i) - message.stringTable[i] = String(object.stringTable[i]) - } - if (object.dropFrames != null) - if ($util.Long) - (message.dropFrames = $util.Long.fromValue(object.dropFrames)).unsigned = false - else if (typeof object.dropFrames === 'string') - message.dropFrames = parseInt(object.dropFrames, 10) - else if (typeof object.dropFrames === 'number') message.dropFrames = object.dropFrames - else if (typeof object.dropFrames === 'object') - message.dropFrames = new $util.LongBits( - object.dropFrames.low >>> 0, - object.dropFrames.high >>> 0, - ).toNumber() - if (object.keepFrames != null) - if ($util.Long) - (message.keepFrames = $util.Long.fromValue(object.keepFrames)).unsigned = false - else if (typeof object.keepFrames === 'string') - message.keepFrames = parseInt(object.keepFrames, 10) - else if (typeof object.keepFrames === 'number') message.keepFrames = object.keepFrames - else if (typeof object.keepFrames === 'object') - message.keepFrames = new $util.LongBits( - object.keepFrames.low >>> 0, - object.keepFrames.high >>> 0, - ).toNumber() - if (object.timeNanos != null) - if ($util.Long) - (message.timeNanos = $util.Long.fromValue(object.timeNanos)).unsigned = false - else if (typeof object.timeNanos === 'string') - message.timeNanos = parseInt(object.timeNanos, 10) - else if (typeof object.timeNanos === 'number') message.timeNanos = object.timeNanos - else if (typeof object.timeNanos === 'object') - message.timeNanos = new $util.LongBits( - object.timeNanos.low >>> 0, - object.timeNanos.high >>> 0, - ).toNumber() - if (object.durationNanos != null) - if ($util.Long) - (message.durationNanos = $util.Long.fromValue(object.durationNanos)).unsigned = false - else if (typeof object.durationNanos === 'string') - message.durationNanos = parseInt(object.durationNanos, 10) - else if (typeof object.durationNanos === 'number') - message.durationNanos = object.durationNanos - else if (typeof object.durationNanos === 'object') - message.durationNanos = new $util.LongBits( - object.durationNanos.low >>> 0, - object.durationNanos.high >>> 0, - ).toNumber() - if (object.periodType != null) { - if (typeof object.periodType !== 'object') - throw TypeError('.perftools.profiles.Profile.periodType: object expected') - message.periodType = $root.perftools.profiles.ValueType.fromObject(object.periodType) - } - if (object.period != null) - if ($util.Long) (message.period = $util.Long.fromValue(object.period)).unsigned = false - else if (typeof object.period === 'string') message.period = parseInt(object.period, 10) - else if (typeof object.period === 'number') message.period = object.period - else if (typeof object.period === 'object') - message.period = new $util.LongBits( - object.period.low >>> 0, - object.period.high >>> 0, - ).toNumber() - if (object.comment) { - if (!Array.isArray(object.comment)) - throw TypeError('.perftools.profiles.Profile.comment: array expected') - message.comment = [] - for (var i = 0; i < object.comment.length; ++i) - if ($util.Long) - (message.comment[i] = $util.Long.fromValue(object.comment[i])).unsigned = false - else if (typeof object.comment[i] === 'string') - message.comment[i] = parseInt(object.comment[i], 10) - else if (typeof object.comment[i] === 'number') message.comment[i] = object.comment[i] - else if (typeof object.comment[i] === 'object') - message.comment[i] = new $util.LongBits( - object.comment[i].low >>> 0, - object.comment[i].high >>> 0, - ).toNumber() - } - if (object.defaultSampleType != null) - if ($util.Long) - (message.defaultSampleType = $util.Long.fromValue( - object.defaultSampleType, - )).unsigned = false - else if (typeof object.defaultSampleType === 'string') - message.defaultSampleType = parseInt(object.defaultSampleType, 10) - else if (typeof object.defaultSampleType === 'number') - message.defaultSampleType = object.defaultSampleType - else if (typeof object.defaultSampleType === 'object') - message.defaultSampleType = new $util.LongBits( - object.defaultSampleType.low >>> 0, - object.defaultSampleType.high >>> 0, - ).toNumber() - return message - } - - /** - * Creates a plain object from a Profile message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Profile - * @static - * @param {perftools.profiles.Profile} message Profile - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Profile.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.arrays || options.defaults) { - object.sampleType = [] - object.sample = [] - object.mapping = [] - object.location = [] - object['function'] = [] - object.stringTable = [] - object.comment = [] - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.dropFrames = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.dropFrames = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.keepFrames = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.keepFrames = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.timeNanos = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.timeNanos = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.durationNanos = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.durationNanos = options.longs === String ? '0' : 0 - object.periodType = null - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.period = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.period = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.defaultSampleType = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.defaultSampleType = options.longs === String ? '0' : 0 - } - if (message.sampleType && message.sampleType.length) { - object.sampleType = [] - for (var j = 0; j < message.sampleType.length; ++j) - object.sampleType[j] = $root.perftools.profiles.ValueType.toObject( - message.sampleType[j], - options, - ) - } - if (message.sample && message.sample.length) { - object.sample = [] - for (var j = 0; j < message.sample.length; ++j) - object.sample[j] = $root.perftools.profiles.Sample.toObject(message.sample[j], options) - } - if (message.mapping && message.mapping.length) { - object.mapping = [] - for (var j = 0; j < message.mapping.length; ++j) - object.mapping[j] = $root.perftools.profiles.Mapping.toObject( - message.mapping[j], - options, - ) - } - if (message.location && message.location.length) { - object.location = [] - for (var j = 0; j < message.location.length; ++j) - object.location[j] = $root.perftools.profiles.Location.toObject( - message.location[j], - options, - ) - } - if (message['function'] && message['function'].length) { - object['function'] = [] - for (var j = 0; j < message['function'].length; ++j) - object['function'][j] = $root.perftools.profiles.Function.toObject( - message['function'][j], - options, - ) - } - if (message.stringTable && message.stringTable.length) { - object.stringTable = [] - for (var j = 0; j < message.stringTable.length; ++j) - object.stringTable[j] = message.stringTable[j] - } - if (message.dropFrames != null && message.hasOwnProperty('dropFrames')) - if (typeof message.dropFrames === 'number') - object.dropFrames = - options.longs === String ? String(message.dropFrames) : message.dropFrames - else - object.dropFrames = - options.longs === String - ? $util.Long.prototype.toString.call(message.dropFrames) - : options.longs === Number - ? new $util.LongBits( - message.dropFrames.low >>> 0, - message.dropFrames.high >>> 0, - ).toNumber() - : message.dropFrames - if (message.keepFrames != null && message.hasOwnProperty('keepFrames')) - if (typeof message.keepFrames === 'number') - object.keepFrames = - options.longs === String ? String(message.keepFrames) : message.keepFrames - else - object.keepFrames = - options.longs === String - ? $util.Long.prototype.toString.call(message.keepFrames) - : options.longs === Number - ? new $util.LongBits( - message.keepFrames.low >>> 0, - message.keepFrames.high >>> 0, - ).toNumber() - : message.keepFrames - if (message.timeNanos != null && message.hasOwnProperty('timeNanos')) - if (typeof message.timeNanos === 'number') - object.timeNanos = - options.longs === String ? String(message.timeNanos) : message.timeNanos - else - object.timeNanos = - options.longs === String - ? $util.Long.prototype.toString.call(message.timeNanos) - : options.longs === Number - ? new $util.LongBits( - message.timeNanos.low >>> 0, - message.timeNanos.high >>> 0, - ).toNumber() - : message.timeNanos - if (message.durationNanos != null && message.hasOwnProperty('durationNanos')) - if (typeof message.durationNanos === 'number') - object.durationNanos = - options.longs === String ? String(message.durationNanos) : message.durationNanos - else - object.durationNanos = - options.longs === String - ? $util.Long.prototype.toString.call(message.durationNanos) - : options.longs === Number - ? new $util.LongBits( - message.durationNanos.low >>> 0, - message.durationNanos.high >>> 0, - ).toNumber() - : message.durationNanos - if (message.periodType != null && message.hasOwnProperty('periodType')) - object.periodType = $root.perftools.profiles.ValueType.toObject( - message.periodType, - options, - ) - if (message.period != null && message.hasOwnProperty('period')) - if (typeof message.period === 'number') - object.period = options.longs === String ? String(message.period) : message.period - else - object.period = - options.longs === String - ? $util.Long.prototype.toString.call(message.period) - : options.longs === Number - ? new $util.LongBits( - message.period.low >>> 0, - message.period.high >>> 0, - ).toNumber() - : message.period - if (message.comment && message.comment.length) { - object.comment = [] - for (var j = 0; j < message.comment.length; ++j) - if (typeof message.comment[j] === 'number') - object.comment[j] = - options.longs === String ? String(message.comment[j]) : message.comment[j] - else - object.comment[j] = - options.longs === String - ? $util.Long.prototype.toString.call(message.comment[j]) - : options.longs === Number - ? new $util.LongBits( - message.comment[j].low >>> 0, - message.comment[j].high >>> 0, - ).toNumber() - : message.comment[j] - } - if (message.defaultSampleType != null && message.hasOwnProperty('defaultSampleType')) - if (typeof message.defaultSampleType === 'number') - object.defaultSampleType = - options.longs === String - ? String(message.defaultSampleType) - : message.defaultSampleType - else - object.defaultSampleType = - options.longs === String - ? $util.Long.prototype.toString.call(message.defaultSampleType) - : options.longs === Number - ? new $util.LongBits( - message.defaultSampleType.low >>> 0, - message.defaultSampleType.high >>> 0, - ).toNumber() - : message.defaultSampleType - return object - } - - /** - * Converts this Profile to JSON. - * @function toJSON - * @memberof perftools.profiles.Profile - * @instance - * @returns {Object.} JSON object - */ - Profile.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Profile - })() - - profiles.ValueType = (function() { - /** - * Properties of a ValueType. - * @memberof perftools.profiles - * @interface IValueType - * @property {number|Long|null} [type] ValueType type - * @property {number|Long|null} [unit] ValueType unit - */ - - /** - * Constructs a new ValueType. - * @memberof perftools.profiles - * @classdesc Represents a ValueType. - * @implements IValueType - * @constructor - * @param {perftools.profiles.IValueType=} [properties] Properties to set - */ - function ValueType(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * ValueType type. - * @member {number|Long} type - * @memberof perftools.profiles.ValueType - * @instance - */ - ValueType.prototype.type = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * ValueType unit. - * @member {number|Long} unit - * @memberof perftools.profiles.ValueType - * @instance - */ - ValueType.prototype.unit = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Creates a new ValueType instance using the specified properties. - * @function create - * @memberof perftools.profiles.ValueType - * @static - * @param {perftools.profiles.IValueType=} [properties] Properties to set - * @returns {perftools.profiles.ValueType} ValueType instance - */ - ValueType.create = function create(properties) { - return new ValueType(properties) - } - - /** - * Encodes the specified ValueType message. Does not implicitly {@link perftools.profiles.ValueType.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.ValueType - * @static - * @param {perftools.profiles.IValueType} message ValueType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ValueType.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.type != null && message.hasOwnProperty('type')) - writer.uint32(/* id 1, wireType 0 =*/ 8).int64(message.type) - if (message.unit != null && message.hasOwnProperty('unit')) - writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.unit) - return writer - } - - /** - * Encodes the specified ValueType message, length delimited. Does not implicitly {@link perftools.profiles.ValueType.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.ValueType - * @static - * @param {perftools.profiles.IValueType} message ValueType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ValueType.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a ValueType message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.ValueType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.ValueType} ValueType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ValueType.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.ValueType() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.type = reader.int64() - break - case 2: - message.unit = reader.int64() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a ValueType message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.ValueType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.ValueType} ValueType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ValueType.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a ValueType message. - * @function verify - * @memberof perftools.profiles.ValueType - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ValueType.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.type != null && message.hasOwnProperty('type')) - if ( - !$util.isInteger(message.type) && - !( - message.type && - $util.isInteger(message.type.low) && - $util.isInteger(message.type.high) - ) - ) - return 'type: integer|Long expected' - if (message.unit != null && message.hasOwnProperty('unit')) - if ( - !$util.isInteger(message.unit) && - !( - message.unit && - $util.isInteger(message.unit.low) && - $util.isInteger(message.unit.high) - ) - ) - return 'unit: integer|Long expected' - return null - } - - /** - * Creates a ValueType message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.ValueType - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.ValueType} ValueType - */ - ValueType.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.ValueType) return object - var message = new $root.perftools.profiles.ValueType() - if (object.type != null) - if ($util.Long) (message.type = $util.Long.fromValue(object.type)).unsigned = false - else if (typeof object.type === 'string') message.type = parseInt(object.type, 10) - else if (typeof object.type === 'number') message.type = object.type - else if (typeof object.type === 'object') - message.type = new $util.LongBits( - object.type.low >>> 0, - object.type.high >>> 0, - ).toNumber() - if (object.unit != null) - if ($util.Long) (message.unit = $util.Long.fromValue(object.unit)).unsigned = false - else if (typeof object.unit === 'string') message.unit = parseInt(object.unit, 10) - else if (typeof object.unit === 'number') message.unit = object.unit - else if (typeof object.unit === 'object') - message.unit = new $util.LongBits( - object.unit.low >>> 0, - object.unit.high >>> 0, - ).toNumber() - return message - } - - /** - * Creates a plain object from a ValueType message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.ValueType - * @static - * @param {perftools.profiles.ValueType} message ValueType - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ValueType.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.type = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.type = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.unit = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.unit = options.longs === String ? '0' : 0 - } - if (message.type != null && message.hasOwnProperty('type')) - if (typeof message.type === 'number') - object.type = options.longs === String ? String(message.type) : message.type - else - object.type = - options.longs === String - ? $util.Long.prototype.toString.call(message.type) - : options.longs === Number - ? new $util.LongBits(message.type.low >>> 0, message.type.high >>> 0).toNumber() - : message.type - if (message.unit != null && message.hasOwnProperty('unit')) - if (typeof message.unit === 'number') - object.unit = options.longs === String ? String(message.unit) : message.unit - else - object.unit = - options.longs === String - ? $util.Long.prototype.toString.call(message.unit) - : options.longs === Number - ? new $util.LongBits(message.unit.low >>> 0, message.unit.high >>> 0).toNumber() - : message.unit - return object - } - - /** - * Converts this ValueType to JSON. - * @function toJSON - * @memberof perftools.profiles.ValueType - * @instance - * @returns {Object.} JSON object - */ - ValueType.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return ValueType - })() - - profiles.Sample = (function() { - /** - * Properties of a Sample. - * @memberof perftools.profiles - * @interface ISample - * @property {Array.|null} [locationId] Sample locationId - * @property {Array.|null} [value] Sample value - * @property {Array.|null} [label] Sample label - */ - - /** - * Constructs a new Sample. - * @memberof perftools.profiles - * @classdesc Represents a Sample. - * @implements ISample - * @constructor - * @param {perftools.profiles.ISample=} [properties] Properties to set - */ - function Sample(properties) { - this.locationId = [] - this.value = [] - this.label = [] - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Sample locationId. - * @member {Array.} locationId - * @memberof perftools.profiles.Sample - * @instance - */ - Sample.prototype.locationId = $util.emptyArray - - /** - * Sample value. - * @member {Array.} value - * @memberof perftools.profiles.Sample - * @instance - */ - Sample.prototype.value = $util.emptyArray - - /** - * Sample label. - * @member {Array.} label - * @memberof perftools.profiles.Sample - * @instance - */ - Sample.prototype.label = $util.emptyArray - - /** - * Creates a new Sample instance using the specified properties. - * @function create - * @memberof perftools.profiles.Sample - * @static - * @param {perftools.profiles.ISample=} [properties] Properties to set - * @returns {perftools.profiles.Sample} Sample instance - */ - Sample.create = function create(properties) { - return new Sample(properties) - } - - /** - * Encodes the specified Sample message. Does not implicitly {@link perftools.profiles.Sample.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Sample - * @static - * @param {perftools.profiles.ISample} message Sample message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Sample.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.locationId != null && message.locationId.length) { - writer.uint32(/* id 1, wireType 2 =*/ 10).fork() - for (var i = 0; i < message.locationId.length; ++i) writer.uint64(message.locationId[i]) - writer.ldelim() - } - if (message.value != null && message.value.length) { - writer.uint32(/* id 2, wireType 2 =*/ 18).fork() - for (var i = 0; i < message.value.length; ++i) writer.int64(message.value[i]) - writer.ldelim() - } - if (message.label != null && message.label.length) - for (var i = 0; i < message.label.length; ++i) - $root.perftools.profiles.Label.encode( - message.label[i], - writer.uint32(/* id 3, wireType 2 =*/ 26).fork(), - ).ldelim() - return writer - } - - /** - * Encodes the specified Sample message, length delimited. Does not implicitly {@link perftools.profiles.Sample.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Sample - * @static - * @param {perftools.profiles.ISample} message Sample message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Sample.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Sample message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Sample - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Sample} Sample - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Sample.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Sample() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - if (!(message.locationId && message.locationId.length)) message.locationId = [] - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos - while (reader.pos < end2) message.locationId.push(reader.uint64()) - } else message.locationId.push(reader.uint64()) - break - case 2: - if (!(message.value && message.value.length)) message.value = [] - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos - while (reader.pos < end2) message.value.push(reader.int64()) - } else message.value.push(reader.int64()) - break - case 3: - if (!(message.label && message.label.length)) message.label = [] - message.label.push($root.perftools.profiles.Label.decode(reader, reader.uint32())) - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Sample message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Sample - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Sample} Sample - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Sample.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Sample message. - * @function verify - * @memberof perftools.profiles.Sample - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Sample.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.locationId != null && message.hasOwnProperty('locationId')) { - if (!Array.isArray(message.locationId)) return 'locationId: array expected' - for (var i = 0; i < message.locationId.length; ++i) - if ( - !$util.isInteger(message.locationId[i]) && - !( - message.locationId[i] && - $util.isInteger(message.locationId[i].low) && - $util.isInteger(message.locationId[i].high) - ) - ) - return 'locationId: integer|Long[] expected' - } - if (message.value != null && message.hasOwnProperty('value')) { - if (!Array.isArray(message.value)) return 'value: array expected' - for (var i = 0; i < message.value.length; ++i) - if ( - !$util.isInteger(message.value[i]) && - !( - message.value[i] && - $util.isInteger(message.value[i].low) && - $util.isInteger(message.value[i].high) - ) - ) - return 'value: integer|Long[] expected' - } - if (message.label != null && message.hasOwnProperty('label')) { - if (!Array.isArray(message.label)) return 'label: array expected' - for (var i = 0; i < message.label.length; ++i) { - var error = $root.perftools.profiles.Label.verify(message.label[i]) - if (error) return 'label.' + error - } - } - return null - } - - /** - * Creates a Sample message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Sample - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Sample} Sample - */ - Sample.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Sample) return object - var message = new $root.perftools.profiles.Sample() - if (object.locationId) { - if (!Array.isArray(object.locationId)) - throw TypeError('.perftools.profiles.Sample.locationId: array expected') - message.locationId = [] - for (var i = 0; i < object.locationId.length; ++i) - if ($util.Long) - (message.locationId[i] = $util.Long.fromValue(object.locationId[i])).unsigned = true - else if (typeof object.locationId[i] === 'string') - message.locationId[i] = parseInt(object.locationId[i], 10) - else if (typeof object.locationId[i] === 'number') - message.locationId[i] = object.locationId[i] - else if (typeof object.locationId[i] === 'object') - message.locationId[i] = new $util.LongBits( - object.locationId[i].low >>> 0, - object.locationId[i].high >>> 0, - ).toNumber(true) - } - if (object.value) { - if (!Array.isArray(object.value)) - throw TypeError('.perftools.profiles.Sample.value: array expected') - message.value = [] - for (var i = 0; i < object.value.length; ++i) - if ($util.Long) - (message.value[i] = $util.Long.fromValue(object.value[i])).unsigned = false - else if (typeof object.value[i] === 'string') - message.value[i] = parseInt(object.value[i], 10) - else if (typeof object.value[i] === 'number') message.value[i] = object.value[i] - else if (typeof object.value[i] === 'object') - message.value[i] = new $util.LongBits( - object.value[i].low >>> 0, - object.value[i].high >>> 0, - ).toNumber() - } - if (object.label) { - if (!Array.isArray(object.label)) - throw TypeError('.perftools.profiles.Sample.label: array expected') - message.label = [] - for (var i = 0; i < object.label.length; ++i) { - if (typeof object.label[i] !== 'object') - throw TypeError('.perftools.profiles.Sample.label: object expected') - message.label[i] = $root.perftools.profiles.Label.fromObject(object.label[i]) - } - } - return message - } - - /** - * Creates a plain object from a Sample message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Sample - * @static - * @param {perftools.profiles.Sample} message Sample - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Sample.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.arrays || options.defaults) { - object.locationId = [] - object.value = [] - object.label = [] - } - if (message.locationId && message.locationId.length) { - object.locationId = [] - for (var j = 0; j < message.locationId.length; ++j) - if (typeof message.locationId[j] === 'number') - object.locationId[j] = - options.longs === String ? String(message.locationId[j]) : message.locationId[j] - else - object.locationId[j] = - options.longs === String - ? $util.Long.prototype.toString.call(message.locationId[j]) - : options.longs === Number - ? new $util.LongBits( - message.locationId[j].low >>> 0, - message.locationId[j].high >>> 0, - ).toNumber(true) - : message.locationId[j] - } - if (message.value && message.value.length) { - object.value = [] - for (var j = 0; j < message.value.length; ++j) - if (typeof message.value[j] === 'number') - object.value[j] = - options.longs === String ? String(message.value[j]) : message.value[j] - else - object.value[j] = - options.longs === String - ? $util.Long.prototype.toString.call(message.value[j]) - : options.longs === Number - ? new $util.LongBits( - message.value[j].low >>> 0, - message.value[j].high >>> 0, - ).toNumber() - : message.value[j] - } - if (message.label && message.label.length) { - object.label = [] - for (var j = 0; j < message.label.length; ++j) - object.label[j] = $root.perftools.profiles.Label.toObject(message.label[j], options) - } - return object - } - - /** - * Converts this Sample to JSON. - * @function toJSON - * @memberof perftools.profiles.Sample - * @instance - * @returns {Object.} JSON object - */ - Sample.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Sample - })() - - profiles.Label = (function() { - /** - * Properties of a Label. - * @memberof perftools.profiles - * @interface ILabel - * @property {number|Long|null} [key] Label key - * @property {number|Long|null} [str] Label str - * @property {number|Long|null} [num] Label num - * @property {number|Long|null} [numUnit] Label numUnit - */ - - /** - * Constructs a new Label. - * @memberof perftools.profiles - * @classdesc Represents a Label. - * @implements ILabel - * @constructor - * @param {perftools.profiles.ILabel=} [properties] Properties to set - */ - function Label(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Label key. - * @member {number|Long} key - * @memberof perftools.profiles.Label - * @instance - */ - Label.prototype.key = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Label str. - * @member {number|Long} str - * @memberof perftools.profiles.Label - * @instance - */ - Label.prototype.str = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Label num. - * @member {number|Long} num - * @memberof perftools.profiles.Label - * @instance - */ - Label.prototype.num = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Label numUnit. - * @member {number|Long} numUnit - * @memberof perftools.profiles.Label - * @instance - */ - Label.prototype.numUnit = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Creates a new Label instance using the specified properties. - * @function create - * @memberof perftools.profiles.Label - * @static - * @param {perftools.profiles.ILabel=} [properties] Properties to set - * @returns {perftools.profiles.Label} Label instance - */ - Label.create = function create(properties) { - return new Label(properties) - } - - /** - * Encodes the specified Label message. Does not implicitly {@link perftools.profiles.Label.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Label - * @static - * @param {perftools.profiles.ILabel} message Label message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Label.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.key != null && message.hasOwnProperty('key')) - writer.uint32(/* id 1, wireType 0 =*/ 8).int64(message.key) - if (message.str != null && message.hasOwnProperty('str')) - writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.str) - if (message.num != null && message.hasOwnProperty('num')) - writer.uint32(/* id 3, wireType 0 =*/ 24).int64(message.num) - if (message.numUnit != null && message.hasOwnProperty('numUnit')) - writer.uint32(/* id 4, wireType 0 =*/ 32).int64(message.numUnit) - return writer - } - - /** - * Encodes the specified Label message, length delimited. Does not implicitly {@link perftools.profiles.Label.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Label - * @static - * @param {perftools.profiles.ILabel} message Label message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Label.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Label message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Label - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Label} Label - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Label.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Label() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.key = reader.int64() - break - case 2: - message.str = reader.int64() - break - case 3: - message.num = reader.int64() - break - case 4: - message.numUnit = reader.int64() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Label message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Label - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Label} Label - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Label.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Label message. - * @function verify - * @memberof perftools.profiles.Label - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Label.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.key != null && message.hasOwnProperty('key')) - if ( - !$util.isInteger(message.key) && - !(message.key && $util.isInteger(message.key.low) && $util.isInteger(message.key.high)) - ) - return 'key: integer|Long expected' - if (message.str != null && message.hasOwnProperty('str')) - if ( - !$util.isInteger(message.str) && - !(message.str && $util.isInteger(message.str.low) && $util.isInteger(message.str.high)) - ) - return 'str: integer|Long expected' - if (message.num != null && message.hasOwnProperty('num')) - if ( - !$util.isInteger(message.num) && - !(message.num && $util.isInteger(message.num.low) && $util.isInteger(message.num.high)) - ) - return 'num: integer|Long expected' - if (message.numUnit != null && message.hasOwnProperty('numUnit')) - if ( - !$util.isInteger(message.numUnit) && - !( - message.numUnit && - $util.isInteger(message.numUnit.low) && - $util.isInteger(message.numUnit.high) - ) - ) - return 'numUnit: integer|Long expected' - return null - } - - /** - * Creates a Label message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Label - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Label} Label - */ - Label.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Label) return object - var message = new $root.perftools.profiles.Label() - if (object.key != null) - if ($util.Long) (message.key = $util.Long.fromValue(object.key)).unsigned = false - else if (typeof object.key === 'string') message.key = parseInt(object.key, 10) - else if (typeof object.key === 'number') message.key = object.key - else if (typeof object.key === 'object') - message.key = new $util.LongBits(object.key.low >>> 0, object.key.high >>> 0).toNumber() - if (object.str != null) - if ($util.Long) (message.str = $util.Long.fromValue(object.str)).unsigned = false - else if (typeof object.str === 'string') message.str = parseInt(object.str, 10) - else if (typeof object.str === 'number') message.str = object.str - else if (typeof object.str === 'object') - message.str = new $util.LongBits(object.str.low >>> 0, object.str.high >>> 0).toNumber() - if (object.num != null) - if ($util.Long) (message.num = $util.Long.fromValue(object.num)).unsigned = false - else if (typeof object.num === 'string') message.num = parseInt(object.num, 10) - else if (typeof object.num === 'number') message.num = object.num - else if (typeof object.num === 'object') - message.num = new $util.LongBits(object.num.low >>> 0, object.num.high >>> 0).toNumber() - if (object.numUnit != null) - if ($util.Long) (message.numUnit = $util.Long.fromValue(object.numUnit)).unsigned = false - else if (typeof object.numUnit === 'string') - message.numUnit = parseInt(object.numUnit, 10) - else if (typeof object.numUnit === 'number') message.numUnit = object.numUnit - else if (typeof object.numUnit === 'object') - message.numUnit = new $util.LongBits( - object.numUnit.low >>> 0, - object.numUnit.high >>> 0, - ).toNumber() - return message - } - - /** - * Creates a plain object from a Label message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Label - * @static - * @param {perftools.profiles.Label} message Label - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Label.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.key = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.key = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.str = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.str = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.num = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.num = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.numUnit = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.numUnit = options.longs === String ? '0' : 0 - } - if (message.key != null && message.hasOwnProperty('key')) - if (typeof message.key === 'number') - object.key = options.longs === String ? String(message.key) : message.key - else - object.key = - options.longs === String - ? $util.Long.prototype.toString.call(message.key) - : options.longs === Number - ? new $util.LongBits(message.key.low >>> 0, message.key.high >>> 0).toNumber() - : message.key - if (message.str != null && message.hasOwnProperty('str')) - if (typeof message.str === 'number') - object.str = options.longs === String ? String(message.str) : message.str - else - object.str = - options.longs === String - ? $util.Long.prototype.toString.call(message.str) - : options.longs === Number - ? new $util.LongBits(message.str.low >>> 0, message.str.high >>> 0).toNumber() - : message.str - if (message.num != null && message.hasOwnProperty('num')) - if (typeof message.num === 'number') - object.num = options.longs === String ? String(message.num) : message.num - else - object.num = - options.longs === String - ? $util.Long.prototype.toString.call(message.num) - : options.longs === Number - ? new $util.LongBits(message.num.low >>> 0, message.num.high >>> 0).toNumber() - : message.num - if (message.numUnit != null && message.hasOwnProperty('numUnit')) - if (typeof message.numUnit === 'number') - object.numUnit = options.longs === String ? String(message.numUnit) : message.numUnit - else - object.numUnit = - options.longs === String - ? $util.Long.prototype.toString.call(message.numUnit) - : options.longs === Number - ? new $util.LongBits( - message.numUnit.low >>> 0, - message.numUnit.high >>> 0, - ).toNumber() - : message.numUnit - return object - } - - /** - * Converts this Label to JSON. - * @function toJSON - * @memberof perftools.profiles.Label - * @instance - * @returns {Object.} JSON object - */ - Label.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Label - })() - - profiles.Mapping = (function() { - /** - * Properties of a Mapping. - * @memberof perftools.profiles - * @interface IMapping - * @property {number|Long|null} [id] Mapping id - * @property {number|Long|null} [memoryStart] Mapping memoryStart - * @property {number|Long|null} [memoryLimit] Mapping memoryLimit - * @property {number|Long|null} [fileOffset] Mapping fileOffset - * @property {number|Long|null} [filename] Mapping filename - * @property {number|Long|null} [buildId] Mapping buildId - * @property {boolean|null} [hasFunctions] Mapping hasFunctions - * @property {boolean|null} [hasFilenames] Mapping hasFilenames - * @property {boolean|null} [hasLineNumbers] Mapping hasLineNumbers - * @property {boolean|null} [hasInlineFrames] Mapping hasInlineFrames - */ - - /** - * Constructs a new Mapping. - * @memberof perftools.profiles - * @classdesc Represents a Mapping. - * @implements IMapping - * @constructor - * @param {perftools.profiles.IMapping=} [properties] Properties to set - */ - function Mapping(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Mapping id. - * @member {number|Long} id - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.id = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Mapping memoryStart. - * @member {number|Long} memoryStart - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.memoryStart = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Mapping memoryLimit. - * @member {number|Long} memoryLimit - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.memoryLimit = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Mapping fileOffset. - * @member {number|Long} fileOffset - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.fileOffset = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Mapping filename. - * @member {number|Long} filename - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.filename = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Mapping buildId. - * @member {number|Long} buildId - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.buildId = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Mapping hasFunctions. - * @member {boolean} hasFunctions - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.hasFunctions = false - - /** - * Mapping hasFilenames. - * @member {boolean} hasFilenames - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.hasFilenames = false - - /** - * Mapping hasLineNumbers. - * @member {boolean} hasLineNumbers - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.hasLineNumbers = false - - /** - * Mapping hasInlineFrames. - * @member {boolean} hasInlineFrames - * @memberof perftools.profiles.Mapping - * @instance - */ - Mapping.prototype.hasInlineFrames = false - - /** - * Creates a new Mapping instance using the specified properties. - * @function create - * @memberof perftools.profiles.Mapping - * @static - * @param {perftools.profiles.IMapping=} [properties] Properties to set - * @returns {perftools.profiles.Mapping} Mapping instance - */ - Mapping.create = function create(properties) { - return new Mapping(properties) - } - - /** - * Encodes the specified Mapping message. Does not implicitly {@link perftools.profiles.Mapping.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Mapping - * @static - * @param {perftools.profiles.IMapping} message Mapping message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Mapping.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.id != null && message.hasOwnProperty('id')) - writer.uint32(/* id 1, wireType 0 =*/ 8).uint64(message.id) - if (message.memoryStart != null && message.hasOwnProperty('memoryStart')) - writer.uint32(/* id 2, wireType 0 =*/ 16).uint64(message.memoryStart) - if (message.memoryLimit != null && message.hasOwnProperty('memoryLimit')) - writer.uint32(/* id 3, wireType 0 =*/ 24).uint64(message.memoryLimit) - if (message.fileOffset != null && message.hasOwnProperty('fileOffset')) - writer.uint32(/* id 4, wireType 0 =*/ 32).uint64(message.fileOffset) - if (message.filename != null && message.hasOwnProperty('filename')) - writer.uint32(/* id 5, wireType 0 =*/ 40).int64(message.filename) - if (message.buildId != null && message.hasOwnProperty('buildId')) - writer.uint32(/* id 6, wireType 0 =*/ 48).int64(message.buildId) - if (message.hasFunctions != null && message.hasOwnProperty('hasFunctions')) - writer.uint32(/* id 7, wireType 0 =*/ 56).bool(message.hasFunctions) - if (message.hasFilenames != null && message.hasOwnProperty('hasFilenames')) - writer.uint32(/* id 8, wireType 0 =*/ 64).bool(message.hasFilenames) - if (message.hasLineNumbers != null && message.hasOwnProperty('hasLineNumbers')) - writer.uint32(/* id 9, wireType 0 =*/ 72).bool(message.hasLineNumbers) - if (message.hasInlineFrames != null && message.hasOwnProperty('hasInlineFrames')) - writer.uint32(/* id 10, wireType 0 =*/ 80).bool(message.hasInlineFrames) - return writer - } - - /** - * Encodes the specified Mapping message, length delimited. Does not implicitly {@link perftools.profiles.Mapping.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Mapping - * @static - * @param {perftools.profiles.IMapping} message Mapping message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Mapping.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Mapping message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Mapping - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Mapping} Mapping - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Mapping.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Mapping() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.id = reader.uint64() - break - case 2: - message.memoryStart = reader.uint64() - break - case 3: - message.memoryLimit = reader.uint64() - break - case 4: - message.fileOffset = reader.uint64() - break - case 5: - message.filename = reader.int64() - break - case 6: - message.buildId = reader.int64() - break - case 7: - message.hasFunctions = reader.bool() - break - case 8: - message.hasFilenames = reader.bool() - break - case 9: - message.hasLineNumbers = reader.bool() - break - case 10: - message.hasInlineFrames = reader.bool() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Mapping message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Mapping - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Mapping} Mapping - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Mapping.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Mapping message. - * @function verify - * @memberof perftools.profiles.Mapping - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Mapping.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.id != null && message.hasOwnProperty('id')) - if ( - !$util.isInteger(message.id) && - !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)) - ) - return 'id: integer|Long expected' - if (message.memoryStart != null && message.hasOwnProperty('memoryStart')) - if ( - !$util.isInteger(message.memoryStart) && - !( - message.memoryStart && - $util.isInteger(message.memoryStart.low) && - $util.isInteger(message.memoryStart.high) - ) - ) - return 'memoryStart: integer|Long expected' - if (message.memoryLimit != null && message.hasOwnProperty('memoryLimit')) - if ( - !$util.isInteger(message.memoryLimit) && - !( - message.memoryLimit && - $util.isInteger(message.memoryLimit.low) && - $util.isInteger(message.memoryLimit.high) - ) - ) - return 'memoryLimit: integer|Long expected' - if (message.fileOffset != null && message.hasOwnProperty('fileOffset')) - if ( - !$util.isInteger(message.fileOffset) && - !( - message.fileOffset && - $util.isInteger(message.fileOffset.low) && - $util.isInteger(message.fileOffset.high) - ) - ) - return 'fileOffset: integer|Long expected' - if (message.filename != null && message.hasOwnProperty('filename')) - if ( - !$util.isInteger(message.filename) && - !( - message.filename && - $util.isInteger(message.filename.low) && - $util.isInteger(message.filename.high) - ) - ) - return 'filename: integer|Long expected' - if (message.buildId != null && message.hasOwnProperty('buildId')) - if ( - !$util.isInteger(message.buildId) && - !( - message.buildId && - $util.isInteger(message.buildId.low) && - $util.isInteger(message.buildId.high) - ) - ) - return 'buildId: integer|Long expected' - if (message.hasFunctions != null && message.hasOwnProperty('hasFunctions')) - if (typeof message.hasFunctions !== 'boolean') return 'hasFunctions: boolean expected' - if (message.hasFilenames != null && message.hasOwnProperty('hasFilenames')) - if (typeof message.hasFilenames !== 'boolean') return 'hasFilenames: boolean expected' - if (message.hasLineNumbers != null && message.hasOwnProperty('hasLineNumbers')) - if (typeof message.hasLineNumbers !== 'boolean') return 'hasLineNumbers: boolean expected' - if (message.hasInlineFrames != null && message.hasOwnProperty('hasInlineFrames')) - if (typeof message.hasInlineFrames !== 'boolean') - return 'hasInlineFrames: boolean expected' - return null - } - - /** - * Creates a Mapping message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Mapping - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Mapping} Mapping - */ - Mapping.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Mapping) return object - var message = new $root.perftools.profiles.Mapping() - if (object.id != null) - if ($util.Long) (message.id = $util.Long.fromValue(object.id)).unsigned = true - else if (typeof object.id === 'string') message.id = parseInt(object.id, 10) - else if (typeof object.id === 'number') message.id = object.id - else if (typeof object.id === 'object') - message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber( - true, - ) - if (object.memoryStart != null) - if ($util.Long) - (message.memoryStart = $util.Long.fromValue(object.memoryStart)).unsigned = true - else if (typeof object.memoryStart === 'string') - message.memoryStart = parseInt(object.memoryStart, 10) - else if (typeof object.memoryStart === 'number') message.memoryStart = object.memoryStart - else if (typeof object.memoryStart === 'object') - message.memoryStart = new $util.LongBits( - object.memoryStart.low >>> 0, - object.memoryStart.high >>> 0, - ).toNumber(true) - if (object.memoryLimit != null) - if ($util.Long) - (message.memoryLimit = $util.Long.fromValue(object.memoryLimit)).unsigned = true - else if (typeof object.memoryLimit === 'string') - message.memoryLimit = parseInt(object.memoryLimit, 10) - else if (typeof object.memoryLimit === 'number') message.memoryLimit = object.memoryLimit - else if (typeof object.memoryLimit === 'object') - message.memoryLimit = new $util.LongBits( - object.memoryLimit.low >>> 0, - object.memoryLimit.high >>> 0, - ).toNumber(true) - if (object.fileOffset != null) - if ($util.Long) - (message.fileOffset = $util.Long.fromValue(object.fileOffset)).unsigned = true - else if (typeof object.fileOffset === 'string') - message.fileOffset = parseInt(object.fileOffset, 10) - else if (typeof object.fileOffset === 'number') message.fileOffset = object.fileOffset - else if (typeof object.fileOffset === 'object') - message.fileOffset = new $util.LongBits( - object.fileOffset.low >>> 0, - object.fileOffset.high >>> 0, - ).toNumber(true) - if (object.filename != null) - if ($util.Long) - (message.filename = $util.Long.fromValue(object.filename)).unsigned = false - else if (typeof object.filename === 'string') - message.filename = parseInt(object.filename, 10) - else if (typeof object.filename === 'number') message.filename = object.filename - else if (typeof object.filename === 'object') - message.filename = new $util.LongBits( - object.filename.low >>> 0, - object.filename.high >>> 0, - ).toNumber() - if (object.buildId != null) - if ($util.Long) (message.buildId = $util.Long.fromValue(object.buildId)).unsigned = false - else if (typeof object.buildId === 'string') - message.buildId = parseInt(object.buildId, 10) - else if (typeof object.buildId === 'number') message.buildId = object.buildId - else if (typeof object.buildId === 'object') - message.buildId = new $util.LongBits( - object.buildId.low >>> 0, - object.buildId.high >>> 0, - ).toNumber() - if (object.hasFunctions != null) message.hasFunctions = Boolean(object.hasFunctions) - if (object.hasFilenames != null) message.hasFilenames = Boolean(object.hasFilenames) - if (object.hasLineNumbers != null) message.hasLineNumbers = Boolean(object.hasLineNumbers) - if (object.hasInlineFrames != null) - message.hasInlineFrames = Boolean(object.hasInlineFrames) - return message - } - - /** - * Creates a plain object from a Mapping message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Mapping - * @static - * @param {perftools.profiles.Mapping} message Mapping - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Mapping.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.id = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.id = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.memoryStart = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.memoryStart = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.memoryLimit = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.memoryLimit = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.fileOffset = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.fileOffset = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.filename = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.filename = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.buildId = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.buildId = options.longs === String ? '0' : 0 - object.hasFunctions = false - object.hasFilenames = false - object.hasLineNumbers = false - object.hasInlineFrames = false - } - if (message.id != null && message.hasOwnProperty('id')) - if (typeof message.id === 'number') - object.id = options.longs === String ? String(message.id) : message.id - else - object.id = - options.longs === String - ? $util.Long.prototype.toString.call(message.id) - : options.longs === Number - ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber(true) - : message.id - if (message.memoryStart != null && message.hasOwnProperty('memoryStart')) - if (typeof message.memoryStart === 'number') - object.memoryStart = - options.longs === String ? String(message.memoryStart) : message.memoryStart - else - object.memoryStart = - options.longs === String - ? $util.Long.prototype.toString.call(message.memoryStart) - : options.longs === Number - ? new $util.LongBits( - message.memoryStart.low >>> 0, - message.memoryStart.high >>> 0, - ).toNumber(true) - : message.memoryStart - if (message.memoryLimit != null && message.hasOwnProperty('memoryLimit')) - if (typeof message.memoryLimit === 'number') - object.memoryLimit = - options.longs === String ? String(message.memoryLimit) : message.memoryLimit - else - object.memoryLimit = - options.longs === String - ? $util.Long.prototype.toString.call(message.memoryLimit) - : options.longs === Number - ? new $util.LongBits( - message.memoryLimit.low >>> 0, - message.memoryLimit.high >>> 0, - ).toNumber(true) - : message.memoryLimit - if (message.fileOffset != null && message.hasOwnProperty('fileOffset')) - if (typeof message.fileOffset === 'number') - object.fileOffset = - options.longs === String ? String(message.fileOffset) : message.fileOffset - else - object.fileOffset = - options.longs === String - ? $util.Long.prototype.toString.call(message.fileOffset) - : options.longs === Number - ? new $util.LongBits( - message.fileOffset.low >>> 0, - message.fileOffset.high >>> 0, - ).toNumber(true) - : message.fileOffset - if (message.filename != null && message.hasOwnProperty('filename')) - if (typeof message.filename === 'number') - object.filename = options.longs === String ? String(message.filename) : message.filename - else - object.filename = - options.longs === String - ? $util.Long.prototype.toString.call(message.filename) - : options.longs === Number - ? new $util.LongBits( - message.filename.low >>> 0, - message.filename.high >>> 0, - ).toNumber() - : message.filename - if (message.buildId != null && message.hasOwnProperty('buildId')) - if (typeof message.buildId === 'number') - object.buildId = options.longs === String ? String(message.buildId) : message.buildId - else - object.buildId = - options.longs === String - ? $util.Long.prototype.toString.call(message.buildId) - : options.longs === Number - ? new $util.LongBits( - message.buildId.low >>> 0, - message.buildId.high >>> 0, - ).toNumber() - : message.buildId - if (message.hasFunctions != null && message.hasOwnProperty('hasFunctions')) - object.hasFunctions = message.hasFunctions - if (message.hasFilenames != null && message.hasOwnProperty('hasFilenames')) - object.hasFilenames = message.hasFilenames - if (message.hasLineNumbers != null && message.hasOwnProperty('hasLineNumbers')) - object.hasLineNumbers = message.hasLineNumbers - if (message.hasInlineFrames != null && message.hasOwnProperty('hasInlineFrames')) - object.hasInlineFrames = message.hasInlineFrames - return object - } - - /** - * Converts this Mapping to JSON. - * @function toJSON - * @memberof perftools.profiles.Mapping - * @instance - * @returns {Object.} JSON object - */ - Mapping.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Mapping - })() - - profiles.Location = (function() { - /** - * Properties of a Location. - * @memberof perftools.profiles - * @interface ILocation - * @property {number|Long|null} [id] Location id - * @property {number|Long|null} [mappingId] Location mappingId - * @property {number|Long|null} [address] Location address - * @property {Array.|null} [line] Location line - * @property {boolean|null} [isFolded] Location isFolded - */ - - /** - * Constructs a new Location. - * @memberof perftools.profiles - * @classdesc Represents a Location. - * @implements ILocation - * @constructor - * @param {perftools.profiles.ILocation=} [properties] Properties to set - */ - function Location(properties) { - this.line = [] - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Location id. - * @member {number|Long} id - * @memberof perftools.profiles.Location - * @instance - */ - Location.prototype.id = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Location mappingId. - * @member {number|Long} mappingId - * @memberof perftools.profiles.Location - * @instance - */ - Location.prototype.mappingId = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Location address. - * @member {number|Long} address - * @memberof perftools.profiles.Location - * @instance - */ - Location.prototype.address = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Location line. - * @member {Array.} line - * @memberof perftools.profiles.Location - * @instance - */ - Location.prototype.line = $util.emptyArray - - /** - * Location isFolded. - * @member {boolean} isFolded - * @memberof perftools.profiles.Location - * @instance - */ - Location.prototype.isFolded = false - - /** - * Creates a new Location instance using the specified properties. - * @function create - * @memberof perftools.profiles.Location - * @static - * @param {perftools.profiles.ILocation=} [properties] Properties to set - * @returns {perftools.profiles.Location} Location instance - */ - Location.create = function create(properties) { - return new Location(properties) - } - - /** - * Encodes the specified Location message. Does not implicitly {@link perftools.profiles.Location.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Location - * @static - * @param {perftools.profiles.ILocation} message Location message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Location.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.id != null && message.hasOwnProperty('id')) - writer.uint32(/* id 1, wireType 0 =*/ 8).uint64(message.id) - if (message.mappingId != null && message.hasOwnProperty('mappingId')) - writer.uint32(/* id 2, wireType 0 =*/ 16).uint64(message.mappingId) - if (message.address != null && message.hasOwnProperty('address')) - writer.uint32(/* id 3, wireType 0 =*/ 24).uint64(message.address) - if (message.line != null && message.line.length) - for (var i = 0; i < message.line.length; ++i) - $root.perftools.profiles.Line.encode( - message.line[i], - writer.uint32(/* id 4, wireType 2 =*/ 34).fork(), - ).ldelim() - if (message.isFolded != null && message.hasOwnProperty('isFolded')) - writer.uint32(/* id 5, wireType 0 =*/ 40).bool(message.isFolded) - return writer - } - - /** - * Encodes the specified Location message, length delimited. Does not implicitly {@link perftools.profiles.Location.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Location - * @static - * @param {perftools.profiles.ILocation} message Location message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Location.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Location message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Location - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Location} Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Location.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Location() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.id = reader.uint64() - break - case 2: - message.mappingId = reader.uint64() - break - case 3: - message.address = reader.uint64() - break - case 4: - if (!(message.line && message.line.length)) message.line = [] - message.line.push($root.perftools.profiles.Line.decode(reader, reader.uint32())) - break - case 5: - message.isFolded = reader.bool() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Location message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Location - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Location} Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Location.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Location message. - * @function verify - * @memberof perftools.profiles.Location - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Location.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.id != null && message.hasOwnProperty('id')) - if ( - !$util.isInteger(message.id) && - !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)) - ) - return 'id: integer|Long expected' - if (message.mappingId != null && message.hasOwnProperty('mappingId')) - if ( - !$util.isInteger(message.mappingId) && - !( - message.mappingId && - $util.isInteger(message.mappingId.low) && - $util.isInteger(message.mappingId.high) - ) - ) - return 'mappingId: integer|Long expected' - if (message.address != null && message.hasOwnProperty('address')) - if ( - !$util.isInteger(message.address) && - !( - message.address && - $util.isInteger(message.address.low) && - $util.isInteger(message.address.high) - ) - ) - return 'address: integer|Long expected' - if (message.line != null && message.hasOwnProperty('line')) { - if (!Array.isArray(message.line)) return 'line: array expected' - for (var i = 0; i < message.line.length; ++i) { - var error = $root.perftools.profiles.Line.verify(message.line[i]) - if (error) return 'line.' + error - } - } - if (message.isFolded != null && message.hasOwnProperty('isFolded')) - if (typeof message.isFolded !== 'boolean') return 'isFolded: boolean expected' - return null - } - - /** - * Creates a Location message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Location - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Location} Location - */ - Location.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Location) return object - var message = new $root.perftools.profiles.Location() - if (object.id != null) - if ($util.Long) (message.id = $util.Long.fromValue(object.id)).unsigned = true - else if (typeof object.id === 'string') message.id = parseInt(object.id, 10) - else if (typeof object.id === 'number') message.id = object.id - else if (typeof object.id === 'object') - message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber( - true, - ) - if (object.mappingId != null) - if ($util.Long) - (message.mappingId = $util.Long.fromValue(object.mappingId)).unsigned = true - else if (typeof object.mappingId === 'string') - message.mappingId = parseInt(object.mappingId, 10) - else if (typeof object.mappingId === 'number') message.mappingId = object.mappingId - else if (typeof object.mappingId === 'object') - message.mappingId = new $util.LongBits( - object.mappingId.low >>> 0, - object.mappingId.high >>> 0, - ).toNumber(true) - if (object.address != null) - if ($util.Long) (message.address = $util.Long.fromValue(object.address)).unsigned = true - else if (typeof object.address === 'string') - message.address = parseInt(object.address, 10) - else if (typeof object.address === 'number') message.address = object.address - else if (typeof object.address === 'object') - message.address = new $util.LongBits( - object.address.low >>> 0, - object.address.high >>> 0, - ).toNumber(true) - if (object.line) { - if (!Array.isArray(object.line)) - throw TypeError('.perftools.profiles.Location.line: array expected') - message.line = [] - for (var i = 0; i < object.line.length; ++i) { - if (typeof object.line[i] !== 'object') - throw TypeError('.perftools.profiles.Location.line: object expected') - message.line[i] = $root.perftools.profiles.Line.fromObject(object.line[i]) - } - } - if (object.isFolded != null) message.isFolded = Boolean(object.isFolded) - return message - } - - /** - * Creates a plain object from a Location message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Location - * @static - * @param {perftools.profiles.Location} message Location - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Location.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.arrays || options.defaults) object.line = [] - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.id = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.id = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.mappingId = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.mappingId = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.address = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.address = options.longs === String ? '0' : 0 - object.isFolded = false - } - if (message.id != null && message.hasOwnProperty('id')) - if (typeof message.id === 'number') - object.id = options.longs === String ? String(message.id) : message.id - else - object.id = - options.longs === String - ? $util.Long.prototype.toString.call(message.id) - : options.longs === Number - ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber(true) - : message.id - if (message.mappingId != null && message.hasOwnProperty('mappingId')) - if (typeof message.mappingId === 'number') - object.mappingId = - options.longs === String ? String(message.mappingId) : message.mappingId - else - object.mappingId = - options.longs === String - ? $util.Long.prototype.toString.call(message.mappingId) - : options.longs === Number - ? new $util.LongBits( - message.mappingId.low >>> 0, - message.mappingId.high >>> 0, - ).toNumber(true) - : message.mappingId - if (message.address != null && message.hasOwnProperty('address')) - if (typeof message.address === 'number') - object.address = options.longs === String ? String(message.address) : message.address - else - object.address = - options.longs === String - ? $util.Long.prototype.toString.call(message.address) - : options.longs === Number - ? new $util.LongBits( - message.address.low >>> 0, - message.address.high >>> 0, - ).toNumber(true) - : message.address - if (message.line && message.line.length) { - object.line = [] - for (var j = 0; j < message.line.length; ++j) - object.line[j] = $root.perftools.profiles.Line.toObject(message.line[j], options) - } - if (message.isFolded != null && message.hasOwnProperty('isFolded')) - object.isFolded = message.isFolded - return object - } - - /** - * Converts this Location to JSON. - * @function toJSON - * @memberof perftools.profiles.Location - * @instance - * @returns {Object.} JSON object - */ - Location.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Location - })() - - profiles.Line = (function() { - /** - * Properties of a Line. - * @memberof perftools.profiles - * @interface ILine - * @property {number|Long|null} [functionId] Line functionId - * @property {number|Long|null} [line] Line line - */ - - /** - * Constructs a new Line. - * @memberof perftools.profiles - * @classdesc Represents a Line. - * @implements ILine - * @constructor - * @param {perftools.profiles.ILine=} [properties] Properties to set - */ - function Line(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Line functionId. - * @member {number|Long} functionId - * @memberof perftools.profiles.Line - * @instance - */ - Line.prototype.functionId = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Line line. - * @member {number|Long} line - * @memberof perftools.profiles.Line - * @instance - */ - Line.prototype.line = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Creates a new Line instance using the specified properties. - * @function create - * @memberof perftools.profiles.Line - * @static - * @param {perftools.profiles.ILine=} [properties] Properties to set - * @returns {perftools.profiles.Line} Line instance - */ - Line.create = function create(properties) { - return new Line(properties) - } - - /** - * Encodes the specified Line message. Does not implicitly {@link perftools.profiles.Line.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Line - * @static - * @param {perftools.profiles.ILine} message Line message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Line.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.functionId != null && message.hasOwnProperty('functionId')) - writer.uint32(/* id 1, wireType 0 =*/ 8).uint64(message.functionId) - if (message.line != null && message.hasOwnProperty('line')) - writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.line) - return writer - } - - /** - * Encodes the specified Line message, length delimited. Does not implicitly {@link perftools.profiles.Line.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Line - * @static - * @param {perftools.profiles.ILine} message Line message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Line.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Line message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Line - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Line} Line - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Line.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Line() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.functionId = reader.uint64() - break - case 2: - message.line = reader.int64() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Line message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Line - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Line} Line - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Line.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Line message. - * @function verify - * @memberof perftools.profiles.Line - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Line.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.functionId != null && message.hasOwnProperty('functionId')) - if ( - !$util.isInteger(message.functionId) && - !( - message.functionId && - $util.isInteger(message.functionId.low) && - $util.isInteger(message.functionId.high) - ) - ) - return 'functionId: integer|Long expected' - if (message.line != null && message.hasOwnProperty('line')) - if ( - !$util.isInteger(message.line) && - !( - message.line && - $util.isInteger(message.line.low) && - $util.isInteger(message.line.high) - ) - ) - return 'line: integer|Long expected' - return null - } - - /** - * Creates a Line message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Line - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Line} Line - */ - Line.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Line) return object - var message = new $root.perftools.profiles.Line() - if (object.functionId != null) - if ($util.Long) - (message.functionId = $util.Long.fromValue(object.functionId)).unsigned = true - else if (typeof object.functionId === 'string') - message.functionId = parseInt(object.functionId, 10) - else if (typeof object.functionId === 'number') message.functionId = object.functionId - else if (typeof object.functionId === 'object') - message.functionId = new $util.LongBits( - object.functionId.low >>> 0, - object.functionId.high >>> 0, - ).toNumber(true) - if (object.line != null) - if ($util.Long) (message.line = $util.Long.fromValue(object.line)).unsigned = false - else if (typeof object.line === 'string') message.line = parseInt(object.line, 10) - else if (typeof object.line === 'number') message.line = object.line - else if (typeof object.line === 'object') - message.line = new $util.LongBits( - object.line.low >>> 0, - object.line.high >>> 0, - ).toNumber() - return message - } - - /** - * Creates a plain object from a Line message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Line - * @static - * @param {perftools.profiles.Line} message Line - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Line.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.functionId = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.functionId = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.line = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.line = options.longs === String ? '0' : 0 - } - if (message.functionId != null && message.hasOwnProperty('functionId')) - if (typeof message.functionId === 'number') - object.functionId = - options.longs === String ? String(message.functionId) : message.functionId - else - object.functionId = - options.longs === String - ? $util.Long.prototype.toString.call(message.functionId) - : options.longs === Number - ? new $util.LongBits( - message.functionId.low >>> 0, - message.functionId.high >>> 0, - ).toNumber(true) - : message.functionId - if (message.line != null && message.hasOwnProperty('line')) - if (typeof message.line === 'number') - object.line = options.longs === String ? String(message.line) : message.line - else - object.line = - options.longs === String - ? $util.Long.prototype.toString.call(message.line) - : options.longs === Number - ? new $util.LongBits(message.line.low >>> 0, message.line.high >>> 0).toNumber() - : message.line - return object - } - - /** - * Converts this Line to JSON. - * @function toJSON - * @memberof perftools.profiles.Line - * @instance - * @returns {Object.} JSON object - */ - Line.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Line - })() - - profiles.Function = (function() { - /** - * Properties of a Function. - * @memberof perftools.profiles - * @interface IFunction - * @property {number|Long|null} [id] Function id - * @property {number|Long|null} [name] Function name - * @property {number|Long|null} [systemName] Function systemName - * @property {number|Long|null} [filename] Function filename - * @property {number|Long|null} [startLine] Function startLine - */ - - /** - * Constructs a new Function. - * @memberof perftools.profiles - * @classdesc Represents a Function. - * @implements IFunction - * @constructor - * @param {perftools.profiles.IFunction=} [properties] Properties to set - */ - function Function(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]] - } - - /** - * Function id. - * @member {number|Long} id - * @memberof perftools.profiles.Function - * @instance - */ - Function.prototype.id = $util.Long ? $util.Long.fromBits(0, 0, true) : 0 - - /** - * Function name. - * @member {number|Long} name - * @memberof perftools.profiles.Function - * @instance - */ - Function.prototype.name = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Function systemName. - * @member {number|Long} systemName - * @memberof perftools.profiles.Function - * @instance - */ - Function.prototype.systemName = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Function filename. - * @member {number|Long} filename - * @memberof perftools.profiles.Function - * @instance - */ - Function.prototype.filename = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Function startLine. - * @member {number|Long} startLine - * @memberof perftools.profiles.Function - * @instance - */ - Function.prototype.startLine = $util.Long ? $util.Long.fromBits(0, 0, false) : 0 - - /** - * Creates a new Function instance using the specified properties. - * @function create - * @memberof perftools.profiles.Function - * @static - * @param {perftools.profiles.IFunction=} [properties] Properties to set - * @returns {perftools.profiles.Function} Function instance - */ - Function.create = function create(properties) { - return new Function(properties) - } - - /** - * Encodes the specified Function message. Does not implicitly {@link perftools.profiles.Function.verify|verify} messages. - * @function encode - * @memberof perftools.profiles.Function - * @static - * @param {perftools.profiles.IFunction} message Function message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Function.encode = function encode(message, writer) { - if (!writer) writer = $Writer.create() - if (message.id != null && message.hasOwnProperty('id')) - writer.uint32(/* id 1, wireType 0 =*/ 8).uint64(message.id) - if (message.name != null && message.hasOwnProperty('name')) - writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.name) - if (message.systemName != null && message.hasOwnProperty('systemName')) - writer.uint32(/* id 3, wireType 0 =*/ 24).int64(message.systemName) - if (message.filename != null && message.hasOwnProperty('filename')) - writer.uint32(/* id 4, wireType 0 =*/ 32).int64(message.filename) - if (message.startLine != null && message.hasOwnProperty('startLine')) - writer.uint32(/* id 5, wireType 0 =*/ 40).int64(message.startLine) - return writer - } - - /** - * Encodes the specified Function message, length delimited. Does not implicitly {@link perftools.profiles.Function.verify|verify} messages. - * @function encodeDelimited - * @memberof perftools.profiles.Function - * @static - * @param {perftools.profiles.IFunction} message Function message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Function.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim() - } - - /** - * Decodes a Function message from the specified reader or buffer. - * @function decode - * @memberof perftools.profiles.Function - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {perftools.profiles.Function} Function - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Function.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) reader = $Reader.create(reader) - var end = length === undefined ? reader.len : reader.pos + length, - message = new $root.perftools.profiles.Function() - while (reader.pos < end) { - var tag = reader.uint32() - switch (tag >>> 3) { - case 1: - message.id = reader.uint64() - break - case 2: - message.name = reader.int64() - break - case 3: - message.systemName = reader.int64() - break - case 4: - message.filename = reader.int64() - break - case 5: - message.startLine = reader.int64() - break - default: - reader.skipType(tag & 7) - break - } - } - return message - } - - /** - * Decodes a Function message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof perftools.profiles.Function - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {perftools.profiles.Function} Function - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Function.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) reader = new $Reader(reader) - return this.decode(reader, reader.uint32()) - } - - /** - * Verifies a Function message. - * @function verify - * @memberof perftools.profiles.Function - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Function.verify = function verify(message) { - if (typeof message !== 'object' || message === null) return 'object expected' - if (message.id != null && message.hasOwnProperty('id')) - if ( - !$util.isInteger(message.id) && - !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)) - ) - return 'id: integer|Long expected' - if (message.name != null && message.hasOwnProperty('name')) - if ( - !$util.isInteger(message.name) && - !( - message.name && - $util.isInteger(message.name.low) && - $util.isInteger(message.name.high) - ) - ) - return 'name: integer|Long expected' - if (message.systemName != null && message.hasOwnProperty('systemName')) - if ( - !$util.isInteger(message.systemName) && - !( - message.systemName && - $util.isInteger(message.systemName.low) && - $util.isInteger(message.systemName.high) - ) - ) - return 'systemName: integer|Long expected' - if (message.filename != null && message.hasOwnProperty('filename')) - if ( - !$util.isInteger(message.filename) && - !( - message.filename && - $util.isInteger(message.filename.low) && - $util.isInteger(message.filename.high) - ) - ) - return 'filename: integer|Long expected' - if (message.startLine != null && message.hasOwnProperty('startLine')) - if ( - !$util.isInteger(message.startLine) && - !( - message.startLine && - $util.isInteger(message.startLine.low) && - $util.isInteger(message.startLine.high) - ) - ) - return 'startLine: integer|Long expected' - return null - } - - /** - * Creates a Function message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof perftools.profiles.Function - * @static - * @param {Object.} object Plain object - * @returns {perftools.profiles.Function} Function - */ - Function.fromObject = function fromObject(object) { - if (object instanceof $root.perftools.profiles.Function) return object - var message = new $root.perftools.profiles.Function() - if (object.id != null) - if ($util.Long) (message.id = $util.Long.fromValue(object.id)).unsigned = true - else if (typeof object.id === 'string') message.id = parseInt(object.id, 10) - else if (typeof object.id === 'number') message.id = object.id - else if (typeof object.id === 'object') - message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber( - true, - ) - if (object.name != null) - if ($util.Long) (message.name = $util.Long.fromValue(object.name)).unsigned = false - else if (typeof object.name === 'string') message.name = parseInt(object.name, 10) - else if (typeof object.name === 'number') message.name = object.name - else if (typeof object.name === 'object') - message.name = new $util.LongBits( - object.name.low >>> 0, - object.name.high >>> 0, - ).toNumber() - if (object.systemName != null) - if ($util.Long) - (message.systemName = $util.Long.fromValue(object.systemName)).unsigned = false - else if (typeof object.systemName === 'string') - message.systemName = parseInt(object.systemName, 10) - else if (typeof object.systemName === 'number') message.systemName = object.systemName - else if (typeof object.systemName === 'object') - message.systemName = new $util.LongBits( - object.systemName.low >>> 0, - object.systemName.high >>> 0, - ).toNumber() - if (object.filename != null) - if ($util.Long) - (message.filename = $util.Long.fromValue(object.filename)).unsigned = false - else if (typeof object.filename === 'string') - message.filename = parseInt(object.filename, 10) - else if (typeof object.filename === 'number') message.filename = object.filename - else if (typeof object.filename === 'object') - message.filename = new $util.LongBits( - object.filename.low >>> 0, - object.filename.high >>> 0, - ).toNumber() - if (object.startLine != null) - if ($util.Long) - (message.startLine = $util.Long.fromValue(object.startLine)).unsigned = false - else if (typeof object.startLine === 'string') - message.startLine = parseInt(object.startLine, 10) - else if (typeof object.startLine === 'number') message.startLine = object.startLine - else if (typeof object.startLine === 'object') - message.startLine = new $util.LongBits( - object.startLine.low >>> 0, - object.startLine.high >>> 0, - ).toNumber() - return message - } - - /** - * Creates a plain object from a Function message. Also converts values to other types if specified. - * @function toObject - * @memberof perftools.profiles.Function - * @static - * @param {perftools.profiles.Function} message Function - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Function.toObject = function toObject(message, options) { - if (!options) options = {} - var object = {} - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, true) - object.id = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.id = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.name = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.name = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.systemName = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.systemName = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.filename = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.filename = options.longs === String ? '0' : 0 - if ($util.Long) { - var long = new $util.Long(0, 0, false) - object.startLine = - options.longs === String - ? long.toString() - : options.longs === Number - ? long.toNumber() - : long - } else object.startLine = options.longs === String ? '0' : 0 - } - if (message.id != null && message.hasOwnProperty('id')) - if (typeof message.id === 'number') - object.id = options.longs === String ? String(message.id) : message.id - else - object.id = - options.longs === String - ? $util.Long.prototype.toString.call(message.id) - : options.longs === Number - ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber(true) - : message.id - if (message.name != null && message.hasOwnProperty('name')) - if (typeof message.name === 'number') - object.name = options.longs === String ? String(message.name) : message.name - else - object.name = - options.longs === String - ? $util.Long.prototype.toString.call(message.name) - : options.longs === Number - ? new $util.LongBits(message.name.low >>> 0, message.name.high >>> 0).toNumber() - : message.name - if (message.systemName != null && message.hasOwnProperty('systemName')) - if (typeof message.systemName === 'number') - object.systemName = - options.longs === String ? String(message.systemName) : message.systemName - else - object.systemName = - options.longs === String - ? $util.Long.prototype.toString.call(message.systemName) - : options.longs === Number - ? new $util.LongBits( - message.systemName.low >>> 0, - message.systemName.high >>> 0, - ).toNumber() - : message.systemName - if (message.filename != null && message.hasOwnProperty('filename')) - if (typeof message.filename === 'number') - object.filename = options.longs === String ? String(message.filename) : message.filename - else - object.filename = - options.longs === String - ? $util.Long.prototype.toString.call(message.filename) - : options.longs === Number - ? new $util.LongBits( - message.filename.low >>> 0, - message.filename.high >>> 0, - ).toNumber() - : message.filename - if (message.startLine != null && message.hasOwnProperty('startLine')) - if (typeof message.startLine === 'number') - object.startLine = - options.longs === String ? String(message.startLine) : message.startLine - else - object.startLine = - options.longs === String - ? $util.Long.prototype.toString.call(message.startLine) - : options.longs === Number - ? new $util.LongBits( - message.startLine.low >>> 0, - message.startLine.high >>> 0, - ).toNumber() - : message.startLine - return object - } - - /** - * Converts this Function to JSON. - * @function toJSON - * @memberof perftools.profiles.Function - * @instance - * @returns {Object.} JSON object - */ - Function.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions) - } - - return Function - })() - - return profiles - })() - - return perftools -})() - -module.exports = $root diff --git a/src/speedscope/import/stackprof.test.ts b/src/speedscope/import/stackprof.test.ts deleted file mode 100644 index f5fb850..0000000 --- a/src/speedscope/import/stackprof.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importFromStackprof', async () => { - await checkProfileSnapshot('./sample/profiles/stackprof/simple-stackprof.json') -}) diff --git a/src/speedscope/import/stackprof.ts b/src/speedscope/import/stackprof.ts deleted file mode 100644 index 3262baf..0000000 --- a/src/speedscope/import/stackprof.ts +++ /dev/null @@ -1,54 +0,0 @@ -// https://github.com/tmm1/stackprof - -import {Profile, FrameInfo, StackListProfileBuilder} from '../lib/profile' -import {TimeFormatter} from '../lib/value-formatters' - -interface StackprofFrame { - name: string - file?: string - line?: number -} - -export interface StackprofProfile { - frames: {[number: string]: StackprofFrame} - raw: number[] - raw_timestamp_deltas: number[] -} - -export function importFromStackprof(stackprofProfile: StackprofProfile): Profile { - const duration = stackprofProfile.raw_timestamp_deltas.reduce((a, b) => a + b, 0) - const profile = new StackListProfileBuilder(duration) - - const {frames, raw, raw_timestamp_deltas} = stackprofProfile - let sampleIndex = 0 - - let prevStack: FrameInfo[] = [] - - for (let i = 0; i < raw.length; ) { - const stackHeight = raw[i++] - - let stack: FrameInfo[] = [] - for (let j = 0; j < stackHeight; j++) { - const id = raw[i++] - stack.push({ - key: id, - ...frames[id], - }) - } - if (stack.length === 1 && stack[0].name === '(garbage collection)') { - stack = prevStack.concat(stack) - } - const nSamples = raw[i++] - - let sampleDuration = 0 - for (let j = 0; j < nSamples; j++) { - sampleDuration += raw_timestamp_deltas[sampleIndex++] - } - - profile.appendSampleWithWeight(stack, sampleDuration) - prevStack = stack - } - - profile.setValueFormatter(new TimeFormatter('microseconds')) - return profile.build() -} diff --git a/src/speedscope/import/utils.ts b/src/speedscope/import/utils.ts deleted file mode 100644 index 22829b5..0000000 --- a/src/speedscope/import/utils.ts +++ /dev/null @@ -1,83 +0,0 @@ -import * as pako from 'pako' - -export interface ProfileDataSource { - name(): Promise - readAsArrayBuffer(): Promise - readAsText(): Promise -} - -export class TextProfileDataSource implements ProfileDataSource { - constructor(private fileName: string, private contents: string) {} - async name() { - return this.fileName - } - async readAsArrayBuffer() { - // JavaScript strings are UTF-16 encoded, but if this string is - // constructed based on - - // TODO(jlfwong): Might want to make this construct an array - // buffer based on the text - return new ArrayBuffer(0) - } - async readAsText() { - return this.contents - } -} - -export class MaybeCompressedDataReader implements ProfileDataSource { - private uncompressedData: Promise - - constructor( - private namePromise: Promise, - maybeCompressedDataPromise: Promise, - ) { - this.uncompressedData = maybeCompressedDataPromise.then(async (fileData: ArrayBuffer) => { - try { - const result = pako.inflate(new Uint8Array(fileData)).buffer - return result - } catch (e) { - return fileData - } - }) - } - - async name(): Promise { - return await this.namePromise - } - - async readAsArrayBuffer(): Promise { - return await this.uncompressedData - } - - async readAsText(): Promise { - const buffer = await this.readAsArrayBuffer() - let ret: string = '' - - // JavaScript strings are UTF-16 encoded, but we're reading data - // from disk that we're going to asusme is UTF-8 encoded. - const array = new Uint8Array(buffer) - for (let i = 0; i < array.length; i++) { - ret += String.fromCharCode(array[i]) - } - return ret - } - - static fromFile(file: File): MaybeCompressedDataReader { - const maybeCompressedDataPromise: Promise = new Promise(resolve => { - const reader = new FileReader() - reader.addEventListener('loadend', () => { - if (!(reader.result instanceof ArrayBuffer)) { - throw new Error('Expected reader.result to be an instance of ArrayBuffer') - } - resolve(reader.result) - }) - reader.readAsArrayBuffer(file) - }) - - return new MaybeCompressedDataReader(Promise.resolve(file.name), maybeCompressedDataPromise) - } - - static fromArrayBuffer(name: string, buffer: ArrayBuffer): MaybeCompressedDataReader { - return new MaybeCompressedDataReader(Promise.resolve(name), Promise.resolve(buffer)) - } -} diff --git a/src/speedscope/import/v8heapalloc.test.ts b/src/speedscope/import/v8heapalloc.test.ts deleted file mode 100644 index ea8b008..0000000 --- a/src/speedscope/import/v8heapalloc.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importV8HeapAlloc from Chrome', async () => { - await checkProfileSnapshot('./sample/profiles/Chrome/69/Heap-20181005T144546.heapprofile') -}) - -test('importV8HeapAlloc from NodeJS', async () => { - await checkProfileSnapshot('./sample/profiles/node/10.11.0/Heap-20181003T105432.heapprofile') -}) diff --git a/src/speedscope/import/v8heapalloc.ts b/src/speedscope/import/v8heapalloc.ts deleted file mode 100644 index eeace25..0000000 --- a/src/speedscope/import/v8heapalloc.ts +++ /dev/null @@ -1,109 +0,0 @@ -import {Profile, FrameInfo, StackListProfileBuilder} from '../lib/profile' -import {getOrInsert} from '../lib/utils' -import {ByteFormatter} from '../lib/value-formatters' - -/** - * The V8 Heap Allocation profile is a way to represent heap allocation for each - * javascript function. The format is a simple tree where the weight of each node - * represent the memory allocated by the function and all its callee. - * You can find more information on how to get a profile there : - * https://developers.google.com/web/tools/chrome-devtools/memory-problems/#allocation-profile - * You need to scroll down to "Investigate memory allocation by function" - * - * Note that Node.JS can retrieve this kind of profile via the Inspector protocol. - */ - -interface HeapProfileCallFrame { - columnNumber: number - functionName: string - lineNumber: number - scriptId: string - url: string -} - -interface HeapProfileNode { - callFrame: HeapProfileCallFrame - selfSize: number - children: HeapProfileNode[] - id: number - parent?: number - totalSize: number -} - -interface HeapProfile { - head: HeapProfileNode -} - -const callFrameToFrameInfo = new Map() -function frameInfoForCallFrame(callFrame: HeapProfileCallFrame) { - return getOrInsert(callFrameToFrameInfo, callFrame, callFrame => { - const name = callFrame.functionName || '(anonymous)' - const file = callFrame.url - const line = callFrame.lineNumber - const col = callFrame.columnNumber - return { - key: `${name}:${file}:${line}:${col}`, - name, - file, - line, - col, - } - }) -} - -export function importFromChromeHeapProfile(chromeProfile: HeapProfile): Profile { - const nodeById = new Map() - let currentId = 0 - const computeId = (node: HeapProfileNode, parent?: HeapProfileNode) => { - node.id = currentId++ - nodeById.set(node.id, node) - if (parent) { - node.parent = parent.id - } - - node.children.forEach(children => computeId(children, node)) - } - computeId(chromeProfile.head) - - // Compute the total size - const computeTotalSize = (node: HeapProfileNode): number => { - if (node.children.length === 0) return node.selfSize || 0 - const totalChild = node.children.reduce((total: number, children) => { - total += computeTotalSize(children) - return total - }, node.selfSize) - node.totalSize = totalChild - return totalChild - } - const total = computeTotalSize(chromeProfile.head) - - // Compute all stacks by taking each last node and going upward - const stacks: HeapProfileNode[][] = [] - for (let currentNode of nodeById.values()) { - let stack: HeapProfileNode[] = [] - stack.push(currentNode) - // While we found a parent - while (true) { - if (currentNode.parent === undefined) break - const parent = nodeById.get(currentNode.parent) - if (parent === undefined) break - // Push the parent at the beginning of the stack - stack.unshift(parent) - currentNode = parent - } - stacks.push(stack) - } - - const profile = new StackListProfileBuilder(total) - - for (let stack of stacks) { - const lastFrame = stack[stack.length - 1] - profile.appendSampleWithWeight( - stack.map(frame => frameInfoForCallFrame(frame.callFrame)), - lastFrame.selfSize, - ) - } - - profile.setValueFormatter(new ByteFormatter()) - return profile.build() -} diff --git a/src/speedscope/import/v8proflog.test.ts b/src/speedscope/import/v8proflog.test.ts deleted file mode 100644 index 861c1e7..0000000 --- a/src/speedscope/import/v8proflog.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {checkProfileSnapshot} from '../lib/test-utils' - -test('importFromV8ProfLog', async () => { - await checkProfileSnapshot('./sample/profiles/node/8.5.0/simple.v8log.json') -}) diff --git a/src/speedscope/import/v8proflog.ts b/src/speedscope/import/v8proflog.ts deleted file mode 100644 index 1af9019..0000000 --- a/src/speedscope/import/v8proflog.ts +++ /dev/null @@ -1,188 +0,0 @@ -import {Profile, FrameInfo, StackListProfileBuilder} from '../lib/profile' -import {getOrInsert, sortBy} from '../lib/utils' -import {TimeFormatter} from '../lib/value-formatters' - -// This imports profiles generated by a combination of the following commands: -// -// node --prof /path/to/my/script.js -// node --prof-process -preprocess -j isolate*.log > profile.v8log.json - -// References: -// - https://github.com/nodejs/node/blob/7edd0a17af8d74dce7dd6c7554a8b8523f83efdc/lib/internal/v8_prof_processor.js#L5 -// - https://github.com/nodejs/node/blob/7edd0a17af8d74dce7dd6c7554a8b8523f83efdc/deps/v8/tools/tickprocessor.js -// - https://github.com/nodejs/node/blob/2db2857c72c219e5ba1642a345e52cfdd8c44a66/deps/v8/tools/logreader.js#L147 -// - https://github.com/mapbox/flamebearer/blob/a8d4d5c0061ed439660783c613c43ab28b751219/index.js#L53 - -interface Code { - name: string - type: 'CODE' | 'CPP' | 'JS' | 'SHARED_LIB' - timestamp?: number - kind?: - | 'Bultin' - | 'BytecodeHandler' - | 'Handler' - | 'KeyedLoadIC' - | 'KeyedStoreIC' - | 'LoadGlobalIC' - | 'LoadIC' - | 'Opt' - | 'StoreIC' - | 'Stub' - | 'Unopt' - | 'Builtin' - | 'RegExp' - func?: number - tm?: number -} - -interface Function { - name: string - codes: number[] -} - -interface Tick { - // Timestamp - tm: number - - // Virtual machine state? - vm: number - - // stack - s: number[] -} - -interface V8LogProfile { - code: Code[] - functions: Function[] - ticks: Tick[] -} - -function codeToFrameInfo(code: Code, v8log: V8LogProfile): FrameInfo { - if (!code || !code.type) { - return { - key: '(unknown type)', - name: '(unknown type)', - } - } - - let name = code.name - switch (code.type) { - case 'CPP': { - const matches = name.match(/[tT] ([^(<]*)/) - if (matches) name = `(c++) ${matches[1]}` - break - } - - case 'SHARED_LIB': - name = '(LIB) ' + name - break - - case 'JS': { - const matches = name.match(/([a-zA-Z0-9\._\-$]*) ([a-zA-Z0-9\.\-_\/$]*):(\d+):(\d+)/) - if (matches) { - return { - key: name, - name: matches[1].length > 0 ? matches[1] : '(anonymous)', - file: matches[2].length > 0 ? matches[2] : '(unknown file)', - line: parseInt(matches[3], 10), - col: parseInt(matches[4], 10), - } - } - break - } - - case 'CODE': { - switch (code.kind) { - case 'LoadIC': - case 'StoreIC': - case 'KeyedStoreIC': - case 'KeyedLoadIC': - case 'LoadGlobalIC': - case 'Handler': - name = '(IC) ' + name - break - - case 'BytecodeHandler': - name = '(bytecode) ~' + name - break - case 'Stub': - name = '(stub) ' + name - break - case 'Builtin': - name = '(builtin) ' + name - break - case 'RegExp': - name = '(regexp) ' + name - break - } - break - } - - default: { - name = `(${code.type}) ${name}` - break - } - } - - return {key: name, name} -} - -export function importFromV8ProfLog(v8log: V8LogProfile): Profile { - const profile = new StackListProfileBuilder() - - const sToFrameInfo = new Map() - function getFrameInfo(t: number) { - return getOrInsert(sToFrameInfo, t, t => { - const code = v8log.code[t] - return codeToFrameInfo(code, v8log) - }) - } - - let lastTm = 0 - - sortBy(v8log.ticks, tick => tick.tm) - - for (let tick of v8log.ticks) { - const stack: FrameInfo[] = [] - - // tick.s holds the call stack at the time the sample was taken. The - // structure is a little strange -- it seems to be capturing both the - // JavaScript stack & the parallel C++ stack by interleaving the two. - // Because the stacks might not be the same length, it looks like the - // shorter stack is padded with indices of -1, so we'll just ignore those - // stacks. - // - // If you change the start index to `let i = tick.s.length - 1` instead, - // you'll see the C++ stack instead. - // - // Mostly the numbers in the stack seem to be indices into the `v8log.code` - // array, but some of the numbers in the C++ stack seem to be raw memory - // addresses. - - for (let i = tick.s.length - 2; i >= 0; i -= 2) { - const id = tick.s[i] - - if (id === -1) continue - if (id > v8log.code.length) { - // Treat this like a memory address - stack.push({ - key: id, - name: `0x${id.toString(16)}`, - }) - continue - } - stack.push(getFrameInfo(id)) - } - profile.appendSampleWithWeight(stack, tick.tm - lastTm) - lastTm = tick.tm - } - - // Despite the code in the v8 processing library indicating that the - // timestamps come from a variable called "time_ns", from making empirical - // recordings, it really seems like these profiles are recording timestamps in - // microseconds, not nanoseconds. - // https://github.com/nodejs/node/blob/c39caa997c751473d0c8f50af8c6b14bcd389fa0/deps/v8/tools/profile.js#L1076 - profile.setValueFormatter(new TimeFormatter('microseconds')) - - return profile.build() -} diff --git a/src/speedscope/library/__snapshots__/file-format.test.ts.snap b/src/speedscope/library/__snapshots__/file-format.test.ts.snap deleted file mode 100644 index 308c780..0000000 --- a/src/speedscope/library/__snapshots__/file-format.test.ts.snap +++ /dev/null @@ -1,213 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`importSpeedscopeProfiles 0.0.1 evented profile 1`] = ` -Object { - "frames": Array [ - Frame { - "col": undefined, - "file": undefined, - "key": 0, - "line": undefined, - "name": "a", - "selfWeight": 0, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 1, - "line": undefined, - "name": "b", - "selfWeight": 5, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 2, - "line": undefined, - "name": "c", - "selfWeight": 5, - "totalWeight": 5, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 3, - "line": undefined, - "name": "d", - "selfWeight": 4, - "totalWeight": 4, - }, - ], - "name": "simple.txt", - "stacks": Array [ - "a;b;c 2", - "a;b;d 4", - "a;b;c 3", - "a;b 5", - ], -} -`; - -exports[`importSpeedscopeProfiles 0.0.1 evented profile: indexToView 1`] = `0`; - -exports[`importSpeedscopeProfiles 0.0.1 evented profile: profileGroup.name 1`] = `"simple.txt"`; - -exports[`importSpeedscopeProfiles 0.1.2 sampled profile 1`] = ` -Object { - "frames": Array [ - Frame { - "col": undefined, - "file": undefined, - "key": 0, - "line": undefined, - "name": "a", - "selfWeight": 0, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 1, - "line": undefined, - "name": "b", - "selfWeight": 5, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 2, - "line": undefined, - "name": "c", - "selfWeight": 5, - "totalWeight": 5, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 3, - "line": undefined, - "name": "d", - "selfWeight": 4, - "totalWeight": 4, - }, - ], - "name": "simple.speedscope.json", - "stacks": Array [ - "a;b;c 2.00s", - "a;b;d 4.00s", - "a;b;c 3.00s", - "a;b 5.00s", - ], -} -`; - -exports[`importSpeedscopeProfiles 0.1.2 sampled profile: indexToView 1`] = `0`; - -exports[`importSpeedscopeProfiles 0.1.2 sampled profile: profileGroup.name 1`] = `"simple.speedscope.json"`; - -exports[`importSpeedscopeProfiles 0.6.0 multiple profiles 1`] = ` -Object { - "frames": Array [ - Frame { - "col": undefined, - "file": undefined, - "key": 0, - "line": undefined, - "name": "a", - "selfWeight": 0, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 1, - "line": undefined, - "name": "b", - "selfWeight": 5, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 2, - "line": undefined, - "name": "c", - "selfWeight": 5, - "totalWeight": 5, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 3, - "line": undefined, - "name": "d", - "selfWeight": 4, - "totalWeight": 4, - }, - ], - "name": "one", - "stacks": Array [ - "a;b;c 2.00s", - "a;b;d 4.00s", - "a;b;c 3.00s", - "a;b 5.00s", - ], -} -`; - -exports[`importSpeedscopeProfiles 0.6.0 multiple profiles 2`] = ` -Object { - "frames": Array [ - Frame { - "col": undefined, - "file": undefined, - "key": 0, - "line": undefined, - "name": "a", - "selfWeight": 0, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 1, - "line": undefined, - "name": "b", - "selfWeight": 5, - "totalWeight": 14, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 2, - "line": undefined, - "name": "c", - "selfWeight": 5, - "totalWeight": 5, - }, - Frame { - "col": undefined, - "file": undefined, - "key": 3, - "line": undefined, - "name": "d", - "selfWeight": 4, - "totalWeight": 4, - }, - ], - "name": "two", - "stacks": Array [ - "a;b;c 2.00s", - "a;b;d 4.00s", - "a;b;c 3.00s", - "a;b 5.00s", - ], -} -`; - -exports[`importSpeedscopeProfiles 0.6.0 multiple profiles: indexToView 1`] = `1`; - -exports[`importSpeedscopeProfiles 0.6.0 multiple profiles: profileGroup.name 1`] = `"Two Samples"`; diff --git a/src/speedscope/library/__snapshots__/profile.test.ts.snap b/src/speedscope/library/__snapshots__/profile.test.ts.snap deleted file mode 100644 index c08d9c8..0000000 --- a/src/speedscope/library/__snapshots__/profile.test.ts.snap +++ /dev/null @@ -1,47 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`CallTreeProfileBuilder separates non-contiguous: append order 1`] = ` -"((speedscope root):0:5 - (a:1:5 - (b:1:2 - (c:1:1) - ) - (b:1:2 - (c:1:1) - ) - ) -)" -`; - -exports[`CallTreeProfileBuilder separates non-contiguous: grouped 1`] = ` -"((speedscope root):0:5 - (a:1:5 - (b:2:4 - (c:2:2) - ) - ) -)" -`; - -exports[`StackListProfileBuilder separates non-contiguous: append order 1`] = ` -"((speedscope root):4:0 - (a:1:5 - (b:1:2 - (c:1:1) - ) - (b:1:2 - (c:1:1) - ) - ) -)" -`; - -exports[`StackListProfileBuilder separates non-contiguous: grouped 1`] = ` -"((speedscope root):4:0 - (a:1:5 - (b:2:4 - (c:2:2) - ) - ) -)" -`; diff --git a/src/speedscope/library/color.test.ts b/src/speedscope/library/color.test.ts deleted file mode 100644 index fbfd735..0000000 --- a/src/speedscope/library/color.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Color} from './color' - -describe('Color', () => { - test('fromLumaChromaHue', () => { - expect(Color.fromLumaChromaHue(0, 0, 0).toCSS()).toEqual('rgba(0, 0, 0, 1.00)') - expect(Color.fromLumaChromaHue(1, 0, 0).toCSS()).toEqual('rgba(255, 255, 255, 1.00)') - - expect(Color.fromLumaChromaHue(0.5, 0, 30).toCSS()).toEqual('rgba(128, 128, 128, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 0, 60).toCSS()).toEqual('rgba(128, 128, 128, 1.00)') - - expect(Color.fromLumaChromaHue(0.5, 0.5, 0).toCSS()).toEqual('rgba(217, 89, 89, 1.00)') - - expect(Color.fromLumaChromaHue(0.5, 1.0, 0).toCSS()).toEqual('rgba(255, 51, 51, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 60).toCSS()).toEqual('rgba(156, 156, 0, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 120).toCSS()).toEqual('rgba(0, 232, 0, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 180).toCSS()).toEqual('rgba(0, 204, 204, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 240).toCSS()).toEqual('rgba(99, 99, 255, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 300).toCSS()).toEqual('rgba(255, 23, 255, 1.00)') - expect(Color.fromLumaChromaHue(0.5, 1.0, 360).toCSS()).toEqual('rgba(255, 51, 51, 1.00)') - }) - - test('toCSS', () => { - expect(new Color().toCSS()).toEqual('rgba(0, 0, 0, 1.00)') - expect(new Color(1, 0, 0, 1).toCSS()).toEqual('rgba(255, 0, 0, 1.00)') - expect(new Color(0, 1, 0, 1).toCSS()).toEqual('rgba(0, 255, 0, 1.00)') - expect(new Color(0, 0, 1, 1).toCSS()).toEqual('rgba(0, 0, 255, 1.00)') - expect(new Color(0, 0, 1, 0.599).toCSS()).toEqual('rgba(0, 0, 255, 0.60)') - }) -}) diff --git a/src/speedscope/library/color.ts b/src/speedscope/library/color.ts deleted file mode 100644 index 92dcce1..0000000 --- a/src/speedscope/library/color.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {clamp} from './math' - -export class Color { - constructor( - readonly r: number = 0, - readonly g: number = 0, - readonly b: number = 0, - readonly a: number = 1, - ) {} - - static fromLumaChromaHue(L: number, C: number, H: number) { - // 0 <= L <= 1 - // 0 <= C <= 1 - // 0 <= H <= 360 - // https://en.wikipedia.org/wiki/HSL_and_HSV#From_luma/chroma/hue - - const hPrime = H / 60 - const X = C * (1 - Math.abs(hPrime % 2 - 1)) - const [R1, G1, B1] = - hPrime < 1 - ? [C, X, 0] - : hPrime < 2 - ? [X, C, 0] - : hPrime < 3 - ? [0, C, X] - : hPrime < 4 - ? [0, X, C] - : hPrime < 5 - ? [X, 0, C] - : [C, 0, X] - - const m = L - (0.3 * R1 + 0.59 * G1 + 0.11 * B1) - - return new Color(clamp(R1 + m, 0, 1), clamp(G1 + m, 0, 1), clamp(B1 + m, 0, 1), 1.0) - } - - toCSS(): string { - return `rgba(${(255 * this.r).toFixed()}, ${(255 * this.g).toFixed()}, ${( - 255 * this.b - ).toFixed()}, ${this.a.toFixed(2)})` - } -} diff --git a/src/speedscope/library/demangle-cpp.test.ts b/src/speedscope/library/demangle-cpp.test.ts deleted file mode 100644 index cd024f3..0000000 --- a/src/speedscope/library/demangle-cpp.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {demangleCpp} from './demangle-cpp' - -test('demangleCpp', () => { - expect(demangleCpp('a')).toBe('a') - expect(demangleCpp('someUnobfuscatedFunction')).toBe('someUnobfuscatedFunction') - expect(demangleCpp('__ZNK7Support6ColorFeqERKS0_')).toBe( - 'Support::ColorF::operator==(Support::ColorF const&) const', - ) - // Running a second time to test the cache - expect(demangleCpp('__ZNK7Support6ColorFeqERKS0_')).toBe( - 'Support::ColorF::operator==(Support::ColorF const&) const', - ) -}) diff --git a/src/speedscope/library/demangle-cpp.ts b/src/speedscope/library/demangle-cpp.ts deleted file mode 100644 index 78c236c..0000000 --- a/src/speedscope/library/demangle-cpp.ts +++ /dev/null @@ -1,32 +0,0 @@ -let cppfilt: (name: string) => string -const cache = new Map() - -// This function converts a mangled C++ name such as "__ZNK7Support6ColorFeqERKS0_" -// into a human-readable symbol (in this case "Support::ColorF::==(Support::ColorF&)") -export function demangleCpp(name: string): string { - if (name.startsWith('__Z')) { - let result = cache.get(name) - if (result !== undefined) { - name = result - } else { - if (!cppfilt) { - cppfilt = new Function('exports', code)() - } - result = cppfilt(name.slice(1)) - result = result === '(null)' ? name : result - cache.set(name, result) - name = result - } - } - return name -} - -// This was taken from https://d.fuqu.jp/c++filtjs/ -const code = ` -return function(){function r(r){eval.call(null,r)}function a(r){throw print(r+":\\n"+(new Error).stack),ke=!0,"Assertion: "+r}function e(r,e){r||a("Assertion failed: "+e)}function i(r,a,i,v){function t(r,a){if("string"==a){var e=Oe;return le.stackAlloc(r.length+1),A(r,e),e}return r}function f(r,a){return"string"==a?s(r):r}try{func=ce.Module["_"+r]}catch(r){}e(func,"Cannot call unknown function "+r+" (perhaps LLVM optimizations or closure removed it?)");var _=0,n=v?v.map(function(r){return t(r,i[_++])}):[];return f(func.apply(null,n),a)}function v(r,a,e){return function(){return i(r,a,e,Array.prototype.slice.call(arguments))}}function t(r,e,i,v){switch(i=i||"i8","*"===i[i.length-1]&&(i="i32"),i){case"i1":Ae[r]=e;break;case"i8":Ae[r]=e;break;case"i16":ye[r>>1]=e;break;case"i32":Se[r>>2]=e;break;case"i64":Se[r>>2]=e;break;case"float":Ce[r>>2]=e;break;case"double":ze[0]=e,Se[r>>2]=xe[0],Se[r+4>>2]=xe[1];break;default:a("invalid type for setValue: "+i)}}function f(r,e,i){switch(e=e||"i8","*"===e[e.length-1]&&(e="i32"),e){case"i1":return Ae[r];case"i8":return Ae[r];case"i16":return ye[r>>1];case"i32":return Se[r>>2];case"i64":return Se[r>>2];case"float":return Ce[r>>2];case"double":return xe[0]=Se[r>>2],xe[1]=Se[r+4>>2],ze[0];default:a("invalid type for setValue: "+e)}return null}function _(r,a,e){var i,v;"number"==typeof r?(i=!0,v=r):(i=!1,v=r.length);var f="string"==typeof a?a:null,_=[Jr,le.stackAlloc,le.staticAlloc][void 0===e?we:e](Math.max(v,f?1:a.length));if(i)return Fa(_,0,v),_;for(var s,n=0;n>12<<12}function l(){for(;Le<=Ie;)Le=o(2*Le);var r=Ae,a=new ArrayBuffer(Le);Ae=new Int8Array(a),ye=new Int16Array(a),Se=new Int32Array(a),ge=new Uint8Array(a),me=new Uint16Array(a),Me=new Uint32Array(a),Ce=new Float32Array(a),Re=new Float64Array(a),Ae.set(r)}function b(r){for(;r.length>0;){var a=r.shift(),e=a.func;"number"==typeof e&&(e=pe[e]),e(void 0===a.arg?null:a.arg)}}function k(){b(Ve)}function u(){b(Be),be.print()}function c(r,a){return Array.prototype.slice.call(Ae.subarray(r,r+a))}function h(r,a){for(var e=new Uint8Array(a),i=0;i255&&(v&=255),e.push(v),i+=1}return a||e.push(0),e}function E(r){for(var a=[],e=0;e255&&(i&=255),a.push(String.fromCharCode(i))}return a.join("")}function A(r,a,e){for(var i=0;i255&&(v&=255),Ae[a+i]=v,i+=1}e||(Ae[a+i]=0)}function g(r,a,e,i){return r>=0?r:a<=32?2*Math.abs(1<=v&&(a<=32||r>v)&&(r=-2*v+r),r}function m(r,a,e){if(0==(0|r)|0==(0|a)|0==(0|e))var i=0;else{Se[r>>2]=0,Se[r+4>>2]=a,Se[r+8>>2]=e;var i=1}var i;return i}function S(r,a,e){if(0==(0|r)|(0|a)<0|0==(0|e))var i=0;else{Se[r>>2]=41,Se[r+4>>2]=a,Se[r+8>>2]=e;var i=1}var i;return i}function M(r,a,e){if(0==(0|r)|0==(0|e))var i=0;else{Se[r>>2]=6,Se[r+4>>2]=a,Se[r+8>>2]=e;var i=1}var i;return i}function C(r,a,e){if(0==(0|r)|0==(0|e))var i=0;else{Se[r>>2]=7,Se[r+4>>2]=a,Se[r+8>>2]=e;var i=1}var i;return i}function R(r,a){var e,i=0==(0|a);do if(i)var v=0;else{var e=(r+32|0)>>2,t=Se[e];if((0|t)>=(0|Se[r+36>>2])){var v=0;break}var f=(t<<2)+Se[r+28>>2]|0;Se[f>>2]=a;var _=Se[e]+1|0;Se[e]=_;var v=1}while(0);var v;return v}function T(r,a){var e,e=(r+12|0)>>2,i=Se[e],v=i+1|0;Se[e]=v;var t=Ae[i]<<24>>24==95;do if(t){var f=i+2|0;if(Se[e]=f,Ae[v]<<24>>24!=90){var _=0;break}var s=O(r,a),_=s}else var _=0;while(0);var _;return _}function O(r,a){var e=r+12|0,i=Ae[Se[e>>2]];r:do if(i<<24>>24==71||i<<24>>24==84)var v=Tr(r),t=v;else{var f=Ar(r),_=0==(0|f)|0==(0|a);do if(!_){if(0!=(1&Se[r+8>>2]|0))break;var s=Me[f>>2],n=(s-25|0)>>>0<3;a:do if(n)for(var o=f;;){var o,l=Me[o+4>>2],b=Me[l>>2];if((b-25|0)>>>0>=3){var k=l,u=b;break a}var o=l}else var k=f,u=s;while(0);var u,k;if(2!=(0|u)){var t=k;break r}var c=k+8|0,h=Me[c>>2],d=(Se[h>>2]-25|0)>>>0<3;a:do if(d)for(var w=h;;){var w,p=Me[w+4>>2];if((Se[p>>2]-25|0)>>>0>=3){var E=p;break a}var w=p}else var E=h;while(0);var E;Se[c>>2]=E;var t=k;break r}while(0);var A=Ae[Se[e>>2]];if(A<<24>>24==0||A<<24>>24==69){var t=f;break}var g=Or(f),y=Sr(r,g),m=D(r,3,f,y),t=m}while(0);var t;return t}function N(r){var a,e,i=Oe;Oe+=4;var v=i,e=v>>2,a=(r+12|0)>>2,t=Me[a],f=Ae[t],_=f<<24>>24;r:do if(f<<24>>24==114||f<<24>>24==86||f<<24>>24==75){var s=I(r,v,0);if(0==(0|s)){var n=0;break}var o=N(r);Se[s>>2]=o;var l=Se[e],b=R(r,l);if(0==(0|b)){var n=0;break}var n=Se[e]}else{do{if(97==(0|_)||98==(0|_)||99==(0|_)||100==(0|_)||101==(0|_)||102==(0|_)||103==(0|_)||104==(0|_)||105==(0|_)||106==(0|_)||108==(0|_)||109==(0|_)||110==(0|_)||111==(0|_)||115==(0|_)||116==(0|_)||118==(0|_)||119==(0|_)||120==(0|_)||121==(0|_)||122==(0|_)){var k=ai+20*(_-97)|0,u=P(r,k);Se[e]=u;var c=r+48|0,h=Se[c>>2]+Se[Se[u+4>>2]+4>>2]|0;Se[c>>2]=h;var d=Se[a]+1|0;Se[a]=d;var n=u;break r}if(117==(0|_)){Se[a]=t+1|0;var w=L(r),p=D(r,34,w,0);Se[e]=p;var E=p}else if(70==(0|_)){var A=F(r);Se[e]=A;var E=A}else if(48==(0|_)||49==(0|_)||50==(0|_)||51==(0|_)||52==(0|_)||53==(0|_)||54==(0|_)||55==(0|_)||56==(0|_)||57==(0|_)||78==(0|_)||90==(0|_)){var g=X(r);Se[e]=g;var E=g}else if(65==(0|_)){var y=j(r);Se[e]=y;var E=y}else if(77==(0|_)){var m=U(r);Se[e]=m;var E=m}else if(84==(0|_)){var S=x(r);if(Se[e]=S,Ae[Se[a]]<<24>>24!=73){var E=S;break}var M=R(r,S);if(0==(0|M)){var n=0;break r}var C=Se[e],T=z(r),O=D(r,4,C,T);Se[e]=O;var E=O}else if(83==(0|_)){var B=ge[t+1|0];if((B-48&255&255)<10|B<<24>>24==95|(B-65&255&255)<26){var H=V(r,0);if(Se[e]=H,Ae[Se[a]]<<24>>24!=73){var n=H;break r}var K=z(r),Y=D(r,4,H,K);Se[e]=Y;var E=Y}else{var G=X(r);if(Se[e]=G,0==(0|G)){var E=0;break}if(21==(0|Se[G>>2])){var n=G;break r}var E=G}}else if(80==(0|_)){Se[a]=t+1|0;var W=N(r),Z=D(r,29,W,0);Se[e]=Z;var E=Z}else if(82==(0|_)){Se[a]=t+1|0;var Q=N(r),q=D(r,30,Q,0);Se[e]=q;var E=q}else if(67==(0|_)){Se[a]=t+1|0;var $=N(r),J=D(r,31,$,0);Se[e]=J;var E=J}else if(71==(0|_)){Se[a]=t+1|0;var rr=N(r),ar=D(r,32,rr,0);Se[e]=ar;var E=ar}else{if(85!=(0|_)){var n=0;break r}Se[a]=t+1|0;var er=L(r);Se[e]=er;var ir=N(r),vr=Se[e],tr=D(r,28,ir,vr);Se[e]=tr;var E=tr}}while(0);var E,fr=R(r,E);if(0==(0|fr)){var n=0;break}var n=Se[e]}while(0);var n;return Oe=i,n}function I(r,a,e){for(var i,v=r+12|0,t=0!=(0|e),f=t?25:22,i=(r+48|0)>>2,_=t?26:23,s=t?27:24,n=a;;){var n,o=Se[v>>2],l=Ae[o];if(l<<24>>24!=114&&l<<24>>24!=86&&l<<24>>24!=75){var b=n;break}var k=o+1|0;if(Se[v>>2]=k,l<<24>>24==114){var u=Se[i]+9|0;Se[i]=u;var c=f}else if(l<<24>>24==86){var h=Se[i]+9|0;Se[i]=h;var c=_}else{var d=Se[i]+6|0;Se[i]=d;var c=s}var c,w=D(r,c,0,0);if(Se[n>>2]=w,0==(0|w)){var b=0;break}var n=w+4|0}var b;return b}function P(r,a){var e=0==(0|a);do if(e)var i=0;else{var v=J(r);if(0==(0|v)){var i=0;break}Se[v>>2]=33,Se[v+4>>2]=a;var i=v}while(0);var i;return i}function D(r,a,e,i){var v,t;do{if(1==(0|a)||2==(0|a)||3==(0|a)||4==(0|a)||10==(0|a)||28==(0|a)||37==(0|a)||43==(0|a)||44==(0|a)||45==(0|a)||46==(0|a)||47==(0|a)||48==(0|a)||49==(0|a)||50==(0|a)){if(0==(0|e)|0==(0|i)){var f=0;t=7;break}t=5;break}if(8==(0|a)||9==(0|a)||11==(0|a)||12==(0|a)||13==(0|a)||14==(0|a)||15==(0|a)||16==(0|a)||17==(0|a)||18==(0|a)||19==(0|a)||20==(0|a)||29==(0|a)||30==(0|a)||31==(0|a)||32==(0|a)||34==(0|a)||38==(0|a)||39==(0|a)||42==(0|a)){if(0==(0|e)){var f=0;t=7;break}t=5;break}if(36==(0|a)){if(0==(0|i)){var f=0;t=7;break}t=5;break}if(35==(0|a)||22==(0|a)||23==(0|a)||24==(0|a)||25==(0|a)||26==(0|a)||27==(0|a))t=5;else{var f=0;t=7}}while(0);do if(5==t){var _=J(r),v=_>>2;if(0==(0|_)){var f=0;break}Se[v]=a,Se[v+1]=e,Se[v+2]=i;var f=_}while(0);var f;return f}function L(r){var a=sr(r);if((0|a)<1)var e=0;else{var i=Rr(r,a);Se[r+44>>2]=i;var e=i}var e;return e}function F(r){var a,a=(r+12|0)>>2,e=Se[a],i=e+1|0;if(Se[a]=i,Ae[e]<<24>>24==70){if(Ae[i]<<24>>24==89){var v=e+2|0;Se[a]=v}var t=Sr(r,1),f=Se[a],_=f+1|0;Se[a]=_;var s=Ae[f]<<24>>24==69?t:0,n=s}else var n=0;var n;return n}function X(r){var a=Ar(r);return a}function j(r){var a,a=(r+12|0)>>2,e=Se[a],i=e+1|0;Se[a]=i;var v=Ae[e]<<24>>24==65;do if(v){var t=Ae[i];if(t<<24>>24==95)var f=0;else if((t-48&255&255)<10){for(var _=i;;){var _,s=_+1|0;if(Se[a]=s,(Ae[s]-48&255&255)>=10)break;var _=s}var n=s-i|0,o=lr(r,i,n);if(0==(0|o)){var l=0;break}var f=o}else{var b=nr(r);if(0==(0|b)){var l=0;break}var f=b}var f,k=Se[a],u=k+1|0;if(Se[a]=u,Ae[k]<<24>>24!=95){var l=0;break}var c=N(r),h=D(r,36,f,c),l=h}else var l=0;while(0);var l;return l}function U(r){var a=Oe;Oe+=4;var e=a,i=r+12|0,v=Se[i>>2],t=v+1|0;Se[i>>2]=t;var f=Ae[v]<<24>>24==77;r:do if(f){var _=N(r),s=I(r,e,1);if(0==(0|s)){var n=0;break}var o=N(r);Se[s>>2]=o;var l=(0|s)==(0|e);do if(!l){if(35==(0|Se[o>>2]))break;var b=Se[e>>2],k=R(r,b);if(0==(0|k)){var n=0;break r}}while(0);var u=Se[e>>2],c=D(r,37,_,u),n=c}else var n=0;while(0);var n;return Oe=a,n}function x(r){var a,a=(r+12|0)>>2,e=Se[a],i=e+1|0;Se[a]=i;var v=Ae[e]<<24>>24==84;do if(v){if(Ae[i]<<24>>24==95)var t=0,f=i;else{var _=sr(r);if((0|_)<0){var s=0;break}var t=_+1|0,f=Se[a]}var f,t;if(Se[a]=f+1|0,Ae[f]<<24>>24!=95){var s=0;break}var n=r+40|0,o=Se[n>>2]+1|0;Se[n>>2]=o;var l=Er(r,t),s=l}else var s=0;while(0);var s;return s}function z(r){var a,e=Oe;Oe+=4;var i=e,v=r+44|0,t=Se[v>>2],a=(r+12|0)>>2,f=Se[a],_=f+1|0;Se[a]=_;var s=Ae[f]<<24>>24==73;r:do if(s){Se[i>>2]=0;for(var n=i;;){var n,o=_r(r);if(0==(0|o)){var l=0;break r}var b=D(r,39,o,0);if(Se[n>>2]=b,0==(0|b)){var l=0;break r}var k=Se[a];if(Ae[k]<<24>>24==69)break;var n=b+8|0}var u=k+1|0;Se[a]=u,Se[v>>2]=t;var l=Se[i>>2]}else var l=0;while(0);var l;return Oe=e,l}function V(r,a){var e,e=(r+12|0)>>2,i=Se[e],v=i+1|0;Se[e]=v;var t=Ae[i]<<24>>24==83;r:do if(t){var f=i+2|0;Se[e]=f;var _=ge[v];if(_<<24>>24==95)var s=0;else{if(!((_-48&255&255)<10|(_-65&255&255)<26)){var n=8&Se[r+8>>2],o=n>>>3,l=0!=(0|n)|0==(0|a);do if(l)var b=o;else{if((Ae[f]-67&255&255)>=2){var b=o;break}var b=1}while(0);for(var b,k=0|ei;;){var k;if(k>>>0>=(ei+196|0)>>>0){var u=0;break r}if(_<<24>>24==Ae[0|k]<<24>>24)break;var k=k+28|0}var c=Se[k+20>>2];if(0!=(0|c)){var h=Se[k+24>>2],d=fr(r,c,h);Se[r+44>>2]=d}if(0==(0|b))var w=k+8|0,p=k+4|0;else var w=k+16|0,p=k+12|0;var p,w,E=Se[w>>2],A=Se[p>>2],g=r+48|0,y=Se[g>>2]+E|0;Se[g>>2]=y;var m=fr(r,A,E),u=m;break}for(var S=_,M=0,C=f;;){var C,M,S;if((S-48&255&255)<10)var R=36*M-48|0;else{if((S-65&255&255)>=26){var u=0;break r}var R=36*M-55|0}var R,T=(S<<24>>24)+R|0;if((0|T)<0){var u=0;break r}var O=C+1|0;Se[e]=O;var N=ge[C];if(N<<24>>24==95)break;var S=N,M=T,C=O}var s=T+1|0}var s;if((0|s)>=(0|Se[r+32>>2])){var u=0;break}var I=r+40|0,P=Se[I>>2]+1|0;Se[I>>2]=P;var u=Se[Se[r+28>>2]+(s<<2)>>2]}else var u=0;while(0);var u;return u}function B(r,a,e,i){var v,t,f,_,s=Oe;Oe+=28;var n,o=s,_=o>>2;Se[_]=r;var l=e+1|0,f=(o+12|0)>>2;Se[f]=l;var b=Jr(l),t=(o+4|0)>>2;if(Se[t]=b,0==(0|b))var k=0,u=1;else{var v=(o+8|0)>>2;Se[v]=0,Se[_+4]=0,Se[_+5]=0;var c=o+24|0;Se[c>>2]=0,H(o,a);var h=Me[t],d=0==(0|h);do{if(!d){var w=Me[v];if(w>>>0>=Me[f]>>>0){n=5;break}Se[v]=w+1|0,Ae[h+w|0]=0,n=6;break}n=5}while(0);5==n&&Y(o,0);var p=Se[t],E=0==(0|p)?Se[c>>2]:Se[f],k=p,u=E}var u,k;return Se[i>>2]=u,Oe=s,k}function H(r,a){var e,i,v,t,f,_,s,n,o,l,b,k,u,c,h,d,w,p,E,A,g,y,m,S,M,C,R,T,O,N,I,P,D,L,F,X,j,U,x,z,V,B,K,G,W,J,vr,tr,fr,_r,sr,nr,or,lr,br,kr,ur,cr,hr,dr,wr,pr=a>>2,Er=r>>2,Ar=Oe;Oe+=184;var gr,yr=Ar,wr=yr>>2,mr=Ar+64,dr=mr>>2,Sr=Ar+72,Mr=Ar+88,Cr=Ar+104,hr=Cr>>2,Rr=Ar+168,Tr=0==(0|a);r:do if(Tr)Z(r);else{var cr=(r+4|0)>>2,Or=Me[cr];if(0==(0|Or))break;var Nr=0|a,Ir=Me[Nr>>2];a:do{if(0==(0|Ir)){if(0!=(4&Se[Er]|0)){var Pr=Se[pr+1],Dr=Se[pr+2];q(r,Pr,Dr);break r}var ur=(r+8|0)>>2,Lr=Me[ur],Fr=a+8|0,Xr=Me[Fr>>2];if((Xr+Lr|0)>>>0>Me[Er+3]>>>0){var jr=Se[pr+1];Q(r,jr,Xr);break r}var Ur=Or+Lr|0,xr=Se[pr+1];Pa(Ur,xr,Xr,1);var zr=Se[ur]+Se[Fr>>2]|0;Se[ur]=zr;break r}if(1==(0|Ir)||2==(0|Ir)){var Vr=Se[pr+1];H(r,Vr);var Br=0==(4&Se[Er]|0),Hr=Me[cr],Kr=0!=(0|Hr);e:do if(Br){do if(Kr){var kr=(r+8|0)>>2,Yr=Me[kr];if((Yr+2|0)>>>0>Me[Er+3]>>>0)break;var Gr=Hr+Yr|0;oe=14906,Ae[Gr]=255&oe,oe>>=8,Ae[Gr+1]=255&oe;var Wr=Se[kr]+2|0;Se[kr]=Wr;break e}while(0);Q(r,0|He.__str120,2)}else{do if(Kr){var Zr=r+8|0,Qr=Me[Zr>>2];if(Qr>>>0>=Me[Er+3]>>>0)break;Se[Zr>>2]=Qr+1|0,Ae[Hr+Qr|0]=46;break e}while(0);Y(r,46)}while(0);var qr=Se[pr+2];H(r,qr);break r}if(3==(0|Ir)){for(var br=(r+20|0)>>2,$r=Me[br],lr=(r+16|0)>>2,Jr=a,ra=0,aa=$r;;){var aa,ra,Jr,ea=Me[Jr+4>>2];if(0==(0|ea)){var ia=ra,va=0;gr=33;break}if(ra>>>0>3){Z(r);break r}var ta=(ra<<4)+yr|0;Se[ta>>2]=aa,Se[br]=ta,Se[((ra<<4)+4>>2)+wr]=ea,Se[((ra<<4)+8>>2)+wr]=0;var fa=Me[lr];Se[((ra<<4)+12>>2)+wr]=fa;var _a=ra+1|0,sa=0|ea,na=Me[sa>>2];if((na-25|0)>>>0>=3){gr=25;break}var Jr=ea,ra=_a,aa=ta}e:do if(25==gr){if(4==(0|na)){Se[dr]=fa,Se[lr]=mr,Se[dr+1]=ea;var oa=Se[sa>>2],la=mr}else var oa=na,la=fa;var la,oa;if(2!=(0|oa)){var ia=_a,va=sa;break}for(var ba=_a,ka=ea+8|0;;){var ka,ba,ua=Me[ka>>2];if((Se[ua>>2]-25|0)>>>0>=3){var ia=ba,va=sa;break e}if(ba>>>0>3)break;var ca=(ba<<4)+yr|0,ha=ba-1|0,da=(ha<<4)+yr|0,or=ca>>2,nr=da>>2;Se[or]=Se[nr],Se[or+1]=Se[nr+1],Se[or+2]=Se[nr+2],Se[or+3]=Se[nr+3],Se[ca>>2]=da,Se[br]=ca,Se[((ha<<4)+4>>2)+wr]=ua,Se[((ha<<4)+8>>2)+wr]=0,Se[((ha<<4)+12>>2)+wr]=la;var ba=ba+1|0,ka=ua+4|0}Z(r);break r}while(0);var va,ia,wa=Se[pr+2];if(H(r,wa),4==(0|Se[va>>2])){var pa=Se[dr];Se[lr]=pa}var Ea=0==(0|ia);e:do if(!Ea)for(var Aa=r+8|0,ga=r+12|0,ya=ia;;){var ya,ma=ya-1|0;if(0==(0|Se[((ma<<4)+8>>2)+wr])){var Sa=Me[cr],Ma=0==(0|Sa);do{if(!Ma){var Ca=Me[Aa>>2];if(Ca>>>0>=Me[ga>>2]>>>0){gr=41;break}Se[Aa>>2]=Ca+1|0,Ae[Sa+Ca|0]=32,gr=42;break}gr=41}while(0);41==gr&&Y(r,32);var Ra=Se[((ma<<4)+4>>2)+wr];$(r,Ra)}if(0==(0|ma))break e;var ya=ma}while(0);Se[br]=$r;break r}if(4==(0|Ir)){var sr=(r+20|0)>>2,Ta=Se[sr];Se[sr]=0;var Oa=Se[pr+1];H(r,Oa);var Na=Me[cr],Ia=0==(0|Na);do{if(!Ia){var _r=(r+8|0)>>2,Da=Me[_r],La=0==(0|Da);do if(!La){if(Ae[Na+(Da-1)|0]<<24>>24!=60)break;Da>>>0>>0?(Se[_r]=Da+1|0,Ae[Na+Da|0]=32):Y(r,32)}while(0);var Fa=Me[cr];if(0==(0|Fa)){gr=54;break}var Xa=Me[_r];if(Xa>>>0>=Me[Er+3]>>>0){gr=54;break}Se[_r]=Xa+1|0,Ae[Fa+Xa|0]=60,gr=55;break}gr=54}while(0);54==gr&&Y(r,60);var ja=Se[pr+2];H(r,ja);var Ua=Me[cr],xa=0==(0|Ua);do{if(!xa){var fr=(r+8|0)>>2,za=Me[fr],Va=0==(0|za);do if(!Va){if(Ae[Ua+(za-1)|0]<<24>>24!=62)break;za>>>0>>0?(Se[fr]=za+1|0,Ae[Ua+za|0]=32):Y(r,32)}while(0);var Ba=Me[cr];if(0==(0|Ba)){gr=64;break}var Ha=Me[fr];if(Ha>>>0>=Me[Er+3]>>>0){gr=64;break}Se[fr]=Ha+1|0,Ae[Ba+Ha|0]=62,gr=65;break}gr=64}while(0);64==gr&&Y(r,62),Se[sr]=Ta;break r}if(5==(0|Ir)){var tr=(r+16|0)>>2,Ka=Me[tr];if(0==(0|Ka)){Z(r);break r}for(var Ya=Se[pr+1],Ga=Se[Ka+4>>2];;){var Ga,Ya,Wa=Se[Ga+8>>2];if(0==(0|Wa))break;if(39!=(0|Se[Wa>>2])){Z(r);break r}if((0|Ya)<1){if(0!=(0|Ya))break;var Za=Se[Ka>>2];Se[tr]=Za;var Qa=Se[Wa+4>>2];H(r,Qa),Se[tr]=Ka;break r}var Ya=Ya-1|0,Ga=Wa}Z(r);break r}if(6==(0|Ir)){var qa=Se[pr+2];H(r,qa);break r}if(7==(0|Ir)){var $a=r+8|0,Ja=Me[$a>>2];Ja>>>0>>0?(Se[$a>>2]=Ja+1|0,Ae[Or+Ja|0]=126):Y(r,126);var re=Se[pr+2];H(r,re);break r}if(8==(0|Ir)){var vr=(r+8|0)>>2,ae=Me[vr];if((ae+11|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str121,11);else{for(var ee=Or+ae|0,ie=0|He.__str121,ve=ee,te=ie+11;ie>2,se=Me[J];if((se+8|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str122,8);else{var ne=Or+se|0,le=0|ne;oe=542397526,Ae[le]=255&oe,oe>>=8,Ae[le+1]=255&oe,oe>>=8,Ae[le+2]=255&oe,oe>>=8,Ae[le+3]=255&oe;var be=ne+4|0;oe=544370534,Ae[be]=255&oe,oe>>=8,Ae[be+1]=255&oe,oe>>=8,Ae[be+2]=255&oe,oe>>=8,Ae[be+3]=255&oe;var ke=Se[J]+8|0;Se[J]=ke}var ue=Se[pr+1];H(r,ue);break r}if(10==(0|Ir)){var W=(r+8|0)>>2,ce=Me[W],he=r+12|0;if((ce+24|0)>>>0>Me[he>>2]>>>0)Q(r,0|He.__str123,24);else{var de=Or+ce|0;Pa(de,0|He.__str123,24,1);var we=Se[W]+24|0;Se[W]=we}var pe=Se[pr+1];H(r,pe);var Ee=Me[cr],ge=0==(0|Ee);do{if(!ge){var ye=Me[W];if((ye+4|0)>>>0>Me[he>>2]>>>0){gr=96;break}var me=Ee+ye|0;oe=762210605,Ae[me]=255&oe,oe>>=8,Ae[me+1]=255&oe,oe>>=8,Ae[me+2]=255&oe,oe>>=8,Ae[me+3]=255&oe;var Ce=Se[W]+4|0;Se[W]=Ce,gr=97;break}gr=96}while(0);96==gr&&Q(r,0|He.__str124,4);var Re=Se[pr+2];H(r,Re);break r}if(11==(0|Ir)){var G=(r+8|0)>>2,Te=Me[G];if((Te+13|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str125,13);else{for(var Ne=Or+Te|0,ie=0|He.__str125,ve=Ne,te=ie+13;ie>2,De=Me[K];if((De+18|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str126,18);else{for(var Le=Or+De|0,ie=0|He.__str126,ve=Le,te=ie+18;ie>2,je=Me[B];if((je+16|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str127,16);else{for(var Ue=Or+je|0,ie=0|He.__str127,ve=Ue,te=ie+16;ie>2,Ve=Me[V];if((Ve+21|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str128,21);else{var Be=Or+Ve|0;Pa(Be,0|He.__str128,21,1);var Ke=Se[V]+21|0;Se[V]=Ke}var Ye=Se[pr+1];H(r,Ye);break r}if(15==(0|Ir)){var z=(r+8|0)>>2,Ge=Me[z];if((Ge+17|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str129,17);else{for(var We=Or+Ge|0,ie=0|He.__str129,ve=We,te=ie+17;ie>2,qe=Me[x];if((qe+26|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str130,26);else{var $e=Or+qe|0;Pa($e,0|He.__str130,26,1);var Je=Se[x]+26|0;Se[x]=Je}var ri=Se[pr+1];H(r,ri);break r}if(17==(0|Ir)){var U=(r+8|0)>>2,ai=Me[U];if((ai+15|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str131,15);else{for(var ei=Or+ai|0,ie=0|He.__str131,ve=ei,te=ie+15;ie>2,ti=Me[j];if((ti+19|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str132,19);else{for(var fi=Or+ti|0,ie=0|He.__str132,ve=fi,te=ie+19;ie>2,ni=Me[X];if((ni+24|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str133,24);else{var oi=Or+ni|0;Pa(oi,0|He.__str133,24,1);var li=Se[X]+24|0;Se[X]=li}var bi=Se[pr+1];H(r,bi);break r}if(20==(0|Ir)){var F=(r+8|0)>>2,ki=Me[F];if((ki+17|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str134,17);else{for(var ui=Or+ki|0,ie=0|He.__str134,ve=ui,te=ie+17;ie>2,di=Me[L],wi=a+8|0,pi=Me[wi>>2];if((pi+di|0)>>>0>Me[Er+3]>>>0){var Ei=Se[pr+1];Q(r,Ei,pi);break r}var Ai=Or+di|0,gi=Se[pr+1];Pa(Ai,gi,pi,1);var yi=Se[L]+Se[wi>>2]|0;Se[L]=yi;break r}if(22==(0|Ir)||23==(0|Ir)||24==(0|Ir)){for(var mi=r+20|0;;){var mi,Si=Me[mi>>2];if(0==(0|Si))break a;if(0==(0|Se[Si+8>>2])){var Mi=Me[Se[Si+4>>2]>>2];if((Mi-22|0)>>>0>=3)break a;if((0|Mi)==(0|Ir))break}var mi=0|Si}var Ci=Se[pr+1];H(r,Ci);break r}if(25!=(0|Ir)&&26!=(0|Ir)&&27!=(0|Ir)&&28!=(0|Ir)&&29!=(0|Ir)&&30!=(0|Ir)&&31!=(0|Ir)&&32!=(0|Ir)){if(33==(0|Ir)){var D=(r+8|0)>>2,Ri=Me[D],P=(a+4|0)>>2,I=Me[P]>>2;if(0==(4&Se[Er]|0)){var Ti=Me[I+1];if((Ti+Ri|0)>>>0>Me[Er+3]>>>0){var Oi=Se[I];Q(r,Oi,Ti);break r}var Ni=Or+Ri|0,Ii=Se[I];Pa(Ni,Ii,Ti,1);var Pi=Se[D]+Se[Se[P]+4>>2]|0;Se[D]=Pi;break r}var Di=Me[I+3];if((Di+Ri|0)>>>0>Me[Er+3]>>>0){var Li=Se[I+2];Q(r,Li,Di);break r}var Fi=Or+Ri|0,Xi=Se[I+2];Pa(Fi,Xi,Di,1);var ji=Se[D]+Se[Se[P]+12>>2]|0;Se[D]=ji;break r}if(34==(0|Ir)){var Ui=Se[pr+1];H(r,Ui);break r}if(35==(0|Ir)){var N=(0|r)>>2;if(0!=(32&Se[N]|0)){var xi=Se[Er+5];rr(r,a,xi)}var zi=a+4|0,Vi=0==(0|Se[zi>>2]);e:do if(!Vi){var O=(r+20|0)>>2,Bi=Se[O],Hi=0|Mr;Se[Hi>>2]=Bi,Se[O]=Mr,Se[Mr+4>>2]=a;var Ki=Mr+8|0;Se[Ki>>2]=0;var Yi=Se[Er+4];Se[Mr+12>>2]=Yi;var Gi=Se[zi>>2];H(r,Gi);var Wi=Se[Hi>>2];if(Se[O]=Wi,0!=(0|Se[Ki>>2]))break r;if(0!=(32&Se[N]|0))break;var Zi=Me[cr],Qi=0==(0|Zi);do if(!Qi){var qi=r+8|0,$i=Me[qi>>2];if($i>>>0>=Me[Er+3]>>>0)break;Se[qi>>2]=$i+1|0,Ae[Zi+$i|0]=32;break e}while(0);Y(r,32)}while(0);if(0!=(32&Se[N]|0))break r;var Ji=Se[Er+5];rr(r,a,Ji);break r}if(36==(0|Ir)){var T=(r+20|0)>>2,rv=Me[T],av=0|Cr;Se[hr]=rv,Se[T]=av,Se[hr+1]=a;var ev=Cr+8|0;Se[ev>>2]=0;var iv=Se[Er+4];Se[hr+3]=iv;for(var vv=rv,tv=1;;){var tv,vv;if(0==(0|vv))break;if((Se[Se[vv+4>>2]>>2]-22|0)>>>0>=3)break;var fv=vv+8|0;if(0==(0|Se[fv>>2])){if(tv>>>0>3){Z(r);break r}var _v=(tv<<4)+Cr|0,R=_v>>2,C=vv>>2;Se[R]=Se[C],Se[R+1]=Se[C+1],Se[R+2]=Se[C+2],Se[R+3]=Se[C+3];var sv=Se[T];Se[_v>>2]=sv,Se[T]=_v,Se[fv>>2]=1;var nv=tv+1|0}else var nv=tv;var nv,vv=Se[vv>>2],tv=nv}var ov=Se[pr+2];if(H(r,ov),Se[T]=rv,0!=(0|Se[ev>>2]))break r;if(tv>>>0>1){for(var lv=tv;;){var lv,bv=lv-1|0,kv=Se[((bv<<4)+4>>2)+hr];if($(r,kv),bv>>>0<=1)break;var lv=bv}var uv=Se[T]}else var uv=rv;var uv;ar(r,a,uv);break r}if(37==(0|Ir)){var M=(r+20|0)>>2,cv=Se[M],hv=0|Rr;Se[hv>>2]=cv,Se[M]=Rr,Se[Rr+4>>2]=a;var dv=Rr+8|0;Se[dv>>2]=0;var wv=Se[Er+4];Se[Rr+12>>2]=wv;var pv=a+4|0,Ev=Se[pr+2];H(r,Ev);var Av=0==(0|Se[dv>>2]);e:do if(Av){var gv=Me[cr],yv=0==(0|gv);do{if(!yv){var mv=r+8|0,Sv=Me[mv>>2];if(Sv>>>0>=Me[Er+3]>>>0){gr=187;break}Se[mv>>2]=Sv+1|0,Ae[gv+Sv|0]=32,gr=188;break}gr=187}while(0);187==gr&&Y(r,32);var Mv=Se[pv>>2];H(r,Mv);var Cv=Me[cr],Rv=0==(0|Cv);do if(!Rv){var S=(r+8|0)>>2,Tv=Me[S];if((Tv+3|0)>>>0>Me[Er+3]>>>0)break;var Ov=Cv+Tv|0;Ae[Ov]=Ae[0|He.__str135],Ae[Ov+1]=Ae[(0|He.__str135)+1],Ae[Ov+2]=Ae[(0|He.__str135)+2];var Nv=Se[S]+3|0;Se[S]=Nv;break e}while(0);Q(r,0|He.__str135,3)}while(0);var Iv=Se[hv>>2];Se[M]=Iv;break r}if(38==(0|Ir)||39==(0|Ir)){var Pv=Se[pr+1];H(r,Pv);var Dv=a+8|0;if(0==(0|Se[Dv>>2]))break r;var Lv=Me[cr],Fv=0==(0|Lv);do{if(!Fv){var m=(r+8|0)>>2,Xv=Me[m];if((Xv+2|0)>>>0>Me[Er+3]>>>0){gr=197;break}var jv=Lv+Xv|0;oe=8236,Ae[jv]=255&oe,oe>>=8,Ae[jv+1]=255&oe;var Uv=Se[m]+2|0;Se[m]=Uv,gr=198;break}gr=197}while(0);197==gr&&Q(r,0|He.__str136,2);var xv=Se[Dv>>2];H(r,xv);break r}if(40==(0|Ir)){var y=(r+8|0)>>2,zv=Me[y],g=(r+12|0)>>2;if((zv+8|0)>>>0>Me[g]>>>0)Q(r,0|He.__str137,8);else{var Vv=Or+zv|0,le=0|Vv;oe=1919250543,Ae[le]=255&oe,oe>>=8,Ae[le+1]=255&oe,oe>>=8,Ae[le+2]=255&oe,oe>>=8,Ae[le+3]=255&oe;var be=Vv+4|0;oe=1919906913,Ae[be]=255&oe,oe>>=8,Ae[be+1]=255&oe,oe>>=8,Ae[be+2]=255&oe,oe>>=8,Ae[be+3]=255&oe;var Bv=Se[y]+8|0;Se[y]=Bv}var A=(a+4|0)>>2,Hv=(Ae[Se[Se[A]+4>>2]]-97&255&255)<26;e:do if(Hv){var Kv=Me[cr],Yv=0==(0|Kv);do if(!Yv){var Gv=Me[y];if(Gv>>>0>=Me[g]>>>0)break;Se[y]=Gv+1|0,Ae[Kv+Gv|0]=32;break e}while(0);Y(r,32)}while(0);var Wv=Me[cr],Zv=0==(0|Wv);do{if(!Zv){var Qv=Me[y],qv=Me[A],$v=Me[qv+8>>2];if(($v+Qv|0)>>>0>Me[g]>>>0){var Jv=qv,rt=$v;break}var at=Wv+Qv|0,et=Se[qv+4>>2];Pa(at,et,$v,1);var it=Se[y]+Se[Se[A]+8>>2]|0;Se[y]=it;break r}var vt=Me[A],Jv=vt,rt=Se[vt+8>>2]}while(0);var rt,Jv,tt=Se[Jv+4>>2];Q(r,tt,rt);break r}if(41==(0|Ir)){var E=(r+8|0)>>2,ft=Me[E];if((ft+9|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str10180,9);else{for(var _t=Or+ft|0,ie=0|He.__str10180,ve=_t,te=ie+9;ie>2,ot=Me[p];if((ot+9|0)>>>0>Me[Er+3]>>>0)Q(r,0|He.__str10180,9);else{for(var lt=Or+ot|0,ie=0|He.__str10180,ve=lt,te=ie+9;ie>2],ct=42==(0|Se[ut>>2]);e:do if(ct){var w=(r+8|0)>>2,ht=Me[w],dt=r+12|0;ht>>>0>2]>>>0?(Se[w]=ht+1|0,Ae[Or+ht|0]=40):Y(r,40);var wt=Se[kt>>2];er(r,wt);var pt=Me[cr],Et=0==(0|pt);do if(!Et){var At=Me[w];if(At>>>0>=Me[dt>>2]>>>0)break;Se[w]=At+1|0,Ae[pt+At|0]=41;break e}while(0);Y(r,41)}else ir(r,ut);while(0);var gt=Me[cr],yt=0==(0|gt);do{if(!yt){var mt=r+8|0,St=Me[mt>>2];if(St>>>0>=Me[Er+3]>>>0){gr=232;break}Se[mt>>2]=St+1|0,Ae[gt+St|0]=40,gr=233;break}gr=232}while(0);232==gr&&Y(r,40);var Mt=Se[pr+2];H(r,Mt);var Ct=Me[cr],Rt=0==(0|Ct);do if(!Rt){var Tt=r+8|0,Ot=Me[Tt>>2];if(Ot>>>0>=Me[Er+3]>>>0)break;Se[Tt>>2]=Ot+1|0,Ae[Ct+Ot|0]=41;break r}while(0);Y(r,41);break r}if(44==(0|Ir)){var d=(a+8|0)>>2;if(45==(0|Se[Se[d]>>2])){var h=(a+4|0)>>2,Nt=Se[h],It=40==(0|Se[Nt>>2]);do if(It){var Pt=Se[Nt+4>>2];if(1!=(0|Se[Pt+8>>2]))break;if(Ae[Se[Pt+4>>2]]<<24>>24!=62)break;var Dt=r+8|0,Lt=Me[Dt>>2];Lt>>>0>>0?(Se[Dt>>2]=Lt+1|0,Ae[Or+Lt|0]=40):Y(r,40)}while(0);var Ft=Me[cr],Xt=0==(0|Ft);do{if(!Xt){var jt=r+8|0,Ut=Me[jt>>2];if(Ut>>>0>=Me[Er+3]>>>0){gr=248;break}Se[jt>>2]=Ut+1|0,Ae[Ft+Ut|0]=40,gr=249;break}gr=248}while(0);248==gr&&Y(r,40);var xt=Se[Se[d]+4>>2];H(r,xt);var zt=Me[cr],Vt=0==(0|zt);do{if(!Vt){var c=(r+8|0)>>2,Bt=Me[c];if((Bt+2|0)>>>0>Me[Er+3]>>>0){gr=252;break}var Ht=zt+Bt|0;oe=8233,Ae[Ht]=255&oe,oe>>=8,Ae[Ht+1]=255&oe;var Kt=Se[c]+2|0;Se[c]=Kt,gr=253;break}gr=252}while(0);252==gr&&Q(r,0|He.__str139,2);var Yt=Se[h];ir(r,Yt);var Gt=Me[cr],Wt=0==(0|Gt);do{if(!Wt){var u=(r+8|0)>>2,Zt=Me[u];if((Zt+2|0)>>>0>Me[Er+3]>>>0){gr=256;break}var Qt=Gt+Zt|0;oe=10272,Ae[Qt]=255&oe,oe>>=8,Ae[Qt+1]=255&oe;var qt=Se[u]+2|0;Se[u]=qt,gr=257;break}gr=256}while(0);256==gr&&Q(r,0|He.__str140,2);var $t=Se[Se[d]+8>>2];H(r,$t);var Jt=Me[cr],rf=0==(0|Jt);do{if(!rf){var af=r+8|0,ef=Me[af>>2];if(ef>>>0>=Me[Er+3]>>>0){gr=260;break}Se[af>>2]=ef+1|0,Ae[Jt+ef|0]=41,gr=261;break}gr=260}while(0);260==gr&&Y(r,41);var vf=Se[h];if(40!=(0|Se[vf>>2]))break r;var tf=Se[vf+4>>2];if(1!=(0|Se[tf+8>>2]))break r;if(Ae[Se[tf+4>>2]]<<24>>24!=62)break r;var ff=Me[cr],_f=0==(0|ff);do if(!_f){var sf=r+8|0,nf=Me[sf>>2];if(nf>>>0>=Me[Er+3]>>>0)break;Se[sf>>2]=nf+1|0,Ae[ff+nf|0]=41;break r}while(0);Y(r,41);break r}Z(r);break r}if(45==(0|Ir)){Z(r);break r}if(46==(0|Ir)){var of=a+4|0,k=(a+8|0)>>2,lf=Se[k],bf=47==(0|Se[lf>>2]);do if(bf){if(48!=(0|Se[Se[lf+8>>2]>>2]))break;var b=(r+8|0)>>2,kf=Me[b],l=(r+12|0)>>2;kf>>>0>>0?(Se[b]=kf+1|0,Ae[Or+kf|0]=40):Y(r,40);var uf=Se[Se[k]+4>>2];H(r,uf);var cf=Me[cr],hf=0==(0|cf);do{if(!hf){var df=Me[b];if((df+2|0)>>>0>Me[l]>>>0){gr=278;break}var wf=cf+df|0;oe=8233,Ae[wf]=255&oe,oe>>=8,Ae[wf+1]=255&oe;var pf=Se[b]+2|0;Se[b]=pf,gr=279;break}gr=278}while(0);278==gr&&Q(r,0|He.__str139,2);var Ef=Se[of>>2];ir(r,Ef);var Af=Me[cr],gf=0==(0|Af);do{if(!gf){var yf=Me[b];if((yf+2|0)>>>0>Me[l]>>>0){gr=282;break}var mf=Af+yf|0;oe=10272,Ae[mf]=255&oe,oe>>=8,Ae[mf+1]=255&oe;var Sf=Se[b]+2|0;Se[b]=Sf,gr=283;break}gr=282}while(0);282==gr&&Q(r,0|He.__str140,2);var Mf=Se[Se[Se[k]+8>>2]+4>>2];H(r,Mf);var Cf=Me[cr],Rf=0==(0|Cf);do{if(!Rf){var Tf=Me[b];if((Tf+5|0)>>>0>Me[l]>>>0){gr=286;break}var Of=Cf+Tf|0;Ae[Of]=Ae[0|He.__str141],Ae[Of+1]=Ae[(0|He.__str141)+1],Ae[Of+2]=Ae[(0|He.__str141)+2],Ae[Of+3]=Ae[(0|He.__str141)+3],Ae[Of+4]=Ae[(0|He.__str141)+4];var Nf=Se[b]+5|0;Se[b]=Nf,gr=287;break}gr=286}while(0);286==gr&&Q(r,0|He.__str141,5);var If=Se[Se[Se[k]+8>>2]+8>>2];H(r,If);var Pf=Me[cr],Df=0==(0|Pf);do if(!Df){var Lf=Me[b];if(Lf>>>0>=Me[l]>>>0)break;Se[b]=Lf+1|0,Ae[Pf+Lf|0]=41;break r}while(0);Y(r,41);break r}while(0);Z(r);break r}if(47==(0|Ir)||48==(0|Ir)){Z(r);break r}if(49==(0|Ir)||50==(0|Ir)){var Ff=a+4|0,Xf=Se[Ff>>2],jf=33==(0|Se[Xf>>2]);do{if(jf){var Uf=Me[Se[Xf+4>>2]+16>>2];if(1==(0|Uf)||2==(0|Uf)||3==(0|Uf)||4==(0|Uf)||5==(0|Uf)||6==(0|Uf)){var xf=a+8|0;if(0!=(0|Se[Se[xf>>2]>>2])){var zf=Uf;break}if(50==(0|Ir)){var Vf=r+8|0,Bf=Me[Vf>>2];Bf>>>0>>0?(Se[Vf>>2]=Bf+1|0,Ae[Or+Bf|0]=45):Y(r,45)}var Hf=Se[xf>>2];if(H(r,Hf),2==(0|Uf)){var Kf=Me[cr],Yf=0==(0|Kf);do if(!Yf){var Gf=r+8|0,Wf=Me[Gf>>2];if(Wf>>>0>=Me[Er+3]>>>0)break;Se[Gf>>2]=Wf+1|0,Ae[Kf+Wf|0]=117;break r}while(0);Y(r,117);break r}if(3==(0|Uf)){var Zf=Me[cr],Qf=0==(0|Zf);do if(!Qf){var qf=r+8|0,$f=Me[qf>>2];if($f>>>0>=Me[Er+3]>>>0)break;Se[qf>>2]=$f+1|0,Ae[Zf+$f|0]=108;break r}while(0);Y(r,108);break r}if(4==(0|Uf)){var Jf=Me[cr],r_=0==(0|Jf);do if(!r_){var o=(r+8|0)>>2,a_=Me[o];if((a_+2|0)>>>0>Me[Er+3]>>>0)break;var e_=Jf+a_|0;oe=27765,Ae[e_]=255&oe,oe>>=8,Ae[e_+1]=255&oe;var i_=Se[o]+2|0;Se[o]=i_;break r}while(0);Q(r,0|He.__str142,2);break r}if(5==(0|Uf)){var v_=Me[cr],t_=0==(0|v_);do if(!t_){var n=(r+8|0)>>2,f_=Me[n];if((f_+2|0)>>>0>Me[Er+3]>>>0)break;var __=v_+f_|0;oe=27756,Ae[__]=255&oe,oe>>=8,Ae[__+1]=255&oe;var s_=Se[n]+2|0;Se[n]=s_;break r}while(0);Q(r,0|He.__str143,2);break r}if(6==(0|Uf)){var n_=Me[cr],o_=0==(0|n_);do if(!o_){var s=(r+8|0)>>2,l_=Me[s];if((l_+3|0)>>>0>Me[Er+3]>>>0)break;var b_=n_+l_|0;Ae[b_]=Ae[0|He.__str144],Ae[b_+1]=Ae[(0|He.__str144)+1],Ae[b_+2]=Ae[(0|He.__str144)+2];var k_=Se[s]+3|0;Se[s]=k_;break r}while(0);Q(r,0|He.__str144,3);break r}break r}if(7==(0|Uf)){var _=Se[pr+2]>>2;if(0!=(0|Se[_])){var zf=7;break}if(!(1==(0|Se[_+2])&49==(0|Ir))){var zf=Uf;break}var u_=Ae[Se[_+1]]<<24>>24;if(48==(0|u_)){var f=(r+8|0)>>2,c_=Me[f];if((c_+5|0)>>>0>Me[Er+3]>>>0){Q(r,0|He.__str145,5);break r}var h_=Or+c_|0;Ae[h_]=Ae[0|He.__str145],Ae[h_+1]=Ae[(0|He.__str145)+1],Ae[h_+2]=Ae[(0|He.__str145)+2],Ae[h_+3]=Ae[(0|He.__str145)+3],Ae[h_+4]=Ae[(0|He.__str145)+4];var d_=Se[f]+5|0;Se[f]=d_;break r}if(49==(0|u_)){var t=(r+8|0)>>2,w_=Me[t];if((w_+4|0)>>>0>Me[Er+3]>>>0){Q(r,0|He.__str146,4);break r}var p_=Or+w_|0;oe=1702195828,Ae[p_]=255&oe,oe>>=8,Ae[p_+1]=255&oe,oe>>=8,Ae[p_+2]=255&oe,oe>>=8,Ae[p_+3]=255&oe;var E_=Se[t]+4|0;Se[t]=E_;break r}var zf=Uf;break}var zf=Uf;break}var zf=0}while(0);var zf,v=(r+8|0)>>2,A_=Me[v],i=(r+12|0)>>2;A_>>>0>>0?(Se[v]=A_+1|0,Ae[Or+A_|0]=40):Y(r,40);var g_=Se[Ff>>2];H(r,g_);var y_=Me[cr],m_=0==(0|y_);do{if(!m_){var S_=Me[v];if(S_>>>0>=Me[i]>>>0){gr=335;break}Se[v]=S_+1|0,Ae[y_+S_|0]=41,gr=336;break}gr=335}while(0);335==gr&&Y(r,41);var M_=50==(0|Se[Nr>>2]);e:do if(M_){var C_=Me[cr],R_=0==(0|C_);do if(!R_){var T_=Me[v];if(T_>>>0>=Me[i]>>>0)break;Se[v]=T_+1|0,Ae[C_+T_|0]=45;break e}while(0);Y(r,45)}while(0);if(8==(0|zf)){var O_=Me[cr],N_=0==(0|O_);do{if(!N_){var I_=Me[v];if(I_>>>0>=Me[i]>>>0){gr=345;break}Se[v]=I_+1|0,Ae[O_+I_|0]=91,gr=346;break}gr=345}while(0);345==gr&&Y(r,91);var P_=Se[pr+2];H(r,P_);var D_=Me[cr],L_=0==(0|D_);do if(!L_){var F_=Me[v];if(F_>>>0>=Me[i]>>>0)break;Se[v]=F_+1|0,Ae[D_+F_|0]=93;break r}while(0);Y(r,93);break r}var X_=Se[pr+2];H(r,X_);break r}Z(r);break r}}while(0);var e=(r+20|0)>>2,j_=Se[e],U_=0|Sr;Se[U_>>2]=j_,Se[e]=Sr,Se[Sr+4>>2]=a;var x_=Sr+8|0;Se[x_>>2]=0;var z_=Se[Er+4];Se[Sr+12>>2]=z_;var V_=Se[pr+1];H(r,V_),0==(0|Se[x_>>2])&&$(r,a);var B_=Se[U_>>2];Se[e]=B_}while(0);Oe=Ar}function K(r,a,e,i){var v=i>>2;Se[v]=r,Se[v+1]=r+e|0,Se[v+2]=a,Se[v+3]=r,Se[v+6]=e<<1,Se[v+5]=0,Se[v+9]=e,Se[v+8]=0,Se[v+10]=0,Se[v+11]=0,Se[v+12]=0}function Y(r,a){var e,i=r+4|0,v=Me[i>>2],t=0==(0|v);do if(!t){var e=(r+8|0)>>2,f=Me[e];if(f>>>0>2]>>>0)var _=v,s=f;else{tr(r,1);var n=Me[i>>2];if(0==(0|n))break;var _=n,s=Se[e]}var s,_;Ae[_+s|0]=255&a;var o=Se[e]+1|0;Se[e]=o}while(0)}function G(r,a,e,i){var v,t=i>>2,f=Oe;Oe+=4;var _=f,v=_>>2,s=0==(0|r);do if(s){if(0==(0|i)){var n=0;break}Se[t]=-3;var n=0}else{var o=0==(0|e);if(0!=(0|a)&o){if(0==(0|i)){var n=0;break}Se[t]=-3;var n=0}else{var l=W(r,_);if(0==(0|l)){if(0==(0|i)){var n=0;break}if(1==(0|Se[v])){Se[t]=-1;var n=0}else{Se[t]=-2;var n=0}}else{var b=0==(0|a);do if(b){if(o){var k=l;break}var u=Se[v];Se[e>>2]=u;var k=l}else{var c=Ca(l);if(c>>>0>2]>>>0){Ra(a,l);va(l);var k=a}else{va(a);var h=Se[v];Se[e>>2]=h;var k=l}}while(0);var k;if(0==(0|i)){var n=k;break}Se[t]=0;var n=k}}}while(0);var n;return Oe=f,n}function W(r,a){var e,i=Oe;Oe+=52;var v,t=i,e=t>>2;Se[a>>2]=0;var f=Ca(r),_=Ae[r]<<24>>24==95;do{if(_){if(Ae[r+1|0]<<24>>24==90){var s=0;v=13;break}v=3;break}v=3}while(0);do if(3==v){var n=Na(r,0|He.__str117,8);if(0!=(0|n)){var s=1;v=13;break}var o=Ae[r+8|0];if(o<<24>>24!=46&&o<<24>>24!=95&&o<<24>>24!=36){var s=1;v=13;break}var l=r+9|0,b=Ae[l];if(b<<24>>24!=68&&b<<24>>24!=73){ -var s=1;v=13;break}if(Ae[r+10|0]<<24>>24!=95){var s=1;v=13;break}var k=f+29|0,u=Jr(k);if(0==(0|u)){Se[a>>2]=1;var c=0;v=19;break}Ae[l]<<24>>24==73?Pa(u,0|He.__str118,30,1):Pa(u,0|He.__str119,29,1);var h=r+11|0,c=(Ia(u,h),u);v=19;break}while(0);if(13==v){var s;K(r,17,f,t);var d=Se[e+6],w=Ta(),p=Oe;Oe+=12*d,Oe=Oe+3>>2<<2;var E=Oe;if(Oe+=4*Se[e+9],Oe=Oe+3>>2<<2,Se[e+4]=p,Se[e+7]=E,s)var A=N(t),g=A;else var y=T(t,1),g=y;var g,m=Ae[Se[e+3]]<<24>>24==0?g:0,S=Se[e+12]+f+10*Se[e+10]|0;if(0==(0|m))var M=0;else var C=S/8+S|0,R=B(17,m,C,a),M=R;var M;Oa(w);var c=M}var c;return Oe=i,c}function Z(r){var a=r+4|0,e=Se[a>>2];va(e),Se[a>>2]=0}function Q(r,a,e){var i,v=r+4|0,t=Me[v>>2],f=0==(0|t);do if(!f){var i=(r+8|0)>>2,_=Me[i];if((_+e|0)>>>0>Me[r+12>>2]>>>0){tr(r,e);var s=Me[v>>2];if(0==(0|s))break;var n=s,o=Se[i]}else var n=t,o=_;var o,n;Pa(n+o|0,a,e,1);var l=Se[i]+e|0;Se[i]=l}while(0)}function q(r,a,e){var i,v,t=a+e|0,f=(0|e)>0;r:do if(f)for(var _=t,s=r+4|0,i=(r+8|0)>>2,n=r+12|0,o=a;;){var o,l=(_-o|0)>3;a:do{if(l){if(Ae[o]<<24>>24!=95){v=21;break}if(Ae[o+1|0]<<24>>24!=95){v=21;break}if(Ae[o+2|0]<<24>>24!=85){v=21;break}for(var b=o+3|0,k=0;;){var k,b;if(b>>>0>=t>>>0){v=21;break a}var u=ge[b],c=u<<24>>24;if((u-48&255&255)<10)var h=c-48|0;else if((u-65&255&255)<6)var h=c-55|0;else{if((u-97&255&255)>=6)break;var h=c-87|0}var h,b=b+1|0,k=(k<<4)+h|0}if(!(u<<24>>24==95&k>>>0<256)){v=21;break}var d=Me[s>>2],w=0==(0|d);do if(!w){var p=Me[i];if(p>>>0>=Me[n>>2]>>>0)break;Se[i]=p+1|0,Ae[d+p|0]=255&k;var E=b;v=25;break a}while(0);Y(r,k);var E=b;v=25;break}v=21}while(0);a:do if(21==v){var A=Me[s>>2],g=0==(0|A);do if(!g){var y=Me[i];if(y>>>0>=Me[n>>2]>>>0)break;var m=Ae[o];Se[i]=y+1|0,Ae[A+y|0]=m;var E=o;break a}while(0);var S=Ae[o]<<24>>24;Y(r,S);var E=o}while(0);var E,M=E+1|0;if(M>>>0>=t>>>0)break r;var o=M}while(0)}function $(r,a){var e,i,v,t,f,_,s,n=r>>2,o=Se[a>>2];r:do if(22==(0|o)||25==(0|o)){var l=Me[n+1],b=0==(0|l);do if(!b){var _=(r+8|0)>>2,k=Me[_];if((k+9|0)>>>0>Me[n+3]>>>0)break;for(var u=l+k|0,c=0|He.__str147,h=u,d=c+9;c>2,A=Me[f];if((A+9|0)>>>0>Me[n+3]>>>0)break;for(var g=p+A|0,c=0|He.__str148,h=g,d=c+9;c>2,M=Me[t];if((M+6|0)>>>0>Me[n+3]>>>0)break;var C=m+M|0;Ae[C]=Ae[0|He.__str149],Ae[C+1]=Ae[(0|He.__str149)+1],Ae[C+2]=Ae[(0|He.__str149)+2],Ae[C+3]=Ae[(0|He.__str149)+3],Ae[C+4]=Ae[(0|He.__str149)+4],Ae[C+5]=Ae[(0|He.__str149)+5];var R=Se[t]+6|0;Se[t]=R;break r}while(0);Q(r,0|He.__str149,6)}else if(28==(0|o)){var T=Me[n+1],O=0==(0|T);do{if(!O){var N=r+8|0,I=Me[N>>2];if(I>>>0>=Me[n+3]>>>0){s=17;break}Se[N>>2]=I+1|0,Ae[T+I|0]=32,s=18;break}s=17}while(0);17==s&&Y(r,32);var P=Se[a+8>>2];H(r,P)}else if(29==(0|o)){if(0!=(4&Se[n]|0))break;var D=Me[n+1],L=0==(0|D);do if(!L){var F=r+8|0,X=Me[F>>2];if(X>>>0>=Me[n+3]>>>0)break;Se[F>>2]=X+1|0,Ae[D+X|0]=42;break r}while(0);Y(r,42)}else if(30==(0|o)){var j=Me[n+1],U=0==(0|j);do if(!U){var x=r+8|0,z=Me[x>>2];if(z>>>0>=Me[n+3]>>>0)break;Se[x>>2]=z+1|0,Ae[j+z|0]=38;break r}while(0);Y(r,38)}else if(31==(0|o)){var V=Me[n+1],B=0==(0|V);do if(!B){var v=(r+8|0)>>2,K=Me[v];if((K+8|0)>>>0>Me[n+3]>>>0)break;var G=V+K|0,W=0|G;oe=1886220131,Ae[W]=255&oe,oe>>=8,Ae[W+1]=255&oe,oe>>=8,Ae[W+2]=255&oe,oe>>=8,Ae[W+3]=255&oe;var Z=G+4|0;oe=544761196,Ae[Z]=255&oe,oe>>=8,Ae[Z+1]=255&oe,oe>>=8,Ae[Z+2]=255&oe,oe>>=8,Ae[Z+3]=255&oe;var q=Se[v]+8|0;Se[v]=q;break r}while(0);Q(r,0|He.__str150,8)}else if(32==(0|o)){var $=Me[n+1],J=0==(0|$);do if(!J){var i=(r+8|0)>>2,rr=Me[i];if((rr+10|0)>>>0>Me[n+3]>>>0)break;for(var ar=$+rr|0,c=0|He.__str151,h=ar,d=c+10;c>2],tr=0==(0|vr);do{if(!tr){var fr=r+8|0,_r=Me[fr>>2];if(0!=(0|_r)&&Ae[vr+(_r-1)|0]<<24>>24==40){s=42;break}if(_r>>>0>=Me[n+3]>>>0){s=41;break}Se[fr>>2]=_r+1|0,Ae[vr+_r|0]=32,s=42;break}s=41}while(0);41==s&&Y(r,32);var sr=Se[a+4>>2];H(r,sr);var nr=Me[ir>>2],or=0==(0|nr);do if(!or){var e=(r+8|0)>>2,lr=Me[e];if((lr+3|0)>>>0>Me[n+3]>>>0)break;var br=nr+lr|0;Ae[br]=Ae[0|He.__str135],Ae[br+1]=Ae[(0|He.__str135)+1],Ae[br+2]=Ae[(0|He.__str135)+2];var kr=Se[e]+3|0;Se[e]=kr;break r}while(0);Q(r,0|He.__str135,3)}else if(3==(0|o)){var ur=Se[a+4>>2];H(r,ur)}else H(r,a);while(0)}function J(r){var a=r+20|0,e=Se[a>>2];if((0|e)<(0|Se[r+24>>2])){var i=Se[r+16>>2]+12*e|0,v=e+1|0;Se[a>>2]=v;var t=i}else var t=0;var t;return t}function rr(r,a,e){var i,v,t,f,_=r>>2,s=e,t=s>>2,n=0;r:for(;;){var n,s,o=0==(0|s);do if(!o){if(0!=(0|Se[t+2]))break;var l=Se[Se[t+1]>>2];if(29==(0|l)||30==(0|l)){f=9;break r}if(22==(0|l)||23==(0|l)||24==(0|l)||28==(0|l)||31==(0|l)||32==(0|l)||37==(0|l)){var b=Se[_+1];f=12;break r}var s=Se[t],t=s>>2,n=1;continue r}while(0);if(0!=(0|Se[a+4>>2])&0==(0|n)){f=9;break}var k=0,u=r+4|0,v=u>>2;f=22;break}do if(9==f){var c=Se[_+1];if(0==(0|c)){f=17;break}var h=Se[_+2];if(0==(0|h)){var d=c;f=13;break}var w=Ae[c+(h-1)|0];if(w<<24>>24==40||w<<24>>24==42){f=18;break}var b=c;f=12;break}while(0);do if(12==f){var b;if(0==(0|b)){f=17;break}var d=b;f=13;break}while(0);do if(13==f){var d,p=r+8|0,E=Me[p>>2];if(0!=(0|E)&&Ae[d+(E-1)|0]<<24>>24==32){f=18;break}if(E>>>0>=Me[_+3]>>>0){f=17;break}Se[p>>2]=E+1|0,Ae[d+E|0]=32,f=18;break}while(0);do if(17==f){Y(r,32),f=18;break}while(0);r:do if(18==f){var A=r+4|0,g=Me[A>>2],y=0==(0|g);do if(!y){var m=r+8|0,S=Me[m>>2];if(S>>>0>=Me[_+3]>>>0)break;Se[m>>2]=S+1|0,Ae[g+S|0]=40;var k=1,u=A,v=u>>2;break r}while(0);Y(r,40);var k=1,u=A,v=u>>2}while(0);var u,k,i=(r+20|0)>>2,M=Se[i];Se[i]=0,vr(r,e,0);r:do if(k){var C=Me[v],R=0==(0|C);do if(!R){var T=r+8|0,O=Me[T>>2];if(O>>>0>=Me[_+3]>>>0)break;Se[T>>2]=O+1|0,Ae[C+O|0]=41;break r}while(0);Y(r,41)}while(0);var N=Me[v],I=0==(0|N);do{if(!I){var P=r+8|0,D=Me[P>>2];if(D>>>0>=Me[_+3]>>>0){f=30;break}Se[P>>2]=D+1|0,Ae[N+D|0]=40,f=31;break}f=30}while(0);30==f&&Y(r,40);var L=Se[a+8>>2];0!=(0|L)&&H(r,L);var F=Me[v],X=0==(0|F);do{if(!X){var j=r+8|0,U=Me[j>>2];if(U>>>0>=Me[_+3]>>>0){f=36;break}Se[j>>2]=U+1|0,Ae[F+U|0]=41,f=37;break}f=36}while(0);36==f&&Y(r,41),vr(r,e,1),Se[i]=M}function ar(r,a,e){var i,v,t,f=r>>2,_=0==(0|e);do{if(!_){var s=e,v=s>>2;r:for(;;){var s;if(0==(0|s)){var n=1;t=14;break}if(0==(0|Se[v+2])){var o=36==(0|Se[Se[v+1]>>2]),l=1&o^1;if(o){var n=l;t=14;break}var b=r+4|0,k=Me[b>>2],u=0==(0|k);do{if(!u){var i=(r+8|0)>>2,c=Me[i];if((c+2|0)>>>0>Me[f+3]>>>0){t=9;break}var h=k+c|0;oe=10272,Ae[h]=255&oe,oe>>=8,Ae[h+1]=255&oe;var d=Se[i]+2|0;Se[i]=d,vr(r,e,0),t=10;break}t=9}while(0);9==t&&(Q(r,0|He.__str140,2),vr(r,e,0));var w=Me[b>>2],p=0==(0|w);do if(!p){var E=r+8|0,A=Me[E>>2];if(A>>>0>=Me[f+3]>>>0)break;Se[E>>2]=A+1|0,Ae[w+A|0]=41;var g=l;t=15;break r}while(0);Y(r,41);var g=l;t=15;break}var s=Se[v],v=s>>2}if(14==t){var n;vr(r,e,0);var g=n}var g;if(0!=(0|g)){t=17;break}var y=r+4|0;t=21;break}t=17}while(0);r:do if(17==t){var m=r+4|0,S=Me[m>>2],M=0==(0|S);do if(!M){var C=r+8|0,R=Me[C>>2];if(R>>>0>=Me[f+3]>>>0)break;Se[C>>2]=R+1|0,Ae[S+R|0]=32;var y=m;break r}while(0);Y(r,32);var y=m}while(0);var y,T=Me[y>>2],O=0==(0|T);do{if(!O){var N=r+8|0,I=Me[N>>2];if(I>>>0>=Me[f+3]>>>0){t=24;break}Se[N>>2]=I+1|0,Ae[T+I|0]=91,t=25;break}t=24}while(0);24==t&&Y(r,91);var P=Se[a+4>>2];0!=(0|P)&&H(r,P);var D=Me[y>>2],L=0==(0|D);do{if(!L){var F=r+8|0,X=Me[F>>2];if(X>>>0>=Me[f+3]>>>0){t=30;break}Se[F>>2]=X+1|0,Ae[D+X|0]=93,t=31;break}t=30}while(0);30==t&&Y(r,93)}function er(r,a){var e,i,v,t,f,_,s=Oe;Oe+=8;var n,o=s,_=(a+4|0)>>2,l=Se[_];if(4==(0|Se[l>>2])){var f=(r+20|0)>>2,b=Se[f];Se[f]=0;var t=(r+16|0)>>2,k=Se[t],u=0|o;Se[u>>2]=k,Se[t]=o;var c=Se[_];Se[o+4>>2]=c;var h=Se[c+4>>2];H(r,h);var d=Se[u>>2];Se[t]=d;var v=(r+4|0)>>2,w=Me[v],p=0==(0|w);do{if(!p){var i=(r+8|0)>>2,E=Me[i],A=0==(0|E);do if(!A){if(Ae[w+(E-1)|0]<<24>>24!=60)break;E>>>0>2]>>>0?(Se[i]=E+1|0,Ae[w+E|0]=32):Y(r,32)}while(0);var g=Me[v];if(0==(0|g)){n=12;break}var y=Me[i];if(y>>>0>=Me[r+12>>2]>>>0){n=12;break}Se[i]=y+1|0,Ae[g+y|0]=60,n=13;break}n=12}while(0);12==n&&Y(r,60);var m=Se[Se[_]+8>>2];H(r,m);var S=Me[v],M=0==(0|S);do{if(!M){var e=(r+8|0)>>2,C=Me[e],R=0==(0|C);do if(!R){if(Ae[S+(C-1)|0]<<24>>24!=62)break;C>>>0>2]>>>0?(Se[e]=C+1|0,Ae[S+C|0]=32):Y(r,32)}while(0);var T=Me[v];if(0==(0|T)){n=22;break}var O=Me[e];if(O>>>0>=Me[r+12>>2]>>>0){n=22;break}Se[e]=O+1|0,Ae[T+O|0]=62,n=23;break}n=22}while(0);22==n&&Y(r,62),Se[f]=b}else H(r,l);Oe=s}function ir(r,a){var e,i=40==(0|Se[a>>2]);r:do if(i){var v=Me[r+4>>2],t=0==(0|v);do{if(!t){var e=(r+8|0)>>2,f=Me[e],_=a+4|0,s=Me[_>>2],n=Me[s+8>>2];if((n+f|0)>>>0>Me[r+12>>2]>>>0){var o=s,l=n;break}var b=v+f|0,k=Se[s+4>>2];Pa(b,k,n,1);var u=Se[e]+Se[Se[_>>2]+8>>2]|0;Se[e]=u;break r}var c=Me[a+4>>2],o=c,l=Se[c+8>>2]}while(0);var l,o,h=Se[o+4>>2];Q(r,h,l)}else H(r,a);while(0)}function vr(r,a,e){var i,v,t,f,_,f=(r+4|0)>>2,s=0==(0|e),t=(r+16|0)>>2;r:do if(s)for(var n=a;;){var n;if(0==(0|n)){_=29;break r}if(0==(0|Se[f])){_=29;break r}var o=n+8|0,l=0==(0|Se[o>>2]);do if(l){var b=n+4|0;if((Se[Se[b>>2]>>2]-25|0)>>>0<3)break;Se[o>>2]=1;var k=Me[t],u=Se[n+12>>2];Se[t]=u;var c=Me[b>>2],h=Se[c>>2];if(35==(0|h)){var d=n,w=k,p=c;_=14;break r}if(36==(0|h)){var E=n,A=k,g=c;_=15;break r}if(2==(0|h)){var y=k,m=b;_=16;break r}$(r,c),Se[t]=k}while(0);var n=Se[n>>2]}else for(var S=a;;){var S;if(0==(0|S)){_=29;break r}if(0==(0|Se[f])){_=29;break r}var M=S+8|0;if(0==(0|Se[M>>2])){Se[M>>2]=1;var C=Me[t],R=Se[S+12>>2];Se[t]=R;var T=S+4|0,O=Me[T>>2],N=Se[O>>2];if(35==(0|N)){var d=S,w=C,p=O;_=14;break r}if(36==(0|N)){var E=S,A=C,g=O;_=15;break r}if(2==(0|N)){var y=C,m=T;_=16;break r}$(r,O),Se[t]=C}var S=Se[S>>2]}while(0);if(14==_){var p,w,d,I=Se[d>>2];rr(r,p,I),Se[t]=w}else if(15==_){var g,A,E,P=Se[E>>2];ar(r,g,P),Se[t]=A}else if(16==_){var m,y,v=(r+20|0)>>2,D=Se[v];Se[v]=0;var L=Se[Se[m>>2]+4>>2];H(r,L),Se[v]=D;var F=0==(4&Se[r>>2]|0),X=Me[f],j=0!=(0|X);r:do if(F){do if(j){var i=(r+8|0)>>2,U=Me[i];if((U+2|0)>>>0>Me[r+12>>2]>>>0)break;var x=X+U|0;oe=14906,Ae[x]=255&oe,oe>>=8,Ae[x+1]=255&oe;var z=Se[i]+2|0;Se[i]=z;break r}while(0);Q(r,0|He.__str120,2)}else{do if(j){var V=r+8|0,B=Me[V>>2];if(B>>>0>=Me[r+12>>2]>>>0)break;Se[V>>2]=B+1|0,Ae[X+B|0]=46;break r}while(0);Y(r,46)}while(0);var K=Me[Se[m>>2]+8>>2],G=(Se[K>>2]-25|0)>>>0<3;r:do if(G)for(var W=K;;){var W,Z=Me[W+4>>2];if((Se[Z>>2]-25|0)>>>0>=3){var q=Z;break r}var W=Z}else var q=K;while(0);var q;H(r,q),Se[t]=y}}function tr(r,a){var e,e=(r+4|0)>>2,i=Se[e],v=0==(0|i);r:do if(!v){for(var t=Se[r+8>>2]+a|0,f=r+12|0,_=Se[f>>2],s=i;;){var s,_;if(t>>>0<=_>>>0)break r;var n=_<<1,o=fa(s,n);if(0==(0|o))break;Se[e]=o,Se[f>>2]=n;var _=n,s=o}var l=Se[e];va(l),Se[e]=0,Se[r+24>>2]=1}while(0)}function fr(r,a,e){var i,v=J(r),i=v>>2;return 0!=(0|v)&&(Se[i]=21,Se[i+1]=a,Se[i+2]=e),v}function _r(r){var a,a=(r+12|0)>>2,e=Se[a],i=Ae[e]<<24>>24;if(88==(0|i)){var v=e+1|0;Se[a]=v;var t=nr(r),f=Se[a],_=f+1|0;Se[a]=_;var s=Ae[f]<<24>>24==69?t:0,n=s}else if(76==(0|i))var o=or(r),n=o;else var l=N(r),n=l;var n;return n}function sr(r){var a,a=(r+12|0)>>2,e=Se[a],i=Ae[e];if(i<<24>>24==110){var v=e+1|0;Se[a]=v;var t=1,f=Ae[v],_=v}else var t=0,f=i,_=e;var _,f,t,s=(f-48&255&255)<10;r:do if(s)for(var n=f,o=0,l=_;;){var l,o,n,b=(n<<24>>24)-48+10*o|0,k=l+1|0;Se[a]=k;var u=ge[k];if((u-48&255&255)>=10){var c=b;break r}var n=u,o=b,l=k}else var c=0;while(0);var c,h=0==(0|t)?c:0|-c;return h}function nr(r){var a,e,a=(r+12|0)>>2,i=Se[a],v=Ae[i];do{if(v<<24>>24==76){var t=or(r),f=t;e=21;break}if(v<<24>>24==84){var _=x(r),f=_;e=21;break}if(v<<24>>24==115){if(Ae[i+1|0]<<24>>24!=114){e=8;break}var s=i+2|0;Se[a]=s;var n=N(r),o=br(r);if(Ae[Se[a]]<<24>>24==73){var l=z(r),b=D(r,4,o,l),k=D(r,1,n,b),f=k;e=21;break}var u=D(r,1,n,o),f=u;e=21;break}e=8}while(0);r:do if(8==e){var c=kr(r);if(0==(0|c)){var f=0;break}var h=0|c,d=Se[h>>2],w=40==(0|d);do{if(w){var p=c+4|0,E=r+48|0,A=Se[Se[p>>2]+8>>2]-2+Se[E>>2]|0;Se[E>>2]=A;var g=Se[h>>2];if(40!=(0|g)){var y=g;e=13;break}var m=Se[p>>2],S=Se[m>>2],M=Da(S,0|He.__str90);if(0!=(0|M)){var C=m;e=15;break}var R=N(r),T=D(r,43,c,R),f=T;break r}var y=d;e=13}while(0);do if(13==e){var y;if(40==(0|y)){var C=Se[c+4>>2];e=15;break}if(41==(0|y)){var O=c+4|0;e=17;break}if(42==(0|y)){e=18;break}var f=0;break r}while(0);do if(15==e){var C,O=C+12|0;e=17;break}while(0);do if(17==e){var O,I=Se[O>>2];if(1==(0|I))break;if(2==(0|I)){var P=nr(r),L=nr(r),F=D(r,45,P,L),X=D(r,44,c,F);return X}if(3==(0|I)){var j=nr(r),U=nr(r),V=nr(r),B=D(r,48,U,V),H=D(r,47,j,B),K=D(r,46,c,H);return K}var f=0;break r}while(0);var Y=nr(r),G=D(r,43,c,Y);return G}while(0);var f;return f}function or(r){var a,a=(r+12|0)>>2,e=Se[a],i=e+1|0;Se[a]=i;var v=Ae[e]<<24>>24==76;r:do if(v){if(Ae[i]<<24>>24==95)var t=T(r,0),f=t;else{var _=N(r);if(0==(0|_)){var s=0;break}var n=33==(0|Se[_>>2]);do if(n){var o=Se[_+4>>2];if(0==(0|Se[o+16>>2]))break;var l=r+48|0,b=Se[l>>2]-Se[o+4>>2]|0;Se[l>>2]=b}while(0);var k=Se[a];if(Ae[k]<<24>>24==110){var u=k+1|0;Se[a]=u;var c=50,h=u}else var c=49,h=k;for(var h,c,d=h;;){var d,w=Ae[d];if(w<<24>>24==69)break;if(w<<24>>24==0){var s=0;break r}var p=d+1|0;Se[a]=p;var d=p}var E=lr(r,h,d-h|0),A=D(r,c,_,E),f=A}var f,g=Se[a],y=g+1|0;Se[a]=y;var m=Ae[g]<<24>>24==69?f:0,s=m}else var s=0;while(0);var s;return s}function lr(r,a,e){var i=J(r),v=m(i,a,e),t=0==(0|v)?0:i;return t}function br(r){var a=r+12|0,e=Me[a>>2],i=ge[e],v=(i-48&255&255)<10;do if(v)var t=L(r),f=t;else if((i-97&255&255)<26){var _=kr(r);if(0==(0|_)){var f=0;break}if(40!=(0|Se[_>>2])){var f=_;break}var s=r+48|0,n=Se[Se[_+4>>2]+8>>2]+Se[s>>2]+7|0;Se[s>>2]=n;var f=_}else if(i<<24>>24==67||i<<24>>24==68)var o=hr(r),f=o;else{if(i<<24>>24!=76){var f=0;break}Se[a>>2]=e+1|0;var l=L(r);if(0==(0|l)){var f=0;break}var b=dr(r),k=0==(0|b)?0:l,f=k}while(0);var f;return f}function kr(r){var a,e,a=(r+12|0)>>2,i=Se[a],v=i+1|0;Se[a]=v;var t=ge[i],f=i+2|0;Se[a]=f;var _=ge[v];do{if(t<<24>>24==118){if((_-48&255&255)>=10){var s=49,n=0;e=6;break}var o=(_<<24>>24)-48|0,l=L(r),b=ur(r,o,l),k=b;e=14;break}if(t<<24>>24==99){if(_<<24>>24!=118){var s=49,n=0;e=6;break}var u=N(r),c=D(r,42,u,0),k=c;e=14;break}var s=49,n=0;e=6}while(0);r:do if(6==e){for(;;){var n,s,h=(s-n)/2+n|0,d=(h<<4)+ri|0,w=Se[d>>2],p=Ae[w],E=t<<24>>24==p<<24>>24;if(E&&_<<24>>24==Ae[w+1|0]<<24>>24)break;var A=t<<24>>24>24;do if(A)var g=h,y=n;else{if(E&&_<<24>>24>24){var g=h,y=n;break}var g=s,y=h+1|0}while(0);var y,g;if((0|y)==(0|g)){var k=0;break r}var s=g,n=y}var m=cr(r,d),k=m}while(0);var k;return k}function ur(r,a,e){var i=J(r),v=S(i,a,e),t=0==(0|v)?0:i;return t}function cr(r,a){var e=J(r);return 0!=(0|e)&&(Se[e>>2]=40,Se[e+4>>2]=a),e}function hr(r){var a,e,i=Se[r+44>>2],e=i>>2,v=0==(0|i);do if(!v){var t=Se[e];if(0==(0|t)){var f=r+48|0,_=Se[f>>2]+Se[e+2]|0;Se[f>>2]=_}else{if(21!=(0|t))break;var s=r+48|0,n=Se[s>>2]+Se[e+2]|0;Se[s>>2]=n}}while(0);var a=(r+12|0)>>2,o=Se[a],l=o+1|0;Se[a]=l;var b=Ae[o]<<24>>24;do if(67==(0|b)){var k=o+2|0;Se[a]=k;var u=Ae[l]<<24>>24;if(49==(0|u))var c=1;else if(50==(0|u))var c=2;else{if(51!=(0|u)){var h=0;break}var c=3}var c,d=wr(r,c,i),h=d}else if(68==(0|b)){var w=o+2|0;Se[a]=w;var p=Ae[l]<<24>>24;if(48==(0|p))var E=1;else if(49==(0|p))var E=2;else{if(50!=(0|p)){var h=0;break}var E=3}var E,A=pr(r,E,i),h=A}else var h=0;while(0);var h;return h}function dr(r){var a=r+12|0,e=Se[a>>2];if(Ae[e]<<24>>24==95){var i=e+1|0;Se[a>>2]=i;var v=sr(r),t=v>>>31^1}else var t=1;var t;return t}function wr(r,a,e){var i=J(r),v=M(i,a,e),t=0==(0|v)?0:i;return t}function pr(r,a,e){var i=J(r),v=C(i,a,e),t=0==(0|v)?0:i;return t}function Er(r,a){var e=J(r);return 0!=(0|e)&&(Se[e>>2]=5,Se[e+4>>2]=a),e}function Ar(r){var a,a=(r+12|0)>>2,e=Se[a],i=Ae[e]<<24>>24;do if(78==(0|i))var v=gr(r),t=v;else if(90==(0|i))var f=yr(r),t=f;else if(76==(0|i))var _=br(r),t=_;else if(83==(0|i)){if(Ae[e+1|0]<<24>>24==116){var s=e+2|0;Se[a]=s;var n=lr(r,0|He.__str152,3),o=br(r),l=D(r,1,n,o),b=r+48|0,k=Se[b>>2]+3|0;Se[b>>2]=k;var u=0,c=l}else var h=V(r,0),u=1,c=h;var c,u;if(Ae[Se[a]]<<24>>24!=73){var t=c;break}if(0==(0|u)){var d=R(r,c);if(0==(0|d)){var t=0;break}}var w=z(r),p=D(r,4,c,w),t=p}else{var E=br(r);if(Ae[Se[a]]<<24>>24!=73){var t=E;break}var A=R(r,E);if(0==(0|A)){var t=0;break}var g=z(r),y=D(r,4,E,g),t=y}while(0);var t;return t}function gr(r){var a,e=Oe;Oe+=4;var i=e,a=(r+12|0)>>2,v=Se[a],t=v+1|0;Se[a]=t;var f=Ae[v]<<24>>24==78;do if(f){var _=I(r,i,1);if(0==(0|_)){var s=0;break}var n=mr(r);if(Se[_>>2]=n,0==(0|n)){var s=0;break}var o=Se[a],l=o+1|0;if(Se[a]=l,Ae[o]<<24>>24!=69){var s=0;break}var s=Se[i>>2]}else var s=0;while(0);var s;return Oe=e,s}function yr(r){var a,a=(r+12|0)>>2,e=Se[a],i=e+1|0;Se[a]=i;var v=Ae[e]<<24>>24==90;do if(v){var t=O(r,0),f=Se[a],_=f+1|0;if(Se[a]=_,Ae[f]<<24>>24!=69){var s=0;break}if(Ae[_]<<24>>24==115){var n=f+2|0;Se[a]=n;var o=dr(r);if(0==(0|o)){var s=0;break}var l=lr(r,0|He.__str168,14),b=D(r,2,t,l),s=b}else{var k=Ar(r),u=dr(r);if(0==(0|u)){var s=0;break}var c=D(r,2,t,k),s=c}}else var s=0;while(0);var s;return s}function mr(r){var a,e=r+12|0,i=0;r:for(;;){var i,v=ge[Se[e>>2]];if(v<<24>>24==0){var t=0;break}var f=(v-48&255&255)<10|(v-97&255&255)<26;do{if(!f){if(v<<24>>24==76||v<<24>>24==68||v<<24>>24==67){a=5;break}if(v<<24>>24==83){var _=V(r,1),s=_;a=10;break}if(v<<24>>24==73){if(0==(0|i)){var t=0;break r}var n=z(r),o=4,l=n;a=11;break}if(v<<24>>24==84){var b=x(r),s=b;a=10;break}if(v<<24>>24==69){var t=i;break r}var t=0;break r}a=5}while(0);do if(5==a){var k=br(r),s=k;a=10;break}while(0);do if(10==a){var s;if(0==(0|i)){var u=s;a=12;break}var o=1,l=s;a=11;break}while(0);if(11==a)var l,o,c=D(r,o,i,l),u=c;var u;if(v<<24>>24!=83)if(Ae[Se[e>>2]]<<24>>24!=69){var h=R(r,u);if(0==(0|h)){var t=0;break}var i=u}else var i=u;else var i=u}var t;return t}function Sr(r,a){var e,i,v=Oe;Oe+=4;var t=v,i=t>>2,e=(r+12|0)>>2,f=Se[e];if(Ae[f]<<24>>24==74){var _=f+1|0;Se[e]=_;var s=1}else var s=a;var s;Se[i]=0;var n=s,o=0,l=t;r:for(;;)for(var l,o,n,b=n,k=o;;){var k,b,u=Ae[Se[e]];if(u<<24>>24==0||u<<24>>24==69){var c=Se[i];if(0==(0|c)){var h=0;break r}var d=0==(0|Se[c+8>>2]);do if(d){var w=Se[c+4>>2];if(33!=(0|Se[w>>2])){var p=c;break}var E=Se[w+4>>2];if(9!=(0|Se[E+16>>2])){var p=c;break}var A=r+48|0,g=Se[A>>2]-Se[E+4>>2]|0;Se[A>>2]=g,Se[i]=0;var p=0}else var p=c;while(0);var p,y=D(r,35,k,p),h=y;break r}var m=N(r);if(0==(0|m)){var h=0;break r}if(0==(0|b)){var S=D(r,38,m,0);if(Se[l>>2]=S,0==(0|S)){var h=0;break r}var n=0,o=k,l=S+8|0;continue r}var b=0,k=m}var h;return Oe=v,h}function Mr(r){for(var a=r;;){var a;if(0==(0|a)){var e=0;break}var i=Se[a>>2];if(1!=(0|i)&&2!=(0|i)){if(6==(0|i)||7==(0|i)||42==(0|i)){var e=1;break}var e=0;break}var a=Se[a+8>>2]}var e;return e}function Cr(r){var a=r>>2;Se[a+3]=0,Se[a+2]=0,Se[a+1]=0,Se[a]=0,Se[a+4]=0}function Rr(r,a){var e,e=(r+12|0)>>2,i=Se[e],v=(Se[r+4>>2]-i|0)<(0|a);r:do if(v)var t=0;else{var f=i+a|0;Se[e]=f;var _=0==(4&Se[r+8>>2]|0);do if(!_){if(Ae[f]<<24>>24!=36)break;var s=a+(i+1)|0;Se[e]=s}while(0);var n=(0|a)>9;do if(n){var o=La(i,0|He.__str117,8);if(0!=(0|o))break;var l=Ae[i+8|0];if(l<<24>>24!=46&&l<<24>>24!=95&&l<<24>>24!=36)break;if(Ae[i+9|0]<<24>>24!=78)break;var b=r+48|0,k=22-a+Se[b>>2]|0;Se[b>>2]=k;var u=lr(r,0|He.__str169,21),t=u;break r}while(0);var c=lr(r,i,a),t=c}while(0);var t;return t}function Tr(r){var a,e,e=(r+48|0)>>2,i=Se[e],v=i+20|0;Se[e]=v;var a=(r+12|0)>>2,t=Se[a],f=t+1|0;Se[a]=f;var _=Ae[t];do if(_<<24>>24==84){var s=t+2|0;Se[a]=s;var n=Ae[f]<<24>>24;if(86==(0|n)){var o=i+15|0;Se[e]=o;var l=N(r),b=D(r,8,l,0),k=b}else if(84==(0|n)){var u=i+10|0;Se[e]=u;var c=N(r),h=D(r,9,c,0),k=h}else if(73==(0|n))var d=N(r),w=D(r,11,d,0),k=w;else if(83==(0|n))var p=N(r),E=D(r,12,p,0),k=E;else if(104==(0|n)){var A=Nr(r,104);if(0==(0|A)){var k=0;break}var g=O(r,0),y=D(r,14,g,0),k=y}else if(118==(0|n)){var m=Nr(r,118);if(0==(0|m)){var k=0;break}var S=O(r,0),M=D(r,15,S,0),k=M}else if(99==(0|n)){var C=Nr(r,0);if(0==(0|C)){var k=0;break}var R=Nr(r,0);if(0==(0|R)){var k=0;break}var T=O(r,0),I=D(r,16,T,0),k=I}else if(67==(0|n)){var P=N(r),L=sr(r);if((0|L)<0){var k=0;break}var F=Se[a],X=F+1|0;if(Se[a]=X,Ae[F]<<24>>24!=95){var k=0;break}var j=N(r),U=Se[e]+5|0;Se[e]=U;var x=D(r,10,j,P),k=x}else if(70==(0|n))var z=N(r),V=D(r,13,z,0),k=V;else{if(74!=(0|n)){var k=0;break}var B=N(r),H=D(r,17,B,0),k=H}}else if(_<<24>>24==71){var K=t+2|0;Se[a]=K;var Y=Ae[f]<<24>>24;if(86==(0|Y))var G=Ar(r),W=D(r,18,G,0),k=W;else if(82==(0|Y))var Z=Ar(r),Q=D(r,19,Z,0),k=Q;else{if(65!=(0|Y)){var k=0;break}var q=O(r,0),$=D(r,20,q,0),k=$}}else var k=0;while(0);var k;return k}function Or(r){for(var a,e=r,a=e>>2;;){var e;if(0==(0|e)){var i=0;break}var v=Se[a];if(4==(0|v)){var t=Se[a+1],f=Mr(t),i=0==(0|f)&1;break}if(25!=(0|v)&&26!=(0|v)&&27!=(0|v)){var i=0;break}var e=Se[a+1],a=e>>2}var i;return i}function Nr(r,a){var e;if(0==(0|a)){var i=r+12|0,v=Se[i>>2],t=v+1|0;Se[i>>2]=t;var f=Ae[v]<<24>>24}else var f=a;var f;do{if(104==(0|f)){var _=(sr(r),r+12|0);e=7;break}if(118==(0|f)){var s=(sr(r),r+12|0),n=Se[s>>2],o=n+1|0;if(Se[s>>2]=o,Ae[n]<<24>>24!=95){var l=0;e=8;break}var _=(sr(r),s);e=7;break}var l=0;e=8}while(0);if(7==e){var _,b=Se[_>>2],k=b+1|0;Se[_>>2]=k;var l=Ae[b]<<24>>24==95&1}var l;return l}function Ir(r){var a,e,i=r>>2,v=Oe;Oe+=56;var t,f=v,_=v+8,s=v+16,n=v+36,e=(0|r)>>2,o=Se[e],l=0==(8192&o|0);r:do{if(l){var a=(r+12|0)>>2,b=Se[a];if(Ae[b]<<24>>24!=63){var k=0;t=111;break}var u=b+1|0;Se[a]=u;var c=Ae[u];do if(c<<24>>24==63){if(Ae[b+2|0]<<24>>24==36){var h=b+3|0;if(Ae[h]<<24>>24!=63){var d=5;t=90;break}Se[a]=h;var w=6,p=h}else var w=0,p=u;var p,w,E=p+1|0;Se[a]=E;var A=Ae[E]<<24>>24;do if(48==(0|A)){var g=1;t=81}else{if(49==(0|A)){var g=2;t=81;break}if(50!=(0|A)){if(51==(0|A)){var y=0|He.__str2172,m=E;t=82;break}if(52==(0|A)){var y=0|He.__str3173,m=E;t=82;break}if(53==(0|A)){var y=0|He.__str4174,m=E;t=82;break}if(54==(0|A)){var y=0|He.__str5175,m=E;t=82;break}if(55==(0|A)){var y=0|He.__str6176,m=E;t=82;break}if(56==(0|A)){var y=0|He.__str7177,m=E;t=82;break}if(57==(0|A)){var y=0|He.__str8178,m=E;t=82;break}if(65==(0|A)){var y=0|He.__str9179,m=E;t=82;break}if(66==(0|A)){Se[a]=p+2|0;var S=0|He.__str10180,M=3;t=88;break}if(67==(0|A)){var y=0|He.__str11181,m=E;t=82;break}if(68==(0|A)){var y=0|He.__str12182,m=E;t=82;break}if(69==(0|A)){var y=0|He.__str13183,m=E;t=82;break}if(70==(0|A)){var y=0|He.__str14184,m=E;t=82;break}if(71==(0|A)){var y=0|He.__str15185,m=E;t=82;break}if(72==(0|A)){var y=0|He.__str16186,m=E;t=82;break}if(73==(0|A)){var y=0|He.__str17187,m=E;t=82;break}if(74==(0|A)){var y=0|He.__str18188,m=E;t=82;break}if(75==(0|A)){var y=0|He.__str19189,m=E;t=82;break}if(76==(0|A)){var y=0|He.__str20190,m=E;t=82;break}if(77==(0|A)){var y=0|He.__str21191,m=E;t=82;break}if(78==(0|A)){var y=0|He.__str22192,m=E;t=82;break}if(79==(0|A)){var y=0|He.__str23193,m=E;t=82;break}if(80==(0|A)){var y=0|He.__str24194,m=E;t=82;break}if(81==(0|A)){var y=0|He.__str25195,m=E;t=82;break}if(82==(0|A)){var y=0|He.__str26196,m=E;t=82;break}if(83==(0|A)){var y=0|He.__str27197,m=E;t=82;break}if(84==(0|A)){var y=0|He.__str28198,m=E;t=82;break}if(85==(0|A)){var y=0|He.__str29199,m=E;t=82;break}if(86==(0|A)){var y=0|He.__str30200,m=E;t=82;break}if(87==(0|A)){var y=0|He.__str31201,m=E;t=82;break}if(88==(0|A)){var y=0|He.__str32202,m=E;t=82;break}if(89==(0|A)){var y=0|He.__str33203,m=E;t=82;break}if(90==(0|A)){var y=0|He.__str34204,m=E;t=82;break}if(95==(0|A)){var C=p+2|0;Se[a]=C;var R=Ae[C]<<24>>24;if(48==(0|R)){var y=0|He.__str35205,m=C;t=82;break}if(49==(0|R)){var y=0|He.__str36206,m=C;t=82;break}if(50==(0|R)){var y=0|He.__str37207,m=C;t=82;break}if(51==(0|R)){var y=0|He.__str38208,m=C;t=82;break}if(52==(0|R)){var y=0|He.__str39209,m=C;t=82;break}if(53==(0|R)){var y=0|He.__str40210,m=C;t=82;break}if(54==(0|R)){var y=0|He.__str41211,m=C;t=82;break}if(55==(0|R)){var y=0|He.__str42212,m=C;t=82;break}if(56==(0|R)){var y=0|He.__str43213,m=C;t=82;break}if(57==(0|R)){var y=0|He.__str44214,m=C;t=82;break}if(65==(0|R)){var y=0|He.__str45215,m=C;t=82;break}if(66==(0|R)){var y=0|He.__str46216,m=C;t=82;break}if(67==(0|R)){Se[a]=p+3|0;var T=0|He.__str47217;t=84;break}if(68==(0|R)){var y=0|He.__str48218,m=C;t=82;break}if(69==(0|R)){var y=0|He.__str49219,m=C;t=82;break}if(70==(0|R)){var y=0|He.__str50220,m=C;t=82;break}if(71==(0|R)){var y=0|He.__str51221,m=C;t=82;break}if(72==(0|R)){var y=0|He.__str52222,m=C;t=82;break}if(73==(0|R)){var y=0|He.__str53223,m=C;t=82;break}if(74==(0|R)){var y=0|He.__str54224,m=C;t=82;break}if(75==(0|R)){var y=0|He.__str55225,m=C;t=82;break}if(76==(0|R)){var y=0|He.__str56226,m=C;t=82;break}if(77==(0|R)){var y=0|He.__str57227,m=C;t=82;break}if(78==(0|R)){var y=0|He.__str58228,m=C;t=82;break}if(79==(0|R)){var y=0|He.__str59229,m=C;t=82;break}if(82==(0|R)){var O=4|o;Se[e]=O;var N=p+3|0;Se[a]=N;var I=Ae[N]<<24>>24;if(48==(0|I)){Se[a]=p+4|0,Cr(s);var P=(Pr(r,_,s,0),Se[_>>2]),D=Se[_+4>>2],L=Dr(r,0|He.__str60230,(ne=Oe,Oe+=8,Se[ne>>2]=P,Se[ne+4>>2]=D,ne)),F=Se[a]-1|0;Se[a]=F;var y=L,m=F;t=82;break}if(49==(0|I)){Se[a]=p+4|0;var X=Lr(r),j=Lr(r),U=Lr(r),x=Lr(r),z=Se[a]-1|0;Se[a]=z;var V=Dr(r,0|He.__str61231,(ne=Oe,Oe+=16,Se[ne>>2]=X,Se[ne+4>>2]=j,Se[ne+8>>2]=U,Se[ne+12>>2]=x,ne)),y=V,m=Se[a];t=82;break}if(50==(0|I)){var y=0|He.__str62232,m=N;t=82;break}if(51==(0|I)){var y=0|He.__str63233,m=N;t=82;break}if(52==(0|I)){var y=0|He.__str64234,m=N;t=82;break}var y=0,m=N;t=82;break}if(83==(0|R)){var y=0|He.__str65235,m=C;t=82;break}if(84==(0|R)){var y=0|He.__str66236,m=C;t=82;break}if(85==(0|R)){var y=0|He.__str67237,m=C;t=82;break}if(86==(0|R)){var y=0|He.__str68238,m=C;t=82;break}if(88==(0|R)){var y=0|He.__str69239,m=C;t=82;break}if(89==(0|R)){var y=0|He.__str70240,m=C;t=82;break}var k=0;t=111;break r}var k=0;t=111;break r}var y=0|He.__str1171,m=E;t=82}while(0);do{if(81==t){var g;Se[a]=p+2|0;var B=g;t=83;break}if(82==t){var m,y;if(Se[a]=m+1|0,1==(0|w)||2==(0|w)){var B=w;t=83;break}if(4==(0|w)){var T=y;t=84;break}if(6!=(0|w)){var S=y,M=w;t=88;break}Cr(n);var H=Xr(r,n,0,60,62);if(0==(0|H))var K=y;else var Y=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=y,Se[ne+4>>2]=H,ne)),K=Y;var K;Se[i+6]=0;var S=K,M=w;t=88;break}}while(0);if(83==t){var B,G=r+40|0,W=Fr(r,0|He._symbol_demangle_dashed_null,-1,G);if(0==(0|W)){var k=0;t=111;break r}var d=B;t=90;break}if(84==t){var T;Se[i+4]=T;var Z=1,Q=T;t=109;break r}if(88==t){var M,S,q=r+40|0,$=Fr(r,S,-1,q);if(0==(0|$)){var k=0;t=111;break r}var d=M;t=90;break}}else{if(c<<24>>24==36){var J=b+2|0;Se[a]=J;var rr=jr(r);Se[i+4]=rr;var ar=0!=(0|rr)&1;t=107;break}var d=0;t=90}while(0);if(90==t){var d,er=Me[a],ir=Ae[er]<<24>>24;if(64==(0|ir))Se[a]=er+1|0;else if(36==(0|ir))t=93;else{var vr=zr(r);if(0==(0|vr)){var k=-1;t=111;break}}if(5==(0|d)){var tr=r+20|0,fr=Se[tr>>2]+1|0;Se[tr>>2]=fr}else if(1==(0|d)||2==(0|d)){if(Me[i+11]>>>0<2){var k=-1;t=111;break}var _r=r+56|0,sr=Me[_r>>2],nr=Se[sr+4>>2];if(1==(0|d))Se[sr>>2]=nr;else{var or=Dr(r,0|He.__str71241,(ne=Oe,Oe+=4,Se[ne>>2]=nr,ne)),lr=Se[_r>>2];Se[lr>>2]=or}var br=4|Se[e];Se[e]=br}else if(3==(0|d)){var kr=Se[e]&-5;Se[e]=kr}var ur=ge[Se[a]];if((ur-48&255&255)<10)var cr=Vr(r),ar=cr;else if((ur-65&255&255)<26)var hr=Br(r,3==(0|d)&1),ar=hr;else{if(ur<<24>>24!=36){var k=-1;t=111;break}var dr=Hr(r),ar=dr}}var ar;if(0==(0|ar)){var k=-1;t=111;break}var Z=ar,Q=Se[i+4];t=109;break}var wr=Pr(r,f,0,0);if(0==(0|wr)){var k=-1;t=111;break}var pr=Se[f>>2],Er=Se[f+4>>2],Ar=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=pr,Se[ne+4>>2]=Er,ne));Se[i+4]=Ar;var Z=1,Q=Ar;t=109;break}while(0);do if(109==t){var Q,Z;if(0!=(0|Q)){var k=Z;break}Xa(0|He.__str72242,1499,0|He.___func___symbol_demangle,0|He.__str73243);var k=Z}while(0);var k;return Oe=v,k}function Pr(r,a,e,i){var v,t,f,_=Oe;Oe+=24;var s=_,n=_+4,o=_+8,l=_+16,b=_+20;0==(0|a)&&Xa(0|He.__str72242,829,0|He.___func___demangle_datatype,0|He.__str121291);var f=(a+4|0)>>2;Se[f]=0;var t=(0|a)>>2;Se[t]=0;var v=(r+12|0)>>2,k=Me[v],u=k+1|0;Se[v]=u;var c=Ae[k],h=c<<24>>24;do if(95==(0|h)){Se[v]=k+2|0;var d=Ae[u],w=Zr(d);Se[t]=w}else if(67==(0|h)||68==(0|h)||69==(0|h)||70==(0|h)||71==(0|h)||72==(0|h)||73==(0|h)||74==(0|h)||75==(0|h)||77==(0|h)||78==(0|h)||79==(0|h)||88==(0|h)||90==(0|h)){var p=Qr(c);Se[t]=p}else if(84==(0|h)||85==(0|h)||86==(0|h)||89==(0|h)){var E=qr(r);if(0==(0|E))break;var A=0==(32768&Se[r>>2]|0);do if(A)if(84==(0|h))var g=0|He.__str122292;else if(85==(0|h))var g=0|He.__str123293;else if(86==(0|h))var g=0|He.__str124294;else{if(89!=(0|h)){var g=0;break}var g=0|He.__str125295}else var g=0;while(0);var g,y=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=g,Se[ne+4>>2]=E,ne));Se[t]=y}else if(63==(0|h))if(0==(0|i))$r(a,r,e,63,0);else{var m=Lr(r);if(0==(0|m))break;var S=Dr(r,0|He.__str126296,(ne=Oe,Oe+=4,Se[ne>>2]=m,ne));Se[t]=S}else if(65==(0|h)||66==(0|h))$r(a,r,e,c,i);else if(81==(0|h)||82==(0|h)||83==(0|h)){var M=0==(0|i)?80:c;$r(a,r,e,M,i)}else if(80==(0|h))if(((Ae[u]<<24>>24)-48|0)>>>0<10){var C=k+2|0;if(Se[v]=C,Ae[u]<<24>>24!=54)break;var R=r+44|0,T=Se[R>>2];Se[v]=k+3|0;var O=Ae[C],N=Se[r>>2]&-17,I=Ur(O,s,n,N);if(0==(0|I))break;var P=Pr(r,o,e,0);if(0==(0|P))break;var D=Xr(r,e,1,40,41);if(0==(0|D))break;Se[R>>2]=T;var L=Se[o>>2],F=Se[o+4>>2],X=Se[s>>2],j=Dr(r,0|He.__str127297,(ne=Oe,Oe+=12,Se[ne>>2]=L,Se[ne+4>>2]=F,Se[ne+8>>2]=X,ne));Se[t]=j;var U=Dr(r,0|He.__str128298,(ne=Oe,Oe+=4,Se[ne>>2]=D,ne));Se[f]=U}else $r(a,r,e,80,i);else if(87==(0|h)){if(Ae[u]<<24>>24!=52)break;Se[v]=k+2|0;var x=qr(r);if(0==(0|x))break;if(0==(32768&Se[r>>2]|0)){var z=Dr(r,0|He.__str129299,(ne=Oe,Oe+=4,Se[ne>>2]=x,ne));Se[t]=z}else Se[t]=x}else if(48==(0|h)||49==(0|h)||50==(0|h)||51==(0|h)||52==(0|h)||53==(0|h)||54==(0|h)||55==(0|h)||56==(0|h)||57==(0|h)){var V=h<<1,B=V-96|0,H=Yr(e,B);Se[t]=H;var K=V-95|0,Y=Yr(e,K);Se[f]=Y}else if(36==(0|h)){var G=k+2|0;Se[v]=G;var W=Ae[u]<<24>>24;if(48==(0|W)){var Z=Lr(r);Se[t]=Z}else if(68==(0|W)){var Q=Lr(r);if(0==(0|Q))break;var q=Dr(r,0|He.__str130300,(ne=Oe,Oe+=4,Se[ne>>2]=Q,ne));Se[t]=q}else if(70==(0|W)){var $=Lr(r);if(0==(0|$))break;var J=Lr(r);if(0==(0|J))break;var rr=Dr(r,0|He.__str131301,(ne=Oe,Oe+=8,Se[ne>>2]=$,Se[ne+4>>2]=J,ne));Se[t]=rr}else if(71==(0|W)){var ar=Lr(r);if(0==(0|ar))break;var er=Lr(r);if(0==(0|er))break;var ir=Lr(r);if(0==(0|ir))break;var vr=Dr(r,0|He.__str132302,(ne=Oe,Oe+=12,Se[ne>>2]=ar,Se[ne+4>>2]=er,Se[ne+8>>2]=ir,ne));Se[t]=vr}else if(81==(0|W)){var tr=Lr(r);if(0==(0|tr))break;var fr=Dr(r,0|He.__str133303,(ne=Oe,Oe+=4,Se[ne>>2]=tr,ne));Se[t]=fr}else{if(36!=(0|W))break;if(Ae[G]<<24>>24!=67)break;Se[v]=k+3|0;var _r=xr(r,l,b);if(0==(0|_r))break;var sr=Pr(r,a,e,i);if(0==(0|sr))break;var nr=Se[t],or=Se[l>>2],lr=Dr(r,0|He.__str83253,(ne=Oe,Oe+=8,Se[ne>>2]=nr,Se[ne+4>>2]=or,ne));Se[t]=lr}}while(0);var br=0!=(0|Se[t])&1;return Oe=_,br}function Dr(r,a){var e,i=Oe;Oe+=4;var v=i,e=v>>2,t=v;Se[t>>2]=arguments[Dr.length];var f=1,_=0;r:for(;;){var _,f,s=Ae[a+_|0];do{if(s<<24>>24==0)break r;if(s<<24>>24==37){var n=_+1|0,o=Ae[a+n|0]<<24>>24;if(115==(0|o)){var l=Se[e],b=l,k=l+4|0;Se[e]=k;var u=Se[b>>2];if(0==(0|u)){var c=f,h=n;break}var d=Ca(u),c=d+f|0,h=n;break}if(99==(0|o)){var w=Se[e]+4|0;Se[e]=w;var c=f+1|0,h=n;break}if(37==(0|o))var p=n;else var p=_;var p,c=f+1|0,h=p}else var c=f+1|0,h=_}while(0);var h,c,f=c,_=h+1|0}var E=Wr(r,f);if(0==(0|E))var A=0;else{Se[t>>2]=arguments[Dr.length];var g=E,y=0;r:for(;;){var y,g,m=Ae[a+y|0];do{if(m<<24>>24==0)break r;if(m<<24>>24==37){var S=y+1|0,M=Ae[a+S|0]<<24>>24;if(115==(0|M)){var C=Se[e],R=C,T=C+4|0;Se[e]=T;var O=Se[R>>2];if(0==(0|O)){var N=g,I=S;break}var P=Ca(O);Pa(g,O,P,1);var N=g+P|0,I=S;break}if(99==(0|M)){var D=Se[e],L=D,F=D+4|0;Se[e]=F,Ae[g]=255&Se[L>>2];var N=g+1|0,I=S;break}if(37==(0|M))var X=S;else var X=y;var X;Ae[g]=37;var N=g+1|0,I=X}else{Ae[g]=m;var N=g+1|0,I=y}}while(0);var I,N,g=N,y=I+1|0}Ae[g]=0;var A=E}var A;return Oe=i,A}function Lr(r){var a,a=(r+12|0)>>2,e=Se[a],i=Ae[e];if(i<<24>>24==63){var v=e+1|0;Se[a]=v;var t=1,f=v,_=Ae[v]}else var t=0,f=e,_=i;var _,f,t,s=(_-48&255&255)<9;do if(s){var n=Wr(r,3),o=0!=(0|t);o&&(Ae[n]=45);var l=Ae[Se[a]]+1&255;Ae[n+t|0]=l;var b=o?2:1; -Ae[n+b|0]=0;var k=Se[a]+1|0;Se[a]=k;var u=n}else if(_<<24>>24==57){var c=Wr(r,4),h=0!=(0|t);h&&(Ae[c]=45),Ae[c+t|0]=49;var d=h?2:1;Ae[c+d|0]=48;var w=h?3:2;Ae[c+w|0]=0;var p=Se[a]+1|0;Se[a]=p;var u=c}else{if((_-65&255&255)>=16){var u=0;break}for(var E=0,A=f;;){var A,E,g=A+1|0;Se[a]=g;var y=(Ae[A]<<24>>24)+((E<<4)-65)|0,m=ge[g];if((m-65&255&255)>=16)break;var E=y,A=g}if(m<<24>>24!=64){var u=0;break}var S=Wr(r,17),M=0!=(0|t)?0|He.__str119289:0|ii,C=(za(S,0|He.__str118288,(ne=Oe,Oe+=8,Se[ne>>2]=M,Se[ne+4>>2]=y,ne)),Se[a]+1|0);Se[a]=C;var u=S}while(0);var u;return u}function Fr(r,a,e,i){var v,t,f,_;0==(0|a)&&Xa(0|He.__str72242,212,0|He.___func___str_array_push,0|He.__str115285),0==(0|i)&&Xa(0|He.__str72242,213,0|He.___func___str_array_push,0|He.__str116286);var f=(i+12|0)>>2,s=Me[f],n=0==(0|s);do{if(n){Se[f]=32;var o=Wr(r,128);if(0==(0|o)){var l=0;_=17;break}Se[i+16>>2]=o,_=11;break}if(Me[i+8>>2]>>>0>>0){_=11;break}var b=s<<3,k=Wr(r,b);if(0==(0|k)){var l=0;_=17;break}var u=k,c=i+16|0,h=Se[c>>2],d=Se[f]<<2;Pa(k,h,d,1);var w=Se[f]<<1;Se[f]=w,Se[c>>2]=u,_=11;break}while(0);do if(11==_){if((0|e)==-1)var p=Ca(a),E=p;else var E=e;var E,A=ja(a),g=E+1|0,y=Wr(r,g),t=(i+4|0)>>2,v=(i+16|0)>>2,m=(Se[t]<<2)+Se[v]|0;Se[m>>2]=y;var S=Se[Se[v]+(Se[t]<<2)>>2];if(0==(0|S)){Xa(0|He.__str72242,233,0|He.___func___str_array_push,0|He.__str117287);var M=Se[Se[v]+(Se[t]<<2)>>2]}else var M=S;var M;Pa(M,A,E,1),va(A),Ae[Se[Se[v]+(Se[t]<<2)>>2]+g|0]=0;var C=Se[t]+1|0;Se[t]=C;var R=i+8|0;if(C>>>0>2]>>>0){var l=1;break}Se[R>>2]=C;var l=1}while(0);var l;return l}function Xr(r,a,e,i,v){var t,f,_=Oe;Oe+=28;var s,n=_,o=_+8;Cr(o);var f=(r+12|0)>>2,l=0==(0|e),t=(0|n)>>2,b=n+4|0;r:do if(l)for(;;){var k=Se[f],u=Ae[k];if(u<<24>>24==0){s=12;break r}if(u<<24>>24==64){var c=k;s=7;break r}var h=Pr(r,n,a,1);if(0==(0|h)){var d=0;s=25;break r}var w=Se[t],p=Se[b>>2],E=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=w,Se[ne+4>>2]=p,ne)),A=Fr(r,E,-1,o);if(0==(0|A)){var d=0;s=25;break r}var g=Se[t],y=Da(g,0|He.__str110280);if(0==(0|y)){s=12;break r}}else for(;;){var m=Se[f],S=Ae[m];if(S<<24>>24==0){s=12;break r}if(S<<24>>24==64){var c=m;s=7;break r}var M=Pr(r,n,a,1);if(0==(0|M)){var d=0;s=25;break r}var C=Se[t],R=Da(C,0|He.__str84254);if(0==(0|R)){s=13;break r}var T=Se[b>>2],O=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=C,Se[ne+4>>2]=T,ne)),N=Fr(r,O,-1,o);if(0==(0|N)){var d=0;s=25;break r}var I=Se[t],P=Da(I,0|He.__str110280);if(0==(0|P)){s=12;break r}}while(0);do if(7==s){var c;Se[f]=c+1|0,s=12;break}while(0);do if(12==s){if(l){s=14;break}s=13;break}while(0);do if(13==s){var D=Se[f],L=D+1|0;if(Se[f]=L,Ae[D]<<24>>24==90){s=14;break}var d=0;s=25;break}while(0);r:do if(14==s){var F=o+4|0,X=Me[F>>2];do{if(0!=(0|X)){if(1==(0|X)){var j=o+16|0,U=Se[Se[j>>2]>>2],x=Da(U,0|He.__str84254);if(0==(0|x)){s=17;break}var z=j;s=20;break}var V=o+16|0;if(X>>>0<=1){var z=V;s=20;break}for(var B=0,H=1;;){var H,B,K=Se[Se[V>>2]+(H<<2)>>2],Y=Dr(r,0|He.__str112282,(ne=Oe,Oe+=8,Se[ne>>2]=B,Se[ne+4>>2]=K,ne)),G=H+1|0;if(G>>>0>=Me[F>>2]>>>0)break;var B=Y,H=G}if(0==(0|Y)){var z=V;s=20;break}var W=Y,Z=Y;s=21;break}s=17}while(0);if(17==s){var Q=i<<24>>24,q=v<<24>>24,$=Dr(r,0|He.__str111281,(ne=Oe,Oe+=8,Se[ne>>2]=Q,Se[ne+4>>2]=q,ne)),d=$;break}if(20==s)var z,W=Se[Se[z>>2]>>2],Z=0;var Z,W,J=v<<24>>24,rr=v<<24>>24==62;do if(rr){var ar=Ca(W);if(Ae[W+(ar-1)|0]<<24>>24!=62)break;var er=i<<24>>24,ir=Se[Se[o+16>>2]>>2],vr=Dr(r,0|He.__str113283,(ne=Oe,Oe+=16,Se[ne>>2]=er,Se[ne+4>>2]=ir,Se[ne+8>>2]=Z,Se[ne+12>>2]=J,ne)),d=vr;break r}while(0);var tr=i<<24>>24,fr=Se[Se[o+16>>2]>>2],_r=Dr(r,0|He.__str114284,(ne=Oe,Oe+=16,Se[ne>>2]=tr,Se[ne+4>>2]=fr,Se[ne+8>>2]=Z,Se[ne+12>>2]=J,ne)),d=_r}while(0);var d;return Oe=_,d}function jr(r){var a,e=Oe;Oe+=20;var i=e,v=r+24|0,t=Se[v>>2],a=(r+20|0)>>2,f=Se[a],_=r+44|0,s=Se[_>>2];Se[a]=t;var n=Kr(r);if(0==(0|n))var o=0;else{Cr(i);var l=Xr(r,i,0,60,62);if(0==(0|l))var b=n;else var k=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=n,Se[ne+4>>2]=l,ne)),b=k;var b;Se[v>>2]=t,Se[a]=f,Se[_>>2]=s;var o=b}var o;return Oe=e,o}function Ur(r,a,e,i){var v,t=a>>2;Se[e>>2]=0,Se[t]=0;var f=0==(18&i|0);do{if(f){var _=r<<24>>24,s=1==((_-65)%2|0);if(0==(1&i|0)){if(s?Se[e>>2]=0|He.__str95265:v=14,65==(0|_)||66==(0|_)){Se[t]=0|He.__str96266,v=21;break}if(67==(0|_)||68==(0|_)){Se[t]=0|He.__str97267,v=21;break}if(69==(0|_)||70==(0|_)){Se[t]=0|He.__str98268,v=21;break}if(71==(0|_)||72==(0|_)){Se[t]=0|He.__str99269,v=21;break}if(73==(0|_)||74==(0|_)){Se[t]=0|He.__str100270,v=21;break}if(75==(0|_)||76==(0|_)){v=21;break}if(77==(0|_)){Se[t]=0|He.__str101271,v=21;break}var n=0;v=22;break}if(s?Se[e>>2]=0|He.__str88258:v=5,65==(0|_)||66==(0|_)){Se[t]=0|He.__str89259,v=21;break}if(67==(0|_)||68==(0|_)){Se[t]=0|He.__str90260,v=21;break}if(69==(0|_)||70==(0|_)){Se[t]=0|He.__str91261,v=21;break}if(71==(0|_)||72==(0|_)){Se[t]=0|He.__str92262,v=21;break}if(73==(0|_)||74==(0|_)){Se[t]=0|He.__str93263,v=21;break}if(75==(0|_)||76==(0|_)){v=21;break}if(77==(0|_)){Se[t]=0|He.__str94264,v=21;break}var n=0;v=22;break}v=21}while(0);if(21==v)var n=1;var n;return n}function xr(r,a,e){var i;Se[e>>2]=0;var i=(r+12|0)>>2,v=Se[i];if(Ae[v]<<24>>24==69){Se[e>>2]=0|He.__str102272;var t=Se[i]+1|0;Se[i]=t;var f=t}else var f=v;var f;Se[i]=f+1|0;var _=Ae[f]<<24>>24;if(65==(0|_)){Se[a>>2]=0;var s=1}else if(66==(0|_)){Se[a>>2]=0|He.__str103273;var s=1}else if(67==(0|_)){Se[a>>2]=0|He.__str104274;var s=1}else if(68==(0|_)){Se[a>>2]=0|He.__str105275;var s=1}else var s=0;var s;return s}function zr(r){var a,e,a=(r+12|0)>>2,i=r+40|0,v=r+20|0,t=0|i,f=r+44|0,_=r+48|0,s=r+52|0,n=r+56|0,o=r+20|0,l=r+24|0,b=r+16|0,k=0;r:for(;;){var k,u=Se[a],c=Ae[u];if(c<<24>>24==64){var h=u+1|0;Se[a]=h;var d=1;break}var w=c<<24>>24;do{if(0==(0|w)){var d=0;break r}if(48==(0|w)||49==(0|w)||50==(0|w)||51==(0|w)||52==(0|w)||53==(0|w)||54==(0|w)||55==(0|w)||56==(0|w)||57==(0|w)){var p=u+1|0;Se[a]=p;var E=(Ae[u]<<24>>24)-48|0,A=Yr(v,E),g=A;e=14;break}if(63==(0|w)){var y=u+1|0;Se[a]=y;var m=Ae[y]<<24>>24;if(36==(0|m)){var S=u+2|0;Se[a]=S;var M=jr(r);if(0==(0|M)){var d=0;break r}var C=Fr(r,M,-1,v);if(0==(0|C)){var d=0;break r}var R=M;e=15;break}if(63==(0|m)){var T=Se[t>>2],O=Se[f>>2],N=Se[_>>2],I=Se[s>>2],P=Se[n>>2],D=Se[o>>2],L=Se[l>>2];Cr(i);var F=Ir(r);if(0==(0|F))var X=k;else var j=Se[b>>2],U=Dr(r,0|He.__str109279,(ne=Oe,Oe+=4,Se[ne>>2]=j,ne)),X=U;var X;Se[o>>2]=D,Se[l>>2]=L,Se[t>>2]=T,Se[f>>2]=O,Se[_>>2]=N,Se[s>>2]=I,Se[n>>2]=P;var g=X;e=14;break}var x=Lr(r);if(0==(0|x)){var d=0;break r}var z=Dr(r,0|He.__str109279,(ne=Oe,Oe+=4,Se[ne>>2]=x,ne)),g=z;e=14;break}var V=Kr(r),g=V;e=14;break}while(0);if(14==e){var g;if(0==(0|g)){var d=0;break}var R=g}var R,B=Fr(r,R,-1,i);if(0==(0|B)){var d=0;break}var k=R}var d;return d}function Vr(r){var a,e,i,v=Oe;Oe+=36;var t,f=v,i=f>>2,_=v+4,s=v+8,e=s>>2,n=v+16;Se[i]=0;var o=0|r,l=Se[o>>2],b=0==(128&l|0),k=r+12|0;do if(b){var u=Ae[Se[k>>2]]<<24>>24;if(48==(0|u))var c=0|He.__str76246,h=k,a=h>>2;else if(49==(0|u))var c=0|He.__str77247,h=k,a=h>>2;else{if(50!=(0|u)){var c=0,h=k,a=h>>2;break}var c=0|He.__str78248,h=k,a=h>>2}}else var c=0,h=k,a=h>>2;while(0);var h,c,d=0==(512&l|0);do if(d){if((Ae[Se[a]]-48&255&255)>=3){var w=0;break}var w=0|He.__str79249}else var w=0;while(0);var w,p=Gr(r,0),E=Se[a],A=E+1|0;Se[a]=A;var g=Ae[E]<<24>>24;do{if(48==(0|g)||49==(0|g)||50==(0|g)||51==(0|g)||52==(0|g)||53==(0|g)){var y=r+44|0,m=Se[y>>2];Cr(n);var S=Pr(r,s,n,0);if(0==(0|S)){var M=0;t=28;break}var C=xr(r,f,_);if(0==(0|C)){var M=0;t=28;break}var R=Se[i],T=0==(0|R),O=Se[_>>2];do if(T)Se[i]=O;else{if(0==(0|O))break;var N=Dr(r,0|He.__str83253,(ne=Oe,Oe+=8,Se[ne>>2]=R,Se[ne+4>>2]=O,ne));Se[i]=N}while(0);Se[y>>2]=m,t=22;break}if(54==(0|g)||55==(0|g)){var I=s+4|0;Se[I>>2]=0,Se[e]=0;var P=xr(r,f,_);if(0==(0|P)){var M=0;t=28;break}if(Ae[Se[a]]<<24>>24==64){t=22;break}var D=qr(r);if(0==(0|D)){var M=0;t=28;break}var L=Dr(r,0|He.__str107277,(ne=Oe,Oe+=4,Se[ne>>2]=D,ne));Se[I>>2]=L,t=22;break}if(56==(0|g)||57==(0|g)){Se[e+1]=0,Se[e]=0,Se[i]=0,t=22;break}var M=0;t=28}while(0);if(22==t){var F=0==(4096&Se[o>>2]|0);do{if(F){var X=Se[e],j=Se[i];if(0==(0|j)){var U=X;t=26;break}var x=0!=(0|X)?0|He.__str87257:0,z=0|He.__str87257,V=j,B=x,H=X;t=27;break}Se[i]=0,Se[e+1]=0,Se[e]=0;var U=0;t=26;break}while(0);if(26==t)var U,K=0!=(0|U)?0|He.__str87257:0,z=K,V=0,B=0,H=U;var H,B,V,z,Y=Se[e+1],G=Dr(r,0|He.__str108278,(ne=Oe,Oe+=32,Se[ne>>2]=c,Se[ne+4>>2]=w,Se[ne+8>>2]=H,Se[ne+12>>2]=B,Se[ne+16>>2]=V,Se[ne+20>>2]=z,Se[ne+24>>2]=p,Se[ne+28>>2]=Y,ne));Se[r+16>>2]=G;var M=1}var M;return Oe=v,M}function Br(r,a){var e,i,v,t,f=Oe;Oe+=44;var _,s=f,t=s>>2,n=f+8,o=f+12,v=o>>2,l=f+16,b=f+20,k=f+40;Se[v]=0;var i=(r+12|0)>>2,u=Se[i],c=u+1|0;Se[i]=c;var h=ge[u],d=h<<24>>24,w=(h-65&255&255)>25;r:do if(w)var p=0;else{var e=(0|r)>>2,E=Me[e],A=0==(128&E|0),g=d-65|0;do if(A){var y=g/8|0;if(0==(0|y))var m=0|He.__str76246,S=g;else if(1==(0|y))var m=0|He.__str77247,S=g;else{if(2!=(0|y)){var m=0,S=g;break}var m=0|He.__str78248,S=g}}else var m=0,S=g;while(0);var S,m,M=0==(512&E|0)&h<<24>>24<89,C=(0|S)%8;do if(M)if(2==(0|C)||3==(0|C))var R=m,T=0|He.__str79249;else if(4==(0|C)||5==(0|C))var R=m,T=0|He.__str80250;else{if(6!=(0|C)&&7!=(0|C)){var R=m,T=0;break}var O=Dr(r,0|He.__str81251,(ne=Oe,Oe+=4,Se[ne>>2]=m,ne)),R=O,T=0|He.__str80250}else var R=m,T=0;while(0);var T,R,N=Gr(r,0),I=6==(0|C);do{if(!I){if(7==((d-56)%8|0)){_=14;break}var P=N;_=15;break}_=14}while(0);if(14==_)var D=Lr(r),L=Dr(r,0|He.__str82252,(ne=Oe,Oe+=8,Se[ne>>2]=N,Se[ne+4>>2]=D,ne)),P=L;var P,F=h<<24>>24>88;do if(F)var X=0;else{if((C-2|0)>>>0<2){var X=0;break}var j=xr(r,o,k);if(0==(0|j)){var p=0;break r}var U=Me[v],x=Se[k>>2];if(0==(0|U)&0==(0|x)){var X=0;break}var z=Dr(r,0|He.__str83253,(ne=Oe,Oe+=8,Se[ne>>2]=U,Se[ne+4>>2]=x,ne));Se[v]=z;var X=z}while(0);var X,V=Se[i],B=V+1|0;Se[i]=B;var H=Ae[V],K=Se[e],Y=Ur(H,n,l,K);if(0==(0|Y)){var p=0;break}Cr(b);var G=Se[i];if(Ae[G]<<24>>24==64){Se[t]=0|He.__str84254,Se[t+1]=0;var W=G+1|0;Se[i]=W}else{var Z=Pr(r,s,b,0);if(0==(0|Z)){var p=0;break}}if(0!=(4&Se[e]|0)&&(Se[t+1]=0,Se[t]=0),0==(0|a))var Q=P;else{var q=0|s,$=Se[q>>2],J=s+4|0,rr=Se[J>>2],ar=Dr(r,0|He.__str85255,(ne=Oe,Oe+=12,Se[ne>>2]=P,Se[ne+4>>2]=$,Se[ne+8>>2]=rr,ne));Se[J>>2]=0,Se[q>>2]=0;var Q=ar}var Q,er=r+44|0,ir=Se[er>>2],vr=Xr(r,b,1,40,41);if(0==(0|vr)){var p=0;break}if(0==(4096&Se[e]|0))var tr=vr,fr=X;else{Se[v]=0;var tr=0,fr=0}var fr,tr;Se[er>>2]=ir;var _r=Se[t],sr=Se[t+1];if(0==(0|_r))var nr=0;else var or=0!=(0|sr)?0:0|He.__str87257,nr=or;var nr,lr=Se[n>>2],br=0!=(0|lr)?0|He.__str87257:0,kr=Se[l>>2],ur=Dr(r,0|He.__str86256,(ne=Oe,Oe+=44,Se[ne>>2]=R,Se[ne+4>>2]=T,Se[ne+8>>2]=_r,Se[ne+12>>2]=nr,Se[ne+16>>2]=lr,Se[ne+20>>2]=br,Se[ne+24>>2]=kr,Se[ne+28>>2]=Q,Se[ne+32>>2]=tr,Se[ne+36>>2]=fr,Se[ne+40>>2]=sr,ne));Se[r+16>>2]=ur;var p=1}while(0);var p;return Oe=f,p}function Hr(r){var a,a=(r+12|0)>>2,e=Se[a];if(Ae[e]<<24>>24==36)var i=e;else{Xa(0|He.__str72242,1252,0|He.___func___handle_template,0|He.__str74244);var i=Se[a]}var i;Se[a]=i+1|0;var v=Kr(r),t=0==(0|v);do if(t)var f=0;else{var _=Xr(r,0,0,60,62);if(0==(0|_)){var f=0;break}var s=Dr(r,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=v,Se[ne+4>>2]=_,ne));Se[r+16>>2]=s;var f=1}while(0);var f;return f}function Kr(r){for(var a,a=(r+12|0)>>2,e=Me[a],i=e,v=Ae[e];;){var v,i;if(!((v-65&255&255)<26|(v-97&255&255)<26|(v-48&255&255)<10)&&v<<24>>24!=95&&v<<24>>24!=36){var t=0;break}var f=i+1|0;Se[a]=f;var _=ge[f];if(_<<24>>24==64){Se[a]=i+2|0;var s=f-e|0,n=r+20|0,o=Fr(r,e,s,n);if(0==(0|o)){var t=0;break}var l=Se[r+24>>2]-1-Se[n>>2]|0,b=Yr(n,l),t=b;break}var i=f,v=_}var t;return t}function Yr(r,a){0==(0|r)&&Xa(0|He.__str72242,263,0|He.___func___str_array_get_ref,0|He.__str75245);var e=Se[r>>2]+a|0;if(e>>>0>2]>>>0)var i=Se[Se[r+16>>2]+(e<<2)>>2];else var i=0;var i;return i}function Gr(r,a){var e,e=(r+44|0)>>2,i=Me[e];if(i>>>0>a>>>0){for(var v=r+56|0,t=a,f=0,_=Se[v>>2],s=i;;){var s,_,f,t,n=Me[_+(t<<2)>>2];if(0==(0|n)){Xa(0|He.__str72242,680,0|He.___func___get_class_string,0|He.__str106276);var o=Se[v>>2],l=o,b=Se[o+(t<<2)>>2],k=Se[e]}else var l=_,b=n,k=s;var k,b,l,u=Ca(b),c=u+(f+2)|0,h=t+1|0;if(h>>>0>=k>>>0)break;var t=h,f=c,_=l,s=k}var d=c-1|0}else var d=-1;var d,w=Wr(r,d);if(0==(0|w))var p=0;else{var E=Se[e]-1|0,A=(0|E)<(0|a);r:do if(A)var g=0;else for(var y=r+56|0,m=0,S=E;;){var S,m,M=Se[Se[y>>2]+(S<<2)>>2],C=Ca(M),R=w+m|0;Pa(R,M,C,1);var T=C+m|0;if((0|S)>(0|a)){var O=T+1|0;Ae[w+T|0]=58;var N=T+2|0;Ae[w+O|0]=58;var I=N}else var I=T;var I,P=S-1|0;if((0|P)<(0|a)){var g=I;break r}var m=I,S=P}while(0);var g;Ae[w+g|0]=0;var p=w}var p;return p}function Wr(r,a){var e,i=a>>>0>1020;do if(i){var v=Se[r+4>>2],t=a+4|0,f=pe[v](t);if(0==(0|f)){var _=0;break}var s=r+60|0,n=Se[s>>2],o=f;Se[o>>2]=n,Se[s>>2]=f,Se[r+64>>2]=0;var _=f+4|0}else{var e=(r+64|0)>>2,l=Me[e];if(l>>>0>>0){var b=Se[r+4>>2],k=pe[b](1024);if(0==(0|k)){var _=0;break}var u=r+60|0,c=Se[u>>2],h=k;Se[h>>2]=c,Se[u>>2]=k,Se[e]=1020;var d=1020,w=k}else var d=l,w=Se[r+60>>2];var w,d;Se[e]=d-a|0;var _=w+(1024-d)|0}while(0);var _;return _}function Zr(r){var a=r<<24>>24;if(68==(0|a))var e=0|He.__str157327;else if(69==(0|a))var e=0|He.__str158328;else if(70==(0|a))var e=0|He.__str159329;else if(71==(0|a))var e=0|He.__str160330;else if(72==(0|a))var e=0|He.__str161331;else if(73==(0|a))var e=0|He.__str162332;else if(74==(0|a))var e=0|He.__str163333;else if(75==(0|a))var e=0|He.__str164334;else if(76==(0|a))var e=0|He.__str165335;else if(77==(0|a))var e=0|He.__str166336;else if(78==(0|a))var e=0|He.__str167337;else if(87==(0|a))var e=0|He.__str168338;else var e=0;var e;return e}function Qr(r){var a=r<<24>>24;if(67==(0|a))var e=0|He.__str145315;else if(68==(0|a))var e=0|He.__str146316;else if(69==(0|a))var e=0|He.__str147317;else if(70==(0|a))var e=0|He.__str148318;else if(71==(0|a))var e=0|He.__str149319;else if(72==(0|a))var e=0|He.__str150320;else if(73==(0|a))var e=0|He.__str151321;else if(74==(0|a))var e=0|He.__str152322;else if(75==(0|a))var e=0|He.__str153323;else if(77==(0|a))var e=0|He.__str154324;else if(78==(0|a))var e=0|He.__str155325;else if(79==(0|a))var e=0|He.__str156326;else if(88==(0|a))var e=0|He.__str84254;else if(90==(0|a))var e=0|He.__str110280;else var e=0;var e;return e}function qr(r){var a=r+44|0,e=Se[a>>2],i=zr(r);if(0==(0|i))var v=0;else var t=Gr(r,e),v=t;var v;return Se[a>>2]=e,v}function $r(r,a,e,i,v){var t,f,_,s=Oe;Oe+=16;var n,o=s,_=o>>2,l=s+4,b=s+8,f=b>>2;Se[l>>2]=0|ii;var t=(a+12|0)>>2,k=Se[t];if(Ae[k]<<24>>24==69){Se[l>>2]=0|He.__str134304;var u=k+1|0;Se[t]=u;var c=0|He.__str134304}else var c=0|ii;var c,h=i<<24>>24;do{if(65==(0|h)){var d=Dr(a,0|He.__str135305,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=d;n=10;break}if(66==(0|h)){var p=Dr(a,0|He.__str136306,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=p;n=10;break}if(80==(0|h)){var E=Dr(a,0|He.__str137307,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=E;n=10;break}if(81==(0|h)){var A=Dr(a,0|He.__str138308,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=A;n=10;break}if(82==(0|h)){var g=Dr(a,0|He.__str139309,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=g;n=10;break}if(83==(0|h)){var y=Dr(a,0|He.__str140310,(ne=Oe,Oe+=4,Se[ne>>2]=c,ne)),w=y;n=10;break}if(63==(0|h)){var w=0|ii;n=10}else n=31}while(0);r:do if(10==n){var w,m=xr(a,o,l);if(0==(0|m))break;var S=a+44|0,M=Se[S>>2],C=Se[t],R=Ae[C]<<24>>24==89;a:do if(R){var T=C+1|0;Se[t]=T;var O=Lr(a);if(0==(0|O))break r;var N=Ha(O),I=Ae[w]<<24>>24==32,P=Se[_],D=0==(0|P);do{if(I){if(!D){n=17;break}var L=w+1|0;n=18;break}if(D){var L=w;n=18;break}n=17;break}while(0);if(17==n){var F=Dr(a,0|He.__str141311,(ne=Oe,Oe+=8,Se[ne>>2]=P,Se[ne+4>>2]=w,ne));Se[_]=0;var X=F}else if(18==n)var L,j=Dr(a,0|He.__str142312,(ne=Oe,Oe+=4,Se[ne>>2]=L,ne)),X=j;var X;if(0==(0|N)){var U=X;break}for(var x=X,z=N;;){var z,x,V=z-1|0,B=Lr(a),H=Dr(a,0|He.__str143313,(ne=Oe,Oe+=8,Se[ne>>2]=x,Se[ne+4>>2]=B,ne));if(0==(0|V)){var U=H;break a}var x=H,z=V}}else var U=w;while(0);var U,K=Pr(a,b,e,0);if(0==(0|K))break;var Y=Se[_];if(0==(0|Y)){var G=0==(0|v);do if(G){if(Ae[U]<<24>>24==0){var W=U;break}var Z=U+1|0;if(Ae[Z]<<24>>24!=42){var W=U;break}var Q=Se[f],q=Ca(Q);if(Ae[Q+(q-1)|0]<<24>>24!=42){var W=U;break}var W=Z}else var W=U;while(0);var W,$=Se[f],J=Dr(a,0|He.__str170,(ne=Oe,Oe+=8,Se[ne>>2]=$,Se[ne+4>>2]=W,ne));Se[r>>2]=J}else{var rr=Se[f],ar=Dr(a,0|He.__str144314,(ne=Oe,Oe+=12,Se[ne>>2]=rr,Se[ne+4>>2]=Y,Se[ne+8>>2]=U,ne));Se[r>>2]=ar}var er=Se[f+1];Se[r+4>>2]=er,Se[S>>2]=M}while(0);Oe=s}function Jr(r){var a,e=r>>>0<245;do{if(e){if(r>>>0<11)var i=16;else var i=r+11&-8;var i,v=i>>>3,t=Me[vi>>2],f=t>>>(v>>>0);if(0!=(3&f|0)){var _=(1&f^1)+v|0,s=_<<1,n=(s<<2)+vi+40|0,o=(s+2<<2)+vi+40|0,l=Me[o>>2],b=l+8|0,k=Me[b>>2];if((0|n)==(0|k))Se[vi>>2]=t&(1<<_^-1);else{if(k>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[o>>2]=k,Se[k+12>>2]=n}var u=_<<3;Se[l+4>>2]=3|u;var c=l+(4|u)|0,h=1|Se[c>>2];Se[c>>2]=h;var d=b;a=38;break}if(i>>>0<=Me[vi+8>>2]>>>0){var w=i;a=30;break}if(0!=(0|f)){var p=2<>>12&16,y=A>>>(g>>>0),m=y>>>5&8,S=y>>>(m>>>0),M=S>>>2&4,C=S>>>(M>>>0),R=C>>>1&2,T=C>>>(R>>>0),O=T>>>1&1,N=(m|g|M|R|O)+(T>>>(O>>>0))|0,I=N<<1,P=(I<<2)+vi+40|0,D=(I+2<<2)+vi+40|0,L=Me[D>>2],F=L+8|0,X=Me[F>>2];if((0|P)==(0|X))Se[vi>>2]=t&(1<>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[D>>2]=X,Se[X+12>>2]=P}var j=N<<3,U=j-i|0;Se[L+4>>2]=3|i;var x=L,z=x+i|0;Se[x+(4|i)>>2]=1|U,Se[x+j>>2]=U;var V=Me[vi+8>>2];if(0!=(0|V)){var B=Se[vi+20>>2],H=V>>>2&1073741822,K=(H<<2)+vi+40|0,Y=Me[vi>>2],G=1<<(V>>>3),W=0==(Y&G|0);do{if(!W){var Z=(H+2<<2)+vi+40|0,Q=Me[Z>>2];if(Q>>>0>=Me[vi+16>>2]>>>0){var q=Q,$=Z;break}throw Ka(),"Reached an unreachable!"}Se[vi>>2]=Y|G;var q=K,$=(H+2<<2)+vi+40|0}while(0);var $,q;Se[$>>2]=B,Se[q+12>>2]=B;var J=B+8|0;Se[J>>2]=q;var rr=B+12|0;Se[rr>>2]=K}Se[vi+8>>2]=U,Se[vi+20>>2]=z;var d=F;a=38;break}if(0==(0|Se[vi+4>>2])){var w=i;a=30;break}var ar=ra(i);if(0==(0|ar)){var w=i;a=30;break}var d=ar;a=38;break}if(r>>>0>4294967231){var w=-1;a=30;break}var er=r+11&-8;if(0==(0|Se[vi+4>>2])){var w=er;a=30;break}var ir=ea(er);if(0==(0|ir)){var w=er;a=30;break}var d=ir;a=38;break}while(0);if(30==a){var w,vr=Me[vi+8>>2];if(w>>>0>vr>>>0){var tr=Me[vi+12>>2];if(w>>>0>>0){var fr=tr-w|0;Se[vi+12>>2]=fr;var _r=Me[vi+24>>2],sr=_r;Se[vi+24>>2]=sr+w|0,Se[w+(sr+4)>>2]=1|fr,Se[_r+4>>2]=3|w;var d=_r+8|0}else var nr=aa(w),d=nr}else{var or=vr-w|0,lr=Me[vi+20>>2];if(or>>>0>15){var br=lr;Se[vi+20>>2]=br+w|0,Se[vi+8>>2]=or,Se[w+(br+4)>>2]=1|or,Se[br+vr>>2]=or,Se[lr+4>>2]=3|w}else{Se[vi+8>>2]=0,Se[vi+20>>2]=0,Se[lr+4>>2]=3|vr;var kr=vr+(lr+4)|0,ur=1|Se[kr>>2];Se[kr>>2]=ur}var d=lr+8|0}}var d;return d}function ra(r){var a,e,i,v=Se[vi+4>>2],t=(v&-v)-1|0,f=t>>>12&16,_=t>>>(f>>>0),s=_>>>5&8,n=_>>>(s>>>0),o=n>>>2&4,l=n>>>(o>>>0),b=l>>>1&2,k=l>>>(b>>>0),u=k>>>1&1,c=Me[vi+((s|f|o|b|u)+(k>>>(u>>>0))<<2)+304>>2],h=c,e=h>>2,d=(Se[c+4>>2]&-8)-r|0;r:for(;;)for(var d,h,w=h;;){var w,p=Se[w+16>>2];if(0==(0|p)){var E=Se[w+20>>2];if(0==(0|E))break r;var A=E}else var A=p;var A,g=(Se[A+4>>2]&-8)-r|0;if(g>>>0>>0){var h=A,e=h>>2,d=g;continue r}var w=A}var y=h,m=Me[vi+16>>2],S=y>>>0>>0;do if(!S){var M=y+r|0,C=M;if(y>>>0>=M>>>0)break;var R=Me[e+6],T=Me[e+3],O=(0|T)==(0|h);do if(O){var N=h+20|0,I=Se[N>>2];if(0==(0|I)){var P=h+16|0,D=Se[P>>2];if(0==(0|D)){var L=0,a=L>>2;break}var F=P,X=D}else{var F=N,X=I;i=14}for(;;){var X,F,j=X+20|0,U=Se[j>>2];if(0==(0|U)){var x=X+16|0,z=Me[x>>2];if(0==(0|z))break;var F=x,X=z}else var F=j,X=U}if(F>>>0>>0)throw Ka(),"Reached an unreachable!";Se[F>>2]=0;var L=X,a=L>>2}else{var V=Me[e+2];if(V>>>0>>0)throw Ka(),"Reached an unreachable!";Se[V+12>>2]=T,Se[T+8>>2]=V;var L=T,a=L>>2}while(0);var L,B=0==(0|R);r:do if(!B){var H=h+28|0,K=(Se[H>>2]<<2)+vi+304|0,Y=(0|h)==(0|Se[K>>2]);do{if(Y){if(Se[K>>2]=L,0!=(0|L))break;var G=Se[vi+4>>2]&(1<>2]^-1);Se[vi+4>>2]=G;break r}if(R>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";var W=R+16|0;if((0|Se[W>>2])==(0|h)?Se[W>>2]=L:Se[R+20>>2]=L,0==(0|L))break r}while(0);if(L>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+6]=R;var Z=Me[e+4];if(0!=(0|Z)){if(Z>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+4]=Z,Se[Z+24>>2]=L}var Q=Me[e+5];if(0==(0|Q))break;if(Q>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+5]=Q,Se[Q+24>>2]=L}while(0);if(d>>>0<16){var q=d+r|0;Se[e+1]=3|q;var $=q+(y+4)|0,J=1|Se[$>>2];Se[$>>2]=J}else{Se[e+1]=3|r,Se[r+(y+4)>>2]=1|d,Se[y+d+r>>2]=d;var rr=Me[vi+8>>2];if(0!=(0|rr)){var ar=Me[vi+20>>2],er=rr>>>2&1073741822,ir=(er<<2)+vi+40|0,vr=Me[vi>>2],tr=1<<(rr>>>3),fr=0==(vr&tr|0);do{if(!fr){var _r=(er+2<<2)+vi+40|0,sr=Me[_r>>2];if(sr>>>0>=Me[vi+16>>2]>>>0){var nr=sr,or=_r;break}throw Ka(),"Reached an unreachable!"}Se[vi>>2]=vr|tr;var nr=ir,or=(er+2<<2)+vi+40|0}while(0);var or,nr;Se[or>>2]=ar,Se[nr+12>>2]=ar,Se[ar+8>>2]=nr,Se[ar+12>>2]=ir}Se[vi+8>>2]=d,Se[vi+20>>2]=C}return h+8|0}while(0);throw Ka(),"Reached an unreachable!"}function aa(r){var a,e;0==(0|Se[ti>>2])&&ba();var i=0==(4&Se[vi+440>>2]|0);do{if(i){var v=Se[vi+24>>2],t=0==(0|v);do{if(!t){var f=v,_=ua(f);if(0==(0|_)){e=6;break}var s=Se[ti+8>>2],n=r+47-Se[vi+12>>2]+s&-s;if(n>>>0>=2147483647){e=14;break}var o=re(n);if((0|o)==(Se[_>>2]+Se[_+4>>2]|0)){var l=o,b=n,k=o;e=13;break}var u=o,c=n;e=15;break}e=6}while(0);do if(6==e){var h=re(0);if((0|h)==-1){e=14;break}var d=Se[ti+8>>2],w=d+(r+47)&-d,p=h,E=Se[ti+4>>2],A=E-1|0;if(0==(A&p|0))var g=w;else var g=w-p+(A+p&-E)|0;var g;if(g>>>0>=2147483647){e=14;break}var y=re(g);if((0|y)==(0|h)){var l=h,b=g,k=y;e=13;break}var u=y,c=g;e=15;break}while(0);if(13==e){var k,b,l;if((0|l)!=-1){var m=b,S=l;e=26;break}var u=k,c=b}else if(14==e){var M=4|Se[vi+440>>2];Se[vi+440>>2]=M,e=23;break}var c,u,C=0|-c,R=(0|u)!=-1&c>>>0<2147483647;do{if(R){if(c>>>0>=(r+48|0)>>>0){var T=c;e=21;break}var O=Se[ti+8>>2],N=r+47-c+O&-O;if(N>>>0>=2147483647){var T=c;e=21;break}var I=re(N);if((0|I)==-1){re(C);e=22;break}var T=N+c|0;e=21;break}var T=c;e=21}while(0);if(21==e){var T;if((0|u)!=-1){var m=T,S=u;e=26;break}}var P=4|Se[vi+440>>2];Se[vi+440>>2]=P,e=23;break}e=23}while(0);do if(23==e){var D=Se[ti+8>>2],L=D+(r+47)&-D;if(L>>>0>=2147483647){e=49;break}var F=re(L),X=re(0);if(!((0|X)!=-1&(0|F)!=-1&F>>>0>>0)){e=49;break}var j=X-F|0;if(j>>>0<=(r+40|0)>>>0|(0|F)==-1){e=49;break}var m=j,S=F;e=26;break}while(0);r:do if(26==e){var S,m,U=Se[vi+432>>2]+m|0;Se[vi+432>>2]=U,U>>>0>Me[vi+436>>2]>>>0&&(Se[vi+436>>2]=U);var x=Me[vi+24>>2],z=0==(0|x);a:do if(z){var V=Me[vi+16>>2];0==(0|V)|S>>>0>>0&&(Se[vi+16>>2]=S),Se[vi+444>>2]=S,Se[vi+448>>2]=m,Se[vi+456>>2]=0;var B=Se[ti>>2];Se[vi+36>>2]=B,Se[vi+32>>2]=-1,ha(),ca(S,m-40|0)}else{for(var H=vi+444|0,a=H>>2;;){var H;if(0==(0|H))break;var K=Me[a],Y=H+4|0,G=Me[Y>>2],W=K+G|0;if((0|S)==(0|W)){if(0!=(8&Se[a+3]|0))break;var Z=x;if(!(Z>>>0>=K>>>0&Z>>>0>>0))break;Se[Y>>2]=G+m|0;var Q=Se[vi+24>>2],q=Se[vi+12>>2]+m|0;ca(Q,q);break a}var H=Se[a+2],a=H>>2}S>>>0>2]>>>0&&(Se[vi+16>>2]=S);for(var $=S+m|0,J=vi+444|0;;){var J;if(0==(0|J))break;var rr=0|J,ar=Me[rr>>2];if((0|ar)==(0|$)){if(0!=(8&Se[J+12>>2]|0))break;Se[rr>>2]=S;var er=J+4|0,ir=Se[er>>2]+m|0;Se[er>>2]=ir;var vr=da(S,ar,r),tr=vr;e=50;break r}var J=Se[J+8>>2]}Ma(S,m)}while(0);var fr=Me[vi+12>>2];if(fr>>>0<=r>>>0){e=49;break}var _r=fr-r|0;Se[vi+12>>2]=_r;var sr=Me[vi+24>>2],nr=sr;Se[vi+24>>2]=nr+r|0,Se[r+(nr+4)>>2]=1|_r,Se[sr+4>>2]=3|r;var tr=sr+8|0;e=50;break}while(0);if(49==e){var or=Je();Se[or>>2]=12;var tr=0}var tr;return tr}function ea(r){var a,e,i,v,t,f,_=r>>2,s=0|-r,n=r>>>8,o=0==(0|n);do if(o)var l=0;else{if(r>>>0>16777215){var l=31;break}var b=(n+1048320|0)>>>16&8,k=n<>>16&4,c=k<>>16&2,d=14-(u|b|h)+(c<>>15)|0,l=r>>>((d+7|0)>>>0)&1|d<<1}while(0);var l,w=Me[vi+(l<<2)+304>>2],p=0==(0|w);r:do if(p)var E=0,A=s,g=0;else{if(31==(0|l))var y=0;else var y=25-(l>>>1)|0;for(var y,m=0,S=s,M=w,t=M>>2,C=r<>>0>>0){if((0|T)==(0|r)){var E=M,A=O,g=M;break r}var N=M,I=O}else var N=m,I=S;var I,N,P=Me[t+5],D=Me[((C>>>31<<2)+16>>2)+t],L=0==(0|P)|(0|P)==(0|D)?R:P;if(0==(0|D)){var E=N,A=I,g=L;break r}var m=N,S=I,M=D,t=M>>2,C=C<<1,R=L}}while(0);var g,A,E,F=0==(0|g)&0==(0|E);do if(F){var X=2<>2]&(X|-X);if(0==(0|j)){var U=g;break}var x=(j&-j)-1|0,z=x>>>12&16,V=x>>>(z>>>0),B=V>>>5&8,H=V>>>(B>>>0),K=H>>>2&4,Y=H>>>(K>>>0),G=Y>>>1&2,W=Y>>>(G>>>0),Z=W>>>1&1,U=Se[vi+((B|z|K|G|Z)+(W>>>(Z>>>0))<<2)+304>>2]}else var U=g;while(0);var U,Q=0==(0|U);r:do if(Q)var q=A,$=E,v=$>>2;else for(var J=U,i=J>>2,rr=A,ar=E;;){var ar,rr,J,er=(Se[i+1]&-8)-r|0,ir=er>>>0>>0,vr=ir?er:rr,tr=ir?J:ar,fr=Me[i+4];if(0==(0|fr)){var _r=Me[i+5];if(0==(0|_r)){var q=vr,$=tr,v=$>>2;break r}var J=_r,i=J>>2,rr=vr,ar=tr}else var J=fr,i=J>>2,rr=vr,ar=tr}while(0);var $,q,sr=0==(0|$);r:do{if(!sr){if(q>>>0>=(Se[vi+8>>2]-r|0)>>>0){var nr=0;break}var or=$,e=or>>2,lr=Me[vi+16>>2],br=or>>>0>>0;do if(!br){var kr=or+r|0,ur=kr;if(or>>>0>=kr>>>0)break;var cr=Me[v+6],hr=Me[v+3],dr=(0|hr)==(0|$);do if(dr){var wr=$+20|0,pr=Se[wr>>2];if(0==(0|pr)){var Er=$+16|0,Ar=Se[Er>>2];if(0==(0|Ar)){var gr=0,a=gr>>2;break}var yr=Er,mr=Ar}else{var yr=wr,mr=pr;f=28}for(;;){var mr,yr,Sr=mr+20|0,Mr=Se[Sr>>2];if(0==(0|Mr)){var Cr=mr+16|0,Rr=Me[Cr>>2];if(0==(0|Rr))break;var yr=Cr,mr=Rr}else var yr=Sr,mr=Mr}if(yr>>>0>>0)throw Ka(),"Reached an unreachable!";Se[yr>>2]=0;var gr=mr,a=gr>>2}else{var Tr=Me[v+2];if(Tr>>>0>>0)throw Ka(),"Reached an unreachable!";Se[Tr+12>>2]=hr,Se[hr+8>>2]=Tr;var gr=hr,a=gr>>2}while(0);var gr,Or=0==(0|cr);a:do if(!Or){var Nr=$+28|0,Ir=(Se[Nr>>2]<<2)+vi+304|0,Pr=(0|$)==(0|Se[Ir>>2]);do{if(Pr){if(Se[Ir>>2]=gr,0!=(0|gr))break;var Dr=Se[vi+4>>2]&(1<>2]^-1);Se[vi+4>>2]=Dr;break a}if(cr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";var Lr=cr+16|0;if((0|Se[Lr>>2])==(0|$)?Se[Lr>>2]=gr:Se[cr+20>>2]=gr,0==(0|gr))break a}while(0);if(gr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+6]=cr;var Fr=Me[v+4];if(0!=(0|Fr)){if(Fr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+4]=Fr,Se[Fr+24>>2]=gr}var Xr=Me[v+5];if(0==(0|Xr))break;if(Xr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+5]=Xr,Se[Xr+24>>2]=gr}while(0);var jr=q>>>0<16;a:do if(jr){var Ur=q+r|0;Se[v+1]=3|Ur;var xr=Ur+(or+4)|0,zr=1|Se[xr>>2];Se[xr>>2]=zr}else if(Se[v+1]=3|r,Se[_+(e+1)]=1|q,Se[(q>>2)+e+_]=q,q>>>0<256){var Vr=q>>>2&1073741822,Br=(Vr<<2)+vi+40|0,Hr=Me[vi>>2],Kr=1<<(q>>>3),Yr=0==(Hr&Kr|0);do{if(!Yr){var Gr=(Vr+2<<2)+vi+40|0,Wr=Me[Gr>>2];if(Wr>>>0>=Me[vi+16>>2]>>>0){var Zr=Wr,Qr=Gr;break}throw Ka(),"Reached an unreachable!"}Se[vi>>2]=Hr|Kr;var Zr=Br,Qr=(Vr+2<<2)+vi+40|0}while(0);var Qr,Zr;Se[Qr>>2]=ur,Se[Zr+12>>2]=ur,Se[_+(e+2)]=Zr,Se[_+(e+3)]=Br}else{var qr=kr,$r=q>>>8,Jr=0==(0|$r);do if(Jr)var ra=0;else{if(q>>>0>16777215){var ra=31;break}var aa=($r+1048320|0)>>>16&8,ea=$r<>>16&4,va=ea<>>16&2,fa=14-(ia|aa|ta)+(va<>>15)|0,ra=q>>>((fa+7|0)>>>0)&1|fa<<1}while(0);var ra,_a=(ra<<2)+vi+304|0;Se[_+(e+7)]=ra;var sa=r+(or+16)|0;Se[_+(e+5)]=0,Se[sa>>2]=0;var na=Se[vi+4>>2],oa=1<>2]=la,Se[_a>>2]=qr,Se[_+(e+6)]=_a,Se[_+(e+3)]=qr,Se[_+(e+2)]=qr}else{if(31==(0|ra))var ba=0;else var ba=25-(ra>>>1)|0;for(var ba,ka=q<>2];;){var ua,ka;if((Se[ua+4>>2]&-8|0)==(0|q)){var ca=ua+8|0,ha=Me[ca>>2],da=Me[vi+16>>2],wa=ua>>>0>>0;do if(!wa){if(ha>>>0>>0)break;Se[ha+12>>2]=qr,Se[ca>>2]=qr,Se[_+(e+2)]=ha,Se[_+(e+3)]=ua,Se[_+(e+6)]=0;break a}while(0);throw Ka(),"Reached an unreachable!"}var pa=(ka>>>31<<2)+ua+16|0,Ea=Me[pa>>2];if(0==(0|Ea)){if(pa>>>0>=Me[vi+16>>2]>>>0){Se[pa>>2]=qr,Se[_+(e+6)]=ua,Se[_+(e+3)]=qr,Se[_+(e+2)]=qr;break a}throw Ka(),"Reached an unreachable!"}var ka=ka<<1,ua=Ea}}}while(0);var nr=$+8|0;break r}while(0);throw Ka(),"Reached an unreachable!"}var nr=0}while(0);var nr;return nr}function ia(r){var a;0==(0|Se[ti>>2])&&ba();var e=r>>>0<4294967232;r:do if(e){var i=Me[vi+24>>2];if(0==(0|i)){var v=0;break}var t=Me[vi+12>>2],f=t>>>0>(r+40|0)>>>0;do if(f){var _=Me[ti+8>>2],s=-40-r-1+t+_|0,n=Math.floor((s>>>0)/(_>>>0)),o=(n-1)*_|0,l=i,b=ua(l);if(0!=(8&Se[b+12>>2]|0))break;var k=re(0),a=(b+4|0)>>2;if((0|k)!=(Se[b>>2]+Se[a]|0))break;var u=o>>>0>2147483646?-2147483648-_|0:o,c=0|-u,h=re(c),d=re(0);if(!((0|h)!=-1&d>>>0>>0))break;var w=k-d|0;if((0|k)==(0|d))break;var p=Se[a]-w|0;Se[a]=p;var E=Se[vi+432>>2]-w|0;Se[vi+432>>2]=E;var A=Se[vi+24>>2],g=Se[vi+12>>2]-w|0;ca(A,g);var v=(0|k)!=(0|d);break r}while(0);if(Me[vi+12>>2]>>>0<=Me[vi+28>>2]>>>0){var v=0;break}Se[vi+28>>2]=-1;var v=0}else var v=0;while(0);var v;return 1&v}function va(r){var a,e,i,v,t,f,_,s=r>>2,n=0==(0|r);r:do if(!n){var o=r-8|0,l=o,b=Me[vi+16>>2],k=o>>>0>>0;a:do if(!k){var u=Me[r-4>>2],c=3&u;if(1==(0|c))break;var h=u&-8,f=h>>2,d=r+(h-8)|0,w=d,p=0==(1&u|0);e:do if(p){var E=Me[o>>2];if(0==(0|c))break r;var A=-8-E|0,t=A>>2,g=r+A|0,y=g,m=E+h|0;if(g>>>0>>0)break a;if((0|y)==(0|Se[vi+20>>2])){var v=(r+(h-4)|0)>>2;if(3!=(3&Se[v]|0)){var S=y,i=S>>2,M=m;break}Se[vi+8>>2]=m;var C=Se[v]&-2;Se[v]=C,Se[t+(s+1)]=1|m,Se[d>>2]=m;break r}if(E>>>0<256){var R=Me[t+(s+2)],T=Me[t+(s+3)];if((0|R)!=(0|T)){var O=((E>>>2&1073741822)<<2)+vi+40|0,N=(0|R)!=(0|O)&R>>>0>>0;do if(!N){if(!((0|T)==(0|O)|T>>>0>=b>>>0))break;Se[R+12>>2]=T,Se[T+8>>2]=R;var S=y,i=S>>2,M=m;break e}while(0);throw Ka(),"Reached an unreachable!"}var I=Se[vi>>2]&(1<<(E>>>3)^-1);Se[vi>>2]=I;var S=y,i=S>>2,M=m}else{var P=g,D=Me[t+(s+6)],L=Me[t+(s+3)],F=(0|L)==(0|P);do if(F){var X=A+(r+20)|0,j=Se[X>>2];if(0==(0|j)){var U=A+(r+16)|0,x=Se[U>>2];if(0==(0|x)){var z=0,e=z>>2;break}var V=U,B=x}else{var V=X,B=j;_=21}for(;;){var B,V,H=B+20|0,K=Se[H>>2];if(0==(0|K)){var Y=B+16|0,G=Me[Y>>2];if(0==(0|G))break;var V=Y,B=G}else var V=H,B=K}if(V>>>0>>0)throw Ka(),"Reached an unreachable!";Se[V>>2]=0;var z=B,e=z>>2}else{var W=Me[t+(s+2)];if(W>>>0>>0)throw Ka(),"Reached an unreachable!";Se[W+12>>2]=L,Se[L+8>>2]=W;var z=L,e=z>>2}while(0);var z;if(0==(0|D)){var S=y,i=S>>2,M=m;break}var Z=A+(r+28)|0,Q=(Se[Z>>2]<<2)+vi+304|0,q=(0|P)==(0|Se[Q>>2]);do{if(q){if(Se[Q>>2]=z,0!=(0|z))break;var $=Se[vi+4>>2]&(1<>2]^-1);Se[vi+4>>2]=$;var S=y,i=S>>2,M=m;break e}if(D>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";var J=D+16|0;if((0|Se[J>>2])==(0|P)?Se[J>>2]=z:Se[D+20>>2]=z,0==(0|z)){var S=y,i=S>>2,M=m;break e}}while(0);if(z>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[e+6]=D;var rr=Me[t+(s+4)];if(0!=(0|rr)){if(rr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[e+4]=rr,Se[rr+24>>2]=z}var ar=Me[t+(s+5)];if(0==(0|ar)){var S=y,i=S>>2,M=m;break}if(ar>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[e+5]=ar,Se[ar+24>>2]=z;var S=y,i=S>>2,M=m}}else var S=l,i=S>>2,M=h;while(0);var M,S,er=S;if(er>>>0>=d>>>0)break;var ir=r+(h-4)|0,vr=Me[ir>>2];if(0==(1&vr|0))break;var tr=0==(2&vr|0);do{if(tr){if((0|w)==(0|Se[vi+24>>2])){var fr=Se[vi+12>>2]+M|0;Se[vi+12>>2]=fr,Se[vi+24>>2]=S;var _r=1|fr;if(Se[i+1]=_r,(0|S)==(0|Se[vi+20>>2])&&(Se[vi+20>>2]=0,Se[vi+8>>2]=0),fr>>>0<=Me[vi+28>>2]>>>0)break r;ia(0);break r}if((0|w)==(0|Se[vi+20>>2])){var sr=Se[vi+8>>2]+M|0;Se[vi+8>>2]=sr,Se[vi+20>>2]=S;var nr=1|sr;Se[i+1]=nr;var or=er+sr|0;Se[or>>2]=sr;break r}var lr=(vr&-8)+M|0,br=vr>>>3,kr=vr>>>0<256;e:do if(kr){var ur=Me[s+f],cr=Me[((4|h)>>2)+s];if((0|ur)!=(0|cr)){var hr=((vr>>>2&1073741822)<<2)+vi+40|0,dr=(0|ur)==(0|hr);do{if(!dr){if(ur>>>0>2]>>>0){_=66;break}_=63;break}_=63}while(0);do if(63==_){if((0|cr)!=(0|hr)&&cr>>>0>2]>>>0)break;Se[ur+12>>2]=cr,Se[cr+8>>2]=ur;break e}while(0);throw Ka(),"Reached an unreachable!"}var wr=Se[vi>>2]&(1<>2]=wr}else{var pr=d,Er=Me[f+(s+4)],Ar=Me[((4|h)>>2)+s],gr=(0|Ar)==(0|pr);do if(gr){var yr=h+(r+12)|0,mr=Se[yr>>2];if(0==(0|mr)){var Sr=h+(r+8)|0,Mr=Se[Sr>>2];if(0==(0|Mr)){var Cr=0,a=Cr>>2;break}var Rr=Sr,Tr=Mr}else{var Rr=yr,Tr=mr;_=73}for(;;){var Tr,Rr,Or=Tr+20|0,Nr=Se[Or>>2];if(0==(0|Nr)){var Ir=Tr+16|0,Pr=Me[Ir>>2];if(0==(0|Pr))break;var Rr=Ir,Tr=Pr}else var Rr=Or,Tr=Nr}if(Rr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[Rr>>2]=0;var Cr=Tr,a=Cr>>2}else{var Dr=Me[s+f];if(Dr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[Dr+12>>2]=Ar, -Se[Ar+8>>2]=Dr;var Cr=Ar,a=Cr>>2}while(0);var Cr;if(0==(0|Er))break;var Lr=h+(r+20)|0,Fr=(Se[Lr>>2]<<2)+vi+304|0,Xr=(0|pr)==(0|Se[Fr>>2]);do{if(Xr){if(Se[Fr>>2]=Cr,0!=(0|Cr))break;var jr=Se[vi+4>>2]&(1<>2]^-1);Se[vi+4>>2]=jr;break e}if(Er>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";var Ur=Er+16|0;if((0|Se[Ur>>2])==(0|pr)?Se[Ur>>2]=Cr:Se[Er+20>>2]=Cr,0==(0|Cr))break e}while(0);if(Cr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+6]=Er;var xr=Me[f+(s+2)];if(0!=(0|xr)){if(xr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+4]=xr,Se[xr+24>>2]=Cr}var zr=Me[f+(s+3)];if(0==(0|zr))break;if(zr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[a+5]=zr,Se[zr+24>>2]=Cr}while(0);if(Se[i+1]=1|lr,Se[er+lr>>2]=lr,(0|S)!=(0|Se[vi+20>>2])){var Vr=lr;break}Se[vi+8>>2]=lr;break r}Se[ir>>2]=vr&-2,Se[i+1]=1|M,Se[er+M>>2]=M;var Vr=M}while(0);var Vr;if(Vr>>>0<256){var Br=Vr>>>2&1073741822,Hr=(Br<<2)+vi+40|0,Kr=Me[vi>>2],Yr=1<<(Vr>>>3),Gr=0==(Kr&Yr|0);do{if(!Gr){var Wr=(Br+2<<2)+vi+40|0,Zr=Me[Wr>>2];if(Zr>>>0>=Me[vi+16>>2]>>>0){var Qr=Zr,qr=Wr;break}throw Ka(),"Reached an unreachable!"}Se[vi>>2]=Kr|Yr;var Qr=Hr,qr=(Br+2<<2)+vi+40|0}while(0);var qr,Qr;Se[qr>>2]=S,Se[Qr+12>>2]=S,Se[i+2]=Qr,Se[i+3]=Hr;break r}var $r=S,Jr=Vr>>>8,ra=0==(0|Jr);do if(ra)var aa=0;else{if(Vr>>>0>16777215){var aa=31;break}var ea=(Jr+1048320|0)>>>16&8,va=Jr<>>16&4,_a=va<>>16&2,na=14-(fa|ea|sa)+(_a<>>15)|0,aa=Vr>>>((na+7|0)>>>0)&1|na<<1}while(0);var aa,oa=(aa<<2)+vi+304|0;Se[i+7]=aa,Se[i+5]=0,Se[i+4]=0;var la=Se[vi+4>>2],ba=1<>2]=ua,Se[oa>>2]=$r,Se[i+6]=oa,Se[i+3]=S,Se[i+2]=S}else{if(31==(0|aa))var ca=0;else var ca=25-(aa>>>1)|0;for(var ca,ha=Vr<>2];;){var da,ha;if((Se[da+4>>2]&-8|0)==(0|Vr)){var wa=da+8|0,pa=Me[wa>>2],Ea=Me[vi+16>>2],Aa=da>>>0>>0;do if(!Aa){if(pa>>>0>>0)break;Se[pa+12>>2]=$r,Se[wa>>2]=$r,Se[i+2]=pa,Se[i+3]=da,Se[i+6]=0;break e}while(0);throw Ka(),"Reached an unreachable!"}var ga=(ha>>>31<<2)+da+16|0,ya=Me[ga>>2];if(0==(0|ya)){if(ga>>>0>=Me[vi+16>>2]>>>0){Se[ga>>2]=$r,Se[i+6]=da,Se[i+3]=S,Se[i+2]=S;break e}throw Ka(),"Reached an unreachable!"}var ha=ha<<1,da=ya}}while(0);var ma=Se[vi+32>>2]-1|0;if(Se[vi+32>>2]=ma,0!=(0|ma))break r;ta();break r}while(0);throw Ka(),"Reached an unreachable!"}while(0)}function ta(){var r=Se[vi+452>>2],a=0==(0|r);r:do if(!a)for(var e=r;;){var e,i=Se[e+8>>2];if(0==(0|i))break r;var e=i}while(0);Se[vi+32>>2]=-1}function fa(r,a){if(0==(0|r))var e=Jr(a),i=e;else var v=la(r,a),i=v;var i;return i}function _a(r,a){var e,i=r>>>0<9;do if(i)var v=Jr(a),t=v;else{var f=r>>>0<16?16:r,_=0==(f-1&f|0);r:do if(_)var s=f;else{if(f>>>0<=16){var s=16;break}for(var n=16;;){var n,o=n<<1;if(o>>>0>=f>>>0){var s=o;break r}var n=o}}while(0);var s;if((-64-s|0)>>>0>a>>>0){if(a>>>0<11)var l=16;else var l=a+11&-8;var l,b=Jr(l+(s+12)|0);if(0==(0|b)){var t=0;break}var k=b-8|0;if(0==((b>>>0)%(s>>>0)|0))var u=k,c=0;else{var h=b+(s-1)&-s,d=h-8|0,w=k;if((d-w|0)>>>0>15)var p=d;else var p=h+(s-8)|0;var p,E=p-w|0,e=(b-4|0)>>2,A=Se[e],g=(A&-8)-E|0;if(0==(3&A|0)){var y=Se[k>>2]+E|0;Se[p>>2]=y,Se[p+4>>2]=g;var u=p,c=0}else{var m=p+4|0,S=g|1&Se[m>>2]|2;Se[m>>2]=S;var M=g+(p+4)|0,C=1|Se[M>>2];Se[M>>2]=C;var R=E|1&Se[e]|2;Se[e]=R;var T=b+(E-4)|0,O=1|Se[T>>2];Se[T>>2]=O;var u=p,c=b}}var c,u,N=u+4|0,I=Me[N>>2],P=0==(3&I|0);do if(P)var D=0;else{var L=I&-8;if(L>>>0<=(l+16|0)>>>0){var D=0;break}var F=L-l|0;Se[N>>2]=l|1&I|2,Se[u+(4|l)>>2]=3|F;var X=u+(4|L)|0,j=1|Se[X>>2];Se[X>>2]=j;var D=l+(u+8)|0}while(0);var D;0!=(0|c)&&va(c),0!=(0|D)&&va(D);var t=u+8|0}else{var U=Je();Se[U>>2]=12;var t=0}}while(0);var t;return t}function sa(r,a,e,i){var v,t;0==(0|Se[ti>>2])&&ba();var f=0==(0|i),_=0==(0|r);do{if(f){if(_){var s=Jr(0),n=s;t=30;break}var o=r<<2;if(o>>>0<11){var l=0,b=16;t=9;break}var l=0,b=o+11&-8;t=9;break}if(_){var n=i;t=30;break}var l=i,b=0;t=9;break}while(0);do if(9==t){var b,l,k=0==(1&e|0);r:do if(k){if(_){var u=0,c=0;break}for(var h=0,d=0;;){var d,h,w=Me[a+(d<<2)>>2];if(w>>>0<11)var p=16;else var p=w+11&-8;var p,E=p+h|0,A=d+1|0;if((0|A)==(0|r)){var u=0,c=E;break r}var h=E,d=A}}else{var g=Me[a>>2];if(g>>>0<11)var y=16;else var y=g+11&-8;var y,u=y,c=y*r|0}while(0);var c,u,m=Jr(b-4+c|0);if(0==(0|m)){var n=0;break}var S=m-8|0,M=Se[m-4>>2]&-8;if(0!=(2&e|0)){var C=-4-b+M|0;Fa(m,0,C,1)}if(0==(0|l)){var R=m+c|0,T=M-c|3;Se[m+(c-4)>>2]=T;var O=R,v=O>>2,N=c}else var O=l,v=O>>2,N=M;var N,O;Se[v]=m;var I=r-1|0,P=0==(0|I);r:do if(P)var D=S,L=N;else if(0==(0|u))for(var F=S,X=N,j=0;;){var j,X,F,U=Me[a+(j<<2)>>2];if(U>>>0<11)var x=16;else var x=U+11&-8;var x,z=X-x|0;Se[F+4>>2]=3|x;var V=F+x|0,B=j+1|0;if(Se[(B<<2>>2)+v]=x+(F+8)|0,(0|B)==(0|I)){var D=V,L=z;break r}var F=V,X=z,j=B}else for(var H=3|u,K=u+8|0,Y=S,G=N,W=0;;){var W,G,Y,Z=G-u|0;Se[Y+4>>2]=H;var Q=Y+u|0,q=W+1|0;if(Se[(q<<2>>2)+v]=Y+K|0,(0|q)==(0|I)){var D=Q,L=Z;break r}var Y=Q,G=Z,W=q}while(0);var L,D;Se[D+4>>2]=3|L;var n=O}while(0);var n;return n}function na(r){var a=r>>2;0==(0|Se[ti>>2])&&ba();var e=Me[vi+24>>2];if(0==(0|e))var i=0,v=0,t=0,f=0,_=0,s=0,n=0;else{for(var o=Me[vi+12>>2],l=o+40|0,b=vi+444|0,k=l,u=l,c=1;;){var c,u,k,b,h=Me[b>>2],d=h+8|0;if(0==(7&d|0))var w=0;else var w=7&-d;for(var w,p=b+4|0,E=h+w|0,A=c,g=u,y=k;;){var y,g,A,E;if(E>>>0>>0)break;if(E>>>0>=(h+Se[p>>2]|0)>>>0|(0|E)==(0|e))break;var m=Se[E+4>>2];if(7==(0|m))break;var S=m&-8,M=S+y|0;if(1==(3&m|0))var C=A+1|0,R=S+g|0;else var C=A,R=g;var R,C,E=E+S|0,A=C,g=R,y=M}var T=Me[b+8>>2];if(0==(0|T))break;var b=T,k=y,u=g,c=A}var O=Se[vi+432>>2],i=y,v=A,t=o,f=g,_=O-y|0,s=Se[vi+436>>2],n=O-g|0}var n,s,_,f,t,v,i;Se[a]=i,Se[a+1]=v,Se[a+2]=0,Se[a+3]=0,Se[a+4]=_,Se[a+5]=s,Se[a+6]=0,Se[a+7]=n,Se[a+8]=f,Se[a+9]=t}function oa(){0==(0|Se[ti>>2])&&ba();var r=Me[vi+24>>2],a=0==(0|r);r:do if(a)var e=0,i=0,v=0;else for(var t=Se[vi+436>>2],f=Me[vi+432>>2],_=vi+444|0,s=f-40-Se[vi+12>>2]|0;;){var s,_,n=Me[_>>2],o=n+8|0;if(0==(7&o|0))var l=0;else var l=7&-o;for(var l,b=_+4|0,k=n+l|0,u=s;;){var u,k;if(k>>>0>>0)break;if(k>>>0>=(n+Se[b>>2]|0)>>>0|(0|k)==(0|r))break;var c=Se[k+4>>2];if(7==(0|c))break;var h=c&-8,d=1==(3&c|0)?h:0,w=u-d|0,k=k+h|0,u=w}var p=Me[_+8>>2];if(0==(0|p)){var e=t,i=f,v=u;break r}var _=p,s=u}while(0);var v,i,e,E=Se[Se[qe>>2]+12>>2],A=(Qa(E,0|He.__str339,(ne=Oe,Oe+=4,Se[ne>>2]=e,ne)),Se[Se[qe>>2]+12>>2]),g=(Qa(A,0|He.__str1340,(ne=Oe,Oe+=4,Se[ne>>2]=i,ne)),Se[Se[qe>>2]+12>>2]);Qa(g,0|He.__str2341,(ne=Oe,Oe+=4,Se[ne>>2]=v,ne))}function la(r,a){var e,i,v,t=a>>>0>4294967231;r:do{if(!t){var f=r-8|0,_=f,i=(r-4|0)>>2,s=Me[i],n=s&-8,o=n-8|0,l=r+o|0,b=f>>>0>2]>>>0;do if(!b){var k=3&s;if(!(1!=(0|k)&(0|o)>-8))break;var e=(r+(n-4)|0)>>2;if(0==(1&Se[e]|0))break;if(a>>>0<11)var u=16;else var u=a+11&-8;var u,c=0==(0|k);do{if(c){var h=ka(_,u),d=0,w=h;v=17;break}if(n>>>0>>0){if((0|l)!=(0|Se[vi+24>>2])){v=21;break}var p=Se[vi+12>>2]+n|0;if(p>>>0<=u>>>0){v=21;break}var E=p-u|0,A=r+(u-8)|0;Se[i]=u|1&s|2;var g=1|E;Se[r+(u-4)>>2]=g,Se[vi+24>>2]=A,Se[vi+12>>2]=E;var d=0,w=_;v=17;break}var y=n-u|0;if(y>>>0<=15){var d=0,w=_;v=17;break}Se[i]=u|1&s|2,Se[r+(u-4)>>2]=3|y;var m=1|Se[e];Se[e]=m;var d=r+u|0,w=_;v=17;break}while(0);do if(17==v){var w,d;if(0==(0|w))break;0!=(0|d)&&va(d);var S=w+8|0;break r}while(0);var M=Jr(a);if(0==(0|M)){var S=0;break r}var C=0==(3&Se[i]|0)?8:4,R=n-C|0,T=R>>>0>>0?R:a;Pa(M,r,T,1),va(r);var S=M;break r}while(0);throw Ka(),"Reached an unreachable!"}var O=Je();Se[O>>2]=12;var S=0}while(0);var S;return S}function ba(){if(0==(0|Se[ti>>2])){var r=qa(8);if(0!=(r-1&r|0))throw Ka(),"Reached an unreachable!";Se[ti+8>>2]=r,Se[ti+4>>2]=r,Se[ti+12>>2]=-1,Se[ti+16>>2]=2097152,Se[ti+20>>2]=0,Se[vi+440>>2]=0;var a=$a(0);Se[ti>>2]=a&-16^1431655768}}function ka(r,a){var e=Se[r+4>>2]&-8,i=a>>>0<256;do if(i)var v=0;else{if(e>>>0>=(a+4|0)>>>0&&(e-a|0)>>>0<=Se[ti+8>>2]<<1>>>0){var v=r;break}var v=0}while(0);var v;return v}function ua(r){for(var a,e=vi+444|0,a=e>>2;;){var e,i=Me[a];if(i>>>0<=r>>>0&&(i+Se[a+1]|0)>>>0>r>>>0){var v=e;break}var t=Me[a+2];if(0==(0|t)){var v=0;break}var e=t,a=e>>2}var v;return v}function ca(r,a){var e=r,i=r+8|0;if(0==(7&i|0))var v=0;else var v=7&-i;var v,t=a-v|0;Se[vi+24>>2]=e+v|0,Se[vi+12>>2]=t,Se[v+(e+4)>>2]=1|t,Se[a+(e+4)>>2]=40;var f=Se[ti+16>>2];Se[vi+28>>2]=f}function ha(){for(var r=0;;){var r,a=r<<1,e=(a<<2)+vi+40|0;Se[vi+(a+3<<2)+40>>2]=e,Se[vi+(a+2<<2)+40>>2]=e;var i=r+1|0;if(32==(0|i))break;var r=i}}function da(r,a,e){var i,v,t,f,_=a>>2,s=r>>2,n=r+8|0;if(0==(7&n|0))var o=0;else var o=7&-n;var o,l=a+8|0;if(0==(7&l|0))var b=0,t=b>>2;else var b=7&-l,t=b>>2;var b,k=a+b|0,u=k,c=o+e|0,v=c>>2,h=r+c|0,d=h,w=k-(r+o)-e|0;Se[(o+4>>2)+s]=3|e;var p=(0|u)==(0|Se[vi+24>>2]);r:do if(p){var E=Se[vi+12>>2]+w|0;Se[vi+12>>2]=E,Se[vi+24>>2]=d;var A=1|E;Se[v+(s+1)]=A}else if((0|u)==(0|Se[vi+20>>2])){var g=Se[vi+8>>2]+w|0;Se[vi+8>>2]=g,Se[vi+20>>2]=d;var y=1|g;Se[v+(s+1)]=y;var m=r+g+c|0;Se[m>>2]=g}else{var S=Me[t+(_+1)];if(1==(3&S|0)){var M=S&-8,C=S>>>3,R=S>>>0<256;a:do if(R){var T=Me[((8|b)>>2)+_],O=Me[t+(_+3)];if((0|T)!=(0|O)){var N=((S>>>2&1073741822)<<2)+vi+40|0,I=(0|T)==(0|N);do{if(!I){if(T>>>0>2]>>>0){f=18;break}f=15;break}f=15}while(0);do if(15==f){if((0|O)!=(0|N)&&O>>>0>2]>>>0)break;Se[T+12>>2]=O,Se[O+8>>2]=T;break a}while(0);throw Ka(),"Reached an unreachable!"}var P=Se[vi>>2]&(1<>2]=P}else{var D=k,L=Me[((24|b)>>2)+_],F=Me[t+(_+3)],X=(0|F)==(0|D);do if(X){var j=16|b,U=j+(a+4)|0,x=Se[U>>2];if(0==(0|x)){var z=a+j|0,V=Se[z>>2];if(0==(0|V)){var B=0,i=B>>2;break}var H=z,K=V}else{var H=U,K=x;f=25}for(;;){var K,H,Y=K+20|0,G=Se[Y>>2];if(0==(0|G)){var W=K+16|0,Z=Me[W>>2];if(0==(0|Z))break;var H=W,K=Z}else var H=Y,K=G}if(H>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[H>>2]=0;var B=K,i=B>>2}else{var Q=Me[((8|b)>>2)+_];if(Q>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[Q+12>>2]=F,Se[F+8>>2]=Q;var B=F,i=B>>2}while(0);var B;if(0==(0|L))break;var q=b+(a+28)|0,$=(Se[q>>2]<<2)+vi+304|0,J=(0|D)==(0|Se[$>>2]);do{if(J){if(Se[$>>2]=B,0!=(0|B))break;var rr=Se[vi+4>>2]&(1<>2]^-1);Se[vi+4>>2]=rr;break a}if(L>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";var ar=L+16|0;if((0|Se[ar>>2])==(0|D)?Se[ar>>2]=B:Se[L+20>>2]=B,0==(0|B))break a}while(0);if(B>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[i+6]=L;var er=16|b,ir=Me[(er>>2)+_];if(0!=(0|ir)){if(ir>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[i+4]=ir,Se[ir+24>>2]=B}var vr=Me[(er+4>>2)+_];if(0==(0|vr))break;if(vr>>>0>2]>>>0)throw Ka(),"Reached an unreachable!";Se[i+5]=vr,Se[vr+24>>2]=B}while(0);var tr=a+(M|b)|0,fr=M+w|0}else var tr=u,fr=w;var fr,tr,_r=tr+4|0,sr=Se[_r>>2]&-2;if(Se[_r>>2]=sr,Se[v+(s+1)]=1|fr,Se[(fr>>2)+s+v]=fr,fr>>>0<256){var nr=fr>>>2&1073741822,or=(nr<<2)+vi+40|0,lr=Me[vi>>2],br=1<<(fr>>>3),kr=0==(lr&br|0);do{if(!kr){var ur=(nr+2<<2)+vi+40|0,cr=Me[ur>>2];if(cr>>>0>=Me[vi+16>>2]>>>0){var hr=cr,dr=ur;break}throw Ka(),"Reached an unreachable!"}Se[vi>>2]=lr|br;var hr=or,dr=(nr+2<<2)+vi+40|0}while(0);var dr,hr;Se[dr>>2]=d,Se[hr+12>>2]=d,Se[v+(s+2)]=hr,Se[v+(s+3)]=or}else{var wr=h,pr=fr>>>8,Er=0==(0|pr);do if(Er)var Ar=0;else{if(fr>>>0>16777215){var Ar=31;break}var gr=(pr+1048320|0)>>>16&8,yr=pr<>>16&4,Sr=yr<>>16&2,Cr=14-(mr|gr|Mr)+(Sr<>>15)|0,Ar=fr>>>((Cr+7|0)>>>0)&1|Cr<<1}while(0);var Ar,Rr=(Ar<<2)+vi+304|0;Se[v+(s+7)]=Ar;var Tr=c+(r+16)|0;Se[v+(s+5)]=0,Se[Tr>>2]=0;var Or=Se[vi+4>>2],Nr=1<>2]=Ir,Se[Rr>>2]=wr,Se[v+(s+6)]=Rr,Se[v+(s+3)]=wr,Se[v+(s+2)]=wr}else{if(31==(0|Ar))var Pr=0;else var Pr=25-(Ar>>>1)|0;for(var Pr,Dr=fr<>2];;){var Lr,Dr;if((Se[Lr+4>>2]&-8|0)==(0|fr)){var Fr=Lr+8|0,Xr=Me[Fr>>2],jr=Me[vi+16>>2],Ur=Lr>>>0>>0;do if(!Ur){if(Xr>>>0>>0)break;Se[Xr+12>>2]=wr,Se[Fr>>2]=wr,Se[v+(s+2)]=Xr,Se[v+(s+3)]=Lr,Se[v+(s+6)]=0;break r}while(0);throw Ka(),"Reached an unreachable!"}var xr=(Dr>>>31<<2)+Lr+16|0,zr=Me[xr>>2];if(0==(0|zr)){if(xr>>>0>=Me[vi+16>>2]>>>0){Se[xr>>2]=wr,Se[v+(s+6)]=Lr,Se[v+(s+3)]=wr,Se[v+(s+2)]=wr;break r}throw Ka(),"Reached an unreachable!"}var Dr=Dr<<1,Lr=zr}}}}while(0);return r+(8|o)|0}function wa(r){return 0|He.__str3342}function pa(r){return 0|He.__str14343}function Ea(r){Se[r>>2]=si+8|0}function Aa(r){0!=(0|r)&&va(r)}function ga(r){ya(r);var a=r;Aa(a)}function ya(r){var a=0|r;Ye(a)}function ma(r){var a=0|r;Ea(a),Se[r>>2]=ni+8|0}function Sa(r){var a=0|r;ya(a);var e=r;Aa(e)}function Ma(r,a){var e,i,v=Me[vi+24>>2],i=v>>2,t=v,f=ua(t),_=Se[f>>2],s=Se[f+4>>2],n=_+s|0,o=_+(s-39)|0;if(0==(7&o|0))var l=0;else var l=7&-o;var l,b=_+(s-47)+l|0,k=b>>>0<(v+16|0)>>>0?t:b,u=k+8|0,e=u>>2,c=u,h=r,d=a-40|0;ca(h,d);var w=k+4|0;Se[w>>2]=27,Se[e]=Se[vi+444>>2],Se[e+1]=Se[vi+448>>2],Se[e+2]=Se[vi+452>>2],Se[e+3]=Se[vi+456>>2],Se[vi+444>>2]=r,Se[vi+448>>2]=a,Se[vi+456>>2]=0,Se[vi+452>>2]=c;var p=k+28|0;Se[p>>2]=7;var E=(k+32|0)>>>0>>0;r:do if(E)for(var A=p;;){var A,g=A+4|0;if(Se[g>>2]=7,(A+8|0)>>>0>=n>>>0)break r;var A=g}while(0);var y=(0|k)==(0|t);r:do if(!y){var m=k-v|0,S=t+m|0,M=m+(t+4)|0,C=Se[M>>2]&-2;Se[M>>2]=C;var R=1|m;Se[i+1]=R;var T=S;if(Se[T>>2]=m,m>>>0<256){var O=m>>>2&1073741822,N=(O<<2)+vi+40|0,I=Me[vi>>2],P=1<<(m>>>3),D=0==(I&P|0);do{if(!D){var L=(O+2<<2)+vi+40|0,F=Me[L>>2];if(F>>>0>=Me[vi+16>>2]>>>0){var X=F,j=L;break}throw Ka(),"Reached an unreachable!"}var U=I|P;Se[vi>>2]=U;var X=N,j=(O+2<<2)+vi+40|0}while(0);var j,X;Se[j>>2]=v,Se[X+12>>2]=v,Se[i+2]=X,Se[i+3]=N}else{var x=v,z=m>>>8,V=0==(0|z);do if(V)var B=0;else{if(m>>>0>16777215){var B=31;break}var H=(z+1048320|0)>>>16&8,K=z<>>16&4,G=K<>>16&2,Z=14-(Y|H|W)+(G<>>15)|0,B=m>>>((Z+7|0)>>>0)&1|Z<<1}while(0);var B,Q=(B<<2)+vi+304|0;Se[i+7]=B,Se[i+5]=0,Se[i+4]=0;var q=Se[vi+4>>2],$=1<>2]=J,Se[Q>>2]=x,Se[i+6]=Q,Se[i+3]=v,Se[i+2]=v}else{if(31==(0|B))var rr=0;else var rr=25-(B>>>1)|0;for(var rr,ar=m<>2];;){var er,ar;if((Se[er+4>>2]&-8|0)==(0|m)){var ir=er+8|0,vr=Me[ir>>2],tr=Me[vi+16>>2],fr=er>>>0>>0;do if(!fr){if(vr>>>0>>0)break;Se[vr+12>>2]=x,Se[ir>>2]=x,Se[i+2]=vr,Se[i+3]=er,Se[i+6]=0;break r}while(0);throw Ka(),"Reached an unreachable!"}var _r=(ar>>>31<<2)+er+16|0,sr=Me[_r>>2];if(0==(0|sr)){if(_r>>>0>=Me[vi+16>>2]>>>0){Se[_r>>2]=x,Se[i+6]=er,Se[i+3]=v,Se[i+2]=v;break r}throw Ka(),"Reached an unreachable!"}var ar=ar<<1,er=sr}}}}while(0)}function Ca(r){return d(r)}function Ra(r,a){var e=0;do Ae[r+e]=Ae[a+e],e++;while(0!=Ae[a+e-1]);return r}function Ta(){var r=Ta;return r.LLVM_SAVEDSTACKS||(r.LLVM_SAVEDSTACKS=[]),r.LLVM_SAVEDSTACKS.push(le.stackSave()),r.LLVM_SAVEDSTACKS.length-1}function Oa(r){var a=Ta,e=a.LLVM_SAVEDSTACKS[r];a.LLVM_SAVEDSTACKS.splice(r,1),le.stackRestore(e)}function Na(r,a,e){for(var i=0;it?1:-1;i++}return 0}function Ia(r,a){var e=Ca(r),i=0;do Ae[r+e+i]=Ae[a+i],i++;while(0!=Ae[a+i-1]);return r}function Pa(r,a,e,i){if(e>=20&&a%2==r%2)if(a%4==r%4){for(var v=a+e;a%4;)Ae[r++]=Ae[a++];for(var t=a>>2,f=r>>2,_=v>>2;t<_;)Se[f++]=Se[t++];for(a=t<<2,r=f<<2;a>1,n=r>>1,o=v>>1;st?1:-1}return 0}function Fa(r,a,e,i){if(e>=20){for(var v=r+e;r%4;)Ae[r++]=a;a<0&&(a+=256);for(var t=r>>2,f=v>>2,_=a|a<<8|a<<16|a<<24;t>2],xe[1]=Se[a+_+4>>2],e=ze[0]):"i64"==r?e=[Se[a+_>>2],Se[a+_+4>>2]]:(r="i32",e=Se[a+_>>2]),_+=le.getNativeFieldSize(r),e}for(var i,v,t,f=r,_=0,s=[];;){var n=f;if(i=Ae[f],0===i)break;if(v=Ae[f+1],i=="%".charCodeAt(0)){var o=!1,l=!1,b=!1,k=!1;r:for(;;){switch(v){case"+".charCodeAt(0):o=!0;break;case"-".charCodeAt(0):l=!0;break;case"#".charCodeAt(0):b=!0;break;case"0".charCodeAt(0):if(k)break r;k=!0;break;default:break r}f++,v=Ae[f+1]}var u=0;if(v=="*".charCodeAt(0))u=e("i32"),f++,v=Ae[f+1];else for(;v>="0".charCodeAt(0)&&v<="9".charCodeAt(0);)u=10*u+(v-"0".charCodeAt(0)),f++,v=Ae[f+1];var c=!1;if(v==".".charCodeAt(0)){var h=0;if(c=!0,f++,v=Ae[f+1],v=="*".charCodeAt(0))h=e("i32"),f++;else for(;;){var d=Ae[f+1];if(d<"0".charCodeAt(0)||d>"9".charCodeAt(0))break;h=10*h+(d-"0".charCodeAt(0)),f++}v=Ae[f+1]}else var h=6;var E;switch(String.fromCharCode(v)){case"h":var A=Ae[f+2];A=="h".charCodeAt(0)?(f++,E=1):E=2;break;case"l":var A=Ae[f+2];A=="l".charCodeAt(0)?(f++,E=8):E=4;break;case"L":case"q":case"j":E=8;break;case"z":case"t":case"I":E=4;break;default:E=null}if(E&&f++,v=Ae[f+1],["d","i","u","o","x","X","p"].indexOf(String.fromCharCode(v))!=-1){var m=v=="d".charCodeAt(0)||v=="i".charCodeAt(0);E=E||4;var t=e("i"+8*E);if(8==E&&(t=le.makeBigInt(t[0],t[1],v=="u".charCodeAt(0))),E<=4){var S=Math.pow(256,E)-1;t=(m?y:g)(t&S,8*E)}var M,C=Math.abs(t),R="";if(v=="d".charCodeAt(0)||v=="i".charCodeAt(0))M=y(t,8*E,1).toString(10);else if(v=="u".charCodeAt(0))M=g(t,8*E,1).toString(10),t=Math.abs(t);else if(v=="o".charCodeAt(0))M=(b?"0":"")+C.toString(8);else if(v=="x".charCodeAt(0)||v=="X".charCodeAt(0)){if(R=b?"0x":"",t<0){t=-t,M=(C-1).toString(16);for(var T=[],O=0;OP&&P>=-4?(v=(v=="g".charCodeAt(0)?"f":"F").charCodeAt(0),h-=P+1):(v=(v=="g".charCodeAt(0)?"e":"E").charCodeAt(0),h--),I=Math.min(h,20)}v=="e".charCodeAt(0)||v=="E".charCodeAt(0)?(M=t.toExponential(I),/[eE][-+]\\d$/.test(M)&&(M=M.slice(0,-1)+"0"+M.slice(-1))):v!="f".charCodeAt(0)&&v!="F".charCodeAt(0)||(M=t.toFixed(I));var D=M.split("e");if(N&&!b)for(;D[0].length>1&&D[0].indexOf(".")!=-1&&("0"==D[0].slice(-1)||"."==D[0].slice(-1));)D[0]=D[0].slice(0,-1);else for(b&&M.indexOf(".")==-1&&(D[0]+=".");h>I++;)D[0]+="0";M=D[0]+(D.length>1?"e"+D[1]:""),v=="E".charCodeAt(0)&&(M=M.toUpperCase()),o&&t>=0&&(M="+"+M)}else M=(t<0?"-":"")+"inf",k=!1;for(;M.lengthh&&(L=L.slice(0,h))):L=p("(null)",!0),!l)for(;L.length0;)s.push(" ".charCodeAt(0));l||s.push(e("i8"))}else if(v=="n".charCodeAt(0)){var X=e("i32*");Se[X>>2]=s.length}else if(v=="%".charCodeAt(0))s.push(i);else for(var O=n;O="0".charCodeAt(0)&&r<="9".charCodeAt(0)}function Ha(r){for(var a;(a=Ae[r])&&Va(a);)r++;if(!a||!Ba(a))return 0;for(var e=r;(a=Ae[e])&&Ba(a);)e++;return Math.floor(Number(s(r).substr(0,e-r)))}function Ka(r){throw ke=!0,"ABORT: "+r+", at "+(new Error).stack}function Ya(r){return Ya.ret||(Ya.ret=_([0],"i32",we)),Se[Ya.ret>>2]=r,r}function Ga(r,a,e,i){var v=$e.streams[r];if(!v||v.object.isDevice)return Ya(Ge.EBADF),-1;if(v.isWrite){if(v.object.isFolder)return Ya(Ge.EISDIR),-1;if(e<0||i<0)return Ya(Ge.EINVAL),-1;for(var t=v.object.contents;t.length>2]=a),a}function Ja(){return Ya.ret}function re(r){var a=re;a.called||(Ie=o(Ie),a.called=!0);var e=Ie;return 0!=r&&le.staticAlloc(r),e}function ae(){return Se[ae.buf>>2]}function ee(r){r=r||Module.arguments,k();var a=null;return Module._main&&(a=Module.callMain(r),Module.noExitRuntime||u()),a}var ie=[],ve=false,te="object"==typeof window,fe="function"==typeof importScripts,_e=!te&&!ve&&!fe;if(ve){print=function(r){process.stdout.write(r+"\\n")},printErr=function(r){process.stderr.write(r+"\\n")};var se=require("fs");read=function(r){var a=se.readFileSync(r).toString();return a||"/"==r[0]||(r=__dirname.split("/").slice(0,-1).join("/")+"/src/"+r,a=se.readFileSync(r).toString()),a},load=function(a){r(read(a))},ie=process.argv.slice(2)}else if(_e)this.read||(this.read=function(r){snarf(r)}),"undefined"!=typeof scriptArgs?ie=scriptArgs:"undefined"!=typeof arguments&&(ie=arguments);else if(te)this.print=printErr=function(r){console.log(r)},this.read=function(r){var a=new XMLHttpRequest;return a.open("GET",r,!1),a.send(null),a.responseText},this.arguments&&(ie=arguments);else{if(!fe)throw"Unknown runtime environment. Where are we?";this.load=importScripts}"undefined"==typeof load&&"undefined"!=typeof read&&(this.load=function(a){r(read(a))}),"undefined"==typeof printErr&&(this.printErr=function(){}),"undefined"==typeof print&&(this.print=printErr);try{this.Module=Module}catch(r){this.Module=Module={}}Module.arguments||(Module.arguments=ie),Module.print&&(print=Module.print);var ne,oe,le={stackSave:function(){return Oe},stackRestore:function(r){Oe=r},forceAlign:function(r,a){if(a=a||4,1==a)return r;if(isNumber(r)&&isNumber(a))return Math.ceil(r/a)*a;if(isNumber(a)&&isPowerOfTwo(a)){var e=log2(a);return"(((("+r+")+"+(a-1)+")>>"+e+")<<"+e+")"}return"Math.ceil(("+r+")/"+a+")*"+a},isNumberType:function(r){return r in le.INT_TYPES||r in le.FLOAT_TYPES},isPointerType:function(r){return"*"==r[r.length-1]},isStructType:function(r){return!isPointerType(r)&&(!!/^\\[\\d+\\ x\\ (.*)\\]/.test(r)||(!!/?/.test(r)||"%"==r[0]))},INT_TYPES:{i1:0,i8:0,i16:0,i32:0,i64:0},FLOAT_TYPES:{float:0,double:0},bitshift64:function(r,e,i,v){var t=Math.pow(2,v)-1;if(v<32)switch(i){case"shl":return[r<>>32-v];case"ashr":return[(r>>>v|(e&t)<<32-v)>>0>>>0,e>>v>>>0];case"lshr":return[(r>>>v|(e&t)<<32-v)>>>0,e>>>v]}else if(32==v)switch(i){case"shl":return[0,r];case"ashr":return[e,(0|e)<0?t:0];case"lshr":return[e,0]}else switch(i){case"shl":return[0,r<>v-32>>>0,(0|e)<0?t:0];case"lshr":return[e>>>v-32,0]}a("unknown bitshift64 op: "+[value,i,v])},or64:function(r,a){var e=0|r|(0|a),i=4294967296*(Math.round(r/4294967296)|Math.round(a/4294967296));return e+i},and64:function(r,a){var e=(0|r)&(0|a),i=4294967296*(Math.round(r/4294967296)&Math.round(a/4294967296));return e+i},xor64:function(r,a){var e=(0|r)^(0|a),i=4294967296*(Math.round(r/4294967296)^Math.round(a/4294967296));return e+i},getNativeTypeSize:function(r,a){if(1==le.QUANTUM_SIZE)return 1;var i={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%double":8}["%"+r];if(!i)if("*"==r[r.length-1])i=le.QUANTUM_SIZE;else if("i"==r[0]){var v=parseInt(r.substr(1));e(v%8==0),i=v/8}return i},getNativeFieldSize:function(r){return Math.max(le.getNativeTypeSize(r),le.QUANTUM_SIZE)},dedup:function(r,a){var e={};return a?r.filter(function(r){return!e[r[a]]&&(e[r[a]]=!0,!0)}):r.filter(function(r){return!e[r]&&(e[r]=!0,!0)})},set:function(){for(var r="object"==typeof arguments[0]?arguments[0]:arguments,a={},e=0;e=0&&a.push(f-e),e=f,f}),r.flatSize=le.alignMemory(r.flatSize,r.alignSize),0==a.length?r.flatFactor=r.flatSize:1==le.dedup(a).length&&(r.flatFactor=a[0]),r.needsFlattening=1!=r.flatFactor,r.flatIndexes},generateStructInfo:function(r,a,i){var v,t;if(a){if(i=i||0,v=("undefined"==typeof Types?le.typeInfo:Types.types)[a],!v)return null;e(v.fields.length===r.length,"Number of named fields must match the type for "+a),t=v.flatIndexes}else{var v={fields:r.map(function(r){return r[0]})};t=le.calculateStructAlignment(v)}var f={__size__:v.flatSize};return a?r.forEach(function(r,a){if("string"==typeof r)f[r]=t[a]+i;else{var e;for(var _ in r)e=_;f[e]=le.generateStructInfo(r[e],v.fields[a],t[a])}}):r.forEach(function(r,a){f[r[1]]=t[a]}),f},stackAlloc:function(r){var a=Oe;return Oe+=r,Oe=Oe+3>>2<<2,a},staticAlloc:function(r){var a=Ie;return Ie+=r,Ie=Ie+3>>2<<2,Ie>=Le&&l(),a},alignMemory:function(r,a){var e=r=Math.ceil(r/(a?a:4))*(a?a:4);return e},makeBigInt:function(r,a,e){var i=e?(r>>>0)+4294967296*(a>>>0):(r>>>0)+4294967296*(0|a);return i},QUANTUM_SIZE:4,__dummy__:0},be={MAX_ALLOWED:0,corrections:0,sigs:{},note:function(r,e,i){e||(this.corrections++,this.corrections>=this.MAX_ALLOWED&&a("\\n\\nToo many corrections!"))},print:function(){}},ke=!1,ue=0,ce=this;Module.ccall=i,Module.setValue=t,Module.getValue=f;var he=0,de=1,we=2;Module.ALLOC_NORMAL=he,Module.ALLOC_STACK=de,Module.ALLOC_STATIC=we,Module.allocate=_,Module.Pointer_stringify=s,Module.Array_stringify=n;var pe,Ee,Ae,ge,ye,me,Se,Me,Ce,Re,Te,Oe,Ne,Ie,Pe=4096,De=Module.TOTAL_STACK||5242880,Le=Module.TOTAL_MEMORY||10485760;Module.FAST_MEMORY||2097152;e(!!(Int32Array&&Float64Array&&new Int32Array(1).subarray&&new Int32Array(1).set),"Cannot fallback to non-typed array case: Code is too specialized");var Fe=new ArrayBuffer(Le);Ae=new Int8Array(Fe),ye=new Int16Array(Fe),Se=new Int32Array(Fe),ge=new Uint8Array(Fe),me=new Uint16Array(Fe),Me=new Uint32Array(Fe),Ce=new Float32Array(Fe),Re=new Float64Array(Fe),Se[0]=255,e(255===ge[0]&&0===ge[3],"Typed arrays 2 must be run on a little-endian system");var Xe=p("(null)");Ie=Xe.length;for(var je=0;je>2)),ze=(Ce.subarray(Ue>>2),Re.subarray(Ue>>3));Ne=Ue+8,Ie=o(Ne);var Ve=[],Be=[];Module.Array_copy=c,Module.TypedArray_copy=h,Module.String_len=d,Module.String_copy=w,Module.intArrayFromString=p,Module.intArrayToString=E,Module.writeStringToMemory=A;var He=[],Ke=0;O.X=1,N.X=1,V.X=1,H.X=1,G.X=1,W.X=1,q.X=1,$.X=1,rr.X=1,ar.X=1,er.X=1,vr.X=1,nr.X=1,or.X=1,kr.X=1,hr.X=1,Ar.X=1,Sr.X=1,Tr.X=1,Ir.X=1,Pr.X=1,Dr.X=1,Lr.X=1,Fr.X=1,Xr.X=1,zr.X=1,Vr.X=1,Br.X=1,Gr.X=1,$r.X=1,Module._malloc=Jr,Jr.X=1,ra.X=1,aa.X=1,ea.X=1,ia.X=1,Module._free=va,va.X=1,_a.X=1,sa.X=1,na.X=1,oa.X=1,la.X=1,da.X=1,Ma.X=1;var Ye,Ge={E2BIG:7,EACCES:13,EADDRINUSE:98,EADDRNOTAVAIL:99,EAFNOSUPPORT:97,EAGAIN:11,EALREADY:114,EBADF:9,EBADMSG:74,EBUSY:16,ECANCELED:125,ECHILD:10,ECONNABORTED:103,ECONNREFUSED:111,ECONNRESET:104,EDEADLK:35,EDESTADDRREQ:89,EDOM:33,EDQUOT:122,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:113,EIDRM:43,EILSEQ:84,EINPROGRESS:115,EINTR:4,EINVAL:22,EIO:5,EISCONN:106,EISDIR:21,ELOOP:40,EMFILE:24,EMLINK:31,EMSGSIZE:90,EMULTIHOP:72,ENAMETOOLONG:36,ENETDOWN:100,ENETRESET:102,ENETUNREACH:101,ENFILE:23,ENOBUFS:105,ENODATA:61,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:37,ENOLINK:67,ENOMEM:12,ENOMSG:42,ENOPROTOOPT:92,ENOSPC:28,ENOSR:63,ENOSTR:60,ENOSYS:38,ENOTCONN:107,ENOTDIR:20,ENOTEMPTY:39,ENOTRECOVERABLE:131,ENOTSOCK:88,ENOTSUP:95,ENOTTY:25,ENXIO:6,EOVERFLOW:75,EOWNERDEAD:130,EPERM:1,EPIPE:32,EPROTO:71,EPROTONOSUPPORT:93,EPROTOTYPE:91,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:116,ETIME:62,ETIMEDOUT:110,ETXTBSY:26,EWOULDBLOCK:11,EXDEV:18},We=0,Ze=0,Qe=0,qe=0,$e={currentPath:"/",nextInode:2,streams:[null],ignorePermissions:!0,absolutePath:function(r,a){if("string"!=typeof r)return null;void 0===a&&(a=$e.currentPath),r&&"/"==r[0]&&(a="");for(var e=a+"/"+r,i=e.split("/").reverse(),v=[""];i.length;){var t=i.pop();""==t||"."==t||(".."==t?v.length>1&&v.pop():v.push(t))}return 1==v.length?"/":v.join("/")},analyzePath:function(r,a,e){var i={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};if(r=$e.absolutePath(r),"/"==r)i.isRoot=!0,i.exists=i.parentExists=!0,i.name="/",i.path=i.parentPath="/",i.object=i.parentObject=$e.root;else if(null!==r){e=e||0,r=r.slice(1).split("/");for(var v=$e.root,t=[""];r.length;){1==r.length&&v.isFolder&&(i.parentExists=!0,i.parentPath=1==t.length?"/":t.join("/"),i.parentObject=v,i.name=r[0]);var f=r.shift();if(!v.isFolder){i.error=Ge.ENOTDIR;break}if(!v.read){i.error=Ge.EACCES;break}if(!v.contents.hasOwnProperty(f)){i.error=Ge.ENOENT;break}if(v=v.contents[f],v.link&&(!a||0!=r.length)){if(e>40){i.error=Ge.ELOOP;break}var _=$e.absolutePath(v.link,t.join("/"));return $e.analyzePath([_].concat(r).join("/"),a,e+1)}t.push(f),0==r.length&&(i.exists=!0,i.path=t.join("/"),i.object=v)}return i}return i},findObject:function(r,a){$e.ensureRoot();var e=$e.analyzePath(r,a);return e.exists?e.object:(Ya(e.error),null)},createObject:function(r,a,e,i,v){if(r||(r="/"),"string"==typeof r&&(r=$e.findObject(r)),!r)throw Ya(Ge.EACCES),new Error("Parent path must exist.");if(!r.isFolder)throw Ya(Ge.ENOTDIR), -new Error("Parent must be a folder.");if(!r.write&&!$e.ignorePermissions)throw Ya(Ge.EACCES),new Error("Parent folder must be writeable.");if(!a||"."==a||".."==a)throw Ya(Ge.ENOENT),new Error("Name must not be empty.");if(r.contents.hasOwnProperty(a))throw Ya(Ge.EEXIST),new Error("Can't overwrite object.");r.contents[a]={read:void 0===i||i,write:void 0!==v&&v,timestamp:Date.now(),inodeNumber:$e.nextInode++};for(var t in e)e.hasOwnProperty(t)&&(r.contents[a][t]=e[t]);return r.contents[a]},createFolder:function(r,a,e,i){var v={isFolder:!0,isDevice:!1,contents:{}};return $e.createObject(r,a,v,e,i)},createPath:function(r,a,e,i){var v=$e.findObject(r);if(null===v)throw new Error("Invalid parent.");for(a=a.split("/").reverse();a.length;){var t=a.pop();t&&(v.contents.hasOwnProperty(t)||$e.createFolder(v,t,e,i),v=v.contents[t])}return v},createFile:function(r,a,e,i,v){return e.isFolder=!1,$e.createObject(r,a,e,i,v)},createDataFile:function(r,a,e,i,v){if("string"==typeof e){for(var t=new Array(e.length),f=0,_=e.length;f<_;++f)t[f]=e.charCodeAt(f);e=t}var s={isDevice:!1,contents:e};return $e.createFile(r,a,s,i,v)},createLazyFile:function(r,a,e,i,v){var t={isDevice:!1,url:e};return $e.createFile(r,a,t,i,v)},createLink:function(r,a,e,i,v){var t={isDevice:!1,link:e};return $e.createFile(r,a,t,i,v)},createDevice:function(r,a,e,i){if(!e&&!i)throw new Error("A device must have at least one callback defined.");var v={isDevice:!0,input:e,output:i};return $e.createFile(r,a,v,Boolean(e),Boolean(i))},forceLoadFile:function(r){if(r.isDevice||r.isFolder||r.link||r.contents)return!0;var a=!0;if("undefined"!=typeof XMLHttpRequest)e("Cannot do synchronous binary XHRs in modern browsers. Use --embed-file or --preload-file in emcc");else{if("undefined"==typeof read)throw new Error("Cannot load without read() or XMLHttpRequest.");try{r.contents=p(read(r.url),!0)}catch(r){a=!1}}return a||Ya(Ge.EIO),a},ensureRoot:function(){$e.root||($e.root={read:!0,write:!0,isFolder:!0,isDevice:!1,timestamp:Date.now(),inodeNumber:1,contents:{}})},init:function(r,a,i){function v(r){null===r||r==="\\n".charCodeAt(0)?(a.printer(a.buffer.join("")),a.buffer=[]):a.buffer.push(String.fromCharCode(r))}e(!$e.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),$e.init.initialized=!0,$e.ensureRoot(),r=r||Module.stdin,a=a||Module.stdout,i=i||Module.stderr;var t=!0,f=!0,s=!0;r||(t=!1,r=function(){if(!r.cache||!r.cache.length){var a;"undefined"!=typeof window&&"function"==typeof window.prompt?a=window.prompt("Input: "):"function"==typeof readline&&(a=readline()),a||(a=""),r.cache=p(a+"\\n",!0)}return r.cache.shift()}),a||(f=!1,a=v),a.printer||(a.printer=print),a.buffer||(a.buffer=[]),i||(s=!1,i=v),i.printer||(i.printer=print),i.buffer||(i.buffer=[]),$e.createFolder("/","tmp",!0,!0);var n=$e.createFolder("/","dev",!0,!0),o=$e.createDevice(n,"stdin",r),l=$e.createDevice(n,"stdout",null,a),b=$e.createDevice(n,"stderr",null,i);$e.createDevice(n,"tty",r,a),$e.streams[1]={path:"/dev/stdin",object:o,position:0,isRead:!0,isWrite:!1,isAppend:!1,isTerminal:!t,error:!1,eof:!1,ungotten:[]},$e.streams[2]={path:"/dev/stdout",object:l,position:0,isRead:!1,isWrite:!0,isAppend:!1,isTerminal:!f,error:!1,eof:!1,ungotten:[]},$e.streams[3]={path:"/dev/stderr",object:b,position:0,isRead:!1,isWrite:!0,isAppend:!1,isTerminal:!s,error:!1,eof:!1,ungotten:[]},We=_([1],"void*",we),Ze=_([2],"void*",we),Qe=_([3],"void*",we),$e.createPath("/","dev/shm/tmp",!0,!0),$e.streams[We]=$e.streams[1],$e.streams[Ze]=$e.streams[2],$e.streams[Qe]=$e.streams[3],qe=_([_([0,0,0,0,We,0,0,0,Ze,0,0,0,Qe,0,0,0],"void*",we)],"void*",we)},quit:function(){$e.init.initialized&&($e.streams[2]&&$e.streams[2].object.output.buffer.length>0&&$e.streams[2].object.output("\\n".charCodeAt(0)),$e.streams[3]&&$e.streams[3].object.output.buffer.length>0&&$e.streams[3].object.output("\\n".charCodeAt(0)))}},Je=Ja;Ve.unshift({func:function(){$e.ignorePermissions=!1,$e.init.initialized||$e.init()}}),Be.push({func:function(){$e.quit()}}),Ya(0),ae.buf=_(12,"void*",we),Module.callMain=function(r){function a(){for(var r=0;r<3;r++)i.push(0)}var e=r.length+1,i=[_(p("/bin/this.program"),"i8",we)];a();for(var v=0;v>2]=0|He.__str,Se[ri+4>>2]=0|He.__str1,Se[ri+16>>2]=0|He.__str2,Se[ri+20>>2]=0|He.__str3,Se[ri+32>>2]=0|He.__str4,Se[ri+36>>2]=0|He.__str5,Se[ri+48>>2]=0|He.__str6,Se[ri+52>>2]=0|He.__str7,Se[ri+64>>2]=0|He.__str8,Se[ri+68>>2]=0|He.__str7,Se[ri+80>>2]=0|He.__str9,Se[ri+84>>2]=0|He.__str10,Se[ri+96>>2]=0|He.__str11,Se[ri+100>>2]=0|He.__str12,Se[ri+112>>2]=0|He.__str13,Se[ri+116>>2]=0|He.__str14,Se[ri+128>>2]=0|He.__str15,Se[ri+132>>2]=0|He.__str16,Se[ri+144>>2]=0|He.__str17,Se[ri+148>>2]=0|He.__str18,Se[ri+160>>2]=0|He.__str19,Se[ri+164>>2]=0|He.__str20,Se[ri+176>>2]=0|He.__str21,Se[ri+180>>2]=0|He.__str22,Se[ri+192>>2]=0|He.__str23,Se[ri+196>>2]=0|He.__str24,Se[ri+208>>2]=0|He.__str25,Se[ri+212>>2]=0|He.__str26,Se[ri+224>>2]=0|He.__str27,Se[ri+228>>2]=0|He.__str28,Se[ri+240>>2]=0|He.__str29,Se[ri+244>>2]=0|He.__str30,Se[ri+256>>2]=0|He.__str31,Se[ri+260>>2]=0|He.__str32,Se[ri+272>>2]=0|He.__str33,Se[ri+276>>2]=0|He.__str34,Se[ri+288>>2]=0|He.__str35,Se[ri+292>>2]=0|He.__str36,Se[ri+304>>2]=0|He.__str37,Se[ri+308>>2]=0|He.__str38,Se[ri+320>>2]=0|He.__str39,Se[ri+324>>2]=0|He.__str40,Se[ri+336>>2]=0|He.__str41,Se[ri+340>>2]=0|He.__str42,Se[ri+352>>2]=0|He.__str43,Se[ri+356>>2]=0|He.__str44,Se[ri+368>>2]=0|He.__str45,Se[ri+372>>2]=0|He.__str46,Se[ri+384>>2]=0|He.__str47,Se[ri+388>>2]=0|He.__str48,Se[ri+400>>2]=0|He.__str49,Se[ri+404>>2]=0|He.__str119289,Se[ri+416>>2]=0|He.__str51,Se[ri+420>>2]=0|He.__str20,Se[ri+432>>2]=0|He.__str52,Se[ri+436>>2]=0|He.__str53,Se[ri+448>>2]=0|He.__str54,Se[ri+452>>2]=0|He.__str55,Se[ri+464>>2]=0|He.__str56,Se[ri+468>>2]=0|He.__str57,Se[ri+480>>2]=0|He.__str58,Se[ri+484>>2]=0|He.__str119289,Se[ri+496>>2]=0|He.__str59,Se[ri+500>>2]=0|He.__str60,Se[ri+512>>2]=0|He.__str61,Se[ri+516>>2]=0|He.__str62,Se[ri+528>>2]=0|He.__str63,Se[ri+532>>2]=0|He.__str64,Se[ri+544>>2]=0|He.__str65,Se[ri+548>>2]=0|He.__str66,Se[ri+560>>2]=0|He.__str67,Se[ri+564>>2]=0|He.__str68,Se[ri+576>>2]=0|He.__str69,Se[ri+580>>2]=0|He.__str70,Se[ri+592>>2]=0|He.__str71,Se[ri+596>>2]=0|He.__str72,Se[ri+608>>2]=0|He.__str73,Se[ri+612>>2]=0|He.__str74,Se[ri+624>>2]=0|He.__str75,Se[ri+628>>2]=0|He.__str76,Se[ri+640>>2]=0|He.__str77,Se[ri+644>>2]=0|He.__str72,Se[ri+656>>2]=0|He.__str78,Se[ri+660>>2]=0|He.__str79,Se[ri+672>>2]=0|He.__str80,Se[ri+676>>2]=0|He.__str81,Se[ri+688>>2]=0|He.__str82,Se[ri+692>>2]=0|He.__str83,Se[ri+704>>2]=0|He.__str84,Se[ri+708>>2]=0|He.__str85,Se[ri+720>>2]=0|He.__str86,Se[ri+724>>2]=0|He.__str87,Se[ri+736>>2]=0|He.__str88,Se[ri+740>>2]=0|He.__str89,Se[ri+752>>2]=0|He.__str90,Se[ri+756>>2]=0|He.__str91,Se[ri+768>>2]=0|He.__str92,Se[ri+772>>2]=0|He.__str91,Se[ai>>2]=0|He.__str145315,Se[ai+8>>2]=0|He.__str145315,Se[ai+20>>2]=0|He.__str167337,Se[ai+28>>2]=0|He.__str95,Se[ai+40>>2]=0|He.__str146316,Se[ai+48>>2]=0|He.__str97,Se[ai+60>>2]=0|He.__str155325,Se[ai+68>>2]=0|He.__str155325,Se[ai+80>>2]=0|He.__str156326,Se[ai+88>>2]=0|He.__str156326,Se[ai+100>>2]=0|He.__str154324,Se[ai+108>>2]=0|He.__str154324,Se[ai+120>>2]=0|He.__str101,Se[ai+128>>2]=0|He.__str101,Se[ai+140>>2]=0|He.__str147317,Se[ai+148>>2]=0|He.__str147317,Se[ai+160>>2]=0|He.__str150320,Se[ai+168>>2]=0|He.__str150320,Se[ai+180>>2]=0|He.__str151321,Se[ai+188>>2]=0|He.__str105,Se[ai+220>>2]=0|He.__str152322,Se[ai+228>>2]=0|He.__str152322,Se[ai+240>>2]=0|He.__str153323,Se[ai+248>>2]=0|He.__str153323,Se[ai+260>>2]=0|He.__str165335,Se[ai+268>>2]=0|He.__str165335,Se[ai+280>>2]=0|He.__str166336,Se[ai+288>>2]=0|He.__str166336,Se[ai+360>>2]=0|He.__str148318,Se[ai+368>>2]=0|He.__str148318,Se[ai+380>>2]=0|He.__str149319,Se[ai+388>>2]=0|He.__str149319,Se[ai+420>>2]=0|He.__str84254,Se[ai+428>>2]=0|He.__str84254,Se[ai+440>>2]=0|He.__str168338,Se[ai+448>>2]=0|He.__str146316,Se[ai+460>>2]=0|He.__str114,Se[ai+468>>2]=0|He.__str152322,Se[ai+480>>2]=0|He.__str115,Se[ai+488>>2]=0|He.__str115,Se[ai+500>>2]=0|He.__str110280,Se[ai+508>>2]=0|He.__str110280,Se[ei+4>>2]=0|He.__str152,Se[ei+12>>2]=0|He.__str152,Se[ei+32>>2]=0|He.__str153,Se[ei+40>>2]=0|He.__str153,Se[ei+48>>2]=0|He.__str154,Se[ei+60>>2]=0|He.__str155,Se[ei+68>>2]=0|He.__str155,Se[ei+76>>2]=0|He.__str156,Se[ei+88>>2]=0|He.__str157,Se[ei+96>>2]=0|He.__str158,Se[ei+104>>2]=0|He.__str156,Se[ei+116>>2]=0|He.__str159,Se[ei+124>>2]=0|He.__str160,Se[ei+132>>2]=0|He.__str161,Se[ei+144>>2]=0|He.__str162,Se[ei+152>>2]=0|He.__str163,Se[ei+160>>2]=0|He.__str164,Se[ei+172>>2]=0|He.__str165,Se[ei+180>>2]=0|He.__str166,Se[ei+188>>2]=0|He.__str167,Se[si+4>>2]=bi,Se[ni+4>>2]=ki,oi=_([2,0,0,0,0],["i8*",0,0,0,0],we),Se[bi>>2]=oi+8|0,Se[bi+4>>2]=0|He.__ZTSSt9bad_alloc,Se[bi+8>>2]=li,Se[ki>>2]=oi+8|0,Se[ki+4>>2]=0|He.__ZTSSt20bad_array_new_length,Se[ki+8>>2]=bi,ui=16,ci=6,hi=18,di=6,wi=6,pe=[0,0,Jr,0,va,0,ya,0,ga,0,wa,0,Sa,0,pa,0,Ea,0,ma,0],Module.FUNCTION_TABLE=pe,Module.run=ee,Module.preRun&&Module.preRun(),0==Ke){ee()}Module.postRun&&Module.postRun(),Module.___cxa_demangle=G;var pi=v("__cxa_demangle","string",["string","string","number","number"]);return function(r){return pi(r,"",1,0)}}(); -` diff --git a/src/speedscope/library/emscripten.test.ts b/src/speedscope/library/emscripten.test.ts deleted file mode 100644 index 97ec6de..0000000 --- a/src/speedscope/library/emscripten.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -import {importEmscriptenSymbolMap} from './emscripten' - -test('importEmscriptenSymbolMap', () => { - // Valid symbol map - expect( - importEmscriptenSymbolMap( - [ - /* prettier: ignore */ - 'a:A', - 'b:B', - 'c:C', - ].join('\n'), - ), - ).toEqual(new Map([['a', 'A'], ['b', 'B'], ['c', 'C']])) - - // Valid symbol map with trailing newline - expect( - importEmscriptenSymbolMap( - [ - /* prettier: ignore */ - 'a:A', - 'b:B', - 'c:C', - 'd:D-D', - '', - ].join('\n'), - ), - ).toEqual(new Map([['a', 'A'], ['b', 'B'], ['c', 'C'], ['d', 'D-D']])) - - // Valid symbol map with non-alpha characters - expect(importEmscriptenSymbolMap('u6:__ZN8tinyxml210XMLCommentD0Ev\n')).toEqual( - new Map([['u6', '__ZN8tinyxml210XMLCommentD0Ev']]), - ) - - // WebAssembly symbol map - expect( - importEmscriptenSymbolMap( - [ - /* prettier: ignore */ - '0:A', - '1:B', - '2:C', - '3:D-D', - ].join('\n'), - ), - ).toEqual( - new Map([ - ['wasm-function[0]', 'A'], - ['wasm-function[1]', 'B'], - ['wasm-function[2]', 'C'], - ['wasm-function[3]', 'D-D'], - ]), - ) - - // Invalid symbol map - expect( - importEmscriptenSymbolMap( - [ - /* prettier: ignore */ - 'a:A', - 'b:B', - 'c', - '', - ].join('\n'), - ), - ).toEqual(null) - - // Collapsed stack format should not be imported as an asm.js symbol map - expect( - importEmscriptenSymbolMap( - [ - /* prettier: ignore */ - 'a;b 1', - 'a;c 3', - '', - ].join('\n'), - ), - ).toEqual(null) - - // Unrelated files - expect(importEmscriptenSymbolMap('')).toEqual(null) - expect(importEmscriptenSymbolMap('\n')).toEqual(null) -}) diff --git a/src/speedscope/library/emscripten.ts b/src/speedscope/library/emscripten.ts deleted file mode 100644 index da9ca6c..0000000 --- a/src/speedscope/library/emscripten.ts +++ /dev/null @@ -1,39 +0,0 @@ -type EmscriptenSymbolMap = Map - -// This imports symbol maps generated by emscripten using the "--emit-symbol-map" flag. -// It allows you to visualize a profile captured in a release build as long as you also -// have the associated symbol map. To do this, first drop the profile into speedscope -// and then drop the symbol map. After the second drop, the symbols will be remapped to -// their original names. -export function importEmscriptenSymbolMap(contents: string): EmscriptenSymbolMap | null { - const lines = contents.split('\n') - if (!lines.length) return null - - // Remove a trailing blank line if there is one - if (lines[lines.length - 1] === '') lines.pop() - if (!lines.length) return null - - const map: EmscriptenSymbolMap = new Map() - const intRegex = /^(\d+):([\$\w-]+)$/ - const idRegex = /^([\$\w]+):([\$\w-]+)$/ - - for (const line of lines) { - // Match lines like "103:__ZN8tinyxml210XMLCommentD0Ev" - const intMatch = intRegex.exec(line) - if (intMatch) { - map.set(`wasm-function[${intMatch[1]}]`, intMatch[2]) - continue - } - - // Match lines like "u6:__ZN8tinyxml210XMLCommentD0Ev" - const idMatch = idRegex.exec(line) - if (idMatch) { - map.set(idMatch[1], idMatch[2]) - continue - } - - return null - } - - return map -} diff --git a/src/speedscope/library/file-format-spec.ts b/src/speedscope/library/file-format-spec.ts deleted file mode 100644 index 584fa08..0000000 --- a/src/speedscope/library/file-format-spec.ts +++ /dev/null @@ -1,145 +0,0 @@ -// This file contains types which specify the speedscope file format. - -export namespace FileFormat { - export type Profile = EventedProfile | SampledProfile - - export interface File { - $schema: 'https://www.speedscope.app/file-format-schema.json' - - // Data shared between profiles - shared: { - frames: Frame[] - } - - // List of profile definitions - profiles: Profile[] - - // The name of the contained profile group. If omitted, will use the name of - // the file itself. - // Added in 0.6.0 - name?: string - - // The index into the `profiles` array that should be displayed upon file - // load. If omitted, will default to displaying the first profile in the - // file. - // - // Added in 0.6.0 - activeProfileIndex?: number - - // The name of the the program which exported this profile. This isn't - // consumed but can be helpful for debugging generated data by seeing what - // was generating it! Recommended format is "name@version". e.g. when the - // file was exported by speedscope v0.6.0 itself, it will be - // "speedscope@0.6.0" - // - // Added in 0.6.0 - exporter?: string - } - - export interface Frame { - name: string - file?: string - line?: number - col?: number - } - - export enum ProfileType { - EVENTED = 'evented', - SAMPLED = 'sampled', - } - - export interface IProfile { - // Type of profile. This will future proof the file format to allow many - // different kinds of profiles to be contained and each type to be part of - // a discriminated union. - type: ProfileType - } - - export interface EventedProfile extends IProfile { - type: ProfileType.EVENTED - - // Name of the profile. Typically a filename for the source of the profile. - name: string - - // Unit which all value are specified using in the profile. - unit: ValueUnit - - // The starting value of the profile. This will typically be a timestamp. - // All event values will be relative to this startValue. - startValue: number - - // The final value of the profile. This will typically be a timestamp. This - // must be greater than or equal to the startValue. This is useful in - // situations where the recorded profile extends past the end of the recorded - // events, which may happen if nothing was happening at the end of the - // profile. - endValue: number - - // List of events that occured as part of this profile. - // The "at" field of every event must be in non-decreasing order. - events: (OpenFrameEvent | CloseFrameEvent)[] - } - - // List of indices into the frame array - type SampledStack = number[] - - export interface SampledProfile extends IProfile { - type: ProfileType.SAMPLED - - // Name of the profile. Typically a filename for the source of the profile. - name: string - - // Unit which all value are specified using in the profile. - unit: ValueUnit - - // The starting value of the profile. This will typically be a timestamp. - // All event values will be relative to this startValue. - startValue: number - - // The final value of the profile. This will typically be a timestamp. This - // must be greater than or equal to the startValue. This is useful in - // situations where the recorded profile extends past the end of the recorded - // events, which may happen if nothing was happening at the end of the - // profile. - endValue: number - - // List of stacks - samples: SampledStack[] - - // The weight of the sample at the given index. Should have - // the same length as the samples array. - weights: number[] - } - - export type ValueUnit = - | 'none' - | 'nanoseconds' - | 'microseconds' - | 'milliseconds' - | 'seconds' - | 'bytes' - - export enum EventType { - OPEN_FRAME = 'O', - CLOSE_FRAME = 'C', - } - - interface IEvent { - type: EventType - at: number - } - - // Indicates a stack frame opened. Every opened stack frame must have a - // corresponding close frame event, and the ordering must be balanced. - interface OpenFrameEvent extends IEvent { - type: EventType.OPEN_FRAME - // An index into the frames array in the shared data within the profile - frame: number - } - - interface CloseFrameEvent extends IEvent { - type: EventType.CLOSE_FRAME - // An index into the frames array in the shared data within the profile - frame: number - } -} diff --git a/src/speedscope/library/file-format.test.ts b/src/speedscope/library/file-format.test.ts deleted file mode 100644 index d28f457..0000000 --- a/src/speedscope/library/file-format.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {checkProfileSnapshot} from './test-utils' - -describe('importSpeedscopeProfiles', async () => { - test('0.0.1 evented profile', async () => { - await checkProfileSnapshot('./sample/profiles/speedscope/0.0.1/simple.speedscope.json') - }) - - test('0.1.2 sampled profile', async () => { - await checkProfileSnapshot('./sample/profiles/speedscope/0.1.2/simple-sampled.speedscope.json') - }) - - test('0.6.0 multiple profiles', async () => { - await checkProfileSnapshot('./sample/profiles/speedscope/0.6.0/two-sampled.speedscope.json') - }) -}) diff --git a/src/speedscope/library/file-format.ts b/src/speedscope/library/file-format.ts deleted file mode 100644 index 237ba67..0000000 --- a/src/speedscope/library/file-format.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { - Profile, - CallTreeNode, - Frame, - CallTreeProfileBuilder, - FrameInfo, - StackListProfileBuilder, - ProfileGroup, -} from './profile' -import {TimeFormatter, ByteFormatter, RawValueFormatter} from './value-formatters' -import {FileFormat} from './file-format-spec' - -export function exportProfileGroup(profileGroup: ProfileGroup): FileFormat.File { - const frames: FileFormat.Frame[] = [] - - const indexForFrame = new Map() - function getIndexForFrame(frame: Frame): number { - let index = indexForFrame.get(frame) - if (index == null) { - const serializedFrame: FileFormat.Frame = { - name: frame.name, - } - if (frame.file != null) serializedFrame.file = frame.file - if (frame.line != null) serializedFrame.line = frame.line - if (frame.col != null) serializedFrame.col = frame.col - index = frames.length - indexForFrame.set(frame, index) - frames.push(serializedFrame) - } - return index - } - - const file: FileFormat.File = { - exporter: `speedscope@${require('../../package.json').version}`, - name: profileGroup.name, - activeProfileIndex: profileGroup.indexToView, - $schema: 'https://www.speedscope.app/file-format-schema.json', - shared: {frames}, - profiles: [], - } - - for (let profile of profileGroup.profiles) { - file.profiles.push(exportProfile(profile, getIndexForFrame)) - } - - return file -} - -function exportProfile(profile: Profile, getIndexForFrame: (frame: Frame) => number) { - const eventedProfile: FileFormat.EventedProfile = { - type: FileFormat.ProfileType.EVENTED, - name: profile.getName(), - unit: profile.getWeightUnit(), - startValue: 0, - endValue: profile.getTotalWeight(), - events: [], - } - const openFrame = (node: CallTreeNode, value: number) => { - eventedProfile.events.push({ - type: FileFormat.EventType.OPEN_FRAME, - frame: getIndexForFrame(node.frame), - at: value, - }) - } - const closeFrame = (node: CallTreeNode, value: number) => { - eventedProfile.events.push({ - type: FileFormat.EventType.CLOSE_FRAME, - frame: getIndexForFrame(node.frame), - at: value, - }) - } - profile.forEachCall(openFrame, closeFrame) - return eventedProfile -} - -function importSpeedscopeProfile( - serialized: FileFormat.Profile, - frames: FileFormat.Frame[], -): Profile { - function setCommonProperties(p: Profile) { - const {name, unit} = serialized - - switch (unit) { - case 'nanoseconds': - case 'microseconds': - case 'milliseconds': - case 'seconds': - p.setValueFormatter(new TimeFormatter(unit)) - break - - case 'bytes': - p.setValueFormatter(new ByteFormatter()) - break - - case 'none': - p.setValueFormatter(new RawValueFormatter()) - break - } - p.setName(name) - } - - function importEventedProfile(evented: FileFormat.EventedProfile) { - const {startValue, endValue, events} = evented - - const profile = new CallTreeProfileBuilder(endValue - startValue) - setCommonProperties(profile) - - const frameInfos: FrameInfo[] = frames.map((frame, i) => ({key: i, ...frame})) - - for (let ev of events) { - switch (ev.type) { - case FileFormat.EventType.OPEN_FRAME: { - profile.enterFrame(frameInfos[ev.frame], ev.at - startValue) - break - } - case FileFormat.EventType.CLOSE_FRAME: { - profile.leaveFrame(frameInfos[ev.frame], ev.at - startValue) - break - } - } - } - return profile.build() - } - - function importSampledProfile(sampled: FileFormat.SampledProfile) { - const {startValue, endValue, samples, weights} = sampled - const profile = new StackListProfileBuilder(endValue - startValue) - setCommonProperties(profile) - - const frameInfos: FrameInfo[] = frames.map((frame, i) => ({key: i, ...frame})) - - if (samples.length !== weights.length) { - throw new Error( - `Expected samples.length (${samples.length}) to equal weights.length (${weights.length})`, - ) - } - - for (let i = 0; i < samples.length; i++) { - const stack = samples[i] - const weight = weights[i] - profile.appendSampleWithWeight(stack.map(n => frameInfos[n]), weight) - } - - return profile.build() - } - - switch (serialized.type) { - case FileFormat.ProfileType.EVENTED: - return importEventedProfile(serialized) - case FileFormat.ProfileType.SAMPLED: - return importSampledProfile(serialized) - } -} - -export function importSpeedscopeProfiles(serialized: FileFormat.File): ProfileGroup { - return { - name: serialized.name || serialized.profiles[0].name || 'profile', - indexToView: serialized.activeProfileIndex || 0, - profiles: serialized.profiles.map(p => importSpeedscopeProfile(p, serialized.shared.frames)), - } -} - -export function saveToFile(profileGroup: ProfileGroup): void { - const file = exportProfileGroup(profileGroup) - const blob = new Blob([JSON.stringify(file)], {type: 'text/json'}) - - const nameWithoutExt = file.name ? file.name.split('.')[0]! : 'profile' - const filename = `${nameWithoutExt.replace(/\W+/g, '_')}.speedscope.json` - - console.log('Saving', filename) - - const a = document.createElement('a') - a.download = filename - a.href = window.URL.createObjectURL(blob) - a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') - - // For this to work in Firefox, the must be in the DOM - document.body.appendChild(a) - a.click() - document.body.removeChild(a) -} diff --git a/src/speedscope/library/flamechart.ts b/src/speedscope/library/flamechart.ts deleted file mode 100644 index 313a11f..0000000 --- a/src/speedscope/library/flamechart.ts +++ /dev/null @@ -1,127 +0,0 @@ -import {Frame, CallTreeNode} from './profile' - -import {lastOf} from './utils' -import {clamp} from './math' - -export interface FlamechartFrame { - node: CallTreeNode - start: number - end: number - parent: FlamechartFrame | null - children: FlamechartFrame[] -} - -type StackLayer = FlamechartFrame[] - -interface FlamechartDataSource { - getTotalWeight(): number - - formatValue(v: number): string - - forEachCall( - openFrame: (node: CallTreeNode, value: number) => void, - closeFrame: (node: CallTreeNode, value: number) => void, - ): void - - getColorBucketForFrame(f: Frame): number -} - -export class Flamechart { - // Bottom to top - private layers: StackLayer[] = [] - private totalWeight: number = 0 - private minFrameWidth: number = 1 - - getTotalWeight() { - return this.totalWeight - } - getLayers() { - return this.layers - } - getColorBucketForFrame(frame: Frame) { - return this.source.getColorBucketForFrame(frame) - } - getMinFrameWidth() { - return this.minFrameWidth - } - formatValue(v: number) { - return this.source.formatValue(v) - } - - getClampedViewportWidth(viewportWidth: number) { - const maxWidth = this.getTotalWeight() - - // In order to avoid floating point error, we cap the maximum zoom. In - // particular, it's important that at the maximum zoom level, the total - // trace size + a viewport width is not equal to the trace size due to - // floating point rounding. - // - // For instance, if the profile's total weight is 2^60, and the viewport - // size is 1, trying to move one viewport width right will result in no - // change because 2^60 + 1 = 2^60 in floating point arithmetic. JavaScript - // numbers are 64 bit floats, and therefore have 53 mantissa bits. You can - // see this for yourself in the console. Try: - // - // > Math.pow(2, 60) + 1 === Math.pow(2, 60) - // true - // > Math.pow(2, 53) + 1 === Math.pow(2, 53) - // true - // > Math.pow(2, 52) + 1 === Math.pow(2, 52) - // false - // - // We use 2^40 as a cap instead, since we want to be able to make small - // adjustments within a viewport width. - // - // For reference, this will still allow you to zoom until 1 nanosecond fills - // the screen in a profile with a duration of over 18 minutes. - // - // > Math.pow(2, 40) / (60 * Math.pow(10, 9)) - // 18.325193796266667 - // - const maxZoom = Math.pow(2, 40) - - // In addition to capping zoom to avoid floating point error, we further cap - // zoom to avoid letting you zoom in so that the smallest element more than - // fills the screen, since that probably isn't useful. The final zoom cap is - // determined by the minimum zoom of either 2^40x zoom or the necessary zoom - // for the smallest frame to fill the screen three times. - const minWidth = clamp(3 * this.getMinFrameWidth(), maxWidth / maxZoom, maxWidth) - - return clamp(viewportWidth, minWidth, maxWidth) - } - - constructor(private source: FlamechartDataSource) { - const stack: FlamechartFrame[] = [] - const openFrame = (node: CallTreeNode, value: number) => { - const parent = lastOf(stack) - const frame: FlamechartFrame = { - node, - parent, - children: [], - start: value, - end: value, - } - if (parent) { - parent.children.push(frame) - } - stack.push(frame) - } - - this.minFrameWidth = Infinity - const closeFrame = (node: CallTreeNode, value: number) => { - console.assert(stack.length > 0) - const stackTop = stack.pop()! - stackTop.end = value - if (stackTop.end - stackTop.start === 0) return - const layerIndex = stack.length - while (this.layers.length <= layerIndex) this.layers.push([]) - this.layers[layerIndex].push(stackTop) - this.minFrameWidth = Math.min(this.minFrameWidth, stackTop.end - stackTop.start) - } - - this.totalWeight = source.getTotalWeight() - source.forEachCall(openFrame, closeFrame) - - if (!isFinite(this.minFrameWidth)) this.minFrameWidth = 1 - } -} diff --git a/src/speedscope/library/hash-params.test.ts b/src/speedscope/library/hash-params.test.ts deleted file mode 100644 index 804221b..0000000 --- a/src/speedscope/library/hash-params.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {getHashParams} from './hash-params' - -test('getHashParams', () => { - expect(getHashParams('')).toEqual({}) - expect(getHashParams('#')).toEqual({}) - expect(getHashParams('#title=hello')).toEqual({title: 'hello'}) - expect(getHashParams('#localProfilePath=file:///tmp/file.js')).toEqual({ - localProfilePath: 'file:///tmp/file.js', - }) - expect( - getHashParams( - '#profileURL=https://raw.githubusercontent.com/jlfwong/speedscope/master/sample/profiles/speedscope/0.1.2/simple-sampled.speedscope.json', - ), - ).toEqual({ - profileURL: - 'https://raw.githubusercontent.com/jlfwong/speedscope/master/sample/profiles/speedscope/0.1.2/simple-sampled.speedscope.json', - }) - expect(getHashParams('#title=hello&localProfilePath=file:///tmp/file.js')).toEqual({ - title: 'hello', - localProfilePath: 'file:///tmp/file.js', - }) - expect(getHashParams('#title=hello%20world')).toEqual({ - title: 'hello world', - }) - expect(getHashParams('#abc=bcd')).toEqual({}) - expect(getHashParams('garbage')).toEqual({}) -}) diff --git a/src/speedscope/library/hash-params.ts b/src/speedscope/library/hash-params.ts deleted file mode 100644 index 469e820..0000000 --- a/src/speedscope/library/hash-params.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface HashParams { - profileURL?: string - title?: string - localProfilePath?: string -} - -export function getHashParams(hashContents = window.location.hash): HashParams { - try { - if (!hashContents.startsWith('#')) { - return {} - } - const components = hashContents.substr(1).split('&') - const result: HashParams = {} - for (const component of components) { - let [key, value] = component.split('=') - value = decodeURIComponent(value) - if (key === 'profileURL') { - result.profileURL = value - } else if (key === 'title') { - result.title = value - } else if (key === 'localProfilePath') { - result.localProfilePath = value - } - } - return result - } catch (e) { - console.error(`Error when loading hash fragment.`) - console.error(e) - return {} - } -} diff --git a/src/speedscope/library/lru-cache.test.ts b/src/speedscope/library/lru-cache.test.ts deleted file mode 100644 index ad0b796..0000000 --- a/src/speedscope/library/lru-cache.test.ts +++ /dev/null @@ -1,148 +0,0 @@ -import * as jsc from 'jsverify' -import {LRUCache} from './lru-cache' - -class SlowLRUCache { - private list: {k: K; v: V}[] = [] - constructor(private capacity: number) {} - - has(key: K): boolean { - for (let {k} of this.list) { - if (key === k) return true - } - return false - } - - get(key: K): V | null { - for (let i = 0; i < this.list.length; i++) { - const el = this.list[i] - const {k, v} = el - if (key === k) { - this.list.splice(i, 1) - this.list.unshift(el) - return v - } - } - return null - } - - getSize() { - return this.list.length - } - - getCapacity() { - return this.capacity - } - - insert(k: K, v: V) { - for (let i = 0; i < this.list.length; i++) { - if (this.list[i].k === k) { - this.list.splice(i, 1) - break - } - } - while (this.list.length >= this.capacity) this.list.pop() - this.list.unshift({k, v}) - } - getOrInsert(key: K, f: (key: K) => V): V { - let value = this.get(key) - if (value == null) { - value = f(key) - this.insert(key, value) - } - return value - } - removeLRU(): [K, V] | null { - const oldest = this.list.pop() - if (!oldest) return null - const {k, v} = oldest - return [k, v] - } -} - -// Let's write tests by comparing the fast implementation of LRUCache -// with a dumb, slow implementation - -interface ILRUCache { - has(key: K): boolean - get(key: K): V | null - getSize(): number - getCapacity(): number - insert(k: K, v: V): void - getOrInsert(key: K, f: (key: K) => V): V - removeLRU(): [K, V] | null -} - -type Command = - | { - type: 'has' - key: string - } - | { - type: 'get' - key: string - } - | {type: 'getSize'} - | {type: 'insert'; key: string; value: number} - | { - type: 'getOrInsert' - key: string - value: number - } - | {type: 'removeLRU'} - -const arbitraryCommand: jsc.Arbitrary = jsc.record({ - type: jsc.elements(['has', 'get', 'getSize', 'insert', 'getOrInsert', 'removeLRU']), - key: jsc.elements(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), - value: jsc.nat, -}) as any - -function runCommand(cache: ILRUCache, cmd: Command): any { - switch (cmd.type) { - case 'has': - return cache.has(cmd.key) - case 'get': - return cache.get(cmd.key) - case 'getSize': - return cache.getSize() - case 'insert': - return cache.insert(cmd.key, cmd.value) - case 'getOrInsert': - return cache.getOrInsert(cmd.key, () => cmd.value) - case 'removeLRU': - return cache.removeLRU() - } -} - -function verify(capacity: number, commands: Command[]) { - const slowCache = new SlowLRUCache(capacity) - const fastCache = new LRUCache(capacity) - - const slowResults = commands.map(c => runCommand(slowCache, c)) - const fastResults = commands.map(c => runCommand(fastCache, c)) - - expect(slowResults).toEqual(fastResults) -} - -test('LRUCache', () => { - verify(4, [ - {type: 'insert', key: 'a', value: 0}, - {type: 'insert', key: 'b', value: 0}, - {type: 'get', key: 'a'}, - {type: 'removeLRU'}, - ]) - - jsc.assert( - jsc.forall( - jsc.suchthat(jsc.uint8, n => n > 0), - jsc.nearray(arbitraryCommand), - (cap, commands) => { - verify(cap, commands) - return true - }, - ), - { - size: 100, - tests: 1000, - }, - ) -}) diff --git a/src/speedscope/library/lru-cache.ts b/src/speedscope/library/lru-cache.ts deleted file mode 100644 index eda29fc..0000000 --- a/src/speedscope/library/lru-cache.ts +++ /dev/null @@ -1,167 +0,0 @@ -class ListNode { - prev: ListNode | null = null - next: ListNode | null = null - constructor(readonly data: V) {} -} - -export class List { - private head: ListNode | null = null - private tail: ListNode | null = null - private size: number = 0 - constructor() {} - - getHead(): ListNode | null { - return this.head - } - getTail(): ListNode | null { - return this.tail - } - getSize(): number { - return this.size - } - - append(node: ListNode): void { - if (!this.tail) { - this.head = this.tail = node - } else { - this.tail.next = node - node.prev = this.tail - this.tail = node - } - this.size++ - } - - prepend(node: ListNode): ListNode { - if (!this.head) { - this.head = this.tail = node - } else { - this.head.prev = node - node.next = this.head - this.head = node - } - this.size++ - return node - } - - pop(): ListNode | null { - if (!this.tail) { - return null - } else { - const ret = this.tail - if (ret.prev) { - this.tail = ret.prev - this.tail.next = null - } else { - this.head = this.tail = null - } - this.size-- - ret.prev = null - return ret - } - } - - dequeue(): ListNode | null { - if (!this.head) { - return null - } else { - const ret = this.head - if (ret.next) { - this.head = ret.next - this.head.prev = null - } else { - this.head = this.tail = null - } - this.size-- - ret.next = null - return ret - } - } - - remove(node: ListNode): void { - if (node.prev == null) { - this.dequeue() - } else if (node.next == null) { - this.pop() - } else { - // Neither first nor last, should be safe to just link - // neighbours. - node.next.prev = node.prev - node.prev.next = node.next - node.next = null - node.prev = null - this.size-- - } - } -} - -interface LRUCacheNode { - value: V - listNode: ListNode -} - -export class LRUCache { - private list = new List() - private map = new Map>() - - constructor(private capacity: number) {} - - has(key: K): boolean { - return this.map.has(key) - } - - get(key: K): V | null { - const node = this.map.get(key) - if (!node) { - return null - } - // Bring node to the front of the list - this.list.remove(node.listNode) - this.list.prepend(node.listNode) - - return node ? node.value : null - } - - getSize() { - return this.list.getSize() - } - - getCapacity() { - return this.capacity - } - - insert(key: K, value: V) { - const node = this.map.get(key) - if (node) { - this.list.remove(node.listNode) - } - // Evict old entries when out of capacity - while (this.list.getSize() >= this.capacity) { - this.map.delete(this.list.pop()!.data) - } - const listNode = this.list.prepend(new ListNode(key)) - this.map.set(key, {value, listNode}) - } - - getOrInsert(key: K, f: (key: K) => V): V { - let value = this.get(key) - if (value == null) { - value = f(key) - this.insert(key, value) - } - return value - } - - removeLRU(): [K, V] | null { - const oldest = this.list.pop() - if (!oldest) return null - const key = oldest.data - const value = this.map.get(key)!.value - this.map.delete(key) - return [key, value] - } - - clear() { - this.list = new List() - this.map = new Map>() - } -} diff --git a/src/speedscope/library/math.test.ts b/src/speedscope/library/math.test.ts deleted file mode 100644 index 3f4ec32..0000000 --- a/src/speedscope/library/math.test.ts +++ /dev/null @@ -1,368 +0,0 @@ -import {clamp, Vec2, AffineTransform, Rect} from './math' -import * as jsc from 'jsverify' - -test('clamp', () => { - jsc.assertForall(jsc.number, jsc.number, jsc.number, (a, b, c) => { - const result = clamp(a, b, c) - if (a < b) return result == b - if (a > c) return result == c - return result == a - }) -}) - -// Change this to jsc.integer to debug failures more easily -let numericType = jsc.number - -const arbitraryVec2 = jsc - .record({x: jsc.integer, y: numericType}) - .smap(v => new Vec2(v.x, v.y), v => v) - -const positiveVec2 = jsc.suchthat(arbitraryVec2, v => v.x > 0 && v.y > 0) - -const arbitraryTransform = jsc - .record({ - m00: numericType, - m01: numericType, - m02: numericType, - m10: numericType, - m11: numericType, - m12: numericType, - }) - .smap(t => new AffineTransform(t.m00, t.m01, t.m02, t.m10, t.m11, t.m12), t => t) - -const invertibleTransform = jsc.suchthat(arbitraryTransform, t => t.det() != 0) - -const simpleTransform = jsc.suchthat( - jsc - .record({scale: arbitraryVec2, translation: arbitraryVec2}) - .smap( - t => AffineTransform.withScale(t.scale).withTranslation(t.translation), - t => ({scale: t.getScale(), translation: t.getTranslation()}), - ), - t => t.det() != 0, -) - -const arbitraryRect = jsc - .record({origin: arbitraryVec2, size: positiveVec2}) - .smap(r => new Rect(r.origin, r.size), r => r) - -describe('Vec2', () => { - test('constructor', () => { - jsc.assertForall(jsc.number, jsc.number, (a, b) => { - const v = new Vec2(a, b) - return v.x == a && v.y == b - }) - }) - - test('withX', () => { - jsc.assertForall(arbitraryVec2, jsc.number, (v, n) => { - return v.withX(n).x === n - }) - }) - - test('withY', () => { - jsc.assertForall(arbitraryVec2, jsc.number, (v, n) => { - return v.withY(n).y === n - }) - }) - - test('plus', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - const sum = v1.plus(v2) - return sum.x === v1.x + v2.x && sum.y === v1.y + v2.y - }) - }) - - test('minus', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - const diff = v1.minus(v2) - return diff.x === v1.x - v2.x && diff.y === v1.y - v2.y - }) - }) - - test('times', () => { - jsc.assertForall(arbitraryVec2, jsc.number, (v1, s) => { - const prod = v1.times(s) - return prod.x === v1.x * s && prod.y === v1.y * s - }) - }) - - test('timesPointwise', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - const prod = v1.timesPointwise(v2) - return prod.x === v1.x * v2.x && prod.y === v1.y * v2.y - }) - }) - - test('dividedByPointwise', () => { - jsc.assertForall( - arbitraryVec2, - jsc.suchthat(arbitraryVec2, v => v.x !== 0 && v.y !== 0), - (v1, v2) => { - const div = v1.dividedByPointwise(v2) - return div.x === v1.x / v2.x && div.y === v1.y / v2.y - }, - ) - }) - - test('dot', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return v1.dot(v2) === v1.x * v2.x + v1.y * v2.y - }) - }) - - test('equals', () => { - jsc.assertForall(jsc.number, jsc.number, (a, b) => { - return new Vec2(a, b).equals(new Vec2(a, b)) - }) - - jsc.assertForall(arbitraryVec2, arbitraryVec2, (a, b) => { - return a.equals(b) === (a.x === b.x && a.y === b.y) - }) - }) - - test('length2', () => { - jsc.assertForall(arbitraryVec2, v => { - return v.length2() === v.x * v.x + v.y * v.y - }) - }) - - test('length', () => { - jsc.assertForall(arbitraryVec2, v => { - return v.length() === Math.sqrt(v.x * v.x + v.y * v.y) - }) - }) - - test('abs', () => { - jsc.assertForall(arbitraryVec2, v => { - const q = v.abs() - return q.x === Math.abs(v.x) && q.y === Math.abs(v.y) - }) - }) - - test('min', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - const min = Vec2.min(v1, v2) - return min.x === Math.min(v1.x, v2.x) && min.y === Math.min(v1.y, v2.y) - }) - }) - - test('max', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - const max = Vec2.max(v1, v2) - return max.x === Math.max(v1.x, v2.x) && max.y === Math.max(v1.y, v2.y) - }) - }) - - test('flatten', () => { - jsc.assertForall(arbitraryVec2, v1 => { - const flat = v1.flatten() - return flat[0] == v1.x && flat[1] == v1.y - }) - }) -}) - -describe('Rect', () => { - test('isEmpty', () => { - jsc.assertForall(arbitraryVec2, jsc.number, (v, n) => { - return new Rect(v, new Vec2(0, n)).isEmpty() - }) - jsc.assertForall(arbitraryVec2, jsc.number, (v, n) => { - return new Rect(v, new Vec2(n, 0)).isEmpty() - }) - jsc.assertForall(arbitraryVec2, v => { - return !new Rect(v, Vec2.unit).isEmpty() - }) - }) - - test('width', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).width() == v2.x - }) - }) - test('height', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).height() == v2.y - }) - }) - test('left', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).left() == v1.x - }) - }) - test('top', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).top() == v1.y - }) - }) - test('right', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).right() == v1.x + v2.x - }) - }) - test('bottom', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).bottom() == v1.y + v2.y - }) - }) - test('topLeft', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).topLeft().equals(v1) - }) - }) - test('topRight', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).topRight().equals(v1.plus(v2.withY(0))) - }) - }) - test('bottomLeft', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).bottomLeft().equals(v1.plus(v2.withX(0))) - }) - }) - test('bottomRight', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return new Rect(v1, v2).bottomRight().equals(v1.plus(v2)) - }) - }) - - test('withOrigin', () => { - jsc.assertForall(arbitraryRect, arbitraryVec2, (r, v) => { - return r.withOrigin(v).origin.equals(v) - }) - }) - test('withSize', () => { - jsc.assertForall(arbitraryRect, arbitraryVec2, (r, v) => { - return r.withSize(v).size.equals(v) - }) - }) - - test('closestPointTo', () => { - jsc.assertForall(arbitraryRect, arbitraryVec2, (r, v) => { - const p = r.closestPointTo(v) - return p.x >= r.left() && p.x <= r.right() && p.y >= r.top() && p.y <= r.bottom() - }) - }) - - test('hasIntersectionWith', () => { - jsc.assertForall(arbitraryRect, arbitraryRect, (r1, r2) => { - return r1.hasIntersectionWith(r2) === !r1.intersectWith(r2).isEmpty() - }) - }) - - test('intersectWith', () => { - jsc.assertForall(arbitraryRect, arbitraryRect, (r1, r2) => { - const inter = r1.intersectWith(r2) - return inter.isEmpty() || (r1.hasIntersectionWith(inter) && r2.hasIntersectionWith(inter)) - }) - }) -}) - -describe('AffineTransform', () => { - test('inverted', () => { - expect(new AffineTransform(0, 0, 0, 0, 0, 0).inverted()).toBe(null) - - jsc.assertForall(invertibleTransform, t => { - return t - .inverted()! - .inverted()! - .approxEquals(t) - }) - }) - - test('translation', () => { - jsc.assertForall(arbitraryTransform, arbitraryVec2, (t, v1) => { - return t - .withTranslation(v1) - .getTranslation() - .equals(v1) - }) - - jsc.assertForall(arbitraryTransform, arbitraryVec2, (t, v1) => { - const initialTranslation = t.getTranslation() - return t - .translatedBy(v1) - .getTranslation() - .approxEquals(initialTranslation.plus(v1)) - }) - }) - - test('scale', () => { - jsc.assertForall(arbitraryTransform, arbitraryVec2, (t, v1) => { - return t - .withScale(v1) - .getScale() - .equals(v1) - }) - }) - - test('transformVector', () => { - // Vector transformation are translation-invariant - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return AffineTransform.withTranslation(v1) - .transformVector(v2) - .approxEquals(v2) - }) - - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return AffineTransform.withScale(v1) - .transformVector(v2) - .approxEquals(v2.timesPointwise(v1)) - }) - }) - - test('inverseTransformVector', () => { - jsc.assertForall(invertibleTransform, arbitraryVec2, (t, v) => { - return t.inverseTransformVector(t.transformVector(v))!.approxEquals(v) - }) - }) - - test('transformPosition', () => { - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return AffineTransform.withTranslation(v1) - .transformPosition(v2) - .approxEquals(v2.plus(v1)) - }) - - jsc.assertForall(arbitraryVec2, arbitraryVec2, (v1, v2) => { - return AffineTransform.withScale(v1) - .transformPosition(v2) - .approxEquals(v2.timesPointwise(v1)) - }) - }) - - test('inverseTransformPosition', () => { - jsc.assertForall(invertibleTransform, arbitraryVec2, (t, v) => { - return t.inverseTransformPosition(t.transformPosition(v))!.approxEquals(v) - }) - }) - - test('transformRect', () => { - jsc.assertForall(arbitraryVec2, arbitraryRect, (v, r) => { - return AffineTransform.withTranslation(v) - .transformRect(r) - .equals(r.withOrigin(r.origin.plus(v))) - }) - - jsc.assertForall(arbitraryVec2, arbitraryRect, (v, r) => { - const t = AffineTransform.withScale(v) - const rt = t.transformRect(r) - return Math.abs(rt.area() - r.area() * Math.abs(t.det())) < 1e-6 - }) - }) - - test('inverseTransformRect', () => { - jsc.assertForall(simpleTransform, arbitraryRect, (t, r) => { - return t.inverseTransformRect(t.transformRect(r))!.approxEquals(r) - }) - }) - - test('times', () => { - jsc.assertForall(invertibleTransform, invertibleTransform, (t1, t2) => { - return t1 - .times(t2) - .times(t2.inverted()!) - .approxEquals(t1) - }) - }) -}) diff --git a/src/speedscope/library/math.ts b/src/speedscope/library/math.ts deleted file mode 100644 index 55476c5..0000000 --- a/src/speedscope/library/math.ts +++ /dev/null @@ -1,346 +0,0 @@ -export function clamp(x: number, minVal: number, maxVal: number) { - if (x < minVal) return minVal - if (x > maxVal) return maxVal - return x -} - -export class Vec2 { - constructor(readonly x: number, readonly y: number) {} - withX(x: number) { - return new Vec2(x, this.y) - } - withY(y: number) { - return new Vec2(this.x, y) - } - - plus(other: Vec2) { - return new Vec2(this.x + other.x, this.y + other.y) - } - minus(other: Vec2) { - return new Vec2(this.x - other.x, this.y - other.y) - } - times(scalar: number) { - return new Vec2(this.x * scalar, this.y * scalar) - } - timesPointwise(other: Vec2) { - return new Vec2(this.x * other.x, this.y * other.y) - } - dividedByPointwise(other: Vec2) { - return new Vec2(this.x / other.x, this.y / other.y) - } - dot(other: Vec2) { - return this.x * other.x + this.y * other.y - } - equals(other: Vec2) { - return this.x === other.x && this.y === other.y - } - approxEquals(other: Vec2, epsilon = 1e-9) { - return Math.abs(this.x - other.x) < epsilon && Math.abs(this.y - other.y) < epsilon - } - - length2() { - return this.dot(this) - } - length() { - return Math.sqrt(this.length2()) - } - abs() { - return new Vec2(Math.abs(this.x), Math.abs(this.y)) - } - - static min(a: Vec2, b: Vec2) { - return new Vec2(Math.min(a.x, b.x), Math.min(a.y, b.y)) - } - - static max(a: Vec2, b: Vec2) { - return new Vec2(Math.max(a.x, b.x), Math.max(a.y, b.y)) - } - - static clamp(v: Vec2, min: Vec2, max: Vec2) { - return new Vec2(clamp(v.x, min.x, max.x), clamp(v.y, min.y, max.y)) - } - - static zero = new Vec2(0, 0) - static unit = new Vec2(1, 1) - - flatten(): [number, number] { - return [this.x, this.y] - } -} - -export class AffineTransform { - constructor( - readonly m00 = 1, - readonly m01 = 0, - readonly m02 = 0, - readonly m10 = 0, - readonly m11 = 1, - readonly m12 = 0, - ) {} - - withScale(s: Vec2) { - let {m00, m01, m02, m10, m11, m12} = this - m00 = s.x - m11 = s.y - return new AffineTransform(m00, m01, m02, m10, m11, m12) - } - static withScale(s: Vec2) { - return new AffineTransform().withScale(s) - } - scaledBy(s: Vec2) { - return AffineTransform.withScale(s).times(this) - } - getScale() { - return new Vec2(this.m00, this.m11) - } - - withTranslation(t: Vec2) { - let {m00, m01, m02, m10, m11, m12} = this - m02 = t.x - m12 = t.y - return new AffineTransform(m00, m01, m02, m10, m11, m12) - } - static withTranslation(t: Vec2) { - return new AffineTransform().withTranslation(t) - } - getTranslation() { - return new Vec2(this.m02, this.m12) - } - translatedBy(t: Vec2) { - return AffineTransform.withTranslation(t).times(this) - } - - static betweenRects(from: Rect, to: Rect) { - return AffineTransform.withTranslation(from.origin.times(-1)) - .scaledBy(new Vec2(to.size.x / from.size.x, to.size.y / from.size.y)) - .translatedBy(to.origin) - } - - times(other: AffineTransform) { - const m00 = this.m00 * other.m00 + this.m01 * other.m10 - const m01 = this.m00 * other.m01 + this.m01 * other.m11 - const m02 = this.m00 * other.m02 + this.m01 * other.m12 + this.m02 - - const m10 = this.m10 * other.m00 + this.m11 * other.m10 - const m11 = this.m10 * other.m01 + this.m11 * other.m11 - const m12 = this.m10 * other.m02 + this.m11 * other.m12 + this.m12 - return new AffineTransform(m00, m01, m02, m10, m11, m12) - } - - equals(other: AffineTransform) { - return ( - this.m00 == other.m00 && - this.m01 == other.m01 && - this.m02 == other.m02 && - this.m10 == other.m10 && - this.m11 == other.m11 && - this.m12 == other.m12 - ) - } - - approxEquals(other: AffineTransform, epsilon = 1e-9) { - return ( - Math.abs(this.m00 - other.m00) < epsilon && - Math.abs(this.m01 - other.m01) < epsilon && - Math.abs(this.m02 - other.m02) < epsilon && - Math.abs(this.m10 - other.m10) < epsilon && - Math.abs(this.m11 - other.m11) < epsilon && - Math.abs(this.m12 - other.m12) < epsilon - ) - } - - timesScalar(s: number) { - const {m00, m01, m02, m10, m11, m12} = this - return new AffineTransform(s * m00, s * m01, s * m02, s * m10, s * m11, s * m12) - } - - det() { - const {m00, m01, m02, m10, m11, m12} = this - const m20 = 0 - const m21 = 0 - const m22 = 1 - - return ( - m00 * (m11 * m22 - m12 * m21) - m01 * (m10 * m22 - m12 * m20) + m02 * (m10 * m21 - m11 * m20) - ) - } - - adj() { - const {m00, m01, m02, m10, m11, m12} = this - const m20 = 0 - const m21 = 0 - const m22 = 1 - - // Adjugate matrix (a) is the transpose of the - // cofactor matrix (c). - // - // 00 01 02 - // 10 11 12 - // 20 21 22 - - const a00 = /* c00 = */ +(m11 * m22 - m12 * m21) - const a01 = /* c10 = */ -(m01 * m22 - m02 * m21) - const a02 = /* c20 = */ +(m01 * m12 - m02 * m11) - const a10 = /* c01 = */ -(m10 * m22 - m12 * m20) - const a11 = /* c11 = */ +(m00 * m22 - m02 * m20) - const a12 = /* c21 = */ -(m00 * m12 - m02 * m10) - - return new AffineTransform(a00, a01, a02, a10, a11, a12) - } - - inverted(): AffineTransform | null { - const det = this.det() - if (det === 0) return null - const adj = this.adj() - return adj.timesScalar(1 / det) - } - - transformVector(v: Vec2) { - return new Vec2(v.x * this.m00 + v.y * this.m01, v.x * this.m10 + v.y * this.m11) - } - - inverseTransformVector(v: Vec2): Vec2 | null { - const inv = this.inverted() - if (!inv) return null - return inv.transformVector(v) - } - - transformPosition(v: Vec2) { - return new Vec2( - v.x * this.m00 + v.y * this.m01 + this.m02, - v.x * this.m10 + v.y * this.m11 + this.m12, - ) - } - - inverseTransformPosition(v: Vec2): Vec2 | null { - const inv = this.inverted() - if (!inv) return null - return inv.transformPosition(v) - } - - transformRect(r: Rect) { - const size = this.transformVector(r.size) - const origin = this.transformPosition(r.origin) - - if (size.x < 0 && size.y < 0) { - return new Rect(origin.plus(size), size.abs()) - } else if (size.x < 0) { - return new Rect(origin.withX(origin.x + size.x), size.abs()) - } else if (size.y < 0) { - return new Rect(origin.withY(origin.y + size.y), size.abs()) - } - - return new Rect(origin, size) - } - - inverseTransformRect(r: Rect): Rect | null { - const inv = this.inverted() - if (!inv) return null - return inv.transformRect(r) - } - - flatten(): [number, number, number, number, number, number, number, number, number] { - // Flatten into GLSL format - // prettier-ignore - return [ - this.m00, this.m10, 0, - this.m01, this.m11, 0, - this.m02, this.m12, 1, - ] - } -} - -export class Rect { - constructor(readonly origin: Vec2, readonly size: Vec2) {} - - isEmpty() { - return this.width() == 0 || this.height() == 0 - } - - width() { - return this.size.x - } - height() { - return this.size.y - } - - left() { - return this.origin.x - } - right() { - return this.left() + this.width() - } - top() { - return this.origin.y - } - bottom() { - return this.top() + this.height() - } - - topLeft() { - return this.origin - } - topRight() { - return this.origin.plus(new Vec2(this.width(), 0)) - } - - bottomRight() { - return this.origin.plus(this.size) - } - bottomLeft() { - return this.origin.plus(new Vec2(0, this.height())) - } - - withOrigin(origin: Vec2) { - return new Rect(origin, this.size) - } - withSize(size: Vec2) { - return new Rect(this.origin, size) - } - - closestPointTo(p: Vec2) { - return new Vec2(clamp(p.x, this.left(), this.right()), clamp(p.y, this.top(), this.bottom())) - } - - distanceFrom(p: Vec2) { - return p.minus(this.closestPointTo(p)).length() - } - - contains(p: Vec2) { - return this.distanceFrom(p) === 0 - } - - hasIntersectionWith(other: Rect) { - const top = Math.max(this.top(), other.top()) - const bottom = Math.max(top, Math.min(this.bottom(), other.bottom())) - if (bottom - top === 0) return false - - const left = Math.max(this.left(), other.left()) - const right = Math.max(left, Math.min(this.right(), other.right())) - if (right - left === 0) return false - return true - } - - intersectWith(other: Rect): Rect { - const topLeft = Vec2.max(this.topLeft(), other.topLeft()) - const bottomRight = Vec2.max(topLeft, Vec2.min(this.bottomRight(), other.bottomRight())) - - return new Rect(topLeft, bottomRight.minus(topLeft)) - } - - equals(other: Rect) { - return this.origin.equals(other.origin) && this.size.equals(other.size) - } - - approxEquals(other: Rect) { - return this.origin.approxEquals(other.origin) && this.size.approxEquals(other.size) - } - - area() { - return this.size.x * this.size.y - } - - static empty = new Rect(Vec2.zero, Vec2.zero) - static unit = new Rect(Vec2.zero, Vec2.unit) - static NDC = new Rect(new Vec2(-1, -1), new Vec2(2, 2)) -} diff --git a/src/speedscope/library/profile.test.ts b/src/speedscope/library/profile.test.ts deleted file mode 100644 index 8496cee..0000000 --- a/src/speedscope/library/profile.test.ts +++ /dev/null @@ -1,332 +0,0 @@ -import { - FrameInfo, - StackListProfileBuilder, - CallTreeNode, - CallTreeProfileBuilder, - Profile, -} from './profile' - -function getFrameInfo(key: string): FrameInfo { - return { - key: key, - name: key, - file: `${key}.ts`, - line: key.length, - } -} - -const fa = getFrameInfo('a') -const fb = getFrameInfo('b') -const fc = getFrameInfo('c') -const fd = getFrameInfo('d') -const fe = getFrameInfo('e') - -function toStackList(profile: Profile, grouped: boolean): string[] { - let stackList: string[] = [] - const curStack: (number | string)[] = [] - let lastValue = 0 - - function openFrame(node: CallTreeNode, value: number) { - if (lastValue != value) { - stackList.push(curStack.map(k => `${k}`).join(';')) - lastValue = value - } - curStack.push(node.frame.key) - } - - function closeFrame(node: CallTreeNode, value: number) { - if (lastValue != value) { - stackList.push(curStack.map(k => `${k}`).join(';')) - lastValue = value - } - curStack.pop() - } - - if (grouped) { - profile.forEachCallGrouped(openFrame, closeFrame) - } else { - profile.forEachCall(openFrame, closeFrame) - } - return stackList -} - -function flatten(ts: T[][]): T[] { - let ret: T[] = [] - return ret.concat(...ts) -} - -function toTreeString(profile: Profile, grouped: boolean): string { - function visit(node: CallTreeNode): string[] { - const childLines = flatten(node.children.map(child => visit(child))).map(l => ` ${l}`) - const nodeStr = `${node.frame.key}:${node.getSelfWeight()}:${node.getTotalWeight()}` - - if (childLines.length > 0) { - return [`(${nodeStr}`].concat(childLines).concat(')') - } else { - return [`(${nodeStr})`] - } - } - - if (grouped) { - return visit(profile.getGroupedCalltreeRoot()).join('\n') - } else { - return visit(profile.getAppendOrderCalltreeRoot()).join('\n') - } -} - -function verifyProfile(profile: Profile) { - const allFrameKeys = new Set([fa, fb, fc, fd, fe].map(f => f.key)) - const framesInProfile = new Set() - profile.forEachFrame(f => framesInProfile.add(f.key)) - expect(allFrameKeys).toEqual(framesInProfile) - - expect(toStackList(profile, false)).toEqual([ - // prettier-ignore - 'a', - 'a;b', - 'a;b;d', - 'a;b;c', - '', - 'a', - 'a;b', - 'a;b;b', - 'a;b;e', - 'a', - ]) - - expect(toStackList(profile, true)).toEqual([ - // prettier-ignore - 'a;b;e', - 'a;b;b', - 'a;b;c', - 'a;b;d', - 'a;b', - 'a', - ]) - - const flattened = profile.getProfileWithRecursionFlattened() - expect(toStackList(flattened, false)).toEqual([ - // prettier-ignore - 'a', - 'a;b', - 'a;b;d', - 'a;b;c', - '', - 'a', - 'a;b', - 'a;b;e', - 'a', - ]) - - expect(toStackList(flattened, true)).toEqual([ - // prettier-ignore - 'a;b;e', - 'a;b;c', - 'a;b;d', - 'a;b', - 'a', - ]) -} - -test('StackListProfileBuilder', () => { - const b = new StackListProfileBuilder() - - const samples = [ - // prettier-ignore - [fa], - [fa, fb], - [fa, fb], - [fa, fb, fd], - [fa, fb, fc], - [], - [fa], - [fa, fb], - [fa, fb, fb], - [fa, fb, fe], - [fa], - ] - - samples.forEach(stack => { - b.appendSampleWithWeight(stack, 1) - }) - b.appendSampleWithWeight([], 4) - - const profile = b.build() - expect(profile.getTotalWeight()).toBe(samples.length + 4) - expect(profile.getTotalNonIdleWeight()).toBe(samples.length - 1) - verifyProfile(profile) -}) - -test('StackListProfileBuilder separates non-contiguous', () => { - const b = new StackListProfileBuilder() - - const samples = [ - // prettier-ignore - [fa, fb, fc], - [fa, fb], - [fa], - [fa, fb], - [fa, fb, fc], - ] - - samples.forEach(stack => { - b.appendSampleWithWeight(stack, 1) - }) - b.appendSampleWithWeight([], 4) - const profile = b.build() - - expect(toTreeString(profile, true)).toMatchSnapshot('grouped') - expect(toTreeString(profile, false)).toMatchSnapshot('append order') -}) - -test('CallTreeProfileBuilder', () => { - const b = new CallTreeProfileBuilder() - - b.enterFrame(fa, 0) - - b.enterFrame(fb, 1) - - b.enterFrame(fd, 3) - - b.leaveFrame(fd, 4) - b.enterFrame(fc, 4) - - b.leaveFrame(fc, 5) - b.leaveFrame(fb, 5) - b.leaveFrame(fa, 5) - - b.enterFrame(fa, 6) - - b.enterFrame(fb, 7) - - b.enterFrame(fb, 8) - - b.leaveFrame(fb, 9) - b.enterFrame(fe, 9) - - b.leaveFrame(fe, 10) - b.leaveFrame(fb, 10) - - b.leaveFrame(fa, 11) - - const profile = b.build() - verifyProfile(profile) -}) - -test('CallTreeProfileBuilder separates non-contiguous', () => { - const b = new CallTreeProfileBuilder() - - b.enterFrame(fa, 0) - b.enterFrame(fb, 0) - b.enterFrame(fc, 0) - - b.leaveFrame(fc, 1) - - b.leaveFrame(fb, 2) - - b.enterFrame(fb, 3) - - b.enterFrame(fc, 4) - - b.leaveFrame(fc, 5) - b.leaveFrame(fb, 5) - b.leaveFrame(fa, 5) - - const profile = b.build() - expect(toTreeString(profile, true)).toMatchSnapshot('grouped') - expect(toTreeString(profile, false)).toMatchSnapshot('append order') -}) - -test('getInvertedProfileForCallersOf', () => { - const b = new StackListProfileBuilder() - - const samples = [ - // prettier-ignore - [fb], - [fa, fb], - [fa, fb, fc], - [fa], - [fa, fb, fd], - [fa], - [fd, fb], - ] - samples.forEach(stack => { - b.appendSampleWithWeight(stack, 1) - }) - - const profile = b.build() - const inverted = profile.getInvertedProfileForCallersOf(fb) - - expect(toStackList(inverted, false)).toEqual([ - // prettier-ignore - 'b', - 'b;a', - 'b;d', - ]) -}) - -test('getProfileForCalleesOf', () => { - const b = new StackListProfileBuilder() - - const samples = [ - // prettier-ignore - [fb], - [fa, fb], - [fa, fb, fc], - [fa], - [fa, fb, fd], - [fa], - [fd, fb], - ] - samples.forEach(stack => { - b.appendSampleWithWeight(stack, 1) - }) - - const profile = b.build() - const inverted = profile.getProfileForCalleesOf(fb) - - expect(toStackList(inverted, false)).toEqual([ - // prettier-ignore - 'b', - 'b;c', - 'b;d', - 'b', - ]) -}) - -test('getProfileWithRecursionFlattened', () => { - const b = new StackListProfileBuilder() - - const samples = [ - // prettier-ignore - [fa], - [fa, fb, fa], - [fa, fb, fa, fb, fa], - [fa, fb, fa], - ] - samples.forEach(stack => { - b.appendSampleWithWeight(stack, 1) - }) - - const profile = b.build() - const inverted = profile.getProfileWithRecursionFlattened() - - expect(toStackList(inverted, false)).toEqual([ - // prettier-ignore - 'a', - 'a;b', - ]) - - const framesInProfile = new Set() - inverted.forEachFrame(f => { - if (f.key === fa.key) { - expect(f.getSelfWeight()).toEqual(4) - } - if (f.key === fb.key) { - expect(f.getSelfWeight()).toEqual(0) - } - framesInProfile.add(f.key) - }) - const allFrameKeys = new Set([fa, fb].map(f => f.key)) - expect(allFrameKeys).toEqual(framesInProfile) -}) diff --git a/src/speedscope/library/profile.ts b/src/speedscope/library/profile.ts deleted file mode 100644 index f1db730..0000000 --- a/src/speedscope/library/profile.ts +++ /dev/null @@ -1,648 +0,0 @@ -import {lastOf, KeyedSet} from './utils' -import {ValueFormatter, RawValueFormatter} from './value-formatters' -import {FileFormat} from './file-format-spec' -const demangleCppModule = import('./demangle-cpp') - -// Force eager loading of the module -demangleCppModule.then(() => {}) - -export interface FrameInfo { - key: string | number - - // Name of the frame. May be a method name, e.g. - // "ActiveRecord##to_hash" - name: string - - // File path of the code corresponding to this - // call stack frame. - file?: string - - // Line in the given file where this frame occurs - line?: number - - // Column in the file - col?: number -} - -export class HasWeights { - private selfWeight = 0 - private totalWeight = 0 - getSelfWeight() { - return this.selfWeight - } - getTotalWeight() { - return this.totalWeight - } - addToTotalWeight(delta: number) { - this.totalWeight += delta - } - addToSelfWeight(delta: number) { - this.selfWeight += delta - } - - overwriteWeightWith(other: HasWeights) { - this.selfWeight = other.selfWeight - this.totalWeight = other.totalWeight - } -} - -export class Frame extends HasWeights { - key: string | number - - // Name of the frame. May be a method name, e.g. - // "ActiveRecord##to_hash" - name: string - - // File path of the code corresponding to this - // call stack frame. - file?: string - - // Line in the given file where this frame occurs - line?: number - - // Column in the file - col?: number - - private constructor(info: FrameInfo) { - super() - this.key = info.key - this.name = info.name - this.file = info.file - this.line = info.line - this.col = info.col - } - - static root = new Frame({ - key: '(speedscope root)', - name: '(speedscope root)', - }) - - static getOrInsert(set: KeyedSet, info: FrameInfo) { - return set.getOrInsert(new Frame(info)) - } -} - -export class CallTreeNode extends HasWeights { - children: CallTreeNode[] = [] - - isRoot() { - return this.frame === Frame.root - } - - // If a node is "frozen", it means it should no longer be mutated. - private frozen = false - isFrozen() { - return this.frozen - } - freeze() { - this.frozen = true - } - - constructor(readonly frame: Frame, readonly parent: CallTreeNode | null) { - super() - } -} - -export interface ProfileGroup { - name: string - indexToView: number - profiles: Profile[] -} - -export class Profile { - protected name: string = '' - - protected totalWeight: number - - protected frames = new KeyedSet() - - protected appendOrderCalltreeRoot = new CallTreeNode(Frame.root, null) - protected groupedCalltreeRoot = new CallTreeNode(Frame.root, null) - - public getAppendOrderCalltreeRoot() { - return this.appendOrderCalltreeRoot - } - public getGroupedCalltreeRoot() { - return this.groupedCalltreeRoot - } - - // List of references to CallTreeNodes at the top of the - // stack at the time of the sample. - protected samples: CallTreeNode[] = [] - protected weights: number[] = [] - - protected valueFormatter: ValueFormatter = new RawValueFormatter() - - constructor(totalWeight: number = 0) { - this.totalWeight = totalWeight - } - - formatValue(v: number) { - return this.valueFormatter.format(v) - } - setValueFormatter(f: ValueFormatter) { - this.valueFormatter = f - } - getWeightUnit(): FileFormat.ValueUnit { - return this.valueFormatter.unit - } - - getName() { - return this.name - } - setName(name: string) { - this.name = name - } - - getTotalWeight() { - return this.totalWeight - } - - private totalNonIdleWeight: number | null = null - getTotalNonIdleWeight() { - if (this.totalNonIdleWeight === null) { - this.totalNonIdleWeight = this.groupedCalltreeRoot.children.reduce( - (n, c) => n + c.getTotalWeight(), - 0, - ) - } - return this.totalNonIdleWeight - } - - forEachCallGrouped( - openFrame: (node: CallTreeNode, value: number) => void, - closeFrame: (node: CallTreeNode, value: number) => void, - ) { - function visit(node: CallTreeNode, start: number) { - if (node.frame !== Frame.root) { - openFrame(node, start) - } - - let childTime = 0 - - const children = [...node.children] - children.sort((a, b) => (a.getTotalWeight() > b.getTotalWeight() ? -1 : 1)) - - children.forEach(function(child) { - visit(child, start + childTime) - childTime += child.getTotalWeight() - }) - - if (node.frame !== Frame.root) { - closeFrame(node, start + node.getTotalWeight()) - } - } - visit(this.groupedCalltreeRoot, 0) - } - - forEachCall( - openFrame: (node: CallTreeNode, value: number) => void, - closeFrame: (node: CallTreeNode, value: number) => void, - ) { - let prevStack: CallTreeNode[] = [] - let value = 0 - - let sampleIndex = 0 - for (let stackTop of this.samples) { - // Find lowest common ancestor of the current stack and the previous one - let lca: CallTreeNode | null = null - - // This is O(n^2), but n should be relatively small here (stack height), - // so hopefully this isn't much of a problem - for ( - lca = stackTop; - lca && lca.frame != Frame.root && prevStack.indexOf(lca) === -1; - lca = lca.parent - ) {} - - // Close frames that are no longer open - while (prevStack.length > 0 && lastOf(prevStack) != lca) { - const node = prevStack.pop()! - closeFrame(node, value) - } - - // Open frames that are now becoming open - const toOpen: CallTreeNode[] = [] - for ( - let node: CallTreeNode | null = stackTop; - node && node.frame != Frame.root && node != lca; - node = node.parent - ) { - toOpen.push(node) - } - toOpen.reverse() - - for (let node of toOpen) { - openFrame(node, value) - } - - prevStack = prevStack.concat(toOpen) - value += this.weights[sampleIndex++] - } - - // Close frames that are open at the end of the trace - for (let i = prevStack.length - 1; i >= 0; i--) { - closeFrame(prevStack[i], value) - } - } - - forEachFrame(fn: (frame: Frame) => void) { - this.frames.forEach(fn) - } - - forEachSample(fn: (sample: CallTreeNode, weight: number) => void) { - for (let i = 0; i < this.samples.length; i++) { - fn(this.samples[i], this.weights[i]) - } - } - - getProfileWithRecursionFlattened(): Profile { - const builder = new CallTreeProfileBuilder() - - const stack: (CallTreeNode | null)[] = [] - const framesInStack = new Set() - - function openFrame(node: CallTreeNode, value: number) { - if (framesInStack.has(node.frame)) { - stack.push(null) - } else { - framesInStack.add(node.frame) - stack.push(node) - builder.enterFrame(node.frame, value) - } - } - function closeFrame(node: CallTreeNode, value: number) { - const stackTop = stack.pop() - if (stackTop) { - framesInStack.delete(stackTop.frame) - builder.leaveFrame(stackTop.frame, value) - } - } - - this.forEachCall(openFrame, closeFrame) - - const flattenedProfile = builder.build() - flattenedProfile.name = this.name - flattenedProfile.valueFormatter = this.valueFormatter - - // When constructing a profile with recursion flattened, - // counter-intuitive things can happen to "self time" measurements - // for functions. - // For example, given the following list of stacks w/ weights: - // - // a 1 - // a;b;a 1 - // a;b;a;b;a 1 - // a;b;a 1 - // - // The resulting profile with recursion flattened out will look like this: - // - // a 1 - // a;b 3 - // - // Which is useful to view, but it's counter-intuitive to move self-time - // for frames around, since analyzing the self-time of functions is an important - // thing to be able to do accurately, and we don't want this to change when recursion - // is flattened. To work around that, we'll just copy the weights directly from the - // un-flattened profile. - this.forEachFrame(f => { - flattenedProfile.frames.getOrInsert(f).overwriteWeightWith(f) - }) - - return flattenedProfile - } - - getInvertedProfileForCallersOf(focalFrameInfo: FrameInfo): Profile { - const focalFrame = Frame.getOrInsert(this.frames, focalFrameInfo) - const builder = new StackListProfileBuilder() - - // TODO(jlfwong): Could construct this at profile - // construction time rather than on demand. - const nodes: CallTreeNode[] = [] - - function visit(node: CallTreeNode) { - if (node.frame === focalFrame) { - nodes.push(node) - } else { - for (let child of node.children) { - visit(child) - } - } - } - - visit(this.appendOrderCalltreeRoot) - - for (let node of nodes) { - const stack: FrameInfo[] = [] - for (let n: CallTreeNode | null = node; n != null && n.frame !== Frame.root; n = n.parent) { - stack.push(n.frame) - } - builder.appendSampleWithWeight(stack, node.getTotalWeight()) - } - - const ret = builder.build() - ret.name = this.name - ret.valueFormatter = this.valueFormatter - return ret - } - - getProfileForCalleesOf(focalFrameInfo: FrameInfo): Profile { - const focalFrame = Frame.getOrInsert(this.frames, focalFrameInfo) - const builder = new StackListProfileBuilder() - - function recordSubtree(focalFrameNode: CallTreeNode) { - const stack: FrameInfo[] = [] - - function visit(node: CallTreeNode) { - stack.push(node.frame) - builder.appendSampleWithWeight(stack, node.getSelfWeight()) - for (let child of node.children) { - visit(child) - } - stack.pop() - } - - visit(focalFrameNode) - } - - function findCalls(node: CallTreeNode) { - if (node.frame === focalFrame) { - recordSubtree(node) - } else { - for (let child of node.children) { - findCalls(child) - } - } - } - - findCalls(this.appendOrderCalltreeRoot) - - const ret = builder.build() - ret.name = this.name - ret.valueFormatter = this.valueFormatter - return ret - } - - // Demangle symbols for readability - async demangle() { - let demangleCpp: ((name: string) => string) | null = null - - for (let frame of this.frames) { - // This function converts a mangled C++ name such as "__ZNK7Support6ColorFeqERKS0_" - // into a human-readable symbol (in this case "Support::ColorF::==(Support::ColorF&)") - if (frame.name.startsWith('__Z')) { - if (!demangleCpp) { - demangleCpp = (await demangleCppModule).demangleCpp - } - frame.name = demangleCpp(frame.name) - } - } - } - - remapNames(callback: (name: string) => string) { - for (let frame of this.frames) { - frame.name = callback(frame.name) - } - } -} - -export class StackListProfileBuilder extends Profile { - _appendSample(stack: FrameInfo[], weight: number, useAppendOrder: boolean) { - if (isNaN(weight)) throw new Error('invalid weight') - let node = useAppendOrder ? this.appendOrderCalltreeRoot : this.groupedCalltreeRoot - - let framesInStack = new Set() - - for (let frameInfo of stack) { - const frame = Frame.getOrInsert(this.frames, frameInfo) - const last = useAppendOrder - ? lastOf(node.children) - : node.children.find(c => c.frame === frame) - if (last && !last.isFrozen() && last.frame == frame) { - node = last - } else { - const parent = node - node = new CallTreeNode(frame, node) - parent.children.push(node) - } - node.addToTotalWeight(weight) - - // It's possible for the same frame to occur multiple - // times in the same call stack due to either direct - // or indirect recursion. We want to avoid counting that - // frame multiple times for a single sample, we so just - // track all of the unique frames that participated in - // this call stack, then add to their weight at the end. - framesInStack.add(node.frame) - } - node.addToSelfWeight(weight) - - if (useAppendOrder) { - for (let child of node.children) { - child.freeze() - } - } - - if (useAppendOrder) { - node.frame.addToSelfWeight(weight) - - for (let frame of framesInStack) { - frame.addToTotalWeight(weight) - } - - if (node === lastOf(this.samples)) { - this.weights[this.weights.length - 1] += weight - } else { - this.samples.push(node) - this.weights.push(weight) - } - } - } - - appendSampleWithWeight(stack: FrameInfo[], weight: number) { - if (weight === 0) { - // Samples with zero weight have no effect, so let's ignore them - return - } - if (weight < 0) { - throw new Error('Samples must have positive weights') - } - - this._appendSample(stack, weight, true) - this._appendSample(stack, weight, false) - } - - private pendingSample: { - stack: FrameInfo[] - startTimestamp: number - centralTimestamp: number - } | null = null - appendSampleWithTimestamp(stack: FrameInfo[], timestamp: number) { - if (this.pendingSample) { - if (timestamp < this.pendingSample.centralTimestamp) { - throw new Error('Timestamps received out of order') - } - const endTimestamp = (timestamp + this.pendingSample.centralTimestamp) / 2 - this.appendSampleWithWeight( - this.pendingSample.stack, - endTimestamp - this.pendingSample.startTimestamp, - ) - this.pendingSample = {stack, startTimestamp: endTimestamp, centralTimestamp: timestamp} - } else { - this.pendingSample = {stack, startTimestamp: timestamp, centralTimestamp: timestamp} - } - } - - build(): Profile { - if (this.pendingSample) { - if (this.samples.length > 0) { - this.appendSampleWithWeight( - this.pendingSample.stack, - this.pendingSample.centralTimestamp - this.pendingSample.startTimestamp, - ) - } else { - // There is only a single sample. In this case, units will be meaningless, - // so we'll append with a weight of 1 and also clear any value formatter - this.appendSampleWithWeight(this.pendingSample.stack, 1) - this.setValueFormatter(new RawValueFormatter()) - } - } - this.totalWeight = Math.max(this.totalWeight, this.weights.reduce((a, b) => a + b, 0)) - return this - } -} - -// As an alternative API for importing profiles more efficiently, provide a -// way to open & close frames directly without needing to construct tons of -// arrays as intermediaries. -export class CallTreeProfileBuilder extends Profile { - private appendOrderStack: CallTreeNode[] = [this.appendOrderCalltreeRoot] - private groupedOrderStack: CallTreeNode[] = [this.groupedCalltreeRoot] - private framesInStack = new Map() - private stack: Frame[] = [] - - private lastValue: number = 0 - private addWeightsToFrames(value: number) { - const delta = value - this.lastValue - for (let frame of this.framesInStack.keys()) { - frame.addToTotalWeight(delta) - } - const stackTop = lastOf(this.stack) - if (stackTop) { - stackTop.addToSelfWeight(delta) - } - } - private addWeightsToNodes(value: number, stack: CallTreeNode[]) { - const delta = value - this.lastValue - for (let node of stack) { - node.addToTotalWeight(delta) - } - const stackTop = lastOf(stack) - if (stackTop) { - stackTop.addToSelfWeight(delta) - } - } - - private _enterFrame(frame: Frame, value: number, useAppendOrder: boolean) { - let stack = useAppendOrder ? this.appendOrderStack : this.groupedOrderStack - this.addWeightsToNodes(value, stack) - - let prevTop = lastOf(stack) - - if (prevTop) { - if (useAppendOrder) { - const delta = value - this.lastValue - if (delta > 0) { - this.samples.push(prevTop) - this.weights.push(value - this.lastValue) - } else if (delta < 0) { - throw new Error( - `Samples must be provided in increasing order of cumulative value. Last sample was ${ - this.lastValue - }, this sample was ${value}`, - ) - } - } - - const last = useAppendOrder - ? lastOf(prevTop.children) - : prevTop.children.find(c => c.frame === frame) - let node: CallTreeNode - if (last && !last.isFrozen() && last.frame == frame) { - node = last - } else { - node = new CallTreeNode(frame, prevTop) - prevTop.children.push(node) - } - stack.push(node) - } - } - enterFrame(frameInfo: FrameInfo, value: number) { - const frame = Frame.getOrInsert(this.frames, frameInfo) - this.addWeightsToFrames(value) - this._enterFrame(frame, value, true) - this._enterFrame(frame, value, false) - - this.stack.push(frame) - const frameCount = this.framesInStack.get(frame) || 0 - this.framesInStack.set(frame, frameCount + 1) - this.lastValue = value - } - - private _leaveFrame(frame: Frame, value: number, useAppendOrder: boolean) { - let stack = useAppendOrder ? this.appendOrderStack : this.groupedOrderStack - this.addWeightsToNodes(value, stack) - - if (useAppendOrder) { - const leavingStackTop = this.appendOrderStack.pop() - if (leavingStackTop == null) { - throw new Error(`Trying to leave ${frame.key} when stack is empty`) - } - if (this.lastValue == null) { - throw new Error(`Trying to leave a ${frame.key} before any have been entered`) - } - leavingStackTop.freeze() - const delta = value - this.lastValue - if (delta > 0) { - this.samples.push(leavingStackTop) - this.weights.push(value - this.lastValue) - } else if (delta < 0) { - throw new Error( - `Samples must be provided in increasing order of cumulative value. Last sample was ${this - .lastValue!}, this sample was ${value}`, - ) - } - } else { - this.groupedOrderStack.pop() - } - } - - leaveFrame(frameInfo: FrameInfo, value: number) { - const frame = Frame.getOrInsert(this.frames, frameInfo) - this.addWeightsToFrames(value) - - this._leaveFrame(frame, value, true) - this._leaveFrame(frame, value, false) - - this.stack.pop() - const frameCount = this.framesInStack.get(frame) - if (frameCount == null) return - if (frameCount === 1) { - this.framesInStack.delete(frame) - } else { - this.framesInStack.set(frame, frameCount - 1) - } - this.lastValue = value - - this.totalWeight = Math.max(this.totalWeight, this.lastValue) - } - - build(): Profile { - // Each stack is expected to contain a single node which we initialize to be - // the root node. - if (this.appendOrderStack.length > 1 || this.groupedOrderStack.length > 1) { - throw new Error('Tried to complete profile construction with a non-empty stack') - } - return this - } -} diff --git a/src/speedscope/library/stats.ts b/src/speedscope/library/stats.ts deleted file mode 100644 index 284b5ea..0000000 --- a/src/speedscope/library/stats.ts +++ /dev/null @@ -1,141 +0,0 @@ -/** - * @author mrdoob / http://mrdoob.com/ - * Heavily modified port of https://github.com/mrdoob/stats.js - */ - -export class StatsPanel { - private container: HTMLElement = document.createElement('div') - private shown: number = 0 - private panels: Panel[] = [] - private msPanel: Panel = new Panel('MS', '#0f0', '#020') - private fpsPanel: Panel = new Panel('FPS', '#0ff', '#002') - - constructor() { - this.container.style.cssText = ` - position:fixed; - bottom:0; - right:0; - cursor:pointer; - opacity:0.9; - z-index:10000 - ` - this.container.addEventListener('click', () => { - this.showPanel((this.shown + 1) % this.panels.length) - }) - this.addPanel(this.msPanel) - this.addPanel(this.fpsPanel) - document.body.appendChild(this.container) - } - - addPanel(panel: Panel) { - panel.appendTo(this.container) - this.panels.push(panel) - this.showPanel(this.panels.length - 1) - } - - showPanel(id: number) { - for (var i = 0; i < this.container.children.length; i++) { - ;(this.container.children[i] as HTMLElement).style.display = i === id ? 'block' : 'none' - } - this.shown = id - } - - private beginTime: number = 0 - begin() { - this.beginTime = (performance || Date).now() - } - - private frames = 0 - private prevTime = 0 - end() { - this.frames++ - var time = (performance || Date).now() - this.msPanel.update(time - this.beginTime, 200) - - if (time >= this.prevTime + 1000) { - this.fpsPanel.update(this.frames * 1000 / (time - this.prevTime), 100) - this.prevTime = time - this.frames = 0 - } - } -} - -const PR = Math.round(window.devicePixelRatio || 1) - -class Panel { - private min: number = Infinity - private max: number = 0 - private canvas: HTMLCanvasElement = document.createElement('canvas') - private context = this.canvas.getContext('2d')! - private WIDTH = 80 * PR - private HEIGHT = 48 * PR - private TEXT_X = 3 * PR - private TEXT_Y = 2 * PR - private GRAPH_X = 3 * PR - private GRAPH_Y = 15 * PR - private GRAPH_WIDTH = 74 * PR - private GRAPH_HEIGHT = 30 * PR - - constructor(private name: string, private fg: string, private bg: string) { - this.canvas.width = this.WIDTH - this.canvas.height = this.HEIGHT - this.canvas.style.cssText = 'width:80px;height:48px' - - this.context.font = 'bold ' + 9 * PR + 'px Helvetica,Arial,sans-serif' - this.context.textBaseline = 'top' - this.context.fillStyle = bg - this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT) - this.context.fillStyle = fg - this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y) - this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT) - this.context.fillStyle = bg - this.context.globalAlpha = 0.9 - this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT) - } - - appendTo(el: HTMLElement) { - el.appendChild(this.canvas) - } - - update(value: number, maxValue: number) { - this.min = Math.min(this.min, value) - this.max = Math.max(this.max, value) - - this.context.fillStyle = this.bg - this.context.globalAlpha = 1 - this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y) - this.context.fillStyle = this.fg - this.context.fillText( - Math.round(value) + - ' ' + - name + - ' (' + - Math.round(this.min) + - '-' + - Math.round(this.max) + - ')', - this.TEXT_X, - this.TEXT_Y, - ) - this.context.drawImage( - this.canvas, - this.GRAPH_X + PR, - this.GRAPH_Y, - this.GRAPH_WIDTH - PR, - this.GRAPH_HEIGHT, - this.GRAPH_X, - this.GRAPH_Y, - this.GRAPH_WIDTH - PR, - this.GRAPH_HEIGHT, - ) - this.context.fillRect(this.GRAPH_X + this.GRAPH_WIDTH - PR, this.GRAPH_Y, PR, this.GRAPH_HEIGHT) - this.context.fillStyle = this.bg - this.context.globalAlpha = 0.9 - this.context.fillRect( - this.GRAPH_X + this.GRAPH_WIDTH - PR, - this.GRAPH_Y, - PR, - Math.round((1 - value / maxValue) * this.GRAPH_HEIGHT), - ) - } -} diff --git a/src/speedscope/library/test-utils.ts b/src/speedscope/library/test-utils.ts deleted file mode 100644 index b1c835a..0000000 --- a/src/speedscope/library/test-utils.ts +++ /dev/null @@ -1,99 +0,0 @@ -import * as fs from 'fs' -import * as path from 'path' -import {Profile, CallTreeNode, Frame} from './profile' -import {exportProfileGroup, importSpeedscopeProfiles} from './file-format' -import {importProfilesFromArrayBuffer} from '../import' - -interface DumpedProfile { - name: string - stacks: string[] - frames: Frame[] -} - -export function dumpProfile(profile: Profile): any { - const dump: DumpedProfile = { - name: profile.getName(), - stacks: [], - frames: [], - } - - profile.forEachFrame(f => dump.frames.push(f)) - - let lastValue = 0 - const curStack: (number | string)[] = [] - - function maybeEmit(value: number) { - if (lastValue != value) { - dump.stacks.push( - curStack.map(k => `${k}`).join(';') + ` ${profile.formatValue(value - lastValue)}`, - ) - lastValue = value - } - } - - function openFrame(node: CallTreeNode, value: number) { - maybeEmit(value) - curStack.push(node.frame.name) - } - - function closeFrame(node: CallTreeNode, value: number) { - maybeEmit(value) - curStack.pop() - } - - profile.forEachCall(openFrame, closeFrame) - - return dump -} - -export async function checkProfileSnapshot(filepath: string) { - const buffer = fs.readFileSync(filepath) - const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength) - - const profileGroup = await importProfilesFromArrayBuffer(path.basename(filepath), arrayBuffer) - if (profileGroup) { - expect(profileGroup.name).toMatchSnapshot('profileGroup.name') - expect(profileGroup.indexToView).toMatchSnapshot('indexToView') - - for (let profile of profileGroup.profiles) { - expect(dumpProfile(profile)).toMatchSnapshot() - } - } else { - fail('Failed to extract profile') - return - } - - const profilesWithoutFilename = await importProfilesFromArrayBuffer('unknown', arrayBuffer) - if (profilesWithoutFilename) { - expect(profilesWithoutFilename.profiles.length).toEqual(profileGroup.profiles.length) - profilesWithoutFilename.name = profileGroup.name - for (let i = 0; i < profileGroup.profiles.length; i++) { - const a = profileGroup.profiles[i] - const b = profilesWithoutFilename.profiles[i] - b.setName(a.getName()) - } - expect(exportProfileGroup(profileGroup)).toEqual(exportProfileGroup(profilesWithoutFilename)) - } else { - fail('Failed to extract profile when filename was "unknown"') - return - } - - const exported = exportProfileGroup(profileGroup) - const reimportedGroup = importSpeedscopeProfiles(exported) - - expect(reimportedGroup.name).toEqual(profileGroup.name) - expect(reimportedGroup.profiles.length).toEqual(profileGroup.profiles.length) - - for (let i = 0; i < profileGroup.profiles.length; i++) { - const profile = profileGroup.profiles[i] - const reimported = reimportedGroup.profiles[i] - - expect(reimported.getTotalWeight()).toEqual(profile.getTotalWeight()) - expect(dumpProfile(reimported).stacks.join('\n')).toEqual( - dumpProfile(profile).stacks.join('\n'), - ) - } - - const reexported = exportProfileGroup(reimportedGroup) - expect(exported).toEqual(reexported) -} diff --git a/src/speedscope/library/text-utils.ts b/src/speedscope/library/text-utils.ts deleted file mode 100644 index 7b170b7..0000000 --- a/src/speedscope/library/text-utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {binarySearch} from './utils' - -export const ELLIPSIS = '\u2026' - -// NOTE: This blindly assumes the same result across contexts. -const measureTextCache = new Map() - -let lastDevicePixelRatio = -1 -export function cachedMeasureTextWidth(ctx: CanvasRenderingContext2D, text: string): number { - if (window.devicePixelRatio !== lastDevicePixelRatio) { - // This cache is no longer valid! - measureTextCache.clear() - lastDevicePixelRatio = window.devicePixelRatio - } - if (!measureTextCache.has(text)) { - measureTextCache.set(text, ctx.measureText(text).width) - } - return measureTextCache.get(text)! -} - -function buildTrimmedText(text: string, length: number) { - const prefixLength = Math.floor(length / 2) - const prefix = text.substr(0, prefixLength) - const suffix = text.substr(text.length - prefixLength, prefixLength) - return prefix + ELLIPSIS + suffix -} - -export function trimTextMid(ctx: CanvasRenderingContext2D, text: string, maxWidth: number) { - if (cachedMeasureTextWidth(ctx, text) <= maxWidth) return text - const [lo] = binarySearch( - 0, - text.length, - n => { - return cachedMeasureTextWidth(ctx, buildTrimmedText(text, n)) - }, - maxWidth, - ) - return buildTrimmedText(text, lo) -} diff --git a/src/speedscope/library/typed-redux.ts b/src/speedscope/library/typed-redux.ts deleted file mode 100644 index d699ff9..0000000 --- a/src/speedscope/library/typed-redux.ts +++ /dev/null @@ -1,94 +0,0 @@ -import {connect} from 'preact-redux' -import * as redux from 'redux' -import {ComponentConstructor, Component} from 'preact' - -export interface Action extends redux.Action { - payload: TPayload -} - -export interface ActionCreator { - // Returns an action with a non-empty payload - (payload: TPayload): Action - - // Returns an action with an empty payload ({}) - (): Action - - matches(action: Action): action is Action -} - -const usedActionTypes = new Set() - -export function actionCreator(type: string): ActionCreator -export function actionCreator(type: string): ActionCreator -export function actionCreator(type: string) { - if (usedActionTypes.has(type)) { - throw new Error(`Cannot re-use action type name: ${type}`) - } - - const creator: any = (payload = {}) => { - return {type, payload} - } - - creator.matches = (action: Action) => { - return action.type === type - } - - return creator -} - -export type Reducer = (state: T | undefined, action: Action) => T -export type ReducerWithActionType = (state: T | undefined, action: Action) => T - -export function setter( - setterAction: ActionCreator, - defaultVal: T, -): (state: T | undefined, action: Action) => T { - return (state = defaultVal, action) => { - if (setterAction.matches(action)) { - return action.payload - } - return state - } -} - -export type Dispatch = redux.Dispatch> - -// We make this into a single function invocation instead of the connect(map, map)(Component) -// syntax to make better use of type inference. -// -// NOTE: To avoid this returning objects which do not compare shallow equal, it's the -// responsibility of the caller to ensure that the props returned by map compare shallow -// equal. This most importantly mean memoizing functions which wrap dispatch to avoid -// all callback props from being regenerated on every call. -export function createContainer( - component: { - new (props: ComponentProps): ComponentType - }, - map: (state: State, dispatch: Dispatch, ownProps: OwnProps) => ComponentProps, -): ComponentConstructor { - const mapStateToProps = (state: State) => state - const mapDispatchToProps = (dispatch: Dispatch) => ({dispatch}) - const mergeProps = ( - stateProps: State, - dispatchProps: {dispatch: Dispatch}, - ownProps: OwnProps, - ) => { - return map(stateProps, dispatchProps.dispatch, ownProps) - } - return connect(mapStateToProps, mapDispatchToProps, mergeProps)(component) -} - -export type VoidState = { - __dummyField: void -} - -export abstract class StatelessComponent

extends Component {} - -export function bindActionCreator( - dispatch: Dispatch, - actionCreator: (payload: T) => Action, -): (t: T) => void { - return (t: T) => { - dispatch(actionCreator(t)) - } -} diff --git a/src/speedscope/library/utils.test.ts b/src/speedscope/library/utils.test.ts deleted file mode 100644 index 977cb03..0000000 --- a/src/speedscope/library/utils.test.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { - sortBy, - getOrInsert, - getOrElse, - getOrThrow, - itMap, - itForEach, - itReduce, - zeroPad, - formatPercent, - KeyedSet, - binarySearch, - memoizeByReference, - memoizeByShallowEquality, - objectsHaveShallowEquality, - decodeBase64, -} from './utils' - -import * as jsc from 'jsverify' - -test('sortBy', () => { - const ls = ['a3', 'b2', 'c1', 'd4'] - sortBy(ls, k => k.charCodeAt(1)) - expect(ls).toEqual(['c1', 'b2', 'a3', 'd4']) -}) - -test('getOrInsert', () => { - const m = new Map() - expect(getOrInsert(m, 'hello', k => k.length)).toBe(5) - expect(getOrInsert(m, 'hello', k => 2 * k.length)).toBe(5) - expect(getOrInsert(m, 'x', k => k.length)).toBe(1) - expect(m.get('hello')).toBe(5) - expect(m.get('x')).toBe(1) -}) - -class ValueType { - private constructor(readonly a: string, readonly num: number) {} - get key() { - return `${this.a}_${this.num}` - } - static getOrInsert(set: KeyedSet, a: string, num: number) { - return set.getOrInsert(new ValueType(a, num)) - } -} - -test('KeyedSet', () => { - const set = new KeyedSet() - - const x1 = ValueType.getOrInsert(set, 'x', 1) - const x2 = ValueType.getOrInsert(set, 'x', 1) - const y = ValueType.getOrInsert(set, 'y', 1) - - expect(x1).toBe(x2) - expect(y).not.toBe(x1) - - const set2 = new KeyedSet() - const x3 = ValueType.getOrInsert(set2, 'x', 1) - expect(x1).not.toBe(x3) -}) - -test('getOrElse', () => { - const m = new Map() - expect(getOrElse(m, 'hello', k => k.length)).toBe(5) - expect(getOrElse(m, 'hello', k => 2 * k.length)).toBe(10) - expect(getOrElse(m, 'x', k => k.length)).toBe(1) - expect(getOrElse(m, 'x', () => 3)).toBe(3) - expect(m.get('hello')).toBe(undefined) - expect(m.get('x')).toBe(undefined) -}) - -test('getOrThrow', () => { - const m = new Map() - m.set('hello', 5) - expect(getOrThrow(m, 'hello')).toBe(5) - expect(() => getOrThrow(m, 'goodbye')).toThrow('Expected key goodbye') -}) - -test('itMap', () => { - const s = new Set([1, 2, 3]) - expect(new Set(itMap(s, v => v * v))).toEqual(new Set([1, 4, 9])) -}) - -test('itForEach', () => { - const s = new Set([1, 2, 3]) - const t = new Set() - itForEach(s, v => t.add(v * v)) - expect(t).toEqual(new Set([1, 4, 9])) -}) - -test('itReduce', () => { - const s = new Set([1, 2, 3]) - expect(itReduce(s, (a, b) => a + b, 0)).toBe(6) -}) - -test('zeroPad', () => { - expect(zeroPad('1', 2)).toBe('01') - expect(zeroPad('1', 3)).toBe('001') - expect(zeroPad('1000', 3)).toBe('1000') - expect(zeroPad('FF', 4)).toBe('00FF') -}) - -test('formatPercent', () => { - expect(formatPercent(0.42)).toBe('0.42%') - expect(formatPercent(0.4)).toBe('0.40%') - expect(formatPercent(1)).toBe('1.0%') - expect(formatPercent(1.6)).toBe('1.6%') - expect(formatPercent(99)).toBe('99%') - expect(formatPercent(99.9)).toBe('>99%') - expect(formatPercent(100)).toBe('100%') -}) - -test('binarySearch', () => { - const [lo, hi] = binarySearch(0, 10, n => Math.log(n), 1, 0.0001) - expect(lo).toBeCloseTo(Math.E, 4) - expect(lo).toBeLessThan(Math.E) - expect(hi).toBeGreaterThan(Math.E) -}) - -test('memoizeByReference', () => { - let hitCount = 0 - const identity = memoizeByReference((arg: number) => { - hitCount++ - return arg - }) - - expect(identity(3)).toBe(3) - expect(hitCount).toBe(1) - expect(identity(3)).toBe(3) - expect(hitCount).toBe(1) - - expect(identity(5)).toBe(5) - expect(hitCount).toBe(2) - - expect(identity(3)).toBe(3) - expect(hitCount).toBe(3) -}) - -test('memoizeByShallowEquality', () => { - let hitCount = 0 - const identity = memoizeByShallowEquality((arg: {a: number; b: number}) => { - hitCount++ - return arg - }) - - expect(identity({a: 1, b: 2})).toEqual({a: 1, b: 2}) - expect(hitCount).toBe(1) - expect(identity({a: 1, b: 2})).toEqual({a: 1, b: 2}) - expect(hitCount).toBe(1) - - expect(identity({a: 2, b: 2})).toEqual({a: 2, b: 2}) - expect(hitCount).toBe(2) - expect(identity({a: 2, b: 2})).toEqual({a: 2, b: 2}) - expect(hitCount).toBe(2) - - expect(identity({a: 2, b: 1})).toEqual({a: 2, b: 1}) - expect(hitCount).toBe(3) - expect(identity({a: 2, b: 1})).toEqual({a: 2, b: 1}) - expect(hitCount).toBe(3) - - expect(identity({a: 1, b: 2})).toEqual({a: 1, b: 2}) - expect(hitCount).toBe(4) -}) - -test('objectsHaveShallowEquality', () => { - expect(objectsHaveShallowEquality({}, {})).toBe(true) - expect(objectsHaveShallowEquality({a: 1, b: 2}, {a: 1, b: 2})).toBe(true) - - expect(objectsHaveShallowEquality({a: 1, b: 2}, {a: 1, b: 3})).toBe(false) - expect(objectsHaveShallowEquality({a: 1, b: 2}, {a: 2, b: 2})).toBe(false) - expect(objectsHaveShallowEquality({a: 1}, {a: 1, b: 2})).toBe(false) - expect(objectsHaveShallowEquality({a: 1, b: 2}, {b: 2})).toBe(false) - - expect(objectsHaveShallowEquality([], [])).toBe(true) - expect(objectsHaveShallowEquality([1, 2], [1, 2])).toBe(true) - - expect(objectsHaveShallowEquality([1], [1, 2])).toBe(false) - expect(objectsHaveShallowEquality([1, 2], [1])).toBe(false) -}) - -test('decodeBase64', () => { - jsc.assertForall(jsc.array(jsc.uint8), byteArray => { - let binaryString = '' - for (let byte of byteArray) { - binaryString += String.fromCharCode(byte) - } - const b64string = btoa(binaryString) - const decoded = decodeBase64(b64string) - - expect(Uint8Array.from(byteArray)).toEqual(decoded) - - // If the above expect(...) assertion fails, we won't reach here. - return true - }) -}) diff --git a/src/speedscope/library/utils.ts b/src/speedscope/library/utils.ts deleted file mode 100644 index b1dec30..0000000 --- a/src/speedscope/library/utils.ts +++ /dev/null @@ -1,297 +0,0 @@ -export function lastOf(ts: T[]): T | null { - return ts[ts.length - 1] || null -} - -export function sortBy(ts: T[], key: (t: T) => number | string): void { - function comparator(a: T, b: T) { - return key(a) < key(b) ? -1 : 1 - } - ts.sort(comparator) -} - -export function getOrInsert(map: Map, k: K, fallback: (k: K) => V): V { - if (!map.has(k)) map.set(k, fallback(k)) - return map.get(k)! -} - -export function getOrElse(map: Map, k: K, fallback: (k: K) => V): V { - if (!map.has(k)) return fallback(k) - return map.get(k)! -} - -export function getOrThrow(map: Map, k: K): V { - if (!map.has(k)) { - throw new Error(`Expected key ${k}`) - } - return map.get(k)! -} - -// Intended to be used to de-duplicate objects based on a key property. This -// allows value comparisons to be done efficiently and for the returned objects -// to be used intuitively in Map objects. -// -// Example usage: -// -// export class Frame { -// private constructor(readonly file: string, readonly name: string) {} -// get key() { return `${this.file}:${this.name}` } -// static getOrInsert(set: KeyedSet, file: string, name: string) { -// return set.getOrInsert(set, new Frame(file, name)) -// } -// } -// -export interface HasKey { - readonly key: string | number -} -export class KeyedSet implements Iterable { - private map = new Map() - - getOrInsert(t: T): T { - const key = t.key - const existing = this.map.get(key) - if (existing) return existing - this.map.set(key, t) - return t - } - forEach(fn: (t: T) => void) { - this.map.forEach(fn) - } - [Symbol.iterator]() { - return this.map.values() - } -} - -export function* itMap(it: Iterable, f: (t: T) => U): Iterable { - for (let t of it) { - yield f(t) - } -} - -export function itForEach(it: Iterable, f: (t: T) => void): void { - for (let t of it) { - f(t) - } -} - -export function itReduce(it: Iterable, f: (a: U, b: T) => U, init: U): U { - let accum: U = init - for (let t of it) { - accum = f(accum, t) - } - return accum -} - -export function zeroPad(s: string, width: number) { - return new Array(Math.max(width - s.length, 0) + 1).join('0') + s -} - -export function formatPercent(percent: number) { - let formattedPercent = `${percent.toFixed(0)}%` - if (percent === 100) formattedPercent = '100%' - else if (percent > 99) formattedPercent = '>99%' - else if (percent < 0.01) formattedPercent = '<0.01%' - else if (percent < 1) formattedPercent = `${percent.toFixed(2)}%` - else if (percent < 10) formattedPercent = `${percent.toFixed(1)}%` - return formattedPercent -} - -export function fract(x: number) { - return x - Math.floor(x) -} - -export function triangle(x: number) { - return 2.0 * Math.abs(fract(x) - 0.5) - 1.0 -} - -export function binarySearch( - lo: number, - hi: number, - f: (val: number) => number, - target: number, - targetRangeSize = 1, -): [number, number] { - console.assert(!isNaN(targetRangeSize) && !isNaN(target)) - while (true) { - if (hi - lo <= targetRangeSize) return [lo, hi] - const mid = (hi + lo) / 2 - const val = f(mid) - if (val < target) lo = mid - else hi = mid - } -} - -export function noop(...args: any[]) {} - -export function objectsHaveShallowEquality(a: T, b: T): boolean { - for (let key in a) { - if (a[key] !== b[key]) return false - } - for (let key in b) { - if (a[key] !== b[key]) return false - } - return true -} - -export function memoizeByShallowEquality(cb: (t: T) => U): (t: T) => U { - let last: {args: T; result: U} | null = null - return (args: T) => { - let result: U - if (last == null) { - result = cb(args) - last = {args, result} - return result - } else if (objectsHaveShallowEquality(last.args, args)) { - return last.result - } else { - last.args = args - last.result = cb(args) - return last.result - } - } -} - -export function memoizeByReference(cb: (t: T) => U): (t: T) => U { - let last: {args: T; result: U} | null = null - return (args: T) => { - let result: U - if (last == null) { - result = cb(args) - last = {args, result} - return result - } else if (last.args === args) { - return last.result - } else { - last.args = args - last.result = cb(args) - return last.result - } - } -} - -export function lazyStatic(cb: () => T): () => T { - let last: {result: T} | null = null - return () => { - if (last == null) { - last = {result: cb()} - } - return last.result - } -} - -const base64lookupTable = lazyStatic((): Map => { - const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - const ret = new Map() - for (let i = 0; i < alphabet.length; i++) { - ret.set(alphabet.charAt(i), i) - } - ret.set('=', -1) - return ret -}) - -// NOTE: There are probably simpler solutions to this problem, but I have this written already, so -// until we run into problems with this, let's just use this. -// -// See: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem#The_Unicode_Problem -export function decodeBase64(encoded: string): Uint8Array { - // Reference: https://www.rfc-editor.org/rfc/rfc4648.txt - - const lookupTable = base64lookupTable() - - // 3 byte groups are represented as sequneces of 4 characters. - // - // "The encoding process represents 24-bit groups of input bits as output - // strings of 4 encoded characters." - // - // "Special processing is performed if fewer than 24 bits are available - // at the end of the data being encoded. A full encoding quantum is - // always completed at the end of a quantity. When fewer than 24 input - // bits are available in an input group bits with value zero are added - // (on the right) to form an integral number of 6-bit groups." - - if (encoded.length % 4 !== 0) { - throw new Error( - `Invalid length for base64 encoded string. Expected length % 4 = 0, got length = ${ - encoded.length - }`, - ) - } - - const quartetCount = encoded.length / 4 - let byteCount: number - - // Special processing is performed if fewer than 24 bits are available - // at the end of the data being encoded. A full encoding quantum is - // always completed at the end of a quantity. When fewer than 24 input - // bits are available in an input group, bits with value zero are added - // (on the right) to form an integral number of 6-bit groups. Padding - // at the end of the data is performed using the '=' character. Since - // all base 64 input is an integral number of octets, only the following - // cases can arise: - // - // (1) The final quantum of encoding input is an integral multiple of 24 - // bits; here, the final unit of encoded output will be an integral - // multiple of 4 characters with no "=" padding. - // - // (2) The final quantum of encoding input is exactly 8 bits; here, the - // final unit of encoded output will be two characters followed by - // two "=" padding characters. - // - // (3) The final quantum of encoding input is exactly 16 bits; here, the - // final unit of encoded output will be three characters followed by - // one "=" padding character. - if (encoded.length >= 4) { - if (encoded.charAt(encoded.length - 1) === '=') { - if (encoded.charAt(encoded.length - 2) === '=') { - // Case (2) - byteCount = quartetCount * 3 - 2 - } else { - // Case (3) - byteCount = quartetCount * 3 - 1 - } - } else { - // Case (1) - byteCount = quartetCount * 3 - } - } else { - // Case (1) - byteCount = quartetCount * 3 - } - - const bytes = new Uint8Array(byteCount) - let offset = 0 - - for (let i = 0; i < quartetCount; i++) { - const enc1 = encoded.charAt(i * 4 + 0) - const enc2 = encoded.charAt(i * 4 + 1) - const enc3 = encoded.charAt(i * 4 + 2) - const enc4 = encoded.charAt(i * 4 + 3) - - const sextet1 = lookupTable.get(enc1) - const sextet2 = lookupTable.get(enc2) - const sextet3 = lookupTable.get(enc3) - const sextet4 = lookupTable.get(enc4) - - if (sextet1 == null || sextet2 == null || sextet3 == null || sextet4 == null) { - throw new Error( - `Invalid quartet at indices ${i * 4} .. ${i * 4 + 3}: ${encoded.substring( - i * 4, - i * 4 + 3, - )}`, - ) - } - - bytes[offset++] = (sextet1 << 2) | (sextet2 >> 4) - if (enc3 !== '=') { - bytes[offset++] = ((sextet2 & 15) << 4) | (sextet3 >> 2) - } - if (enc4 !== '=') { - bytes[offset++] = ((sextet3 & 7) << 6) | sextet4 - } - } - - if (offset !== byteCount) { - throw new Error(`Expected to decode ${byteCount} bytes, but only decoded ${offset})`) - } - - return bytes -} diff --git a/src/speedscope/library/value-formatters.test.ts b/src/speedscope/library/value-formatters.test.ts deleted file mode 100644 index b147e58..0000000 --- a/src/speedscope/library/value-formatters.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {TimeFormatter, ByteFormatter} from './value-formatters' - -describe('TimeFormatter', () => { - test('input units milliseconds', () => { - const f = new TimeFormatter('milliseconds') - expect(f.format(0.00004)).toEqual('40.00ns') - expect(f.format(0.04)).toEqual('40.00µs') - expect(f.format(3)).toEqual('3.00ms') - expect(f.format(2070)).toEqual('2.07s') - expect(f.format(150000)).toEqual('2:30') - expect(f.format(1203123)).toEqual('20:03') - }) - - test('input units seconds', () => { - const f = new TimeFormatter('seconds') - expect(f.format(0.00004)).toEqual('40.00µs') - expect(f.format(0.003)).toEqual('3.00ms') - expect(f.format(2.07)).toEqual('2.07s') - expect(f.format(150)).toEqual('2:30') - expect(f.format(1203.123)).toEqual('20:03') - }) -}) - -test('ByteFormatter', () => { - const f = new ByteFormatter() - expect(f.format(100)).toEqual('100 B') - expect(f.format(1024)).toEqual('1.00 KB') - expect(f.format(3.5 * 1024 * 1024)).toEqual('3.50 MB') - expect(f.format(4.32 * 1024 * 1024 * 1024)).toEqual('4.32 GB') -}) diff --git a/src/speedscope/library/value-formatters.ts b/src/speedscope/library/value-formatters.ts deleted file mode 100644 index 5635eed..0000000 --- a/src/speedscope/library/value-formatters.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {FileFormat} from './file-format-spec' -import {zeroPad} from './utils' - -export interface ValueFormatter { - unit: FileFormat.ValueUnit - format(v: number): string -} - -export class RawValueFormatter implements ValueFormatter { - unit: FileFormat.ValueUnit = 'none' - format(v: number) { - return v.toLocaleString() - } -} - -export class TimeFormatter implements ValueFormatter { - private multiplier: number - - constructor(public unit: 'nanoseconds' | 'microseconds' | 'milliseconds' | 'seconds') { - if (unit === 'nanoseconds') this.multiplier = 1e-9 - else if (unit === 'microseconds') this.multiplier = 1e-6 - else if (unit === 'milliseconds') this.multiplier = 1e-3 - else this.multiplier = 1 - } - - formatUnsigned(v: number) { - const s = v * this.multiplier - - if (s / 60 >= 1) { - const minutes = Math.floor(s / 60) - const seconds = Math.floor(s - minutes * 60).toString() - return `${minutes}:${zeroPad(seconds, 2)}` - } - if (s / 1 >= 1) return `${s.toFixed(2)}s` - if (s / 1e-3 >= 1) return `${(s / 1e-3).toFixed(2)}ms` - if (s / 1e-6 >= 1) return `${(s / 1e-6).toFixed(2)}µs` - else return `${(s / 1e-9).toFixed(2)}ns` - } - - format(v: number) { - return `${v < 0 ? '-' : ''}${this.formatUnsigned(Math.abs(v))}` - } -} - -export class ByteFormatter implements ValueFormatter { - unit: FileFormat.ValueUnit = 'bytes' - - format(v: number) { - if (v < 1024) return `${v.toFixed(0)} B` - v /= 1024 - if (v < 1024) return `${v.toFixed(2)} KB` - v /= 1024 - if (v < 1024) return `${v.toFixed(2)} MB` - v /= 1024 - return `${v.toFixed(2)} GB` - } -} diff --git a/src/speedscope/store/actions.ts b/src/speedscope/store/actions.ts deleted file mode 100644 index 0a655b5..0000000 --- a/src/speedscope/store/actions.ts +++ /dev/null @@ -1,69 +0,0 @@ -import {actionCreator} from '../lib/typed-redux' -import {CallTreeNode, Frame, ProfileGroup} from '../lib/profile' -import {SortMethod} from '../views/profile-table-view' -import {ViewMode} from '.' -import {FlamechartID} from './flamechart-view-state' -import {Rect, Vec2} from '../lib/math' -import {HashParams} from '../lib/hash-params' -import {actionCreatorWithIndex} from './profiles-state' - -export namespace actions { - // Set the top-level profile group from which other data will be derived - export const setProfileGroup = actionCreator('setProfileGroup') - - // Set the index into the profile group to view - export const setProfileIndexToView = actionCreator('setProfileIndexToView') - - export const setGLCanvas = actionCreator('setGLCanvas') - - // Set which top-level view should be displayed - export const setViewMode = actionCreator('setViewMode') - - // Set whether or not recursion should be flattened when viewing flamegraphs - export const setFlattenRecursion = actionCreator('setFlattenRecursion') - - // Set whether a file drag is currently active. Used to indicate that the - // application is a valid drop target. - export const setDragActive = actionCreator('setDragActive') - - // Set whether the application is currently in a loading state. Used to - // display a loading progress bar. - export const setLoading = actionCreator('setLoading') - - // Set whether the application is in an errored state. - export const setError = actionCreator('setError') - - // Set whether parameters defined by the URL encoded k=v pairs after the # in the URL - export const setHashParams = actionCreator('setHashParams') - - export namespace sandwichView { - // Set the table sorting method used for the sandwich view. - export const setTableSortMethod = actionCreator('sandwichView.setTableSortMethod') - - export const setSelectedFrame = actionCreatorWithIndex( - 'sandwichView.setSelectedFarmr', - ) - } - - export namespace flamechart { - export const setHoveredNode = actionCreatorWithIndex<{ - id: FlamechartID - hover: {node: CallTreeNode; event: MouseEvent} | null - }>('flamechart.setHoveredNode') - - export const setSelectedNode = actionCreatorWithIndex<{ - id: FlamechartID - selectedNode: CallTreeNode | null - }>('flamechart.setSelectedNode') - - export const setConfigSpaceViewportRect = actionCreatorWithIndex<{ - id: FlamechartID - configSpaceViewportRect: Rect - }>('flamechart.setConfigSpaceViewportRect') - - export const setLogicalSpaceViewportSize = actionCreatorWithIndex<{ - id: FlamechartID - logicalSpaceViewportSize: Vec2 - }>('flamechart.setLogicalSpaceViewportSpace') - } -} diff --git a/src/speedscope/store/flamechart-view-state.test.ts b/src/speedscope/store/flamechart-view-state.test.ts deleted file mode 100644 index 895d15e..0000000 --- a/src/speedscope/store/flamechart-view-state.test.ts +++ /dev/null @@ -1,105 +0,0 @@ -import {storeTest, profileGroupTwoSampled} from './store-test-utils' -import {actions} from './actions' -import {Rect, Vec2} from '../lib/math' -import {FlamechartID} from './flamechart-view-state' -import {ViewMode} from '.' - -describe('flamechart view state', () => { - storeTest('setHoveredNode', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.profiles[0].chronoViewState.hover).toEqual(null) - const {profileGroup} = getState() - const hover = { - node: profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot().children[0], - event: {} as MouseEvent, - } - dispatch( - actions.flamechart.setHoveredNode({ - profileIndex: 0, - args: { - id: FlamechartID.CHRONO, - hover, - }, - }), - ) - expect(getState().profileGroup!.profiles[0].chronoViewState.hover).toEqual(hover) - expect(getState().profileGroup!.profiles[0].leftHeavyViewState.hover).toEqual(null) - expect(getState().profileGroup!.profiles[1].chronoViewState.hover).toEqual(null) - - // Changing view mode should clear the hover state - dispatch(actions.setViewMode(ViewMode.LEFT_HEAVY_FLAME_GRAPH)) - expect(getState().profileGroup!.profiles[0].chronoViewState.hover).toEqual(null) - }) - - storeTest('setSelectedNode', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.profiles[0].chronoViewState.selectedNode).toEqual(null) - const {profileGroup} = getState() - const selectedNode = profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot().children[0] - dispatch( - actions.flamechart.setSelectedNode({ - profileIndex: 0, - args: { - id: FlamechartID.CHRONO, - selectedNode, - }, - }), - ) - expect(getState().profileGroup!.profiles[0].chronoViewState.selectedNode).toEqual(selectedNode) - expect(getState().profileGroup!.profiles[0].leftHeavyViewState.selectedNode).toEqual(null) - expect(getState().profileGroup!.profiles[1].chronoViewState.selectedNode).toEqual(null) - }) - - storeTest('setLogicalSpaceViewportSize', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.profiles[0].chronoViewState.logicalSpaceViewportSize).toEqual( - Vec2.zero, - ) - const logicalSpaceViewportSize = new Vec2(3, 5) - dispatch( - actions.flamechart.setLogicalSpaceViewportSize({ - profileIndex: 0, - args: { - id: FlamechartID.CHRONO, - logicalSpaceViewportSize, - }, - }), - ) - expect(getState().profileGroup!.profiles[0].chronoViewState.logicalSpaceViewportSize).toEqual( - logicalSpaceViewportSize, - ) - - expect( - getState().profileGroup!.profiles[0].leftHeavyViewState.logicalSpaceViewportSize, - ).toEqual(Vec2.zero) - expect(getState().profileGroup!.profiles[1].chronoViewState.logicalSpaceViewportSize).toEqual( - Vec2.zero, - ) - }) - - storeTest('setConfigSpaceViewportRect', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.profiles[0].chronoViewState.configSpaceViewportRect).toEqual( - Rect.empty, - ) - dispatch( - actions.flamechart.setConfigSpaceViewportRect({ - profileIndex: 0, - args: { - id: FlamechartID.CHRONO, - configSpaceViewportRect: new Rect(Vec2.zero, Vec2.unit), - }, - }), - ) - expect(getState().profileGroup!.profiles[0].chronoViewState.configSpaceViewportRect).toEqual( - new Rect(Vec2.zero, Vec2.unit), - ) - - expect(getState().profileGroup!.profiles[0].leftHeavyViewState.configSpaceViewportRect).toEqual( - Rect.empty, - ) - expect(getState().profileGroup!.profiles[1].chronoViewState.configSpaceViewportRect).toEqual( - Rect.empty, - ) - }) -}) diff --git a/src/speedscope/store/flamechart-view-state.ts b/src/speedscope/store/flamechart-view-state.ts deleted file mode 100644 index c248ac0..0000000 --- a/src/speedscope/store/flamechart-view-state.ts +++ /dev/null @@ -1,62 +0,0 @@ -import {CallTreeNode} from '../lib/profile' -import {Rect, Vec2} from '../lib/math' -import {Reducer} from '../lib/typed-redux' -import {actions} from './actions' - -export enum FlamechartID { - LEFT_HEAVY = 'LEFT_HEAVY', - CHRONO = 'CHRONO', - SANDWICH_INVERTED_CALLERS = 'SANDWICH_INVERTED_CALLERS', - SANDWICH_CALLEES = 'SANDWICH_CALLEES', -} - -export interface FlamechartViewState { - hover: { - node: CallTreeNode - event: MouseEvent - } | null - selectedNode: CallTreeNode | null - logicalSpaceViewportSize: Vec2 - configSpaceViewportRect: Rect -} - -export function createFlamechartViewStateReducer( - id: FlamechartID, - profileIndex: number, -): Reducer { - let initialState: FlamechartViewState = { - hover: null, - selectedNode: null, - configSpaceViewportRect: Rect.empty, - logicalSpaceViewportSize: Vec2.zero, - } - function applies(action: {payload: {profileIndex: number; args: {id: FlamechartID}}}) { - const {payload} = action - return payload.args.id === id && payload.profileIndex === profileIndex - } - - return (state = initialState, action) => { - if (actions.flamechart.setHoveredNode.matches(action) && applies(action)) { - const {hover} = action.payload.args - return {...state, hover} - } - if (actions.flamechart.setSelectedNode.matches(action) && applies(action)) { - const {selectedNode} = action.payload.args - return {...state, selectedNode} - } - if (actions.flamechart.setConfigSpaceViewportRect.matches(action) && applies(action)) { - const {configSpaceViewportRect} = action.payload.args - return {...state, configSpaceViewportRect} - } - if (actions.flamechart.setLogicalSpaceViewportSize.matches(action) && applies(action)) { - const {logicalSpaceViewportSize} = action.payload.args - return {...state, logicalSpaceViewportSize} - } - if (actions.setViewMode.matches(action)) { - // If we switch views, the hover information is no longer relevant - return {...state, hover: null} - } - - return state - } -} diff --git a/src/speedscope/store/getters.ts b/src/speedscope/store/getters.ts deleted file mode 100644 index c80e908..0000000 --- a/src/speedscope/store/getters.ts +++ /dev/null @@ -1,71 +0,0 @@ -import {Frame, Profile} from '../lib/profile' -import {triangle, memoizeByReference, memoizeByShallowEquality} from '../lib/utils' -import {RowAtlas} from '../gl/row-atlas' -import {CanvasContext} from '../gl/canvas-context' -import {Color} from '../lib/color' -import {FlamechartRowAtlasKey} from '../gl/flamechart-renderer' - -export const createGetColorBucketForFrame = memoizeByReference( - (frameToColorBucket: Map) => { - return (frame: Frame): number => { - return frameToColorBucket.get(frame.key) || 0 - } - }, -) - -export const createGetCSSColorForFrame = memoizeByReference( - (frameToColorBucket: Map) => { - const getColorBucketForFrame = createGetColorBucketForFrame(frameToColorBucket) - return (frame: Frame): string => { - const t = getColorBucketForFrame(frame) / 255 - - const x = triangle(30.0 * t) - const H = 360.0 * (0.9 * t) - const C = 0.25 + 0.2 * x - const L = 0.8 - 0.15 * x - return Color.fromLumaChromaHue(L, C, H).toCSS() - } - }, -) - -export const getCanvasContext = memoizeByReference((canvas: HTMLCanvasElement) => { - return new CanvasContext(canvas) -}) - -export const getRowAtlas = memoizeByReference((canvasContext: CanvasContext) => { - return new RowAtlas( - canvasContext.gl, - canvasContext.rectangleBatchRenderer, - canvasContext.textureRenderer, - ) -}) - -export const getProfileWithRecursionFlattened = memoizeByReference((profile: Profile) => - profile.getProfileWithRecursionFlattened(), -) - -export const getProfileToView = memoizeByShallowEquality( - ({profile, flattenRecursion}: {profile: Profile; flattenRecursion: boolean}): Profile => { - return flattenRecursion ? profile.getProfileWithRecursionFlattened() : profile - }, -) -export const getFrameToColorBucket = memoizeByReference((profile: Profile): Map< - string | number, - number -> => { - const frames: Frame[] = [] - profile.forEachFrame(f => frames.push(f)) - function key(f: Frame) { - return (f.file || '') + f.name - } - function compare(a: Frame, b: Frame) { - return key(a) > key(b) ? 1 : -1 - } - frames.sort(compare) - const frameToColorBucket = new Map() - for (let i = 0; i < frames.length; i++) { - frameToColorBucket.set(frames[i].key, Math.floor(255 * i / frames.length)) - } - - return frameToColorBucket -}) diff --git a/src/speedscope/store/index.test.ts b/src/speedscope/store/index.test.ts deleted file mode 100644 index 60e5de1..0000000 --- a/src/speedscope/store/index.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {ViewMode} from '.' -import {actions} from './actions' -import {storeTest} from './store-test-utils' -import {SortField, SortDirection} from '../views/profile-table-view' - -storeTest('flattenRecursion', ({getState, dispatch}) => { - expect(getState().flattenRecursion).toBe(false) - dispatch(actions.setFlattenRecursion(true)) - expect(getState().flattenRecursion).toBe(true) -}) - -storeTest('viewMode', ({getState, dispatch}) => { - expect(getState().viewMode).toBe(ViewMode.CHRONO_FLAME_CHART) - dispatch(actions.setViewMode(ViewMode.SANDWICH_VIEW)) - expect(getState().viewMode).toBe(ViewMode.SANDWICH_VIEW) -}) - -storeTest('dragActive', ({getState, dispatch}) => { - expect(getState().dragActive).toBe(false) - dispatch(actions.setDragActive(true)) - expect(getState().dragActive).toBe(true) -}) - -storeTest('loading', ({getState, dispatch}) => { - expect(getState().loading).toBe(false) - dispatch(actions.setLoading(true)) - expect(getState().loading).toBe(true) -}) - -storeTest('error', ({getState, dispatch}) => { - expect(getState().error).toBe(false) - dispatch(actions.setError(true)) - expect(getState().error).toBe(true) -}) - -storeTest('setTableSortMethod', ({getState, dispatch}) => { - expect(getState().tableSortMethod).toEqual({ - field: SortField.SELF, - direction: SortDirection.DESCENDING, - }) - dispatch( - actions.sandwichView.setTableSortMethod({ - field: SortField.SYMBOL_NAME, - direction: SortDirection.ASCENDING, - }), - ) - expect(getState().tableSortMethod).toEqual({ - field: SortField.SYMBOL_NAME, - direction: SortDirection.ASCENDING, - }) -}) diff --git a/src/speedscope/store/index.ts b/src/speedscope/store/index.ts deleted file mode 100644 index 58854eb..0000000 --- a/src/speedscope/store/index.ts +++ /dev/null @@ -1,73 +0,0 @@ -import {actions} from './actions' - -/** - * The root node of application state. We use redux (https://redux.js.org/) - * as our state management solution. - */ - -import * as redux from 'redux' -import {setter, Reducer} from '../lib/typed-redux' -import {HashParams, getHashParams} from '../lib/hash-params' -import {ProfileGroupState, profileGroup} from './profiles-state' -import {SortMethod, SortField, SortDirection} from '../views/profile-table-view' - -export const enum ViewMode { - CHRONO_FLAME_CHART, - LEFT_HEAVY_FLAME_GRAPH, - SANDWICH_VIEW, -} - -export interface ApplicationState { - hashParams: HashParams - - glCanvas: HTMLCanvasElement | null - - flattenRecursion: boolean - - viewMode: ViewMode - dragActive: boolean - loading: boolean - error: boolean - - tableSortMethod: SortMethod - - profileGroup: ProfileGroupState -} - -const protocol = window.location.protocol - -// Speedscope is usable both from a local HTML file being served -// from a file:// URL, and via websites. In the case of file:// URLs, -// however, XHR will be unavailable to fetching files in adjacent directories. -export const canUseXHR = protocol === 'http:' || protocol === 'https:' - -export function createApplicationStore( - initialState: Partial, -): redux.Store { - const hashParams = getHashParams() - - const loading = canUseXHR && hashParams.profileURL != null - - const reducer: Reducer = redux.combineReducers({ - profileGroup, - - hashParams: setter(actions.setHashParams, hashParams), - - flattenRecursion: setter(actions.setFlattenRecursion, false), - - viewMode: setter(actions.setViewMode, ViewMode.CHRONO_FLAME_CHART), - - glCanvas: setter(actions.setGLCanvas, null), - - dragActive: setter(actions.setDragActive, false), - loading: setter(actions.setLoading, loading), - error: setter(actions.setError, false), - - tableSortMethod: setter(actions.sandwichView.setTableSortMethod, { - field: SortField.SELF, - direction: SortDirection.DESCENDING, - }), - }) - - return redux.createStore(reducer, initialState) -} diff --git a/src/speedscope/store/profiles-state.test.ts b/src/speedscope/store/profiles-state.test.ts deleted file mode 100644 index 6be5e2f..0000000 --- a/src/speedscope/store/profiles-state.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {storeTest, profileGroupTwoSampled} from './store-test-utils' -import {actions} from './actions' - -describe('profileGroup', () => { - storeTest('setProfileGroup', ({getState, dispatch}) => { - expect(getState().profileGroup).toBe(null) - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - const {profileGroup} = getState() - expect(profileGroup!.name).toBe(profileGroupTwoSampled.name) - expect(profileGroup!.indexToView).toBe(profileGroupTwoSampled.indexToView) - - for (let i = 0; i < profileGroupTwoSampled.profiles.length; i++) { - expect(profileGroup!.profiles[i].profile).toEqual(profileGroupTwoSampled.profiles[i]) - } - }) - - storeTest('setProfileIndexToView', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.indexToView).toBe(1) - dispatch(actions.setProfileIndexToView(0)) - expect(getState()!.profileGroup!.indexToView).toBe(0) - dispatch(actions.setProfileIndexToView(-1)) - expect(getState()!.profileGroup!.indexToView).toBe(0) - dispatch(actions.setProfileIndexToView(2)) - expect(getState().profileGroup!.indexToView).toBe(1) - }) - - storeTest('preserve state', ({getState, dispatch}) => { - // When an unrelated action occurs, we should not change the identiy of the profileGroup - // property - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - const profileGroup = getState().profileGroup - dispatch(actions.setDragActive(true)) - expect(getState().profileGroup).toBe(profileGroup) - }) -}) diff --git a/src/speedscope/store/profiles-state.ts b/src/speedscope/store/profiles-state.ts deleted file mode 100644 index 9d2f579..0000000 --- a/src/speedscope/store/profiles-state.ts +++ /dev/null @@ -1,100 +0,0 @@ -import {Profile} from '../lib/profile' -import { - FlamechartViewState, - createFlamechartViewStateReducer, - FlamechartID, -} from './flamechart-view-state' -import {SandwichViewState, createSandwichView} from './sandwich-view-state' -import {Reducer, actionCreator, setter} from '../lib/typed-redux' -import {actions} from './actions' -import {clamp} from '../lib/math' -import {objectsHaveShallowEquality} from '../lib/utils' - -export type ProfileGroupState = { - name: string - indexToView: number - profiles: ProfileState[] -} | null - -export interface ProfileWithIndex { - profile: Profile - index: number -} - -export interface ProfileState { - profile: Profile - chronoViewState: FlamechartViewState - leftHeavyViewState: FlamechartViewState - sandwichViewState: SandwichViewState -} - -export function actionCreatorWithIndex(name: string) { - return actionCreator<{profileIndex: number; args: T}>(name) -} - -function createProfileReducer(profile: Profile, index: number): Reducer { - const chronoViewStateReducer = createFlamechartViewStateReducer(FlamechartID.CHRONO, index) - const leftHeavyViewStateReducer = createFlamechartViewStateReducer(FlamechartID.LEFT_HEAVY, index) - const sandwichViewStateReducer = createSandwichView(index) - - return (state = undefined, action) => { - if (state === undefined) { - return { - profile, - chronoViewState: chronoViewStateReducer(undefined, action), - leftHeavyViewState: leftHeavyViewStateReducer(undefined, action), - sandwichViewState: sandwichViewStateReducer(undefined, action), - } - } - - const nextState = { - profile, - chronoViewState: chronoViewStateReducer(state.chronoViewState, action), - leftHeavyViewState: leftHeavyViewStateReducer(state.leftHeavyViewState, action), - sandwichViewState: sandwichViewStateReducer(state.sandwichViewState, action), - } - - if (objectsHaveShallowEquality(state, nextState)) { - return state - } - - return nextState - } -} - -export const profileGroup: Reducer = (state = null, action) => { - if (actions.setProfileGroup.matches(action)) { - const {indexToView, profiles, name} = action.payload - return { - indexToView, - name, - profiles: profiles.map((p, i) => { - return createProfileReducer(p, i)(undefined, action) - }), - } - } - - if (state != null) { - const {indexToView, profiles} = state - - const nextIndexToView = clamp( - setter(actions.setProfileIndexToView, 0)(indexToView, action), - 0, - profiles.length - 1, - ) - const nextProfiles = profiles.map((profileState, profileIndex) => { - return createProfileReducer(profileState.profile, profileIndex)(profileState, action) - }) - - if (indexToView === nextIndexToView && objectsHaveShallowEquality(profiles, nextProfiles)) { - return state - } - - return { - ...state, - indexToView: nextIndexToView, - profiles: nextProfiles, - } - } - return state -} diff --git a/src/speedscope/store/sandwich-view-state.test.ts b/src/speedscope/store/sandwich-view-state.test.ts deleted file mode 100644 index 173e00f..0000000 --- a/src/speedscope/store/sandwich-view-state.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {storeTest, profileGroupTwoSampled} from './store-test-utils' -import {actions} from './actions' -import {Vec2} from '../lib/math' -import {FlamechartID} from './flamechart-view-state' - -describe('sandwich view state', () => { - storeTest('setSelectedFrame', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - expect(getState().profileGroup!.profiles[0].sandwichViewState.callerCallee).toBe(null) - const {profileGroup} = getState() - const selectedFrame = profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot().children[0] - .frame - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: 0, args: selectedFrame})) - - expect(getState().profileGroup!.profiles[0].sandwichViewState.callerCallee!.selectedFrame).toBe( - selectedFrame, - ) - - // Other profiles selection state should not change - expect(getState().profileGroup!.profiles[1].sandwichViewState.callerCallee).toBe(null) - - // Changing selection when something is already selected should work - const selectedFrame2 = profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot() - .children[0].children[0].frame - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: 0, args: selectedFrame2})) - expect(getState().profileGroup!.profiles[0].sandwichViewState.callerCallee!.selectedFrame).toBe( - selectedFrame2, - ) - - // Clear selection - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: 0, args: null})) - expect(getState().profileGroup!.profiles[0].sandwichViewState.callerCallee).toBe(null) - }) - - storeTest('contained flamegraphs receive updates', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - const {profileGroup} = getState() - const selectedFrame = profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot().children[0] - .frame - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: 0, args: selectedFrame})) - - expect( - getState().profileGroup!.profiles[0].sandwichViewState.callerCallee!.calleeFlamegraph - .logicalSpaceViewportSize, - ).toEqual(Vec2.zero) - dispatch( - actions.flamechart.setLogicalSpaceViewportSize({ - profileIndex: 0, - args: {id: FlamechartID.SANDWICH_CALLEES, logicalSpaceViewportSize: Vec2.unit}, - }), - ) - expect( - getState().profileGroup!.profiles[0].sandwichViewState.callerCallee!.calleeFlamegraph - .logicalSpaceViewportSize, - ).toEqual(Vec2.unit) - }) - - storeTest('preserve identity', ({getState, dispatch}) => { - dispatch(actions.setProfileGroup(profileGroupTwoSampled)) - const {profileGroup} = getState() - const selectedFrame = profileGroup!.profiles[0].profile.getAppendOrderCalltreeRoot().children[0] - .frame - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: 0, args: selectedFrame})) - - // When an unrelated action is triggered, it should not change the identity of the sandwichViewState - const sandwichViewState = getState().profileGroup!.profiles[0].sandwichViewState - dispatch(actions.setLoading(true)) - expect(getState().profileGroup!.profiles[0].sandwichViewState).toBe(sandwichViewState) - }) -}) diff --git a/src/speedscope/store/sandwich-view-state.ts b/src/speedscope/store/sandwich-view-state.ts deleted file mode 100644 index 1207a2a..0000000 --- a/src/speedscope/store/sandwich-view-state.ts +++ /dev/null @@ -1,78 +0,0 @@ -import {Frame} from '../lib/profile' -import { - FlamechartViewState, - FlamechartID, - createFlamechartViewStateReducer, -} from './flamechart-view-state' -import {Reducer} from '../lib/typed-redux' -import {actions} from './actions' - -export interface SandwichViewState { - callerCallee: CallerCalleeState | null -} - -export interface CallerCalleeState { - selectedFrame: Frame - invertedCallerFlamegraph: FlamechartViewState - calleeFlamegraph: FlamechartViewState -} - -export function createSandwichView(profileIndex: number): Reducer { - const calleesReducer = createFlamechartViewStateReducer( - FlamechartID.SANDWICH_CALLEES, - profileIndex, - ) - const invertedCallersReducer = createFlamechartViewStateReducer( - FlamechartID.SANDWICH_INVERTED_CALLERS, - profileIndex, - ) - function applies(action: {payload: {profileIndex: number}}) { - const {payload} = action - return payload.profileIndex === profileIndex - } - - return (state = {callerCallee: null}, action) => { - if (actions.sandwichView.setSelectedFrame.matches(action) && applies(action)) { - if (action.payload.args == null) { - return { - ...state, - callerCallee: null, - } - } else { - return { - ...state, - callerCallee: { - selectedFrame: action.payload.args, - calleeFlamegraph: calleesReducer(undefined, action), - invertedCallerFlamegraph: invertedCallersReducer(undefined, action), - }, - } - } - } - - const {callerCallee} = state - if (callerCallee) { - const {calleeFlamegraph, invertedCallerFlamegraph} = callerCallee - const nextCalleeFlamegraph = calleesReducer(calleeFlamegraph, action) - const nextInvertedCallerFlamegraph = invertedCallersReducer(invertedCallerFlamegraph, action) - - if ( - nextCalleeFlamegraph === calleeFlamegraph && - nextInvertedCallerFlamegraph === invertedCallerFlamegraph - ) { - return state - } - - return { - ...state, - callerCallee: { - ...callerCallee, - calleeFlamegraph: nextCalleeFlamegraph, - invertedCallerFlamegraph: nextInvertedCallerFlamegraph, - }, - } - } - - return state - } -} diff --git a/src/speedscope/store/store-test-utils.ts b/src/speedscope/store/store-test-utils.ts deleted file mode 100644 index cfa268e..0000000 --- a/src/speedscope/store/store-test-utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as fs from 'fs' - -import {Store, AnyAction} from 'redux' -import {ApplicationState, createApplicationStore} from '.' -import {importSpeedscopeProfiles} from '../lib/file-format' - -export function storeTest(name: string, cb: (store: Store) => void) { - const store = createApplicationStore({}) - test(name, () => { - cb(store) - }) -} - -const filepath = './sample/profiles/speedscope/0.6.0/two-sampled.speedscope.json' -const input = fs.readFileSync(filepath, 'utf8') -export const profileGroupTwoSampled = importSpeedscopeProfiles(JSON.parse(input)) diff --git a/src/speedscope/typings/preact-redux.d.ts b/src/speedscope/typings/preact-redux.d.ts deleted file mode 100644 index dda0f14..0000000 --- a/src/speedscope/typings/preact-redux.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -declare module 'preact-redux' { - import {VNode, Component} from 'preact' - import {Store} from 'redux' - - // We just export the bare minimum here because we're going - // to implement an API for readability convenience elsewhere - export function connect(...args: any[]): any - - export class Provider extends Component<{store: Store}, {}> { - render(): VNode - } -} diff --git a/src/speedscope/views/application-container.tsx b/src/speedscope/views/application-container.tsx deleted file mode 100644 index 5c76250..0000000 --- a/src/speedscope/views/application-container.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import {createContainer, Dispatch, bindActionCreator, ActionCreator} from '../lib/typed-redux' -import {Application, ActiveProfileState} from './application' -import {ApplicationState} from '../store' -import {getProfileToView, getCanvasContext} from '../store/getters' -import {actions} from '../store/actions' -import {Graphics} from '../gl/graphics' - -export const ApplicationContainer = createContainer( - Application, - (state: ApplicationState, dispatch: Dispatch) => { - const {flattenRecursion, profileGroup} = state - - let activeProfileState: ActiveProfileState | null = null - if (profileGroup) { - if (profileGroup.profiles.length > profileGroup.indexToView) { - const index = profileGroup.indexToView - const profileState = profileGroup.profiles[index] - activeProfileState = { - ...profileGroup.profiles[profileGroup.indexToView], - profile: getProfileToView({profile: profileState.profile, flattenRecursion}), - index: profileGroup.indexToView, - } - } - } - - function wrapActionCreator(actionCreator: ActionCreator): (t: T) => void { - return bindActionCreator(dispatch, actionCreator) - } - - // TODO(jlfwong): Cache this and resizeCanvas below to prevent re-renders - // due to changing props. - const setters = { - setGLCanvas: wrapActionCreator(actions.setGLCanvas), - setLoading: wrapActionCreator(actions.setLoading), - setError: wrapActionCreator(actions.setError), - setProfileGroup: wrapActionCreator(actions.setProfileGroup), - setDragActive: wrapActionCreator(actions.setDragActive), - setViewMode: wrapActionCreator(actions.setViewMode), - setFlattenRecursion: wrapActionCreator(actions.setFlattenRecursion), - setProfileIndexToView: wrapActionCreator(actions.setProfileIndexToView), - } - - return { - activeProfileState, - dispatch, - canvasContext: state.glCanvas ? getCanvasContext(state.glCanvas) : null, - resizeCanvas: ( - widthInPixels: number, - heightInPixels: number, - widthInAppUnits: number, - heightInAppUnits: number, - ) => { - if (state.glCanvas) { - const gl = getCanvasContext(state.glCanvas).gl - gl.resize(widthInPixels, heightInPixels, widthInAppUnits, heightInAppUnits) - gl.clear(new Graphics.Color(1, 1, 1, 1)) - } - }, - ...setters, - ...state, - } - }, -) diff --git a/src/speedscope/views/application.tsx b/src/speedscope/views/application.tsx deleted file mode 100644 index c54de43..0000000 --- a/src/speedscope/views/application.tsx +++ /dev/null @@ -1,870 +0,0 @@ -import {h, Component} from 'preact' -import {StyleSheet, css} from 'aphrodite' -import {FileSystemDirectoryEntry} from '../import/file-system-entry' - -import {Profile, ProfileGroup} from '../lib/profile' -import {FontFamily, FontSize, Colors, Sizes, Duration} from './style' -import {importEmscriptenSymbolMap} from '../lib/emscripten' -import {SandwichViewContainer} from './sandwich-view' -import {saveToFile} from '../lib/file-format' -import {ApplicationState, ViewMode, canUseXHR} from '../store' -import {StatelessComponent} from '../lib/typed-redux' -import {LeftHeavyFlamechartView, ChronoFlamechartView} from './flamechart-view-container' -import {SandwichViewState} from '../store/sandwich-view-state' -import {FlamechartViewState} from '../store/flamechart-view-state' -import {CanvasContext} from '../gl/canvas-context' -import {Graphics} from '../gl/graphics' - -const importModule = import('../import') -// Force eager loading of the module -importModule.then(() => {}) - -async function importProfilesFromText( - fileName: string, - contents: string, -): Promise { - return (await importModule).importProfileGroupFromText(fileName, contents) -} - -async function importProfilesFromBase64( - fileName: string, - contents: string, -): Promise { - return (await importModule).importProfileGroupFromBase64(fileName, contents) -} - -async function importProfilesFromArrayBuffer( - fileName: string, - contents: ArrayBuffer, -): Promise { - return (await importModule).importProfilesFromArrayBuffer(fileName, contents) -} - -async function importProfilesFromFile(file: File): Promise { - return (await importModule).importProfilesFromFile(file) -} -async function importFromFileSystemDirectoryEntry(entry: FileSystemDirectoryEntry) { - return (await importModule).importFromFileSystemDirectoryEntry(entry) -} - -declare function require(x: string): any -const exampleProfileURL = require('../../sample/profiles/stackcollapse/perf-vertx-stacks-01-collapsed-all.txt') - -interface ToolbarProps extends ApplicationProps { - browseForFile(): void - saveFile(): void -} - -export class Toolbar extends StatelessComponent { - setTimeOrder = () => { - this.props.setViewMode(ViewMode.CHRONO_FLAME_CHART) - } - - setLeftHeavyOrder = () => { - this.props.setViewMode(ViewMode.LEFT_HEAVY_FLAME_GRAPH) - } - - setSandwichView = () => { - this.props.setViewMode(ViewMode.SANDWICH_VIEW) - } - - renderLeftContent() { - if (!this.props.activeProfileState) return null - - return ( -

-
- 🕰Time Order -
-
- ⬅️Left Heavy -
-
- 🥪Sandwich -
-
- ) - } - - renderCenterContent() { - const {activeProfileState, profileGroup} = this.props - if (activeProfileState && profileGroup) { - const {index} = activeProfileState - if (profileGroup.profiles.length === 1) { - return activeProfileState.profile.getName() - } else { - function makeNavButton(content: string, disabled: boolean, onClick: () => void) { - return ( - - ) - } - - const prevButton = makeNavButton('⬅️', index === 0, () => - this.props.setProfileIndexToView(index - 1), - ) - const nextButton = makeNavButton('➡️', index >= profileGroup.profiles.length - 1, () => - this.props.setProfileIndexToView(index + 1), - ) - - return ( -
- {prevButton} - {activeProfileState.profile.getName()}{' '} - - ({activeProfileState.index + 1}/{profileGroup.profiles.length}) - - {nextButton} -
- ) - } - } - return '🔬speedscope' - } - - renderRightContent() { - const importFile = ( -
- ⤵️Import -
- ) - const help = ( -
- ) - - return ( -
- {this.props.activeProfileState && ( -
- ⤴️Export -
- )} - {importFile} - {help} -
- ) - } - - render() { - return ( -
- {this.renderLeftContent()} - {this.renderCenterContent()} - {this.renderRightContent()} -
- ) - } -} - -interface GLCanvasProps { - canvasContext: CanvasContext | null - setGLCanvas: (canvas: HTMLCanvasElement | null) => void -} -export class GLCanvas extends Component { - private canvas: HTMLCanvasElement | null = null - - private ref = (canvas?: Element) => { - if (canvas instanceof HTMLCanvasElement) { - this.canvas = canvas - } else { - this.canvas = null - } - - this.props.setGLCanvas(this.canvas) - } - - private container: HTMLElement | null = null - private containerRef = (container?: Element) => { - if (container instanceof HTMLElement) { - this.container = container - } else { - this.container = null - } - } - - private maybeResize = () => { - if (!this.container) return - if (!this.props.canvasContext) return - - let {width, height} = this.container.getBoundingClientRect() - - const widthInAppUnits = width - const heightInAppUnits = height - const widthInPixels = width * window.devicePixelRatio - const heightInPixels = height * window.devicePixelRatio - - this.props.canvasContext.gl.resize( - widthInPixels, - heightInPixels, - widthInAppUnits, - heightInAppUnits, - ) - this.props.canvasContext.gl.clear(new Graphics.Color(1, 1, 1, 1)) - } - - onWindowResize = () => { - if (this.props.canvasContext) { - this.props.canvasContext.requestFrame() - } - } - componentWillReceiveProps(nextProps: GLCanvasProps) { - if (this.props.canvasContext !== nextProps.canvasContext) { - if (this.props.canvasContext) { - this.props.canvasContext.removeBeforeFrameHandler(this.maybeResize) - } - if (nextProps.canvasContext) { - nextProps.canvasContext.addBeforeFrameHandler(this.maybeResize) - nextProps.canvasContext.requestFrame() - } - } - } - componentDidMount() { - window.addEventListener('resize', this.onWindowResize) - } - componentWillUnmount() { - if (this.props.canvasContext) { - this.props.canvasContext.removeBeforeFrameHandler(this.maybeResize) - } - window.removeEventListener('resize', this.onWindowResize) - } - render() { - return ( -
- -
- ) - } -} - -export interface ActiveProfileState { - profile: Profile - index: number - chronoViewState: FlamechartViewState - leftHeavyViewState: FlamechartViewState - sandwichViewState: SandwichViewState -} - -export type ApplicationProps = ApplicationState & { - setGLCanvas: (canvas: HTMLCanvasElement | null) => void - setLoading: (loading: boolean) => void - setError: (error: boolean) => void - setProfileGroup: (profileGroup: ProfileGroup) => void - setDragActive: (dragActive: boolean) => void - setViewMode: (viewMode: ViewMode) => void - setFlattenRecursion: (flattenRecursion: boolean) => void - setProfileIndexToView: (profileIndex: number) => void - activeProfileState: ActiveProfileState | null - canvasContext: CanvasContext | null -} - -export class Application extends StatelessComponent { - private async loadProfile(loader: () => Promise) { - this.props.setLoading(true) - await new Promise(resolve => setTimeout(resolve, 0)) - - if (!this.props.glCanvas) return - - console.time('import') - - let profileGroup: ProfileGroup | null = null - try { - profileGroup = await loader() - } catch (e) { - console.log('Failed to load format', e) - this.props.setError(true) - return - } - - if (profileGroup == null) { - // TODO(jlfwong): Make this a nicer overlay - alert('Unrecognized format! See documentation about supported formats.') - this.props.setLoading(false) - return - } - - if (this.props.hashParams.title) { - profileGroup = { - name: this.props.hashParams.title, - ...profileGroup, - } - } - document.title = `${profileGroup.name} - speedscope` - - for (let profile of profileGroup.profiles) { - await profile.demangle() - } - - for (let profile of profileGroup.profiles) { - const title = this.props.hashParams.title || profile.getName() - profile.setName(title) - } - - console.timeEnd('import') - - this.props.setProfileGroup(profileGroup) - this.props.setLoading(false) - } - - loadFromFile(file: File) { - this.loadProfile(async () => { - const profiles = await importProfilesFromFile(file) - if (profiles) { - for (let profile of profiles.profiles) { - if (!profile.getName()) { - profile.setName(file.name) - } - } - return profiles - } - - if (this.props.profileGroup && this.props.activeProfileState) { - // If a profile is already loaded, it's possible the file being imported is - // a symbol map. If that's the case, we want to parse it, and apply the symbol - // mapping to the already loaded profile. This can be use to take an opaque - // profile and make it readable. - const reader = new FileReader() - const fileContentsPromise = new Promise(resolve => { - reader.addEventListener('loadend', () => { - if (typeof reader.result !== 'string') { - throw new Error('Expected reader.result to be a string') - } - resolve(reader.result) - }) - }) - reader.readAsText(file) - const fileContents = await fileContentsPromise - - const map = importEmscriptenSymbolMap(fileContents) - if (map) { - const {profile, index} = this.props.activeProfileState - console.log('Importing as emscripten symbol map') - profile.remapNames(name => map.get(name) || name) - return { - name: this.props.profileGroup.name || 'profile', - indexToView: index, - profiles: [profile], - } - } - } - - return null - }) - } - - loadExample = () => { - this.loadProfile(async () => { - const filename = 'perf-vertx-stacks-01-collapsed-all.txt' - const data = await fetch(exampleProfileURL).then(resp => resp.text()) - return await importProfilesFromText(filename, data) - }) - } - - onDrop = (ev: DragEvent) => { - this.props.setDragActive(false) - ev.preventDefault() - - const firstItem = ev.dataTransfer.items[0] - if ('webkitGetAsEntry' in firstItem) { - const webkitEntry: FileSystemDirectoryEntry = firstItem.webkitGetAsEntry() - - // Instrument.app file format is actually a directory. - if (webkitEntry.isDirectory && webkitEntry.name.endsWith('.trace')) { - console.log('Importing as Instruments.app .trace file') - this.loadProfile(async () => { - return await importFromFileSystemDirectoryEntry(webkitEntry) - }) - return - } - } - - let file: File | null = ev.dataTransfer.files.item(0) - if (file) { - this.loadFromFile(file) - } - } - - onDragOver = (ev: DragEvent) => { - this.props.setDragActive(true) - ev.preventDefault() - } - - onDragLeave = (ev: DragEvent) => { - this.props.setDragActive(false) - ev.preventDefault() - } - - onWindowKeyPress = async (ev: KeyboardEvent) => { - if (ev.key === '1') { - this.props.setViewMode(ViewMode.CHRONO_FLAME_CHART) - } else if (ev.key === '2') { - this.props.setViewMode(ViewMode.LEFT_HEAVY_FLAME_GRAPH) - } else if (ev.key === '3') { - this.props.setViewMode(ViewMode.SANDWICH_VIEW) - } else if (ev.key === 'r') { - const {flattenRecursion} = this.props - this.props.setFlattenRecursion(!flattenRecursion) - } else if (ev.key === 'n') { - const {activeProfileState} = this.props - if (activeProfileState) { - this.props.setProfileIndexToView(activeProfileState.index + 1) - } - } else if (ev.key === 'p') { - const {activeProfileState} = this.props - if (activeProfileState) { - this.props.setProfileIndexToView(activeProfileState.index - 1) - } - } - } - - private saveFile = () => { - if (this.props.profileGroup) { - const {name, indexToView, profiles} = this.props.profileGroup - const profileGroup: ProfileGroup = { - name, - indexToView, - profiles: profiles.map(p => p.profile), - } - saveToFile(profileGroup) - } - } - - private browseForFile = () => { - const input = document.createElement('input') - input.type = 'file' - input.addEventListener('change', this.onFileSelect) - input.click() - } - - private onWindowKeyDown = async (ev: KeyboardEvent) => { - // This has to be handled on key down in order to prevent the default - // page save action. - if (ev.key === 's' && (ev.ctrlKey || ev.metaKey)) { - ev.preventDefault() - this.saveFile() - } else if (ev.key === 'o' && (ev.ctrlKey || ev.metaKey)) { - ev.preventDefault() - this.browseForFile() - } - } - - onDocumentPaste = (ev: Event) => { - ev.preventDefault() - ev.stopPropagation() - - const pasted = (ev as ClipboardEvent).clipboardData.getData('text') - this.loadProfile(async () => { - return await importProfilesFromText('From Clipboard', pasted) - }) - } - - componentDidMount() { - window.addEventListener('keydown', this.onWindowKeyDown) - window.addEventListener('keypress', this.onWindowKeyPress) - document.addEventListener('paste', this.onDocumentPaste) - this.maybeLoadHashParamProfile() - } - - componentWillUnmount() { - window.removeEventListener('keydown', this.onWindowKeyDown) - window.removeEventListener('keypress', this.onWindowKeyPress) - document.removeEventListener('paste', this.onDocumentPaste) - } - - async maybeLoadHashParamProfile() { - if (this.props.hashParams.profileURL) { - if (!canUseXHR) { - alert( - `Cannot load a profile URL when loading from "${window.location.protocol}" URL protocol`, - ) - return - } - this.loadProfile(async () => { - const response: Response = await fetch(this.props.hashParams.profileURL!) - let filename = new URL(this.props.hashParams.profileURL!).pathname - if (filename.includes('/')) { - filename = filename.slice(filename.lastIndexOf('/') + 1) - } - return await importProfilesFromArrayBuffer(filename, await response.arrayBuffer()) - }) - } else if (this.props.hashParams.localProfilePath) { - // There isn't good cross-browser support for XHR of local files, even from - // other local files. To work around this restriction, we load the local profile - // as a JavaScript file which will invoke a global function. - ;(window as any)['speedscope'] = { - loadFileFromBase64: (filename: string, base64source: string) => { - this.loadProfile(() => importProfilesFromBase64(filename, base64source)) - }, - } - - const script = document.createElement('script') - script.src = `file:///${this.props.hashParams.localProfilePath}` - document.head.appendChild(script) - } - } - - onFileSelect = (ev: Event) => { - const file = (ev.target as HTMLInputElement).files!.item(0) - if (file) { - this.loadFromFile(file) - } - } - - renderLanding() { - return ( -
-
-

- 👋 Hi there! Welcome to 🔬speedscope, an interactive{' '} - - flamegraph - {' '} - visualizer. Use it to help you make your software faster. -

- {canUseXHR ? ( -

- Drag and drop a profile file onto this window to get started, click the big blue - button below to browse for a profile to explore, or{' '} - - click here - {' '} - to load an example profile. -

- ) : ( -

- Drag and drop a profile file onto this window to get started, or click the big blue - button below to browse for a profile to explore. -

- )} -
- - -
- -

- See the{' '} - - documentation - {' '} - for information about supported file formats, keyboard shortcuts, and how to navigate - around the profile. -

- -

- speedscope is open source. Please{' '} - - report any issues on GitHub - . -

-
-
- ) - } - - renderError() { - return ( -
-
😿 Something went wrong.
-
Check the JS console for more details.
-
- ) - } - - renderLoadingBar() { - return
- } - - renderContent() { - const {viewMode, activeProfileState, error, loading, glCanvas} = this.props - - if (error) { - return this.renderError() - } - - if (loading) { - return this.renderLoadingBar() - } - - if (!activeProfileState || !glCanvas) { - return this.renderLanding() - } - - switch (viewMode) { - case ViewMode.CHRONO_FLAME_CHART: { - return - } - case ViewMode.LEFT_HEAVY_FLAME_GRAPH: { - return ( - - ) - } - case ViewMode.SANDWICH_VIEW: { - return - } - } - } - - render() { - return ( -
- - -
{this.renderContent()}
- {this.props.dragActive &&
} -
- ) - } -} - -const style = StyleSheet.create({ - glCanvasView: { - position: 'absolute', - width: '100vw', - height: '100vh', - zIndex: -1, - pointerEvents: 'none', - }, - error: { - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - height: '100%', - }, - loading: { - height: 3, - marginBottom: -3, - background: Colors.DARK_BLUE, - transformOrigin: '0% 50%', - animationName: [ - { - from: { - transform: `scaleX(0)`, - }, - to: { - transform: `scaleX(1)`, - }, - }, - ], - animationTimingFunction: 'cubic-bezier(0, 1, 0, 1)', - animationDuration: '30s', - }, - root: { - width: '100vw', - height: '100vh', - overflow: 'hidden', - display: 'flex', - flexDirection: 'column', - position: 'relative', - fontFamily: FontFamily.MONOSPACE, - lineHeight: '20px', - }, - dragTargetRoot: { - cursor: 'copy', - }, - dragTarget: { - boxSizing: 'border-box', - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - border: `5px dashed ${Colors.DARK_BLUE}`, - pointerEvents: 'none', - }, - contentContainer: { - position: 'relative', - display: 'flex', - overflow: 'hidden', - flexDirection: 'column', - flex: 1, - }, - landingContainer: { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - flex: 1, - }, - landingMessage: { - maxWidth: 600, - }, - landingP: { - marginBottom: 16, - }, - hide: { - display: 'none', - }, - browseButtonContainer: { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - }, - browseButton: { - marginBottom: 16, - height: 72, - flex: 1, - maxWidth: 256, - textAlign: 'center', - fontSize: FontSize.BIG_BUTTON, - lineHeight: '72px', - background: Colors.DARK_BLUE, - color: Colors.WHITE, - transition: `all ${Duration.HOVER_CHANGE} ease-in`, - ':hover': { - background: Colors.BRIGHT_BLUE, - }, - }, - link: { - color: Colors.BRIGHT_BLUE, - cursor: 'pointer', - textDecoration: 'none', - }, - toolbar: { - height: Sizes.TOOLBAR_HEIGHT, - flexShrink: 0, - background: Colors.BLACK, - color: Colors.WHITE, - textAlign: 'center', - fontFamily: FontFamily.MONOSPACE, - fontSize: FontSize.TITLE, - lineHeight: `${Sizes.TOOLBAR_TAB_HEIGHT}px`, - userSelect: 'none', - }, - toolbarLeft: { - position: 'absolute', - height: Sizes.TOOLBAR_HEIGHT, - overflow: 'hidden', - top: 0, - left: 0, - marginRight: 2, - textAlign: 'left', - }, - toolbarCenter: { - paddingTop: 1, - height: Sizes.TOOLBAR_HEIGHT, - }, - toolbarRight: { - height: Sizes.TOOLBAR_HEIGHT, - overflow: 'hidden', - position: 'absolute', - top: 0, - right: 0, - marginRight: 2, - textAlign: 'right', - }, - toolbarProfileIndex: { - color: Colors.LIGHT_GRAY, - }, - toolbarProfileNavButton: { - opacity: 0.8, - fontSize: FontSize.TITLE, - lineHeight: `${Sizes.TOOLBAR_TAB_HEIGHT}px`, - ':hover': { - opacity: 1.0, - }, - background: 'none', - border: 'none', - padding: 0, - marginLeft: '0.3em', - marginRight: '0.3em', - transition: `all ${Duration.HOVER_CHANGE} ease-in`, - }, - toolbarProfileNavButtonDisabled: { - opacity: 0.5, - ':hover': { - opacity: 0.5, - }, - }, - toolbarTab: { - background: Colors.DARK_GRAY, - marginTop: Sizes.SEPARATOR_HEIGHT, - height: Sizes.TOOLBAR_TAB_HEIGHT, - lineHeight: `${Sizes.TOOLBAR_TAB_HEIGHT}px`, - paddingLeft: 2, - paddingRight: 8, - display: 'inline-block', - marginLeft: 2, - transition: `all ${Duration.HOVER_CHANGE} ease-in`, - ':hover': { - background: Colors.GRAY, - }, - }, - toolbarTabActive: { - background: Colors.BRIGHT_BLUE, - ':hover': { - background: Colors.BRIGHT_BLUE, - }, - }, - noLinkStyle: { - textDecoration: 'none', - color: 'inherit', - }, - emoji: { - display: 'inline-block', - verticalAlign: 'middle', - paddingTop: '0px', - marginRight: '0.3em', - }, -}) diff --git a/src/speedscope/views/callee-flamegraph-view.ts b/src/speedscope/views/callee-flamegraph-view.ts deleted file mode 100644 index 595823d..0000000 --- a/src/speedscope/views/callee-flamegraph-view.ts +++ /dev/null @@ -1,84 +0,0 @@ -import {memoizeByShallowEquality} from '../lib/utils' -import {Profile, Frame} from '../lib/profile' -import {Flamechart} from '../lib/flamechart' -import { - createMemoizedFlamechartRenderer, - FlamechartViewContainerProps, - createFlamechartSetters, -} from './flamechart-view-container' -import {createContainer, Dispatch} from '../lib/typed-redux' -import {ApplicationState} from '../store' -import { - getCanvasContext, - createGetColorBucketForFrame, - createGetCSSColorForFrame, - getFrameToColorBucket, -} from '../store/getters' -import {FlamechartID} from '../store/flamechart-view-state' -import {FlamechartWrapper} from './flamechart-wrapper' - -const getCalleeProfile = memoizeByShallowEquality< - { - profile: Profile - frame: Frame - flattenRecursion: boolean - }, - Profile ->(({profile, frame, flattenRecursion}) => { - let p = profile.getProfileForCalleesOf(frame) - return flattenRecursion ? p.getProfileWithRecursionFlattened() : p -}) - -const getCalleeFlamegraph = memoizeByShallowEquality< - { - calleeProfile: Profile - getColorBucketForFrame: (frame: Frame) => number - }, - Flamechart ->(({calleeProfile, getColorBucketForFrame}) => { - return new Flamechart({ - getTotalWeight: calleeProfile.getTotalNonIdleWeight.bind(calleeProfile), - forEachCall: calleeProfile.forEachCallGrouped.bind(calleeProfile), - formatValue: calleeProfile.formatValue.bind(calleeProfile), - getColorBucketForFrame, - }) -}) - -const getCalleeFlamegraphRenderer = createMemoizedFlamechartRenderer() - -export const CalleeFlamegraphView = createContainer( - FlamechartWrapper, - (state: ApplicationState, dispatch: Dispatch, ownProps: FlamechartViewContainerProps) => { - const {activeProfileState} = ownProps - const {index, profile, sandwichViewState} = activeProfileState - const {flattenRecursion, glCanvas} = state - if (!profile) throw new Error('profile missing') - if (!glCanvas) throw new Error('glCanvas missing') - const {callerCallee} = sandwichViewState - if (!callerCallee) throw new Error('callerCallee missing') - const {selectedFrame} = callerCallee - - const frameToColorBucket = getFrameToColorBucket(profile) - const getColorBucketForFrame = createGetColorBucketForFrame(frameToColorBucket) - const getCSSColorForFrame = createGetCSSColorForFrame(frameToColorBucket) - const canvasContext = getCanvasContext(glCanvas) - - const flamechart = getCalleeFlamegraph({ - calleeProfile: getCalleeProfile({profile, frame: selectedFrame, flattenRecursion}), - getColorBucketForFrame, - }) - const flamechartRenderer = getCalleeFlamegraphRenderer({canvasContext, flamechart}) - - return { - renderInverted: false, - flamechart, - flamechartRenderer, - canvasContext, - getCSSColorForFrame, - ...createFlamechartSetters(dispatch, FlamechartID.SANDWICH_CALLEES, index), - // This overrides the setSelectedNode specified in createFlamechartSettesr - setSelectedNode: () => {}, - ...callerCallee.calleeFlamegraph, - } - }, -) diff --git a/src/speedscope/views/color-chit.tsx b/src/speedscope/views/color-chit.tsx deleted file mode 100644 index 0caae07..0000000 --- a/src/speedscope/views/color-chit.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import {h, Component} from 'preact' -import {StyleSheet, css} from 'aphrodite' -import {Colors, FontSize} from './style' - -interface ColorChitProps { - color: string -} - -export class ColorChit extends Component { - render() { - return - } -} - -const style = StyleSheet.create({ - stackChit: { - position: 'relative', - top: -1, - display: 'inline-block', - verticalAlign: 'middle', - marginRight: '0.5em', - border: `1px solid ${Colors.LIGHT_GRAY}`, - width: FontSize.LABEL - 2, - height: FontSize.LABEL - 2, - }, -}) diff --git a/src/speedscope/views/flamechart-detail-view.tsx b/src/speedscope/views/flamechart-detail-view.tsx deleted file mode 100644 index 26a7ab5..0000000 --- a/src/speedscope/views/flamechart-detail-view.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import {StyleDeclarationValue, css} from 'aphrodite' -import {h, Component} from 'preact' -import {style} from './flamechart-style' -import {formatPercent} from '../lib/utils' -import {Frame, CallTreeNode} from '../lib/profile' -import {ColorChit} from './color-chit' -import {Flamechart} from '../lib/flamechart' - -interface StatisticsTableProps { - title: string - grandTotal: number - selectedTotal: number - selectedSelf: number - cellStyle: StyleDeclarationValue - formatter: (v: number) => string -} - -class StatisticsTable extends Component { - render() { - const total = this.props.formatter(this.props.selectedTotal) - const self = this.props.formatter(this.props.selectedSelf) - const totalPerc = 100.0 * this.props.selectedTotal / this.props.grandTotal - const selfPerc = 100.0 * this.props.selectedSelf / this.props.grandTotal - - return ( -
-
- {this.props.title} -
- -
Total
-
Self
- -
{total}
-
{self}
- -
- {formatPercent(totalPerc)} -
-
-
- {formatPercent(selfPerc)} -
-
-
- ) - } -} - -interface StackTraceViewProps { - getFrameColor: (frame: Frame) => string - node: CallTreeNode -} -class StackTraceView extends Component { - render() { - const rows: JSX.Element[] = [] - let node: CallTreeNode | null = this.props.node - for (; node && !node.isRoot(); node = node.parent) { - const row: (JSX.Element | string)[] = [] - const {frame} = node - - row.push() - - if (rows.length) { - row.push(> ) - } - row.push(frame.name) - - if (frame.file) { - let pos = frame.file - if (frame.line) { - pos += `:${frame.line}` - if (frame.col) { - pos += `:${frame.col}` - } - } - row.push( ({pos})) - } - rows.push(
{row}
) - } - return ( -
-
{rows}
-
- ) - } -} - -interface FlamechartDetailViewProps { - flamechart: Flamechart - getCSSColorForFrame: (frame: Frame) => string - selectedNode: CallTreeNode -} - -export class FlamechartDetailView extends Component { - render() { - const {flamechart, selectedNode} = this.props - const {frame} = selectedNode - - return ( -
- - - -
- ) - } -} diff --git a/src/speedscope/views/flamechart-minimap-view.tsx b/src/speedscope/views/flamechart-minimap-view.tsx deleted file mode 100644 index 04d3d33..0000000 --- a/src/speedscope/views/flamechart-minimap-view.tsx +++ /dev/null @@ -1,424 +0,0 @@ -import {h, Component} from 'preact' -import {css} from 'aphrodite' -import {Flamechart} from '../lib/flamechart' -import {Rect, Vec2, AffineTransform, clamp} from '../lib/math' -import {FlamechartRenderer} from '../gl/flamechart-renderer' -import {style} from './flamechart-style' -import {FontFamily, FontSize, Colors, Sizes, commonStyle} from './style' -import {CanvasContext} from '../gl/canvas-context' -import {cachedMeasureTextWidth} from '../lib/text-utils' - -interface FlamechartMinimapViewProps { - flamechart: Flamechart - configSpaceViewportRect: Rect - - canvasContext: CanvasContext - flamechartRenderer: FlamechartRenderer - - transformViewport: (transform: AffineTransform) => void - setConfigSpaceViewportRect: (rect: Rect) => void -} - -enum DraggingMode { - DRAW_NEW_VIEWPORT, - TRANSLATE_VIEWPORT, -} - -export class FlamechartMinimapView extends Component { - container: Element | null = null - containerRef = (element?: Element) => { - this.container = element || null - } - - overlayCanvas: HTMLCanvasElement | null = null - overlayCtx: CanvasRenderingContext2D | null = null - - private physicalViewSize() { - return new Vec2( - this.overlayCanvas ? this.overlayCanvas.width : 0, - this.overlayCanvas ? this.overlayCanvas.height : 0, - ) - } - - private minimapOrigin() { - return new Vec2(0, Sizes.FRAME_HEIGHT * window.devicePixelRatio) - } - - private configSpaceSize() { - return new Vec2( - this.props.flamechart.getTotalWeight(), - this.props.flamechart.getLayers().length, - ) - } - - private configSpaceToPhysicalViewSpace() { - const minimapOrigin = this.minimapOrigin() - - return AffineTransform.betweenRects( - new Rect(new Vec2(0, 0), this.configSpaceSize()), - new Rect(minimapOrigin, this.physicalViewSize().minus(minimapOrigin)), - ) - } - - private logicalToPhysicalViewSpace() { - return AffineTransform.withScale(new Vec2(window.devicePixelRatio, window.devicePixelRatio)) - } - - private windowToLogicalViewSpace() { - if (!this.container) return new AffineTransform() - const bounds = this.container.getBoundingClientRect() - return AffineTransform.withTranslation(new Vec2(-bounds.left, -bounds.top)) - } - - private renderRects() { - if (!this.container) return - - // Hasn't resized yet -- no point in rendering yet - if (this.physicalViewSize().x < 2) return - - this.props.canvasContext.renderBehind(this.container, () => { - this.props.flamechartRenderer.render({ - configSpaceSrcRect: new Rect(new Vec2(0, 0), this.configSpaceSize()), - physicalSpaceDstRect: new Rect( - this.minimapOrigin(), - this.physicalViewSize().minus(this.minimapOrigin()), - ), - renderOutlines: false, - }) - - this.props.canvasContext.viewportRectangleRenderer.render({ - configSpaceViewportRect: this.props.configSpaceViewportRect, - configSpaceToPhysicalViewSpace: this.configSpaceToPhysicalViewSpace(), - }) - }) - } - - private renderOverlays() { - const ctx = this.overlayCtx - if (!ctx) return - const physicalViewSize = this.physicalViewSize() - ctx.clearRect(0, 0, physicalViewSize.x, physicalViewSize.y) - - const configToPhysical = this.configSpaceToPhysicalViewSpace() - - const left = 0 - const right = this.configSpaceSize().x - - // TODO(jlfwong): There's a huge amount of code duplication here between - // this and the FlamechartView.renderOverlays(). Consolidate. - - // We want about 10 gridlines to be visible, and want the unit to be - // 1eN, 2eN, or 5eN for some N - - // Ideally, we want an interval every 100 logical screen pixels - const logicalToConfig = ( - this.configSpaceToPhysicalViewSpace().inverted() || new AffineTransform() - ).times(this.logicalToPhysicalViewSpace()) - const targetInterval = logicalToConfig.transformVector(new Vec2(200, 1)).x - - const physicalViewSpaceFrameHeight = Sizes.FRAME_HEIGHT * window.devicePixelRatio - const physicalViewSpaceFontSize = FontSize.LABEL * window.devicePixelRatio - const labelPaddingPx = (physicalViewSpaceFrameHeight - physicalViewSpaceFontSize) / 2 - - ctx.font = `${physicalViewSpaceFontSize}px/${physicalViewSpaceFrameHeight}px ${ - FontFamily.MONOSPACE - }` - ctx.textBaseline = 'top' - - const minInterval = Math.pow(10, Math.floor(Math.log10(targetInterval))) - let interval = minInterval - - if (targetInterval / interval > 5) { - interval *= 5 - } else if (targetInterval / interval > 2) { - interval *= 2 - } - - { - ctx.fillStyle = 'rgba(255, 255, 255, 0.8)' - ctx.fillRect(0, 0, physicalViewSize.x, physicalViewSpaceFrameHeight) - ctx.textBaseline = 'top' - - ctx.fillStyle = Colors.DARK_GRAY - for (let x = Math.ceil(left / interval) * interval; x < right; x += interval) { - // TODO(jlfwong): Ensure that labels do not overlap - const pos = Math.round(configToPhysical.transformPosition(new Vec2(x, 0)).x) - const labelText = this.props.flamechart.formatValue(x) - const textWidth = Math.ceil(cachedMeasureTextWidth(ctx, labelText)) - - ctx.fillText(labelText, pos - textWidth - labelPaddingPx, labelPaddingPx) - ctx.fillRect(pos, 0, 1, physicalViewSize.y) - } - } - } - - onWindowResize = () => { - this.onBeforeFrame() - } - - componentWillReceiveProps(nextProps: FlamechartMinimapViewProps) { - if (this.props.flamechart !== nextProps.flamechart) { - this.renderCanvas() - } else if (this.props.configSpaceViewportRect != nextProps.configSpaceViewportRect) { - this.renderCanvas() - } - } - - componentDidMount() { - window.addEventListener('resize', this.onWindowResize) - this.props.canvasContext.addBeforeFrameHandler(this.onBeforeFrame) - } - - componentWillUnmount() { - window.removeEventListener('resize', this.onWindowResize) - this.props.canvasContext.removeBeforeFrameHandler(this.onBeforeFrame) - } - - private resizeOverlayCanvasIfNeeded() { - if (!this.overlayCanvas) return - let {width, height} = this.overlayCanvas.getBoundingClientRect() - { - /* - We render text at a higher resolution then scale down to - ensure we're rendering at 1:1 device pixel ratio. - This ensures our text is rendered crisply. - */ - } - width = Math.floor(width) - height = Math.floor(height) - - // Still initializing: don't resize yet - if (width === 0 || height === 0) return - - const scaledWidth = width * window.devicePixelRatio - const scaledHeight = height * window.devicePixelRatio - - if (scaledWidth === this.overlayCanvas.width && scaledHeight === this.overlayCanvas.height) - return - - this.overlayCanvas.width = scaledWidth - this.overlayCanvas.height = scaledHeight - } - - private onBeforeFrame = () => { - this.maybeClearInteractionLock() - this.resizeOverlayCanvasIfNeeded() - this.renderRects() - this.renderOverlays() - } - - private renderCanvas = () => { - this.props.canvasContext.requestFrame() - } - - // Inertial scrolling introduces tricky interaction problems. - // Namely, if you start panning, and hit the edge of the scrollable - // area, the browser continues to receive WheelEvents from inertial - // scrolling. If we start zooming by holding Cmd + scrolling, then - // release the Cmd key, this can cause us to interpret the incoming - // inertial scrolling events as panning. To prevent this, we introduce - // a concept of an "Interaction Lock". Once a certain interaction has - // begun, we don't allow the other type of interaction to begin until - // we've received two frames with no inertial wheel events. This - // prevents us from accidentally switching between panning & zooming. - private frameHadWheelEvent = false - private framesWithoutWheelEvents = 0 - private interactionLock: 'pan' | 'zoom' | null = null - private maybeClearInteractionLock = () => { - if (this.interactionLock) { - if (!this.frameHadWheelEvent) { - this.framesWithoutWheelEvents++ - if (this.framesWithoutWheelEvents >= 2) { - this.interactionLock = null - this.framesWithoutWheelEvents = 0 - } - } - this.props.canvasContext.requestFrame() - } - this.frameHadWheelEvent = false - } - - private pan(logicalViewSpaceDelta: Vec2) { - this.interactionLock = 'pan' - const physicalDelta = this.logicalToPhysicalViewSpace().transformVector(logicalViewSpaceDelta) - const configDelta = this.configSpaceToPhysicalViewSpace().inverseTransformVector(physicalDelta) - - if (!configDelta) return - this.props.transformViewport(AffineTransform.withTranslation(configDelta)) - } - - private zoom(multiplier: number) { - this.interactionLock = 'zoom' - const configSpaceViewport = this.props.configSpaceViewportRect - const configSpaceCenter = configSpaceViewport.origin.plus(configSpaceViewport.size.times(1 / 2)) - if (!configSpaceCenter) return - - const zoomTransform = AffineTransform.withTranslation(configSpaceCenter.times(-1)) - .scaledBy(new Vec2(multiplier, 1)) - .translatedBy(configSpaceCenter) - - this.props.transformViewport(zoomTransform) - } - - private onWheel = (ev: WheelEvent) => { - ev.preventDefault() - - this.frameHadWheelEvent = true - - const isZoom = ev.metaKey || ev.ctrlKey - - if (isZoom && this.interactionLock !== 'pan') { - let multiplier = 1 + ev.deltaY / 100 - - // On Chrome & Firefox, pinch-to-zoom maps to - // WheelEvent + Ctrl Key. We'll accelerate it in - // this case, since it feels a bit sluggish otherwise. - if (ev.ctrlKey) { - multiplier = 1 + ev.deltaY / 40 - } - - multiplier = clamp(multiplier, 0.1, 10.0) - - this.zoom(multiplier) - } else if (this.interactionLock !== 'zoom') { - this.pan(new Vec2(ev.deltaX, ev.deltaY)) - } - - this.renderCanvas() - } - - private configSpaceMouse(ev: MouseEvent): Vec2 | null { - const logicalSpaceMouse = this.windowToLogicalViewSpace().transformPosition( - new Vec2(ev.clientX, ev.clientY), - ) - const physicalSpaceMouse = this.logicalToPhysicalViewSpace().transformPosition( - logicalSpaceMouse, - ) - return this.configSpaceToPhysicalViewSpace().inverseTransformPosition(physicalSpaceMouse) - } - - private dragStartConfigSpaceMouse: Vec2 | null = null - private dragConfigSpaceViewportOffset: Vec2 | null = null - private draggingMode: DraggingMode | null = null - private onMouseDown = (ev: MouseEvent) => { - const configSpaceMouse = this.configSpaceMouse(ev) - - if (configSpaceMouse) { - if (this.props.configSpaceViewportRect.contains(configSpaceMouse)) { - // If dragging starting inside the viewport rectangle, - // we'll move the existing viewport - this.draggingMode = DraggingMode.TRANSLATE_VIEWPORT - this.dragConfigSpaceViewportOffset = configSpaceMouse.minus( - this.props.configSpaceViewportRect.origin, - ) - } else { - // If dragging starts outside the the viewport rectangle, - // we'll start drawing a new viewport - this.draggingMode = DraggingMode.DRAW_NEW_VIEWPORT - } - - this.dragStartConfigSpaceMouse = configSpaceMouse - window.addEventListener('mousemove', this.onWindowMouseMove) - window.addEventListener('mouseup', this.onWindowMouseUp) - this.updateCursor(configSpaceMouse) - } - } - - private onWindowMouseMove = (ev: MouseEvent) => { - if (!this.dragStartConfigSpaceMouse) return - let configSpaceMouse = this.configSpaceMouse(ev) - - if (!configSpaceMouse) return - this.updateCursor(configSpaceMouse) - - // Clamp the mouse position to avoid weird behavior when outside the canvas bounds - configSpaceMouse = new Rect(new Vec2(0, 0), this.configSpaceSize()).closestPointTo( - configSpaceMouse, - ) - - if (this.draggingMode === DraggingMode.DRAW_NEW_VIEWPORT) { - const configStart = this.dragStartConfigSpaceMouse - let configEnd = configSpaceMouse - - if (!configStart || !configEnd) return - const left = Math.min(configStart.x, configEnd.x) - const right = Math.max(configStart.x, configEnd.x) - - const width = right - left - const height = this.props.configSpaceViewportRect.height() - - this.props.setConfigSpaceViewportRect( - new Rect(new Vec2(left, configEnd.y - height / 2), new Vec2(width, height)), - ) - } else if (this.draggingMode === DraggingMode.TRANSLATE_VIEWPORT) { - if (!this.dragConfigSpaceViewportOffset) return - - const newOrigin = configSpaceMouse.minus(this.dragConfigSpaceViewportOffset) - this.props.setConfigSpaceViewportRect( - this.props.configSpaceViewportRect.withOrigin(newOrigin), - ) - } - } - - private updateCursor = (configSpaceMouse: Vec2) => { - if (this.draggingMode === DraggingMode.TRANSLATE_VIEWPORT) { - document.body.style.cursor = 'grabbing' - document.body.style.cursor = '-webkit-grabbing' - } else if (this.draggingMode === DraggingMode.DRAW_NEW_VIEWPORT) { - document.body.style.cursor = 'col-resize' - } else if (this.props.configSpaceViewportRect.contains(configSpaceMouse)) { - document.body.style.cursor = 'grab' - document.body.style.cursor = '-webkit-grab' - } else { - document.body.style.cursor = 'col-resize' - } - } - - private onMouseLeave = () => { - if (this.draggingMode == null) { - document.body.style.cursor = 'default' - } - } - - private onMouseMove = (ev: MouseEvent) => { - const configSpaceMouse = this.configSpaceMouse(ev) - if (!configSpaceMouse) return - this.updateCursor(configSpaceMouse) - } - - private onWindowMouseUp = (ev: MouseEvent) => { - this.draggingMode = null - window.removeEventListener('mousemove', this.onWindowMouseMove) - window.removeEventListener('mouseup', this.onWindowMouseUp) - - const configSpaceMouse = this.configSpaceMouse(ev) - if (!configSpaceMouse) return - this.updateCursor(configSpaceMouse) - } - - private overlayCanvasRef = (element?: Element) => { - if (element) { - this.overlayCanvas = element as HTMLCanvasElement - this.overlayCtx = this.overlayCanvas.getContext('2d') - this.renderCanvas() - } else { - this.overlayCanvas = null - this.overlayCtx = null - } - } - - render() { - return ( -
- -
- ) - } -} diff --git a/src/speedscope/views/flamechart-pan-zoom-view.tsx b/src/speedscope/views/flamechart-pan-zoom-view.tsx deleted file mode 100644 index 07d33aa..0000000 --- a/src/speedscope/views/flamechart-pan-zoom-view.tsx +++ /dev/null @@ -1,719 +0,0 @@ -import {Rect, AffineTransform, Vec2, clamp} from '../lib/math' -import {CallTreeNode} from '../lib/profile' -import {Flamechart, FlamechartFrame} from '../lib/flamechart' -import {CanvasContext} from '../gl/canvas-context' -import {FlamechartRenderer} from '../gl/flamechart-renderer' -import {Sizes, FontSize, Colors, FontFamily, commonStyle} from './style' -import {cachedMeasureTextWidth, ELLIPSIS, trimTextMid} from '../lib/text-utils' -import {style} from './flamechart-style' -import {h, Component} from 'preact' -import {css} from 'aphrodite' - -interface FlamechartFrameLabel { - configSpaceBounds: Rect - node: CallTreeNode -} - -/** - * Component to visualize a Flamechart and interact with it via hovering, - * zooming, and panning. - * - * There are 3 vector spaces involved: - * - Configuration Space: In this space, the horizontal unit is ms, and the - * vertical unit is stack depth. Each stack frame is one unit high. - * - Logical view space: Origin is top-left, with +y downwards. This represents - * the coordinate space of the view as specified in CSS: horizontal and vertical - * units are both "logical" pixels. - * - Physical view space: Origin is top-left, with +y downwards. This represents - * the coordinate space of the view as specified in hardware pixels: horizontal - * and vertical units are both "physical" pixels. - * - * We use two canvases to draw the flamechart itself: one for the rectangles, - * which we render via WebGL, and one for the labels, which we render via 2D - * canvas primitives. - */ -export interface FlamechartPanZoomViewProps { - flamechart: Flamechart - canvasContext: CanvasContext - flamechartRenderer: FlamechartRenderer - renderInverted: boolean - selectedNode: CallTreeNode | null - - onNodeHover: (hover: {node: CallTreeNode; event: MouseEvent} | null) => void - onNodeSelect: (node: CallTreeNode | null) => void - - configSpaceViewportRect: Rect - transformViewport: (transform: AffineTransform) => void - setConfigSpaceViewportRect: (rect: Rect) => void - - logicalSpaceViewportSize: Vec2 - setLogicalSpaceViewportBounds: (size: Vec2) => void -} - -export class FlamechartPanZoomView extends Component { - private container: Element | null = null - private containerRef = (element?: Element) => { - this.container = element || null - } - - private overlayCanvas: HTMLCanvasElement | null = null - private overlayCtx: CanvasRenderingContext2D | null = null - - private hoveredLabel: FlamechartFrameLabel | null = null - - private setConfigSpaceViewportRect(r: Rect) { - this.props.setConfigSpaceViewportRect(r) - } - - private overlayCanvasRef = (element?: Element) => { - if (element) { - this.overlayCanvas = element as HTMLCanvasElement - this.overlayCtx = this.overlayCanvas.getContext('2d') - this.renderCanvas() - } else { - this.overlayCanvas = null - this.overlayCtx = null - } - } - - private configSpaceSize() { - return new Vec2( - this.props.flamechart.getTotalWeight(), - this.props.flamechart.getLayers().length, - ) - } - - private physicalViewSize() { - return new Vec2( - this.overlayCanvas ? this.overlayCanvas.width : 0, - this.overlayCanvas ? this.overlayCanvas.height : 0, - ) - } - - private physicalBounds(): Rect { - if (this.props.renderInverted) { - // If we're rendering inverted and the flamegraph won't fill the viewport, - // we want to stick the flamegraph to the bottom of the viewport, not the top. - - const physicalViewportHeight = this.physicalViewSize().y - const physicalFlamegraphHeight = - (this.configSpaceSize().y + 1) * - this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT * - window.devicePixelRatio - - if (physicalFlamegraphHeight < physicalViewportHeight) { - return new Rect( - new Vec2(0, physicalViewportHeight - physicalFlamegraphHeight), - this.physicalViewSize(), - ) - } - } - - return new Rect(new Vec2(0, 0), this.physicalViewSize()) - } - - private LOGICAL_VIEW_SPACE_FRAME_HEIGHT = Sizes.FRAME_HEIGHT - - private configSpaceToPhysicalViewSpace() { - return AffineTransform.betweenRects(this.props.configSpaceViewportRect, this.physicalBounds()) - } - - private logicalToPhysicalViewSpace() { - return AffineTransform.withScale(new Vec2(window.devicePixelRatio, window.devicePixelRatio)) - } - - private resizeOverlayCanvasIfNeeded() { - if (!this.overlayCanvas) return - let {width, height} = this.overlayCanvas.getBoundingClientRect() - { - /* - We render text at a higher resolution then scale down to - ensure we're rendering at 1:1 device pixel ratio. - This ensures our text is rendered crisply. - */ - } - width = Math.floor(width) - height = Math.floor(height) - - // Still initializing: don't resize yet - if (width === 0 || height === 0) return - - const scaledWidth = width * window.devicePixelRatio - const scaledHeight = height * window.devicePixelRatio - - if (scaledWidth === this.overlayCanvas.width && scaledHeight === this.overlayCanvas.height) - return - - this.overlayCanvas.width = scaledWidth - this.overlayCanvas.height = scaledHeight - } - - private renderOverlays() { - const ctx = this.overlayCtx - if (!ctx) return - if (this.props.configSpaceViewportRect.isEmpty()) return - - const configToPhysical = this.configSpaceToPhysicalViewSpace() - - const physicalViewSpaceFontSize = FontSize.LABEL * window.devicePixelRatio - const physicalViewSpaceFrameHeight = - this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT * window.devicePixelRatio - - const physicalViewSize = this.physicalViewSize() - - ctx.clearRect(0, 0, physicalViewSize.x, physicalViewSize.y) - - if (this.hoveredLabel) { - let color = Colors.DARK_GRAY - if (this.props.selectedNode === this.hoveredLabel.node) { - color = Colors.DARK_BLUE - } - - ctx.lineWidth = 2 * devicePixelRatio - ctx.strokeStyle = color - - const physicalViewBounds = configToPhysical.transformRect(this.hoveredLabel.configSpaceBounds) - ctx.strokeRect( - Math.round(physicalViewBounds.left()), - Math.round(physicalViewBounds.top()), - Math.round(Math.max(0, physicalViewBounds.width())), - Math.round(Math.max(0, physicalViewBounds.height())), - ) - } - - ctx.font = `${physicalViewSpaceFontSize}px/${physicalViewSpaceFrameHeight}px ${ - FontFamily.MONOSPACE - }` - ctx.textBaseline = 'alphabetic' - ctx.fillStyle = Colors.DARK_GRAY - - const minWidthToRender = cachedMeasureTextWidth(ctx, 'M' + ELLIPSIS + 'M') - const minConfigSpaceWidthToRender = ( - configToPhysical.inverseTransformVector(new Vec2(minWidthToRender, 0)) || new Vec2(0, 0) - ).x - - const LABEL_PADDING_PX = 5 * window.devicePixelRatio - - const renderFrameLabelAndChildren = (frame: FlamechartFrame, depth = 0) => { - const width = frame.end - frame.start - const y = this.props.renderInverted ? this.configSpaceSize().y - 1 - depth : depth - const configSpaceBounds = new Rect(new Vec2(frame.start, y), new Vec2(width, 1)) - - if (width < minConfigSpaceWidthToRender) return - if (configSpaceBounds.left() > this.props.configSpaceViewportRect.right()) return - if (configSpaceBounds.right() < this.props.configSpaceViewportRect.left()) return - - if (this.props.renderInverted) { - if (configSpaceBounds.bottom() < this.props.configSpaceViewportRect.top()) return - } else { - if (configSpaceBounds.top() > this.props.configSpaceViewportRect.bottom()) return - } - - if (configSpaceBounds.hasIntersectionWith(this.props.configSpaceViewportRect)) { - let physicalLabelBounds = configToPhysical.transformRect(configSpaceBounds) - - if (physicalLabelBounds.left() < 0) { - physicalLabelBounds = physicalLabelBounds - .withOrigin(physicalLabelBounds.origin.withX(0)) - .withSize( - physicalLabelBounds.size.withX( - physicalLabelBounds.size.x + physicalLabelBounds.left(), - ), - ) - } - if (physicalLabelBounds.right() > physicalViewSize.x) { - physicalLabelBounds = physicalLabelBounds.withSize( - physicalLabelBounds.size.withX(physicalViewSize.x - physicalLabelBounds.left()), - ) - } - - if (physicalLabelBounds.width() > minWidthToRender) { - const trimmedText = trimTextMid( - ctx, - frame.node.frame.name, - physicalLabelBounds.width() - 2 * LABEL_PADDING_PX, - ) - - // Note that this is specifying the position of the starting text - // baseline. - ctx.fillText( - trimmedText, - physicalLabelBounds.left() + LABEL_PADDING_PX, - Math.round( - physicalLabelBounds.bottom() - - (physicalViewSpaceFrameHeight - physicalViewSpaceFontSize) / 2, - ), - ) - } - } - for (let child of frame.children) { - renderFrameLabelAndChildren(child, depth + 1) - } - } - - for (let frame of this.props.flamechart.getLayers()[0] || []) { - renderFrameLabelAndChildren(frame) - } - - const frameOutlineWidth = 2 * window.devicePixelRatio - ctx.strokeStyle = Colors.PALE_DARK_BLUE - ctx.lineWidth = frameOutlineWidth - const minConfigSpaceWidthToRenderOutline = ( - configToPhysical.inverseTransformVector(new Vec2(1, 0)) || new Vec2(0, 0) - ).x - const renderIndirectlySelectedFrameOutlines = (frame: FlamechartFrame, depth = 0) => { - if (!this.props.selectedNode) return - const width = frame.end - frame.start - const y = this.props.renderInverted ? this.configSpaceSize().y - 1 - depth : depth - const configSpaceBounds = new Rect(new Vec2(frame.start, y), new Vec2(width, 1)) - - if (width < minConfigSpaceWidthToRenderOutline) return - if (configSpaceBounds.left() > this.props.configSpaceViewportRect.right()) return - if (configSpaceBounds.right() < this.props.configSpaceViewportRect.left()) return - if (configSpaceBounds.top() > this.props.configSpaceViewportRect.bottom()) return - - if (configSpaceBounds.hasIntersectionWith(this.props.configSpaceViewportRect)) { - const physicalRectBounds = configToPhysical.transformRect(configSpaceBounds) - - if (frame.node.frame === this.props.selectedNode.frame) { - if (frame.node === this.props.selectedNode) { - if (ctx.strokeStyle !== Colors.DARK_BLUE) { - ctx.stroke() - ctx.beginPath() - ctx.strokeStyle = Colors.DARK_BLUE - } - } else { - if (ctx.strokeStyle !== Colors.PALE_DARK_BLUE) { - ctx.stroke() - ctx.beginPath() - ctx.strokeStyle = Colors.PALE_DARK_BLUE - } - } - - // Identify the flamechart frames with a function that matches the - // selected flamechart frame. - ctx.rect( - Math.round(physicalRectBounds.left() + 1 + frameOutlineWidth / 2), - Math.round(physicalRectBounds.top() + 1 + frameOutlineWidth / 2), - Math.round(Math.max(0, physicalRectBounds.width() - 2 - frameOutlineWidth)), - Math.round(Math.max(0, physicalRectBounds.height() - 2 - frameOutlineWidth)), - ) - } - } - - for (let child of frame.children) { - renderIndirectlySelectedFrameOutlines(child, depth + 1) - } - } - - ctx.beginPath() - for (let frame of this.props.flamechart.getLayers()[0] || []) { - renderIndirectlySelectedFrameOutlines(frame) - } - ctx.stroke() - - this.renderTimeIndicators() - } - - private renderTimeIndicators() { - const ctx = this.overlayCtx - if (!ctx) return - - const physicalViewSpaceFrameHeight = - this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT * window.devicePixelRatio - const physicalViewSize = this.physicalViewSize() - const configToPhysical = this.configSpaceToPhysicalViewSpace() - const physicalViewSpaceFontSize = FontSize.LABEL * window.devicePixelRatio - const labelPaddingPx = (physicalViewSpaceFrameHeight - physicalViewSpaceFontSize) / 2 - - const left = this.props.configSpaceViewportRect.left() - const right = this.props.configSpaceViewportRect.right() - // We want about 10 gridlines to be visible, and want the unit to be - // 1eN, 2eN, or 5eN for some N - // Ideally, we want an interval every 100 logical screen pixels - const logicalToConfig = ( - this.configSpaceToPhysicalViewSpace().inverted() || new AffineTransform() - ).times(this.logicalToPhysicalViewSpace()) - const targetInterval = logicalToConfig.transformVector(new Vec2(200, 1)).x - const minInterval = Math.pow(10, Math.floor(Math.log10(targetInterval))) - let interval = minInterval - if (targetInterval / interval > 5) { - interval *= 5 - } else if (targetInterval / interval > 2) { - interval *= 2 - } - - { - const y = this.props.renderInverted ? physicalViewSize.y - physicalViewSpaceFrameHeight : 0 - - ctx.fillStyle = 'rgba(255, 255, 255, 0.8)' - ctx.fillRect(0, y, physicalViewSize.x, physicalViewSpaceFrameHeight) - ctx.fillStyle = Colors.DARK_GRAY - ctx.textBaseline = 'top' - for (let x = Math.ceil(left / interval) * interval; x < right; x += interval) { - // TODO(jlfwong): Ensure that labels do not overlap - const pos = Math.round(configToPhysical.transformPosition(new Vec2(x, 0)).x) - const labelText = this.props.flamechart.formatValue(x) - const textWidth = cachedMeasureTextWidth(ctx, labelText) - ctx.fillText(labelText, pos - textWidth - labelPaddingPx, y + labelPaddingPx) - ctx.fillRect(pos, 0, 1, physicalViewSize.y) - } - } - } - - private updateConfigSpaceViewport() { - if (!this.container) return - const {logicalSpaceViewportSize} = this.props - const bounds = this.container.getBoundingClientRect() - const {width, height} = bounds - - // Still initializing: don't resize yet - if (width < 2 || height < 2) return - - if (this.props.configSpaceViewportRect.isEmpty()) { - const configSpaceViewportHeight = height / this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT - if (this.props.renderInverted) { - this.setConfigSpaceViewportRect( - new Rect( - new Vec2(0, this.configSpaceSize().y - configSpaceViewportHeight + 1), - new Vec2(this.configSpaceSize().x, configSpaceViewportHeight), - ), - ) - } else { - this.setConfigSpaceViewportRect( - new Rect(new Vec2(0, -1), new Vec2(this.configSpaceSize().x, configSpaceViewportHeight)), - ) - } - } else if ( - !logicalSpaceViewportSize.equals(Vec2.zero) && - (logicalSpaceViewportSize.x !== width || logicalSpaceViewportSize.y !== height) - ) { - // Resize the viewport rectangle to match the window size aspect - // ratio. - this.setConfigSpaceViewportRect( - this.props.configSpaceViewportRect.withSize( - this.props.configSpaceViewportRect.size.timesPointwise( - new Vec2(width / logicalSpaceViewportSize.x, height / logicalSpaceViewportSize.y), - ), - ), - ) - } - this.props.setLogicalSpaceViewportBounds(new Vec2(width, height)) - } - - onWindowResize = () => { - this.updateConfigSpaceViewport() - this.onBeforeFrame() - } - - private renderRects() { - if (!this.container) return - this.updateConfigSpaceViewport() - - if (this.props.configSpaceViewportRect.isEmpty()) return - - this.props.canvasContext.renderBehind(this.container, () => { - this.props.flamechartRenderer.render({ - physicalSpaceDstRect: this.physicalBounds(), - configSpaceSrcRect: this.props.configSpaceViewportRect, - renderOutlines: true, - }) - }) - } - - // Inertial scrolling introduces tricky interaction problems. - // Namely, if you start panning, and hit the edge of the scrollable - // area, the browser continues to receive WheelEvents from inertial - // scrolling. If we start zooming by holding Cmd + scrolling, then - // release the Cmd key, this can cause us to interpret the incoming - // inertial scrolling events as panning. To prevent this, we introduce - // a concept of an "Interaction Lock". Once a certain interaction has - // begun, we don't allow the other type of interaction to begin until - // we've received two frames with no inertial wheel events. This - // prevents us from accidentally switching between panning & zooming. - private frameHadWheelEvent = false - private framesWithoutWheelEvents = 0 - private interactionLock: 'pan' | 'zoom' | null = null - private maybeClearInteractionLock = () => { - if (this.interactionLock) { - if (!this.frameHadWheelEvent) { - this.framesWithoutWheelEvents++ - if (this.framesWithoutWheelEvents >= 2) { - this.interactionLock = null - this.framesWithoutWheelEvents = 0 - } - } - this.props.canvasContext.requestFrame() - } - this.frameHadWheelEvent = false - } - - private onBeforeFrame = () => { - this.resizeOverlayCanvasIfNeeded() - this.renderRects() - this.renderOverlays() - this.maybeClearInteractionLock() - } - - private renderCanvas = () => { - this.props.canvasContext.requestFrame() - } - - private pan(logicalViewSpaceDelta: Vec2) { - this.interactionLock = 'pan' - - const physicalDelta = this.logicalToPhysicalViewSpace().transformVector(logicalViewSpaceDelta) - const configDelta = this.configSpaceToPhysicalViewSpace().inverseTransformVector(physicalDelta) - - if (this.hoveredLabel) { - this.props.onNodeHover(null) - } - - if (!configDelta) return - this.props.transformViewport(AffineTransform.withTranslation(configDelta)) - } - - private zoom(logicalViewSpaceCenter: Vec2, multiplier: number) { - this.interactionLock = 'zoom' - - const physicalCenter = this.logicalToPhysicalViewSpace().transformPosition( - logicalViewSpaceCenter, - ) - const configSpaceCenter = this.configSpaceToPhysicalViewSpace().inverseTransformPosition( - physicalCenter, - ) - if (!configSpaceCenter) return - - const zoomTransform = AffineTransform.withTranslation(configSpaceCenter.times(-1)) - .scaledBy(new Vec2(multiplier, 1)) - .translatedBy(configSpaceCenter) - - this.props.transformViewport(zoomTransform) - } - - private lastDragPos: Vec2 | null = null - private mouseDownPos: Vec2 | null = null - private onMouseDown = (ev: MouseEvent) => { - this.mouseDownPos = this.lastDragPos = new Vec2(ev.offsetX, ev.offsetY) - this.updateCursor() - window.addEventListener('mouseup', this.onWindowMouseUp) - } - - private onMouseDrag = (ev: MouseEvent) => { - if (!this.lastDragPos) return - const logicalMousePos = new Vec2(ev.offsetX, ev.offsetY) - this.pan(this.lastDragPos.minus(logicalMousePos)) - this.lastDragPos = logicalMousePos - - // When panning by scrolling, the element under - // the cursor will change, so clear the hovered label. - if (this.hoveredLabel) { - this.props.onNodeHover(null) - } - } - - private onDblClick = (ev: MouseEvent) => { - if (this.hoveredLabel) { - const hoveredBounds = this.hoveredLabel.configSpaceBounds - const viewportRect = new Rect( - hoveredBounds.origin.minus(new Vec2(0, 1)), - hoveredBounds.size.withY(this.props.configSpaceViewportRect.height()), - ) - this.props.setConfigSpaceViewportRect(viewportRect) - } - } - - private onClick = (ev: MouseEvent) => { - const logicalMousePos = new Vec2(ev.offsetX, ev.offsetY) - const mouseDownPos = this.mouseDownPos - this.mouseDownPos = null - - if (mouseDownPos && logicalMousePos.minus(mouseDownPos).length() > 5) { - // If the cursor is more than 5 logical space pixels away from the mouse - // down location, then don't interpret this event as a click. - return - } - - if (this.hoveredLabel) { - this.props.onNodeSelect(this.hoveredLabel.node) - this.renderCanvas() - } else { - this.props.onNodeSelect(null) - } - } - - private updateCursor() { - if (this.lastDragPos) { - document.body.style.cursor = 'grabbing' - document.body.style.cursor = '-webkit-grabbing' - } else { - document.body.style.cursor = 'default' - } - } - - private onWindowMouseUp = (ev: MouseEvent) => { - this.lastDragPos = null - this.updateCursor() - window.removeEventListener('mouseup', this.onWindowMouseUp) - } - - private onMouseMove = (ev: MouseEvent) => { - this.updateCursor() - if (this.lastDragPos) { - ev.preventDefault() - this.onMouseDrag(ev) - return - } - this.hoveredLabel = null - const logicalViewSpaceMouse = new Vec2(ev.offsetX, ev.offsetY) - const physicalViewSpaceMouse = this.logicalToPhysicalViewSpace().transformPosition( - logicalViewSpaceMouse, - ) - const configSpaceMouse = this.configSpaceToPhysicalViewSpace().inverseTransformPosition( - physicalViewSpaceMouse, - ) - - if (!configSpaceMouse) return - - const setHoveredLabel = (frame: FlamechartFrame, depth = 0) => { - const width = frame.end - frame.start - const y = this.props.renderInverted ? this.configSpaceSize().y - 1 - depth : depth - const configSpaceBounds = new Rect(new Vec2(frame.start, y), new Vec2(width, 1)) - if (configSpaceMouse.x < configSpaceBounds.left()) return null - if (configSpaceMouse.x > configSpaceBounds.right()) return null - - if (configSpaceBounds.contains(configSpaceMouse)) { - this.hoveredLabel = { - configSpaceBounds, - node: frame.node, - } - } - - for (let child of frame.children) { - setHoveredLabel(child, depth + 1) - } - } - - for (let frame of this.props.flamechart.getLayers()[0] || []) { - setHoveredLabel(frame) - } - - if (this.hoveredLabel) { - this.props.onNodeHover({node: this.hoveredLabel!.node, event: ev}) - } else { - this.props.onNodeHover(null) - } - - this.renderCanvas() - } - - private onMouseLeave = (ev: MouseEvent) => { - this.hoveredLabel = null - this.props.onNodeHover(null) - this.renderCanvas() - } - - private onWheel = (ev: WheelEvent) => { - ev.preventDefault() - this.frameHadWheelEvent = true - - const isZoom = ev.metaKey || ev.ctrlKey - - let deltaY = ev.deltaY - let deltaX = ev.deltaX - if (ev.deltaMode === ev.DOM_DELTA_LINE) { - deltaY *= this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT - deltaX *= this.LOGICAL_VIEW_SPACE_FRAME_HEIGHT - } - - if (isZoom && this.interactionLock !== 'pan') { - let multiplier = 1 + deltaY / 100 - - // On Chrome & Firefox, pinch-to-zoom maps to - // WheelEvent + Ctrl Key. We'll accelerate it in - // this case, since it feels a bit sluggish otherwise. - if (ev.ctrlKey) { - multiplier = 1 + deltaY / 40 - } - - multiplier = clamp(multiplier, 0.1, 10.0) - - this.zoom(new Vec2(ev.offsetX, ev.offsetY), multiplier) - } else if (this.interactionLock !== 'zoom') { - this.pan(new Vec2(deltaX, deltaY)) - } - - this.renderCanvas() - } - - onWindowKeyPress = (ev: KeyboardEvent) => { - if (!this.container) return - const {width, height} = this.container.getBoundingClientRect() - - if (ev.key === '=' || ev.key === '+') { - this.zoom(new Vec2(width / 2, height / 2), 0.5) - ev.preventDefault() - } else if (ev.key === '-' || ev.key === '_') { - this.zoom(new Vec2(width / 2, height / 2), 2) - ev.preventDefault() - } - - if (ev.ctrlKey || ev.shiftKey || ev.metaKey) return - - if (ev.key === '0') { - this.zoom(new Vec2(width / 2, height / 2), 1e9) - } else if (ev.key === 'ArrowRight' || ev.key === 'd') { - this.pan(new Vec2(100, 0)) - } else if (ev.key === 'ArrowLeft' || ev.key === 'a') { - this.pan(new Vec2(-100, 0)) - } else if (ev.key === 'ArrowUp' || ev.key === 'w') { - this.pan(new Vec2(0, -100)) - } else if (ev.key === 'ArrowDown' || ev.key === 's') { - this.pan(new Vec2(0, 100)) - } else if (ev.key === 'Escape') { - this.props.onNodeSelect(null) - this.renderCanvas() - } - } - - shouldComponentUpdate() { - return false - } - componentWillReceiveProps(nextProps: FlamechartPanZoomViewProps) { - if (this.props.flamechart !== nextProps.flamechart) { - this.hoveredLabel = null - this.renderCanvas() - } else if (this.props.selectedNode !== nextProps.selectedNode) { - this.renderCanvas() - } else if (this.props.configSpaceViewportRect !== nextProps.configSpaceViewportRect) { - this.renderCanvas() - } - } - componentDidMount() { - this.props.canvasContext.addBeforeFrameHandler(this.onBeforeFrame) - window.addEventListener('resize', this.onWindowResize) - window.addEventListener('keydown', this.onWindowKeyPress) - } - componentWillUnmount() { - this.props.canvasContext.removeBeforeFrameHandler(this.onBeforeFrame) - window.removeEventListener('resize', this.onWindowResize) - window.removeEventListener('keydown', this.onWindowKeyPress) - } - - render() { - return ( -
- -
- ) - } -} diff --git a/src/speedscope/views/flamechart-style.ts b/src/speedscope/views/flamechart-style.ts deleted file mode 100644 index 998dee0..0000000 --- a/src/speedscope/views/flamechart-style.ts +++ /dev/null @@ -1,82 +0,0 @@ -import {StyleSheet} from 'aphrodite' -import {FontSize, Colors, Sizes} from './style' - -export const style = StyleSheet.create({ - hoverCount: { - color: Colors.GREEN, - }, - fill: { - width: '100%', - height: '100%', - position: 'absolute', - left: 0, - top: 0, - }, - minimap: { - height: Sizes.MINIMAP_HEIGHT, - borderBottom: `${Sizes.SEPARATOR_HEIGHT}px solid ${Colors.LIGHT_GRAY}`, - }, - panZoomView: { - flex: 1, - }, - - detailView: { - display: 'grid', - height: Sizes.DETAIL_VIEW_HEIGHT, - overflow: 'hidden', - gridTemplateColumns: '120px 120px 1fr', - gridTemplateRows: 'repeat(4, 1fr)', - borderTop: `${Sizes.SEPARATOR_HEIGHT}px solid ${Colors.LIGHT_GRAY}`, - fontSize: FontSize.LABEL, - position: 'absolute', - background: Colors.WHITE, - width: '100vw', - bottom: 0, - }, - stackTraceViewPadding: { - padding: 5, - }, - stackTraceView: { - height: Sizes.DETAIL_VIEW_HEIGHT, - lineHeight: `${FontSize.LABEL + 2}px`, - overflow: 'auto', - }, - stackLine: { - whiteSpace: 'nowrap', - }, - stackFileLine: { - color: Colors.LIGHT_GRAY, - }, - statsTable: { - display: 'grid', - gridTemplateColumns: '1fr 1fr', - gridTemplateRows: `repeat(3, ${FontSize.LABEL + 10}px)`, - gridGap: '1px 1px', - textAlign: 'center', - paddingRight: 1, - }, - statsTableHeader: { - gridColumn: '1 / 3', - }, - statsTableCell: { - position: 'relative', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - }, - thisInstanceCell: { - background: Colors.DARK_BLUE, - color: Colors.WHITE, - }, - allInstancesCell: { - background: Colors.PALE_DARK_BLUE, - color: Colors.WHITE, - }, - barDisplay: { - position: 'absolute', - top: 0, - left: 0, - background: 'rgba(0, 0, 0, 0.2)', - width: '100%', - }, -}) diff --git a/src/speedscope/views/flamechart-view-container.tsx b/src/speedscope/views/flamechart-view-container.tsx deleted file mode 100644 index 899a1aa..0000000 --- a/src/speedscope/views/flamechart-view-container.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import {FlamechartID, FlamechartViewState} from '../store/flamechart-view-state' -import {CanvasContext} from '../gl/canvas-context' -import {Flamechart} from '../lib/flamechart' -import {FlamechartRenderer, FlamechartRendererOptions} from '../gl/flamechart-renderer' -import {Dispatch, createContainer, ActionCreator} from '../lib/typed-redux' -import {Frame, Profile, CallTreeNode} from '../lib/profile' -import {memoizeByShallowEquality} from '../lib/utils' -import {ApplicationState} from '../store' -import {FlamechartView} from './flamechart-view' -import { - getRowAtlas, - createGetColorBucketForFrame, - getCanvasContext, - createGetCSSColorForFrame, - getFrameToColorBucket, -} from '../store/getters' -import {ActiveProfileState} from './application' -import {Vec2, Rect} from '../lib/math' -import {actions} from '../store/actions' - -interface FlamechartSetters { - setLogicalSpaceViewportSize: (logicalSpaceViewportSize: Vec2) => void - setConfigSpaceViewportRect: (configSpaceViewportRect: Rect) => void - setNodeHover: (hover: {node: CallTreeNode; event: MouseEvent} | null) => void - setSelectedNode: (node: CallTreeNode | null) => void -} - -interface WithFlamechartContext { - profileIndex: number - args: { - id: FlamechartID - } & T -} - -export function createFlamechartSetters( - dispatch: Dispatch, - id: FlamechartID, - profileIndex: number, -): FlamechartSetters { - function wrapActionCreator( - actionCreator: ActionCreator>, - map: (t: T) => U, - ): (t: T) => void { - return (t: T) => { - const args = Object.assign({}, map(t), {id}) - dispatch(actionCreator({profileIndex, args})) - } - } - - const { - setHoveredNode, - setLogicalSpaceViewportSize, - setConfigSpaceViewportRect, - setSelectedNode, - } = actions.flamechart - - return { - setNodeHover: wrapActionCreator(setHoveredNode, hover => ({hover})), - setLogicalSpaceViewportSize: wrapActionCreator( - setLogicalSpaceViewportSize, - logicalSpaceViewportSize => ({logicalSpaceViewportSize}), - ), - setConfigSpaceViewportRect: wrapActionCreator( - setConfigSpaceViewportRect, - configSpaceViewportRect => ({configSpaceViewportRect}), - ), - setSelectedNode: wrapActionCreator(setSelectedNode, selectedNode => ({selectedNode})), - } -} - -export type FlamechartViewProps = { - canvasContext: CanvasContext - flamechart: Flamechart - flamechartRenderer: FlamechartRenderer - renderInverted: boolean - getCSSColorForFrame: (frame: Frame) => string -} & FlamechartSetters & - FlamechartViewState - -export const getChronoViewFlamechart = memoizeByShallowEquality( - ({ - profile, - getColorBucketForFrame, - }: { - profile: Profile - getColorBucketForFrame: (frame: Frame) => number - }): Flamechart => { - return new Flamechart({ - getTotalWeight: profile.getTotalWeight.bind(profile), - forEachCall: profile.forEachCall.bind(profile), - formatValue: profile.formatValue.bind(profile), - getColorBucketForFrame, - }) - }, -) - -export const createMemoizedFlamechartRenderer = (options?: FlamechartRendererOptions) => - memoizeByShallowEquality( - ({ - canvasContext, - flamechart, - }: { - canvasContext: CanvasContext - flamechart: Flamechart - }): FlamechartRenderer => { - return new FlamechartRenderer( - canvasContext.gl, - getRowAtlas(canvasContext), - flamechart, - canvasContext.rectangleBatchRenderer, - canvasContext.flamechartColorPassRenderer, - options, - ) - }, - ) - -const getChronoViewFlamechartRenderer = createMemoizedFlamechartRenderer() - -export interface FlamechartViewContainerProps { - activeProfileState: ActiveProfileState - glCanvas: HTMLCanvasElement -} - -export const ChronoFlamechartView = createContainer( - FlamechartView, - (state: ApplicationState, dispatch: Dispatch, ownProps: FlamechartViewContainerProps) => { - const {activeProfileState, glCanvas} = ownProps - const {index, profile, chronoViewState} = activeProfileState - - const canvasContext = getCanvasContext(glCanvas) - const frameToColorBucket = getFrameToColorBucket(profile) - const getColorBucketForFrame = createGetColorBucketForFrame(frameToColorBucket) - const getCSSColorForFrame = createGetCSSColorForFrame(frameToColorBucket) - - const flamechart = getChronoViewFlamechart({profile, getColorBucketForFrame}) - const flamechartRenderer = getChronoViewFlamechartRenderer({ - canvasContext, - flamechart, - }) - - return { - renderInverted: false, - flamechart, - flamechartRenderer, - canvasContext, - getCSSColorForFrame, - ...createFlamechartSetters(dispatch, FlamechartID.CHRONO, index), - ...chronoViewState, - } - }, -) - -export const getLeftHeavyFlamechart = memoizeByShallowEquality( - ({ - profile, - getColorBucketForFrame, - }: { - profile: Profile - getColorBucketForFrame: (frame: Frame) => number - }): Flamechart => { - return new Flamechart({ - getTotalWeight: profile.getTotalNonIdleWeight.bind(profile), - forEachCall: profile.forEachCallGrouped.bind(profile), - formatValue: profile.formatValue.bind(profile), - getColorBucketForFrame, - }) - }, -) - -const getLeftHeavyFlamechartRenderer = createMemoizedFlamechartRenderer() - -export const LeftHeavyFlamechartView = createContainer( - FlamechartView, - (state: ApplicationState, dispatch: Dispatch, ownProps: FlamechartViewContainerProps) => { - const {activeProfileState, glCanvas} = ownProps - - const {index, profile, leftHeavyViewState} = activeProfileState - - const canvasContext = getCanvasContext(glCanvas) - const frameToColorBucket = getFrameToColorBucket(profile) - const getColorBucketForFrame = createGetColorBucketForFrame(frameToColorBucket) - const getCSSColorForFrame = createGetCSSColorForFrame(frameToColorBucket) - - const flamechart = getLeftHeavyFlamechart({ - profile, - getColorBucketForFrame, - }) - const flamechartRenderer = getLeftHeavyFlamechartRenderer({ - canvasContext, - flamechart, - }) - - return { - renderInverted: false, - flamechart, - flamechartRenderer, - canvasContext, - getCSSColorForFrame, - ...createFlamechartSetters(dispatch, FlamechartID.LEFT_HEAVY, index), - ...leftHeavyViewState, - } - }, -) diff --git a/src/speedscope/views/flamechart-view.tsx b/src/speedscope/views/flamechart-view.tsx deleted file mode 100644 index edc265a..0000000 --- a/src/speedscope/views/flamechart-view.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import {h} from 'preact' -import {css} from 'aphrodite' - -import {CallTreeNode} from '../lib/profile' - -import {Rect, Vec2, AffineTransform} from '../lib/math' -import {formatPercent} from '../lib/utils' -import {FlamechartMinimapView} from './flamechart-minimap-view' - -import {style} from './flamechart-style' -import {Sizes, commonStyle} from './style' -import {FlamechartDetailView} from './flamechart-detail-view' -import {FlamechartPanZoomView} from './flamechart-pan-zoom-view' -import {Hovertip} from './hovertip' -import {FlamechartViewProps} from './flamechart-view-container' -import {StatelessComponent} from '../lib/typed-redux' - -export class FlamechartView extends StatelessComponent { - private configSpaceSize() { - return new Vec2( - this.props.flamechart.getTotalWeight(), - this.props.flamechart.getLayers().length, - ) - } - - private setConfigSpaceViewportRect = (viewportRect: Rect): void => { - const configSpaceDetailViewHeight = Sizes.DETAIL_VIEW_HEIGHT / Sizes.FRAME_HEIGHT - - const configSpaceSize = this.configSpaceSize() - - const width = this.props.flamechart.getClampedViewportWidth(viewportRect.size.x) - const size = viewportRect.size.withX(width) - - const origin = Vec2.clamp( - viewportRect.origin, - new Vec2(0, -1), - Vec2.max( - Vec2.zero, - configSpaceSize.minus(size).plus(new Vec2(0, configSpaceDetailViewHeight + 1)), - ), - ) - - this.props.setConfigSpaceViewportRect(new Rect(origin, viewportRect.size.withX(width))) - } - - private setLogicalSpaceViewportSize = (logicalSpaceViewportSize: Vec2): void => { - this.props.setLogicalSpaceViewportSize(logicalSpaceViewportSize) - } - - private transformViewport = (transform: AffineTransform): void => { - const viewportRect = transform.transformRect(this.props.configSpaceViewportRect) - this.setConfigSpaceViewportRect(viewportRect) - } - - private onNodeHover = (hover: {node: CallTreeNode; event: MouseEvent} | null) => { - this.props.setNodeHover(hover) - } - - onNodeClick = (node: CallTreeNode | null) => { - this.props.setSelectedNode(node) - } - - formatValue(weight: number) { - const totalWeight = this.props.flamechart.getTotalWeight() - const percent = 100 * weight / totalWeight - const formattedPercent = formatPercent(percent) - return `${this.props.flamechart.formatValue(weight)} (${formattedPercent})` - } - - renderTooltip() { - if (!this.container) return null - - const {hover} = this.props - if (!hover) return null - const {width, height, left, top} = this.container.getBoundingClientRect() - const offset = new Vec2(hover.event.clientX - left, hover.event.clientY - top) - - return ( - - - {this.formatValue(hover.node.getTotalWeight())} - {' '} - {hover.node.frame.name} - - ) - } - - container: HTMLDivElement | null = null - containerRef = (container?: Element) => { - this.container = (container as HTMLDivElement) || null - } - - render() { - return ( -
- - - {this.renderTooltip()} - {this.props.selectedNode && ( - - )} -
- ) - } -} diff --git a/src/speedscope/views/flamechart-wrapper.tsx b/src/speedscope/views/flamechart-wrapper.tsx deleted file mode 100644 index 9e27aa4..0000000 --- a/src/speedscope/views/flamechart-wrapper.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import {CallTreeNode} from '../lib/profile' -import {StyleSheet, css} from 'aphrodite' -import {h} from 'preact' -import {commonStyle, Colors} from './style' -import {Rect, AffineTransform, Vec2} from '../lib/math' -import {FlamechartPanZoomView} from './flamechart-pan-zoom-view' -import {noop, formatPercent} from '../lib/utils' -import {Hovertip} from './hovertip' -import {FlamechartViewProps} from './flamechart-view-container' -import {StatelessComponent} from '../lib/typed-redux' - -export class FlamechartWrapper extends StatelessComponent { - private clampViewportToFlamegraph(viewportRect: Rect) { - const {flamechart, renderInverted} = this.props - const configSpaceSize = new Vec2(flamechart.getTotalWeight(), flamechart.getLayers().length) - const width = this.props.flamechart.getClampedViewportWidth(viewportRect.size.x) - const size = viewportRect.size.withX(width) - const origin = Vec2.clamp( - viewportRect.origin, - new Vec2(0, renderInverted ? 0 : -1), - Vec2.max(Vec2.zero, configSpaceSize.minus(size).plus(new Vec2(0, 1))), - ) - return new Rect(origin, viewportRect.size.withX(width)) - } - private setConfigSpaceViewportRect = (configSpaceViewportRect: Rect) => { - this.props.setConfigSpaceViewportRect(this.clampViewportToFlamegraph(configSpaceViewportRect)) - } - private setLogicalSpaceViewportSize = (logicalSpaceViewportSize: Vec2): void => { - this.props.setLogicalSpaceViewportSize(logicalSpaceViewportSize) - } - - private transformViewport = (transform: AffineTransform) => { - this.setConfigSpaceViewportRect(transform.transformRect(this.props.configSpaceViewportRect)) - } - private formatValue(weight: number) { - const totalWeight = this.props.flamechart.getTotalWeight() - const percent = 100 * weight / totalWeight - const formattedPercent = formatPercent(percent) - return `${this.props.flamechart.formatValue(weight)} (${formattedPercent})` - } - private renderTooltip() { - if (!this.container) return null - const {hover} = this.props - if (!hover) return null - const {width, height, left, top} = this.container.getBoundingClientRect() - const offset = new Vec2(hover.event.clientX - left, hover.event.clientY - top) - return ( - - - {this.formatValue(hover.node.getTotalWeight())} - {' '} - {hover.node.frame.name} - - ) - } - container: HTMLDivElement | null = null - containerRef = (container?: Element) => { - this.container = (container as HTMLDivElement) || null - } - private setNodeHover = ( - hover: { - node: CallTreeNode - event: MouseEvent - } | null, - ) => { - this.props.setNodeHover(hover) - } - render() { - return ( -
- - {this.renderTooltip()} -
- ) - } -} - -export const style = StyleSheet.create({ - hoverCount: { - color: Colors.GREEN, - }, -}) diff --git a/src/speedscope/views/hovertip.tsx b/src/speedscope/views/hovertip.tsx deleted file mode 100644 index 290e305..0000000 --- a/src/speedscope/views/hovertip.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import {Vec2} from '../lib/math' -import {Sizes, Colors, FontSize, FontFamily, ZIndex} from './style' -import {css, StyleSheet} from 'aphrodite' -import {h, Component} from 'preact' - -interface HovertipProps { - containerSize: Vec2 - offset: Vec2 -} - -export class Hovertip extends Component { - render() { - const {containerSize, offset} = this.props - const width = containerSize.x - const height = containerSize.y - - const positionStyle: { - left?: number - right?: number - top?: number - bottom?: number - } = {} - - const OFFSET_FROM_MOUSE = 7 - if (offset.x + OFFSET_FROM_MOUSE + Sizes.TOOLTIP_WIDTH_MAX < width) { - positionStyle.left = offset.x + OFFSET_FROM_MOUSE - } else { - positionStyle.right = width - offset.x + 1 - } - - if (offset.y + OFFSET_FROM_MOUSE + Sizes.TOOLTIP_HEIGHT_MAX < height) { - positionStyle.top = offset.y + OFFSET_FROM_MOUSE - } else { - positionStyle.bottom = height - offset.y + 1 - } - - return ( -
-
{this.props.children}
-
- ) - } -} - -const HOVERTIP_PADDING = 2 - -const style = StyleSheet.create({ - hoverTip: { - position: 'absolute', - background: Colors.WHITE, - border: '1px solid black', - maxWidth: Sizes.TOOLTIP_WIDTH_MAX, - paddingTop: HOVERTIP_PADDING, - paddingBottom: HOVERTIP_PADDING, - pointerEvents: 'none', - userSelect: 'none', - fontSize: FontSize.LABEL, - fontFamily: FontFamily.MONOSPACE, - zIndex: ZIndex.HOVERTIP, - }, - hoverTipRow: { - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - overflowX: 'hidden', - paddingLeft: HOVERTIP_PADDING, - paddingRight: HOVERTIP_PADDING, - maxWidth: Sizes.TOOLTIP_WIDTH_MAX, - }, -}) diff --git a/src/speedscope/views/inverted-caller-flamegraph-view.ts b/src/speedscope/views/inverted-caller-flamegraph-view.ts deleted file mode 100644 index 7947b81..0000000 --- a/src/speedscope/views/inverted-caller-flamegraph-view.ts +++ /dev/null @@ -1,96 +0,0 @@ -import {memoizeByShallowEquality} from '../lib/utils' -import {Profile, Frame} from '../lib/profile' -import {Flamechart} from '../lib/flamechart' -import { - createMemoizedFlamechartRenderer, - FlamechartViewContainerProps, - createFlamechartSetters, -} from './flamechart-view-container' -import {createContainer, Dispatch} from '../lib/typed-redux' -import {ApplicationState} from '../store' -import { - getCanvasContext, - createGetColorBucketForFrame, - createGetCSSColorForFrame, - getProfileWithRecursionFlattened, - getFrameToColorBucket, -} from '../store/getters' -import {FlamechartID} from '../store/flamechart-view-state' -import {FlamechartWrapper} from './flamechart-wrapper' - -const getInvertedCallerProfile = memoizeByShallowEquality( - ({ - profile, - frame, - flattenRecursion, - }: { - profile: Profile - frame: Frame - flattenRecursion: boolean - }): Profile => { - let p = profile.getInvertedProfileForCallersOf(frame) - return flattenRecursion ? p.getProfileWithRecursionFlattened() : p - }, -) - -const getInvertedCallerFlamegraph = memoizeByShallowEquality( - ({ - invertedCallerProfile, - getColorBucketForFrame, - }: { - invertedCallerProfile: Profile - getColorBucketForFrame: (frame: Frame) => number - }): Flamechart => { - return new Flamechart({ - getTotalWeight: invertedCallerProfile.getTotalNonIdleWeight.bind(invertedCallerProfile), - forEachCall: invertedCallerProfile.forEachCallGrouped.bind(invertedCallerProfile), - formatValue: invertedCallerProfile.formatValue.bind(invertedCallerProfile), - getColorBucketForFrame, - }) - }, -) - -const getInvertedCallerFlamegraphRenderer = createMemoizedFlamechartRenderer({inverted: true}) - -export const InvertedCallerFlamegraphView = createContainer( - FlamechartWrapper, - (state: ApplicationState, dispatch: Dispatch, ownProps: FlamechartViewContainerProps) => { - const {activeProfileState} = ownProps - let {profile, sandwichViewState, index} = activeProfileState - let {flattenRecursion, glCanvas} = state - if (!profile) throw new Error('profile missing') - if (!glCanvas) throw new Error('glCanvas missing') - const {callerCallee} = sandwichViewState - if (!callerCallee) throw new Error('callerCallee missing') - const {selectedFrame} = callerCallee - - profile = flattenRecursion ? getProfileWithRecursionFlattened(profile) : profile - - const frameToColorBucket = getFrameToColorBucket(profile) - const getColorBucketForFrame = createGetColorBucketForFrame(frameToColorBucket) - const getCSSColorForFrame = createGetCSSColorForFrame(frameToColorBucket) - const canvasContext = getCanvasContext(glCanvas) - - const flamechart = getInvertedCallerFlamegraph({ - invertedCallerProfile: getInvertedCallerProfile({ - profile, - frame: selectedFrame, - flattenRecursion, - }), - getColorBucketForFrame, - }) - const flamechartRenderer = getInvertedCallerFlamegraphRenderer({canvasContext, flamechart}) - - return { - renderInverted: true, - flamechart, - flamechartRenderer, - canvasContext, - getCSSColorForFrame, - ...createFlamechartSetters(dispatch, FlamechartID.SANDWICH_INVERTED_CALLERS, index), - // This overrides the setSelectedNode specified in createFlamechartSettesr - setSelectedNode: () => {}, - ...callerCallee.invertedCallerFlamegraph, - } - }, -) diff --git a/src/speedscope/views/profile-table-view.tsx b/src/speedscope/views/profile-table-view.tsx deleted file mode 100644 index e292f91..0000000 --- a/src/speedscope/views/profile-table-view.tsx +++ /dev/null @@ -1,366 +0,0 @@ -import {h, Component} from 'preact' -import {StyleSheet, css} from 'aphrodite' -import {Profile, Frame} from '../lib/profile' -import {sortBy, formatPercent} from '../lib/utils' -import {FontSize, Colors, Sizes, commonStyle} from './style' -import {ColorChit} from './color-chit' -import {ScrollableListView, ListItem} from './scrollable-list-view' -import {actions} from '../store/actions' -import {Dispatch, createContainer} from '../lib/typed-redux' -import {ApplicationState} from '../store' -import {createGetCSSColorForFrame, getFrameToColorBucket} from '../store/getters' -import {ActiveProfileState} from './application' - -export enum SortField { - SYMBOL_NAME, - SELF, - TOTAL, -} - -export enum SortDirection { - ASCENDING, - DESCENDING, -} - -export interface SortMethod { - field: SortField - direction: SortDirection -} - -interface HBarProps { - perc: number -} - -class HBarDisplay extends Component { - render() { - return ( -
-
-
- ) - } -} - -interface SortIconProps { - activeDirection: SortDirection | null -} - -class SortIcon extends Component { - render() { - const {activeDirection} = this.props - const upFill = activeDirection === SortDirection.ASCENDING ? Colors.GRAY : Colors.LIGHT_GRAY - const downFill = activeDirection === SortDirection.DESCENDING ? Colors.GRAY : Colors.LIGHT_GRAY - - return ( - - - - - ) - } -} - -interface ProfileTableViewProps { - profile: Profile - profileIndex: number - selectedFrame: Frame | null - getCSSColorForFrame: (frame: Frame) => string - sortMethod: SortMethod - setSelectedFrame: (frame: Frame | null) => void - setSortMethod: (sortMethod: SortMethod) => void -} - -export class ProfileTableView extends Component { - renderRow(frame: Frame, index: number) { - const {profile, selectedFrame} = this.props - - const totalWeight = frame.getTotalWeight() - const selfWeight = frame.getSelfWeight() - const totalPerc = 100.0 * totalWeight / profile.getTotalNonIdleWeight() - const selfPerc = 100.0 * selfWeight / profile.getTotalNonIdleWeight() - - const selected = frame === selectedFrame - - // We intentionally use index rather than frame.key here as the tr key - // in order to re-use rows when sorting rather than creating all new elements. - return ( - - - {profile.formatValue(totalWeight)} ({formatPercent(totalPerc)}) - - - - {profile.formatValue(selfWeight)} ({formatPercent(selfPerc)}) - - - - - {frame.name} - - - ) - } - - onSortClick = (field: SortField, ev: MouseEvent) => { - ev.preventDefault() - - const {sortMethod} = this.props - - if (sortMethod.field == field) { - // Toggle - this.props.setSortMethod({ - field, - direction: - sortMethod.direction === SortDirection.ASCENDING - ? SortDirection.DESCENDING - : SortDirection.ASCENDING, - }) - } else { - // Set a sane default - switch (field) { - case SortField.SYMBOL_NAME: { - this.props.setSortMethod({field, direction: SortDirection.ASCENDING}) - break - } - case SortField.SELF: { - this.props.setSortMethod({field, direction: SortDirection.DESCENDING}) - break - } - case SortField.TOTAL: { - this.props.setSortMethod({field, direction: SortDirection.DESCENDING}) - break - } - } - } - } - - private getFrameList = (): Frame[] => { - const {profile, sortMethod} = this.props - - const frameList: Frame[] = [] - - profile.forEachFrame(f => frameList.push(f)) - - // TODO(jlfwong): This is pretty inefficient to do this on every render, but doesn't - // seem to be a bottleneck, so we'll leave it alone. - switch (sortMethod.field) { - case SortField.SYMBOL_NAME: { - sortBy(frameList, f => f.name.toLowerCase()) - break - } - case SortField.SELF: { - sortBy(frameList, f => f.getSelfWeight()) - break - } - case SortField.TOTAL: { - sortBy(frameList, f => f.getTotalWeight()) - break - } - } - if (sortMethod.direction === SortDirection.DESCENDING) { - frameList.reverse() - } - - return frameList - } - - private listView: ScrollableListView | null = null - private listViewRef = (listView: ScrollableListView | null) => { - if (listView === this.listView) return - this.listView = listView - - const {selectedFrame} = this.props - if (!selectedFrame || !listView) return - const index = this.getFrameList().indexOf(selectedFrame) - if (index === -1) return - listView.scrollIndexIntoView(index) - } - - render() { - const {sortMethod} = this.props - - const frameList = this.getFrameList() - - const renderItems = (firstIndex: number, lastIndex: number) => { - const rows: JSX.Element[] = [] - - for (let i = firstIndex; i <= lastIndex; i++) { - rows.push(this.renderRow(frameList[i], i)) - } - - return {rows}
- } - - const listItems: ListItem[] = frameList.map(f => ({size: Sizes.FRAME_HEIGHT})) - - return ( -
- - - - - - - - -
this.onSortClick(SortField.TOTAL, ev)} - > - - Total - this.onSortClick(SortField.SELF, ev)} - > - - Self - this.onSortClick(SortField.SYMBOL_NAME, ev)} - > - - Symbol Name -
- -
- ) - } -} - -const style = StyleSheet.create({ - profileTableView: { - background: Colors.WHITE, - height: '100%', - }, - scrollView: { - overflowY: 'auto', - overflowX: 'hidden', - }, - tableView: { - width: '100%', - fontSize: FontSize.LABEL, - background: Colors.WHITE, - }, - tableHeader: { - borderBottom: `2px solid ${Colors.LIGHT_GRAY}`, - textAlign: 'left', - color: Colors.GRAY, - userSelect: 'none', - }, - sortIcon: { - position: 'relative', - top: 1, - marginRight: Sizes.FRAME_HEIGHT / 4, - }, - tableRow: { - height: Sizes.FRAME_HEIGHT, - }, - tableRowEven: { - background: Colors.OFF_WHITE, - }, - tableRowSelected: { - background: Colors.DARK_BLUE, - color: Colors.WHITE, - }, - numericCell: { - textOverflow: 'ellipsis', - overflow: 'hidden', - whiteSpace: 'nowrap', - position: 'relative', - textAlign: 'right', - paddingRight: Sizes.FRAME_HEIGHT, - width: 6 * Sizes.FRAME_HEIGHT, - minWidth: 6 * Sizes.FRAME_HEIGHT, - }, - textCell: { - textOverflow: 'ellipsis', - overflow: 'hidden', - whiteSpace: 'nowrap', - width: '100%', - maxWidth: 0, - }, - hBarDisplay: { - position: 'absolute', - background: Colors.TRANSPARENT_GREEN, - bottom: 2, - height: 2, - width: `calc(100% - ${2 * Sizes.FRAME_HEIGHT}px)`, - right: Sizes.FRAME_HEIGHT, - }, - hBarDisplayFilled: { - height: '100%', - position: 'absolute', - background: Colors.GREEN, - right: 0, - }, -}) - -interface ProfileTableViewContainerProps { - activeProfileState: ActiveProfileState -} - -export const ProfileTableViewContainer = createContainer( - ProfileTableView, - (state: ApplicationState, dispatch: Dispatch, ownProps: ProfileTableViewContainerProps) => { - const {activeProfileState} = ownProps - const {profile, sandwichViewState, index} = activeProfileState - if (!profile) throw new Error('profile missing') - const {tableSortMethod} = state - const {callerCallee} = sandwichViewState - const selectedFrame = callerCallee ? callerCallee.selectedFrame : null - const frameToColorBucket = getFrameToColorBucket(profile) - const getCSSColorForFrame = createGetCSSColorForFrame(frameToColorBucket) - - const setSelectedFrame = (selectedFrame: Frame | null) => { - dispatch(actions.sandwichView.setSelectedFrame({profileIndex: index, args: selectedFrame})) - } - - const setSortMethod = (sortMethod: SortMethod) => { - dispatch(actions.sandwichView.setTableSortMethod(sortMethod)) - } - - return { - profile, - profileIndex: activeProfileState.index, - selectedFrame, - getCSSColorForFrame, - sortMethod: tableSortMethod, - setSelectedFrame, - setSortMethod, - } - }, -) diff --git a/src/speedscope/views/sandwich-view.tsx b/src/speedscope/views/sandwich-view.tsx deleted file mode 100644 index 06cbd63..0000000 --- a/src/speedscope/views/sandwich-view.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import {Frame} from '../lib/profile' -import {StyleSheet, css} from 'aphrodite' -import {ProfileTableViewContainer} from './profile-table-view' -import {h} from 'preact' -import {commonStyle, Sizes, Colors, FontSize} from './style' -import {actions} from '../store/actions' -import {createContainer, Dispatch, StatelessComponent} from '../lib/typed-redux' -import {ApplicationState} from '../store' -import {InvertedCallerFlamegraphView} from './inverted-caller-flamegraph-view' -import {CalleeFlamegraphView} from './callee-flamegraph-view' -import {ActiveProfileState} from './application' - -interface SandwichViewProps { - selectedFrame: Frame | null - profileIndex: number - activeProfileState: ActiveProfileState - setSelectedFrame: (selectedFrame: Frame | null) => void - glCanvas: HTMLCanvasElement -} - -class SandwichView extends StatelessComponent { - private setSelectedFrame = (selectedFrame: Frame | null) => { - this.props.setSelectedFrame(selectedFrame) - } - - onWindowKeyPress = (ev: KeyboardEvent) => { - if (ev.key === 'Escape') { - this.setSelectedFrame(null) - } - } - - componentDidMount() { - window.addEventListener('keydown', this.onWindowKeyPress) - } - componentWillUnmount() { - window.removeEventListener('keydown', this.onWindowKeyPress) - } - - render() { - const {selectedFrame} = this.props - let flamegraphViews: JSX.Element | null = null - - if (selectedFrame) { - flamegraphViews = ( -
-
-
-
Callers
-
- -
-
-
-
-
Callees
-
- -
-
- ) - } - - return ( -
-
- -
- {flamegraphViews} -
- ) - } -} - -const style = StyleSheet.create({ - tableView: { - flex: 1, - }, - panZoomViewWraper: { - flex: 1, - }, - flamechartLabelParent: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'flex-end', - alignItems: 'flex-start', - fontSize: FontSize.TITLE, - width: FontSize.TITLE * 1.2, - borderRight: `1px solid ${Colors.LIGHT_GRAY}`, - }, - flamechartLabelParentBottom: { - justifyContent: 'flex-start', - }, - flamechartLabel: { - transform: 'rotate(-90deg)', - transformOrigin: '50% 50% 0', - width: FontSize.TITLE * 1.2, - flexShrink: 1, - }, - flamechartLabelBottom: { - transform: 'rotate(-90deg)', - display: 'flex', - justifyContent: 'flex-end', - }, - callersAndCallees: { - flex: 1, - borderLeft: `${Sizes.SEPARATOR_HEIGHT}px solid ${Colors.LIGHT_GRAY}`, - }, - divider: { - height: 2, - background: Colors.LIGHT_GRAY, - }, -}) - -interface SandwichViewContainerProps { - activeProfileState: ActiveProfileState - glCanvas: HTMLCanvasElement -} - -export const SandwichViewContainer = createContainer( - SandwichView, - (state: ApplicationState, dispatch: Dispatch, ownProps: SandwichViewContainerProps) => { - const {activeProfileState, glCanvas} = ownProps - const {sandwichViewState, index} = activeProfileState - const {callerCallee} = sandwichViewState - - const setSelectedFrame = (selectedFrame: Frame | null) => { - dispatch( - actions.sandwichView.setSelectedFrame({ - profileIndex: index, - args: selectedFrame, - }), - ) - } - - return { - activeProfileState: activeProfileState, - glCanvas, - setSelectedFrame, - selectedFrame: callerCallee ? callerCallee.selectedFrame : null, - profileIndex: index, - } - }, -) diff --git a/src/speedscope/views/scrollable-list-view.tsx b/src/speedscope/views/scrollable-list-view.tsx deleted file mode 100644 index c608dd8..0000000 --- a/src/speedscope/views/scrollable-list-view.tsx +++ /dev/null @@ -1,138 +0,0 @@ -// A simple implementation of an efficient scrolling list view which -// renders only items within the viewport + a couple extra items. - -import {h, Component} from 'preact' - -export interface ListItem { - size: number -} - -interface ScrollableListViewProps { - items: ListItem[] - axis: 'x' | 'y' - renderItems: (firstVisibleIndex: number, lastVisibleIndex: number) => JSX.Element | JSX.Element[] - className?: string -} - -interface ScrollableListViewState { - firstVisibleIndex: number | null - lastVisibleIndex: number | null - invisiblePrefixSize: number | null - viewportSize: number | null - cachedTotalSize: number -} - -export class ScrollableListView extends Component< - ScrollableListViewProps, - ScrollableListViewState -> { - constructor(props: ScrollableListViewProps) { - super(props) - this.state = { - firstVisibleIndex: null, - lastVisibleIndex: null, - invisiblePrefixSize: null, - viewportSize: null, - cachedTotalSize: props.items.reduce((a, b) => a + b.size, 0), - } - } - - private viewport: HTMLDivElement | null = null - private viewportRef = (viewport?: Element) => { - this.viewport = (viewport as HTMLDivElement) || null - } - - private recomputeVisibleIndices(props: ScrollableListViewProps) { - if (!this.viewport) return - const {items} = props - - const viewportSize = this.viewport.getBoundingClientRect().height - - // We render items up to a quarter viewport height outside of the - // viewport both above and below to prevent flickering. - const minY = this.viewport.scrollTop - viewportSize / 4 - const maxY = this.viewport.scrollTop + viewportSize + viewportSize / 4 - - let total = 0 - let invisiblePrefixSize = 0 - - let i = 0 - for (; i < items.length; i++) { - const item = items[i] - invisiblePrefixSize = total - total += item.size - if (total >= minY) { - break - } - } - - const firstVisibleIndex = i - - for (; i < items.length; i++) { - const item = items[i] - total += item.size - if (total >= maxY) { - break - } - } - - const lastVisibleIndex = Math.min(i, items.length - 1) - this.setState({invisiblePrefixSize, firstVisibleIndex, lastVisibleIndex}) - } - - private pendingScroll = 0 - public scrollIndexIntoView(index: number) { - this.pendingScroll = this.props.items.reduce((sum, cur, i) => { - if (i >= index) return sum - return sum + cur.size - }, 0) - } - private applyPendingScroll() { - if (!this.viewport) return - - const leftOrTop = this.props.axis === 'y' ? 'top' : 'left' - this.viewport.scrollTo({ - [leftOrTop]: this.pendingScroll, - }) - } - - componentWillReceiveProps(nextProps: ScrollableListViewProps) { - if (this.props.items !== nextProps.items) { - this.recomputeVisibleIndices(nextProps) - } - } - - componentDidMount() { - this.applyPendingScroll() - this.recomputeVisibleIndices(this.props) - window.addEventListener('resize', this.onWindowResize) - } - - componentWillUnmount() { - window.removeEventListener('resize', this.onWindowResize) - } - - onWindowResize = () => { - this.recomputeVisibleIndices(this.props) - } - - onViewportScroll = (ev: UIEvent) => { - this.recomputeVisibleIndices(this.props) - } - - render() { - const {cachedTotalSize, firstVisibleIndex, lastVisibleIndex, invisiblePrefixSize} = this.state - - return ( -
-
-
- {firstVisibleIndex != null && - lastVisibleIndex != null && - this.props.renderItems(firstVisibleIndex, lastVisibleIndex)} -
-
-
- ) - } -} diff --git a/src/speedscope/views/style.ts b/src/speedscope/views/style.ts deleted file mode 100644 index b2af356..0000000 --- a/src/speedscope/views/style.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {StyleSheet} from 'aphrodite' - -export enum FontFamily { - MONOSPACE = '"Source Code Pro", Courier, monospace', -} - -export enum FontSize { - LABEL = 10, - TITLE = 12, - BIG_BUTTON = 36, -} - -export enum Colors { - WHITE = '#FFFFFF', - OFF_WHITE = '#F6F6F6', - LIGHT_GRAY = '#BDBDBD', - GRAY = '#666666', - DARK_GRAY = '#222222', - BLACK = '#000000', - BRIGHT_BLUE = '#56CCF2', - DARK_BLUE = '#2F80ED', - PALE_DARK_BLUE = '#8EB7ED', - GREEN = '#6FCF97', - TRANSPARENT_GREEN = 'rgba(111, 207, 151, 0.2)', -} - -export enum Sizes { - MINIMAP_HEIGHT = 100, - DETAIL_VIEW_HEIGHT = 150, - TOOLTIP_WIDTH_MAX = 300, - TOOLTIP_HEIGHT_MAX = 80, - SEPARATOR_HEIGHT = 2, - FRAME_HEIGHT = 20, - TOOLBAR_HEIGHT = 20, - TOOLBAR_TAB_HEIGHT = TOOLBAR_HEIGHT - SEPARATOR_HEIGHT, -} - -export enum Duration { - HOVER_CHANGE = '0.07s', -} - -export enum ZIndex { - HOVERTIP = 1, -} - -export const commonStyle = StyleSheet.create({ - fillY: { - height: '100%', - }, - fillX: { - width: '100%', - }, - hbox: { - display: 'flex', - flexDirection: 'row', - position: 'relative', - overflow: 'hidden', - }, - vbox: { - display: 'flex', - flexDirection: 'column', - position: 'relative', - overflow: 'hidden', - }, -}) diff --git a/src/time-axis-controller.ts b/src/time-axis-controller.ts index e2534a9..5e66a18 100644 --- a/src/time-axis-controller.ts +++ b/src/time-axis-controller.ts @@ -1,4 +1,4 @@ -import { TimeAxis } from "./time-axis"; +import { TimeAxisScale } from "./time-axis-scale"; import { TimeGraphRange } from "./time-graph"; export class TimeAxisController { @@ -6,7 +6,7 @@ export class TimeAxisController { protected totalRange: TimeGraphRange; protected visibleRange: TimeGraphRange; - constructor(protected timeAxis: TimeAxis) { + constructor(protected timeAxis: TimeAxisScale) { } } \ No newline at end of file diff --git a/src/time-axis-scale.ts b/src/time-axis-scale.ts new file mode 100644 index 0000000..dc0e97a --- /dev/null +++ b/src/time-axis-scale.ts @@ -0,0 +1,92 @@ +import { TimeGraphComponent, TimeGraphRect } from "./time-graph-component"; +import { TimeGraphApplication } from "./time-graph"; +import { TimeGraphController } from "./time-graph-controller"; + +export class TimeAxisScale extends TimeGraphComponent { + + protected mouseStartY: number; + protected mouseStartX: number; + protected graphWidthStart: number; + + protected mouseIsDown: boolean = false; + + constructor(id: string, ctx: TimeGraphApplication, timeGraphController: TimeGraphController) { + super(id, ctx, timeGraphController); + this.addEvent('mousedown', event => { + this.mouseStartY = event.data.global.y; + this.mouseStartX = event.data.global.x; + this.graphWidthStart = this.controller.graphWidth; + this.mouseIsDown = true; + }); + + this.addEvent('mousemove', event => { + if (this.mouseIsDown) { + + const deltaY = event.data.global.y - this.mouseStartY; + const zoomMulti = (deltaY / 100); + this.zoom(zoomMulti); + + const deltaMouseX = event.data.global.x - this.mouseStartX; + this.setXOffset(deltaMouseX); + } + }); + const mouseUp = (event: PIXI.interaction.InteractionEvent) => { + this.mouseIsDown = false; + this.setZoomAndPosition(); + } + this.addEvent('mouseup', mouseUp); + this.addEvent('mouseupoutside', mouseUp); + this.app.view.addEventListener('mousewheel', (ev: WheelEvent) => { + this.mouseStartX = ev.x; + this.graphWidthStart = this.controller.graphWidth; + this.zoom((ev.deltaY / 100) * (-1)); + this.setXOffset(); + this.setZoomAndPosition(); + return false; + }); + } + + setZoomAndPosition() { + this.controller.oldZoomFactor = this.controller.zoomFactor; + this.controller.oldPositionOffset = this.controller.positionOffset; + } + + setXOffset(deltaMouseX: number = 0) { + const c = this.controller; + const normZoomFactor = c.graphWidth / this.graphWidthStart; + const graphMouseStartX = (c.oldPositionOffset.x * (-1)) + this.mouseStartX; + const shiftedMouseX = normZoomFactor * graphMouseStartX; + const xOffset = c.oldPositionOffset.x + graphMouseStartX - shiftedMouseX + deltaMouseX; + + const minOffset = c.canvasWidth - c.graphWidth; + let finalXOffset: number; + if (xOffset > 0) { + finalXOffset = 0; + } else if (xOffset < minOffset) { + finalXOffset = minOffset; + } else { + finalXOffset = xOffset; + } + c.positionOffset = { x: finalXOffset, y: 0 }; + } + + zoom(zoomMulti: number) { + const c = this.controller; + const newZoomFactor = c.oldZoomFactor + zoomMulti; + if (newZoomFactor > c.initialZoomFactor) { + c.zoomFactor = newZoomFactor; + } + } + + render() { + this.options = { + color: 0xFF0000, + h: 30, + w: 6000, + x: 0, + y: 0 + }; + this.rect(this.options as TimeGraphRect); + } + +} \ No newline at end of file diff --git a/src/time-axis.ts b/src/time-axis.ts index 928a6df..afed534 100644 --- a/src/time-axis.ts +++ b/src/time-axis.ts @@ -1,15 +1,31 @@ -import { TimeGraphComponent } from "./time-graph-component"; - -export class TimeAxis extends TimeGraphComponent { - - render() { - this.rect({ - color: 'rgb(200,200,200)', - h: this._ctx.canvas.height, - w: 6000, // TODO magic number width of the time-graph - x: 0, - y: 0 - }); +import { TimeGraphContextOptions, TimeGraphContainer } from "./time-graph"; + +export class TimeAxis { + + protected application: PIXI.Application; + + constructor(config: TimeGraphContextOptions) { + const canvas: HTMLCanvasElement = document.createElement('canvas'); + canvas.width = config.width; + canvas.height = config.height; + canvas.id = config.id; + canvas.className = 'time-graph-canvas'; + this.application = new PIXI.Application({ + width: config.width, + height: config.height, + view: canvas, + backgroundColor: config.backgroundColor || 0x000000 + }); + + } + + getViewElement(): HTMLCanvasElement { + return this.application.view; + } + + getStage(): TimeGraphContainer { + return this.application.stage; } + } \ No newline at end of file diff --git a/src/time-graph-component.ts b/src/time-graph-component.ts index e5b9456..166e070 100644 --- a/src/time-graph-component.ts +++ b/src/time-graph-component.ts @@ -1,12 +1,23 @@ -export interface TimeGraphRect { - color?: string +import { TimeGraphContainer, TimeGraphApplication } from "./time-graph"; +import { TimeGraphController } from "./time-graph-controller"; + +export type TimeGraphInteractionType = 'mouseover' | 'mouseout' | 'mousemove' | 'mousedown' | 'mouseup' | 'mouseupoutside' | 'click'; +export type TimeGraphInteractionHandler = (event: PIXI.interaction.InteractionEvent) => void; +export type TimeGraphInteractionHandlerMap = Map + +export interface TimeGraphDisplayObject { + color?: number + opacity?: number +} + +export interface TimeGraphRect extends TimeGraphDisplayObject { x: number y: number w: number h: number } -export interface TimeGraphLine { +export interface TimeGraphLine extends TimeGraphDisplayObject { start: { x: number y: number @@ -16,44 +27,65 @@ export interface TimeGraphLine { y: number } width?: number - color?: string } export abstract class TimeGraphComponent { - protected _ctx: CanvasRenderingContext2D; - private _id: string; + protected _ctx: TimeGraphContainer; + protected _id: string; + protected _controller: TimeGraphController; + protected displayObject: PIXI.Graphics; + protected options: TimeGraphDisplayObject; - constructor(id: string) { + constructor(id: string, protected app: TimeGraphApplication, timeGraphController: TimeGraphController) { this._id = id; + this._ctx = app.stage; + this._controller = timeGraphController; + this.displayObject = new PIXI.Graphics(); + this._ctx.addChild(this.displayObject); } get id(): string { return this._id; } - set context(ctx: CanvasRenderingContext2D) { - this._ctx = ctx; + get context(): TimeGraphContainer { + return this._ctx; } - get context(): CanvasRenderingContext2D { - return this._ctx; + get controller(): TimeGraphController { + return this._controller; } abstract render(): void; + clear(){ + this.displayObject.clear(); + } + rect(opts: TimeGraphRect) { - const {x,y,w,h, color} = opts; - this._ctx.fillStyle = color || 'rgb(0,0,0)'; - this._ctx.fillRect(x,y,w,h); - } - - line(opts: TimeGraphLine){ - this._ctx.beginPath(); - this._ctx.moveTo(opts.start.x, opts.start.y); - this._ctx.lineTo(opts.end.x, opts.end.y); - this._ctx.lineWidth = opts.width || 1; - this._ctx.strokeStyle = opts.color || 'rgb(0,0,0)'; - this._ctx.stroke(); + const { x, y, w, h, color } = opts; + const c = this.controller; + const calcX = (x * c.zoomFactor) + c.positionOffset.x ; + const calcW = w * c.zoomFactor; + this.displayObject.beginFill((color || 0x000000)); + this.displayObject.drawRect(calcX, y, calcW, h); + this.displayObject.endFill(); + } + + line(opts: TimeGraphLine) { + const { width, color } = opts; + this.displayObject.lineStyle(width || 1, color || 0x000000); + this.displayObject.moveTo(opts.start.x, opts.start.y); + this.displayObject.lineTo((opts.end.x * this.controller.zoomFactor), opts.end.y); + } + + protected addEvent(event: TimeGraphInteractionType, handler: TimeGraphInteractionHandler) { + this.displayObject.interactive = true; + this.displayObject.on(event, (e: PIXI.interaction.InteractionEvent) => { + if (handler) { + handler(e); + } + }); } } \ No newline at end of file diff --git a/src/time-graph-controller.ts b/src/time-graph-controller.ts new file mode 100644 index 0000000..ca610c4 --- /dev/null +++ b/src/time-graph-controller.ts @@ -0,0 +1,126 @@ +import { TimeGraphComponent } from "./time-graph-component"; +import { TimeGraphContainer } from "./time-graph"; + +export class TimeGraphController { + protected _originalGraphWidth: number; + protected _zoomFactor: number; + protected _initialZoomFactor: number; + protected _oldZoomFactor: number; + protected _positionOffset: { + x: number; + y: number; + }; + protected _oldPositionOffset: { + x: number; + y: number; + }; + protected _components: TimeGraphComponent[]; + protected _contexts: Map; + + protected zoomChangedHandler: (() => void)[]; + protected positionChangedHandler: (() => void)[]; + + constructor(protected _canvasWidth: number, protected _graphWidth: number) { + this._components = []; + this._contexts = new Map(); + this._originalGraphWidth = _graphWidth; + this._initialZoomFactor = _canvasWidth / _graphWidth; + this._graphWidth = this._originalGraphWidth * this._initialZoomFactor; + this._zoomFactor = this._initialZoomFactor; + this._oldZoomFactor = this._zoomFactor; + this._positionOffset = { x: 0, y: 0 }; + this._oldPositionOffset = { x: 0, y: 0 }; + this.zoomChangedHandler = []; + this.positionChangedHandler = []; + } + + protected handleZoomChange() { + this.zoomChangedHandler.map(handler => handler()); + } + protected handlePositionChange() { + this.positionChangedHandler.map(handler => handler()); + } + + onZoomChanged(handler: () => void) { + this.zoomChangedHandler.push(handler); + } + onPositionChanged(handler: () => void) { + this.positionChangedHandler.push(handler); + } + + get canvasWidth(): number { + return this._canvasWidth; + } + set canvasWidth(value: number) { + this._canvasWidth = value; + } + + get graphWidth(): number { + return this._graphWidth; + } + set graphWidth(value: number) { + this._graphWidth = value; + } + + get initialZoomFactor(): number { + return this._initialZoomFactor; + } + + get zoomFactor(): number { + return this._zoomFactor; + } + set zoomFactor(value: number) { + this._zoomFactor = value; + this._graphWidth = this._zoomFactor * this._originalGraphWidth; + this.handleZoomChange(); + } + + get oldZoomFactor(): number { + return this._oldZoomFactor; + } + set oldZoomFactor(value: number) { + this._oldZoomFactor = value; + } + + get positionOffset(): { + x: number; + y: number; + } { + return this._positionOffset; + } + set positionOffset(value: { + x: number; + y: number; + }) { + this._positionOffset = value; + this.handlePositionChange(); + } + + get oldPositionOffset(): { + x: number; + y: number; + } { + return this._oldPositionOffset; + } + set oldPositionOffset(value: { + x: number; + y: number; + }) { + this._oldPositionOffset = value; + } + + get components(): TimeGraphComponent[] { + return this._components; + } + addComponent(component: TimeGraphComponent) { + this.addContext(component.id, component.context); + this._components.push(component); + } + + addContext(id: string, ctx: TimeGraphContainer) { + if (!this._contexts.get(id)) { + this._contexts.set(id, ctx); + + } + } +} \ No newline at end of file diff --git a/src/time-graph-row-view.ts b/src/time-graph-row-view.ts index 0d54b81..856b0b1 100644 --- a/src/time-graph-row-view.ts +++ b/src/time-graph-row-view.ts @@ -1,8 +1,11 @@ import { TimeGraphState, TimeGraphStateView } from "./time-graph-state-view"; import { TimeGraphComponent } from "./time-graph-component"; -import { TimeGraphRange } from "./time-graph"; +import { TimeGraphRange, TimeGraphApplication } from "./time-graph"; +import { TimeGraphController } from "./time-graph-controller"; export interface TimeGraphRow { + start?: number + end?: number states: TimeGraphState[] } @@ -14,26 +17,29 @@ export class TimeGraphRowView extends TimeGraphComponent { constructor( protected cid: string, + app: TimeGraphApplication, protected rowIdx: number, protected row: TimeGraphRow, - protected range: TimeGraphRange + protected range: TimeGraphRange, + timeGraphController: TimeGraphController ) { - super(cid); + super(cid, app, timeGraphController); this.height = 20; this.ypos = (this.height * this.rowIdx) + this.height / 2; - this.width = this.range.endTime - this.range.startTime; + this.width = this.range.end - this.range.start; } render() { this.line({ start: { x: 0, y: this.ypos }, end: { x: this.width, y: this.ypos }, - color: 'rgba(0,0,0,0.2)' + color: 0x000000, + opacity: 0.2, + width: 1 }); this.row.states.forEach(state => { - const timeGraphState = new TimeGraphStateView(this.id + state.label + state.range.startTime, state, this.ypos, this.range); - timeGraphState.context = this._ctx; + const timeGraphState = new TimeGraphStateView(this.id + state.label + state.range.start, this.app, state, this.ypos, this.range, this.controller); timeGraphState.render(); }); } diff --git a/src/time-graph-state-controller.ts b/src/time-graph-state-controller.ts deleted file mode 100644 index 5cdb071..0000000 --- a/src/time-graph-state-controller.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { TimeGraphComponent } from "./time-graph-component"; - -export class TimeGraphStateController { - private _canvasWidth: number; - private _graphWidth: number; - private _zoomFactor: number; - private _positionOffset: { - x: number; - y: number; - }; - private _components: TimeGraphComponent[]; - private _contexts: Map; - - constructor() { - this._components = []; - this._contexts = new Map(); - } - - get canvasWidth(): number { - return this._canvasWidth; - } - set canvasWidth(value: number) { - this._canvasWidth = value; - } - - get graphWidth(): number { - return this._graphWidth; - } - set graphWidth(value: number) { - this._graphWidth = value; - } - - get zoomFactor(): number { - return this._zoomFactor; - } - set zoomFactor(value: number) { - this._zoomFactor = value; - } - - get positionOffset(): { - x: number; - y: number; - } { - return this._positionOffset; - } - set positionOffset(value: { - x: number; - y: number; - }) { - this._positionOffset = value; - } - - get components(): TimeGraphComponent[] { - return this._components; - } - addComponent(component: TimeGraphComponent) { - this.addContext(component.id, component.context); - this._components.push(component); - } - - addContext(id: string, ctx: CanvasRenderingContext2D) { - if (!this._contexts.get(id)) { - this._contexts.set(id, ctx); - ctx.canvas.addEventListener('mousedown', (ev: MouseEvent) => { - - }); - } - } - - -} \ No newline at end of file diff --git a/src/time-graph-state-view.ts b/src/time-graph-state-view.ts index 510256d..6920aeb 100644 --- a/src/time-graph-state-view.ts +++ b/src/time-graph-state-view.ts @@ -1,5 +1,6 @@ -import { TimeGraphRange } from "./time-graph"; -import { TimeGraphComponent } from "./time-graph-component"; +import { TimeGraphRange, TimeGraphApplication } from "./time-graph"; +import { TimeGraphComponent, TimeGraphRect } from "./time-graph-component"; +import { TimeGraphController } from "./time-graph-controller"; export interface TimeGraphState { range: TimeGraphRange @@ -13,26 +14,49 @@ export class TimeGraphStateView extends TimeGraphComponent { protected y: number; protected height: number; - constructor(protected cid: string, protected state: TimeGraphState, yPosition: number, protected range: TimeGraphRange) { - super(cid); + constructor(protected cid: string, app: TimeGraphApplication, protected state: TimeGraphState, yPosition: number, protected range: TimeGraphRange, controller: TimeGraphController) { + super(cid, app, controller); // TODO this calculation of the initial offset must be calculated differently later - this.start = state.range.startTime - range.startTime; - this.end = state.range.endTime - range.startTime; + this.start = state.range.start - range.start; + this.end = state.range.end - range.start; // TODO magic number 10 is the half of the row height...must come from a central style-config-provider later. - this.y = yPosition-10; + this.y = yPosition - 10; // TODO magic number 20 must come from a central style-config-provider later. this.height = 20; } render() { - this.rect({ - color: 'rgb(200,0,0)', + this.options = { + color: 0xC80000, x: this.start, y: this.y, - w: this.end-this.start, + w: this.end - this.start, h: this.height - }); + }; + this.addEvent('mouseover', this.handleMouseOver); + this.addEvent('mouseout', this.handleMouseOut); + this.addEvent('mousedown', this.handleMouseDown); + this.addEvent('mouseup', this.handleMouseOut); + this.rect(this.options as TimeGraphRect); } + + protected changeColor(color: number) { + this.displayObject.clear(); + this.options.color = color; + this.rect(this.options as TimeGraphRect); + } + + protected handleMouseOver = ((event: PIXI.interaction.InteractionEvent) => { + this.changeColor(0x00C800); + }).bind(this); + + protected handleMouseOut = ((event: PIXI.interaction.InteractionEvent) => { + this.changeColor(0xC80000); + }).bind(this); + + protected handleMouseDown = ((event: PIXI.interaction.InteractionEvent) => { + this.changeColor(0x0000C8); + }).bind(this); } \ No newline at end of file diff --git a/src/time-graph.ts b/src/time-graph.ts index 3fa2cc0..b20b12a 100644 --- a/src/time-graph.ts +++ b/src/time-graph.ts @@ -1,86 +1,123 @@ import { TimeGraphRow, TimeGraphRowView } from "./time-graph-row-view"; -import { TimeAxis } from "./time-axis"; -import { TimeGraphStateController } from "./time-graph-state-controller"; +import { TimeAxisScale } from "./time-axis-scale"; +import { TimeGraphController } from "./time-graph-controller"; +import * as PIXI from "pixi.js"; export interface TimeGraphRange { - startTime: number - endTime: number + start: number + end: number } -export interface TimeGraphEntry { +export interface TimeGraphModel { id: string name: string range: TimeGraphRange rows: TimeGraphRow[] } -export interface TimeGraphContext { +export interface TimeGraphContextOptions { id: string width: number height: number + backgroundColor?: number } +export type TimeGraphContainer = PIXI.Container +export type TimeGraphApplication = PIXI.Application; + export class TimeGraph { protected container?: HTMLElement; + protected timeGraphWidth: number; + protected containerWidth: number; + protected timeGraphController: TimeGraphController; + protected timeAxisApplication?: TimeGraphApplication; + protected timeGraphRowsApplication?: TimeGraphApplication; + protected timeAxis: TimeAxisScale; - protected timeGraphEntries: Map = new Map(); - - constructor(id: string) { + constructor(id: string, protected model: TimeGraphModel) { this.container = document.getElementById(id) || undefined; if (!this.container) { throw (`No container with id ${id} available.`); } + + this.timeGraphWidth = this.model.range.end; + this.containerWidth = this.container.clientWidth; + this.timeGraphController = new TimeGraphController(this.containerWidth, this.timeGraphWidth); + + this.timeAxisApplication = this.getNewApplication({ + id: 'timeAxis_' + this.model.id, + height: 30, + width: this.timeGraphWidth, + backgroundColor: 0xAA30f0 + }); + if (this.timeAxisApplication) { + this.timeAxis = new TimeAxisScale('timeAxis_' + this.model.id, this.timeAxisApplication, this.timeGraphController); + } + + this.timeGraphRowsApplication = this.getNewApplication({ + id: 'timeGraphRows_' + this.model.id, + width: this.timeGraphWidth, + height: 200, + backgroundColor: 0xFFFFFF + }); + + // let fw = true; + // setInterval(() => { + // if (this.timeGraphController.zoomFactor < 2 && fw) { + // this.timeGraphController.zoomFactor += 0.01; + // } else { + // fw = false; + // if (this.timeGraphController.zoomFactor > 0.02) { + // this.timeGraphController.zoomFactor -= 0.01; + // } else { + // fw = true; + // } + // } + // this.render(); + // }, 10); + + this.timeGraphController.onZoomChanged(() => { + this.render(); + }); + this.timeGraphController.onPositionChanged(() => { + this.render(); + }); } - protected getNewContext(config: TimeGraphContext): CanvasRenderingContext2D | undefined { + protected getNewApplication(config: TimeGraphContextOptions): TimeGraphApplication | undefined { if (this.container) { const canvas: HTMLCanvasElement = document.createElement('canvas'); canvas.width = config.width; canvas.height = config.height; canvas.id = config.id; canvas.className = 'time-graph-canvas'; + const application = new PIXI.Application({ + width: config.width, + height: config.height, + view: canvas, + backgroundColor: config.backgroundColor || 0x000000 + }); this.container.appendChild(canvas); - return canvas.getContext('2d') || undefined; + application.stage.height = config.height; + return application; } } render() { - // TODO does this belong to the example (index.ts)?? - this.timeGraphEntries.forEach(timeGraphEntry => { - const timeGraphStateController = new TimeGraphStateController(); - const w = timeGraphEntry.range.endTime; - const timeAxisContext = this.getNewContext({ - id: 'timeAxis_' + timeGraphEntry.id, - height: 30, - width: w - }); - if (timeAxisContext) { - const timeAxis = new TimeAxis('timeAxis_' + timeGraphEntry.id); - timeGraphStateController.addComponent(timeAxis); - // TODO components should be added automatically...maybe by injecting the controller in component and there we add it??? - // Or - better - the component instance gets created in the controller. And then...World domination! HA HA HAAA - // the context should be created there, if a component should have its own context (Flag: ownContext: boolean) - timeAxis.context = timeAxisContext; - timeAxis.render(); - } - const timeGraphRowsContext = this.getNewContext({ - id: 'timeGraphRows_' + timeGraphEntry.id, - width: w, - height: 200 - }); - timeGraphEntry.rows.forEach((row: TimeGraphRow, idx: number) => { - const timeGraphRow = new TimeGraphRowView(timeGraphEntry.id + 'row' + idx, idx, row, timeGraphEntry.range); - timeGraphStateController.addComponent(timeGraphRow); // TODO components should be added automatically...maybe by injecting the controller in component and there we add it??? - if (timeGraphRowsContext) { - timeGraphRow.context = timeGraphRowsContext; - timeGraphRow.render(); - } - }); - }) - } + this.timeAxis.clear(); + this.timeGraphController.addComponent(this.timeAxis); + this.timeAxis.render(); - setEntry(timeGraphEntry: TimeGraphEntry) { - this.timeGraphEntries.set(timeGraphEntry.id, timeGraphEntry); + if(this.timeGraphRowsApplication){ + this.timeGraphRowsApplication.stage.removeChildren(); + } + this.model.rows.forEach((row: TimeGraphRow, idx: number) => { + if (this.timeGraphRowsApplication) { + const timeGraphRow = new TimeGraphRowView(this.model.id + 'row' + idx, this.timeGraphRowsApplication, idx, row, this.model.range, this.timeGraphController); + this.timeGraphController.addComponent(timeGraphRow); + timeGraphRow.render(); + } + }); } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 80994b6..b9e8646 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,16 @@ # yarn lockfile v1 +"@types/node@^8.0.26": + version "8.10.36" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.36.tgz#eac05d576fbcd0b4ea3c912dc58c20475c08d9e4" + integrity sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw== + +"@types/pixi.js@^4.8.2": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@types/pixi.js/-/pixi.js-4.8.2.tgz#e711c8d083752e0f24bbe069e6bb361111fb4d2a" + integrity sha512-W5ER6is/fjaFzzl1F+B8kw0mNu0LSCUKNwIWaIFRb24a9jHEnvNo/sL0L/vP/ryTAVCo7/ZTcE2f+zE7rVZBdA== + "@webassemblyjs/ast@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.8.tgz#f31f480debeef957f01b623f27eabc695fa4fe8f" @@ -371,6 +381,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== +bit-twiddle@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= + bluebird@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" @@ -1008,6 +1023,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +earcut@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.3.tgz#ca579545f351941af7c3d0df49c9f7d34af99b0c" + integrity sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1094,6 +1114,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eventemitter3@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo= + eventemitter3@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" @@ -1824,6 +1849,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +ismobilejs@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-0.4.1.tgz#1a5f126c70fed39c93da380fa62cbae5723e7dc2" + integrity sha1-Gl8SbHD+05yT2jgPpiy65XI+fcI= + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -2066,6 +2096,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mini-signals@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mini-signals/-/mini-signals-1.2.0.tgz#45b08013c5fae51a24aa1a935cd317c9ed721d74" + integrity sha1-RbCAE8X65RokqhqTXNMXye1yHXQ= + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2501,6 +2536,11 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-uri@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.0.tgz#2872dcc22f1a797acde1583d8a0ac29552ddac20" + integrity sha1-KHLcwi8aeXrN4Vg9igrClVLdrCA= + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -2579,6 +2619,25 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pixi-gl-core@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/pixi-gl-core/-/pixi-gl-core-1.1.4.tgz#8b4b5c433b31e419bc379dc565ce1b835a91b372" + integrity sha1-i0tcQzsx5Bm8N53FZc4bg1qRs3I= + +pixi.js@^4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-4.8.2.tgz#c9e6f5f3b6780d2236705a7539e4e5ca3d74151f" + integrity sha512-OHA3Q3wwxRJXkVWALVuiUcUqQZd5p0rQF9ikCvOmux3A6Lxb5S61v4PMEAVgR3+1auZekbv/GNHCxDGFCQSi8g== + dependencies: + bit-twiddle "^1.0.2" + earcut "^2.1.3" + eventemitter3 "^2.0.0" + ismobilejs "^0.4.0" + object-assign "^4.0.1" + pixi-gl-core "^1.1.4" + remove-array-items "^1.0.0" + resource-loader "^2.1.1" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -2774,6 +2833,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +remove-array-items@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remove-array-items/-/remove-array-items-1.0.0.tgz#07bf42cb332f4cf6e85ead83b5e4e896d2326b21" + integrity sha1-B79CyzMvTPboXq2DteToltIyayE= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -2821,6 +2885,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resource-loader@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/resource-loader/-/resource-loader-2.1.1.tgz#f03ec08dd26aae0b0dd2a24a6d312aec2b5a004d" + integrity sha512-jRMGYUfa4AGk9ib45Wxc93lobhQVoiCUAUkWqsbb/fhGPge97YT1S8aC0xBEQpolMsrdmB3o7SH8VmIEvIDOLA== + dependencies: + mini-signals "^1.1.1" + parse-uri "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"