diff --git a/profile_export.json b/profile_export.json new file mode 100644 index 0000000..11b87f3 --- /dev/null +++ b/profile_export.json @@ -0,0 +1,81525 @@ +{ + "children": [ + { + "durationMs": 0.008, + "name": "Script Updates", + "startMs": 0.0044, + "visualDurationMs": 0.008, + "visualStartMs": 0.0044 + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 0.0229, + "visualDurationMs": 0.0004, + "visualStartMs": 0.0229 + }, + { + "durationMs": 0.0064, + "name": "ShaderUse", + "startMs": 0.0236, + "visualDurationMs": 0.0064, + "visualStartMs": 0.0236 + }, + { + "children": [ + { + "durationMs": 0.0173, + "name": "Transform", + "startMs": 0.0318, + "visualDurationMs": 0.0173, + "visualStartMs": 0.0318 + }, + { + "durationMs": 0.002, + "name": "TexSlot", + "startMs": 0.0493, + "visualDurationMs": 0.002, + "visualStartMs": 0.0493 + } + ], + "durationMs": 0.02, + "name": "SetUniforms", + "startMs": 0.0314, + "visualDurationMs": 0.02, + "visualStartMs": 0.0314 + }, + { + "durationMs": 0.0025, + "name": "BindTex", + "startMs": 0.0516, + "visualDurationMs": 0.0025, + "visualStartMs": 0.0516 + }, + { + "children": [ + { + "durationMs": 0.0067, + "name": "ColorCorrection", + "startMs": 0.055, + "visualDurationMs": 0.0067, + "visualStartMs": 0.055 + }, + { + "durationMs": 0.0048, + "name": "SetLightParams", + "startMs": 0.0619, + "visualDurationMs": 0.0048, + "visualStartMs": 0.0619 + }, + { + "durationMs": 0.004, + "name": "L0", + "startMs": 0.0698, + "visualDurationMs": 0.004, + "visualStartMs": 0.0698 + }, + { + "durationMs": 0.0022, + "name": "L1", + "startMs": 0.0742, + "visualDurationMs": 0.0022, + "visualStartMs": 0.0742 + }, + { + "durationMs": 0.0038, + "name": "L2", + "startMs": 0.0767, + "visualDurationMs": 0.0038, + "visualStartMs": 0.0767 + }, + { + "durationMs": 0.003, + "name": "L3", + "startMs": 0.0808, + "visualDurationMs": 0.003, + "visualStartMs": 0.0808 + }, + { + "durationMs": 0.0019, + "name": "L4", + "startMs": 0.0842, + "visualDurationMs": 0.0019, + "visualStartMs": 0.0842 + }, + { + "durationMs": 0.0018, + "name": "L5", + "startMs": 0.0864, + "visualDurationMs": 0.0018, + "visualStartMs": 0.0864 + }, + { + "durationMs": 0.0066, + "name": "L6", + "startMs": 0.0885, + "visualDurationMs": 0.0066, + "visualStartMs": 0.0885 + }, + { + "durationMs": 0.0022, + "name": "L7", + "startMs": 0.0954, + "visualDurationMs": 0.0022, + "visualStartMs": 0.0954 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 0.098, + "visualDurationMs": 0.0013, + "visualStartMs": 0.098 + }, + { + "durationMs": 0.0028, + "name": "L9", + "startMs": 0.0996, + "visualDurationMs": 0.0028, + "visualStartMs": 0.0996 + }, + { + "durationMs": 0.0026, + "name": "L10", + "startMs": 0.103, + "visualDurationMs": 0.0026, + "visualStartMs": 0.103 + }, + { + "durationMs": 0.0018, + "name": "L11", + "startMs": 0.1061, + "visualDurationMs": 0.0018, + "visualStartMs": 0.1061 + }, + { + "durationMs": 0.0025, + "name": "L12", + "startMs": 0.1083, + "visualDurationMs": 0.0025, + "visualStartMs": 0.1083 + }, + { + "durationMs": 0.0024, + "name": "L13", + "startMs": 0.1111, + "visualDurationMs": 0.0024, + "visualStartMs": 0.1111 + }, + { + "durationMs": 0.0047, + "name": "L14", + "startMs": 0.1138, + "visualDurationMs": 0.0047, + "visualStartMs": 0.1138 + }, + { + "durationMs": 0.0157, + "name": "L15", + "startMs": 0.1188, + "visualDurationMs": 0.0157, + "visualStartMs": 0.1188 + }, + { + "durationMs": 0.0023, + "name": "L16", + "startMs": 0.135, + "visualDurationMs": 0.0023, + "visualStartMs": 0.135 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 0.1377, + "visualDurationMs": 0.0016, + "visualStartMs": 0.1377 + }, + { + "durationMs": 0.0017, + "name": "L18", + "startMs": 0.1397, + "visualDurationMs": 0.0017, + "visualStartMs": 0.1397 + }, + { + "durationMs": 0.0018, + "name": "L19", + "startMs": 0.1417, + "visualDurationMs": 0.0018, + "visualStartMs": 0.1417 + }, + { + "durationMs": 0.0018, + "name": "L20", + "startMs": 0.1438, + "visualDurationMs": 0.0018, + "visualStartMs": 0.1438 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 0.146, + "visualDurationMs": 0.0014, + "visualStartMs": 0.146 + }, + { + "durationMs": 0.0019, + "name": "L22", + "startMs": 0.1478, + "visualDurationMs": 0.0019, + "visualStartMs": 0.1478 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 0.1501, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1501 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 0.1519, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1519 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 0.1536, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1536 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 0.1552, + "visualDurationMs": 0.0012, + "visualStartMs": 0.1552 + }, + { + "durationMs": 0.0016, + "name": "L27", + "startMs": 0.1568, + "visualDurationMs": 0.0016, + "visualStartMs": 0.1568 + }, + { + "durationMs": 0.002, + "name": "L28", + "startMs": 0.1587, + "visualDurationMs": 0.002, + "visualStartMs": 0.1587 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 0.1611, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1611 + }, + { + "durationMs": 0.0067, + "name": "L30", + "startMs": 0.1628, + "visualDurationMs": 0.0067, + "visualStartMs": 0.1628 + }, + { + "durationMs": 0.0028, + "name": "L31", + "startMs": 0.1699, + "visualDurationMs": 0.0028, + "visualStartMs": 0.1699 + }, + { + "durationMs": 0.0022, + "name": "L32", + "startMs": 0.1731, + "visualDurationMs": 0.0022, + "visualStartMs": 0.1731 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 0.1756, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1756 + }, + { + "durationMs": 0.0021, + "name": "L34", + "startMs": 0.1774, + "visualDurationMs": 0.0021, + "visualStartMs": 0.1774 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 0.1799, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1799 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 0.1816, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1816 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 0.1833, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1833 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 0.185, + "visualDurationMs": 0.0012, + "visualStartMs": 0.185 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 0.1865, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1865 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 0.1881, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1881 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 0.1898, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1898 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 0.1914, + "visualDurationMs": 0.0013, + "visualStartMs": 0.1914 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 0.193, + "visualDurationMs": 0.0014, + "visualStartMs": 0.193 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 0.1948, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1948 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 0.1965, + "visualDurationMs": 0.0015, + "visualStartMs": 0.1965 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 0.1983, + "visualDurationMs": 0.0014, + "visualStartMs": 0.1983 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 0.2, + "visualDurationMs": 0.0014, + "visualStartMs": 0.2 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 0.2017, + "visualDurationMs": 0.0016, + "visualStartMs": 0.2017 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 0.2036, + "visualDurationMs": 0.0016, + "visualStartMs": 0.2036 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 0.2056, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2056 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 0.2073, + "visualDurationMs": 0.0014, + "visualStartMs": 0.2073 + }, + { + "durationMs": 0.0017, + "name": "L52", + "startMs": 0.209, + "visualDurationMs": 0.0017, + "visualStartMs": 0.209 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 0.211, + "visualDurationMs": 0.0015, + "visualStartMs": 0.211 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 0.2128, + "visualDurationMs": 0.0015, + "visualStartMs": 0.2128 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 0.2147, + "visualDurationMs": 0.0016, + "visualStartMs": 0.2147 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 0.2166, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2166 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 0.2183, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2183 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 0.2199, + "visualDurationMs": 0.0014, + "visualStartMs": 0.2199 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 0.2216, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2216 + }, + { + "durationMs": 0.0017, + "name": "L60", + "startMs": 0.2232, + "visualDurationMs": 0.0017, + "visualStartMs": 0.2232 + }, + { + "durationMs": 0.0017, + "name": "L61", + "startMs": 0.2252, + "visualDurationMs": 0.0017, + "visualStartMs": 0.2252 + }, + { + "durationMs": 0.0096, + "name": "L62", + "startMs": 0.2272, + "visualDurationMs": 0.0096, + "visualStartMs": 0.2272 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 0.2372, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2372 + }, + { + "durationMs": 0.0017, + "name": "L64", + "startMs": 0.2389, + "visualDurationMs": 0.0017, + "visualStartMs": 0.2389 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 0.241, + "visualDurationMs": 0.0014, + "visualStartMs": 0.241 + }, + { + "durationMs": 0.002, + "name": "L66", + "startMs": 0.2427, + "visualDurationMs": 0.002, + "visualStartMs": 0.2427 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 0.2451, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2451 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 0.2467, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2467 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 0.2483, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2483 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 0.2499, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2499 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 0.2515, + "visualDurationMs": 0.0015, + "visualStartMs": 0.2515 + }, + { + "durationMs": 0.0019, + "name": "L72", + "startMs": 0.2533, + "visualDurationMs": 0.0019, + "visualStartMs": 0.2533 + }, + { + "durationMs": 0.0015, + "name": "L73", + "startMs": 0.2555, + "visualDurationMs": 0.0015, + "visualStartMs": 0.2555 + }, + { + "durationMs": 0.0018, + "name": "L74", + "startMs": 0.2573, + "visualDurationMs": 0.0018, + "visualStartMs": 0.2573 + }, + { + "durationMs": 0.0019, + "name": "L75", + "startMs": 0.2595, + "visualDurationMs": 0.0019, + "visualStartMs": 0.2595 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 0.2617, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2617 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 0.2634, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2634 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 0.265, + "visualDurationMs": 0.0012, + "visualStartMs": 0.265 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 0.2666, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2666 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 0.2683, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2683 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 0.2699, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2699 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 0.2715, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2715 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 0.2731, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2731 + }, + { + "durationMs": 0.0016, + "name": "L84", + "startMs": 0.2746, + "visualDurationMs": 0.0016, + "visualStartMs": 0.2746 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 0.2765, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2765 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 0.2781, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2781 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 0.2797, + "visualDurationMs": 0.0013, + "visualStartMs": 0.2797 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 0.2814, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2814 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 0.283, + "visualDurationMs": 0.0013, + "visualStartMs": 0.283 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 0.2846, + "visualDurationMs": 0.0012, + "visualStartMs": 0.2846 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 0.2862, + "visualDurationMs": 0.0014, + "visualStartMs": 0.2862 + }, + { + "durationMs": 0.0016, + "name": "L92", + "startMs": 0.288, + "visualDurationMs": 0.0016, + "visualStartMs": 0.288 + }, + { + "durationMs": 0.0657, + "name": "L93", + "startMs": 0.2899, + "visualDurationMs": 0.0657, + "visualStartMs": 0.2899 + }, + { + "durationMs": 0.0018, + "name": "L94", + "startMs": 0.3561, + "visualDurationMs": 0.0018, + "visualStartMs": 0.3561 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 0.3583, + "visualDurationMs": 0.0014, + "visualStartMs": 0.3583 + }, + { + "durationMs": 0.0018, + "name": "L96", + "startMs": 0.3601, + "visualDurationMs": 0.0018, + "visualStartMs": 0.3601 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 0.3622, + "visualDurationMs": 0.0014, + "visualStartMs": 0.3622 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 0.3639, + "visualDurationMs": 0.0013, + "visualStartMs": 0.3639 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 0.3655, + "visualDurationMs": 0.0014, + "visualStartMs": 0.3655 + }, + { + "durationMs": 0.0009, + "name": "BindNorm", + "startMs": 0.3672, + "visualDurationMs": 0.0009, + "visualStartMs": 0.3672 + } + ], + "durationMs": 0.3158, + "name": "Lighting", + "startMs": 0.0543, + "visualDurationMs": 0.3158, + "visualStartMs": 0.0543 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "VAO Bind", + "startMs": 0.3707, + "visualDurationMs": 0.0011, + "visualStartMs": 0.3707 + }, + { + "durationMs": 0.0015, + "name": "GL Draw", + "startMs": 0.3719, + "visualDurationMs": 0.0015, + "visualStartMs": 0.3719 + } + ], + "durationMs": 0.0033, + "name": "Draw", + "startMs": 0.3703, + "visualDurationMs": 0.0033, + "visualStartMs": 0.3703 + } + ], + "durationMs": 0.3522, + "name": "DrawSprite", + "startMs": 0.0215, + "visualDurationMs": 0.3522, + "visualStartMs": 0.0215 + } + ], + "durationMs": 0.3546, + "name": "Draw Sprite: Pebble_8", + "startMs": 0.0194, + "visualDurationMs": 0.3546, + "visualStartMs": 0.0194 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 0.3768, + "visualDurationMs": 0.0003, + "visualStartMs": 0.3768 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 0.3773, + "visualDurationMs": 0.0005, + "visualStartMs": 0.3773 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 0.3787, + "visualDurationMs": 0.0015, + "visualStartMs": 0.3787 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 0.3804, + "visualDurationMs": 0.0006, + "visualStartMs": 0.3804 + } + ], + "durationMs": 0.003, + "name": "SetUniforms", + "startMs": 0.3781, + "visualDurationMs": 0.003, + "visualStartMs": 0.3781 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 0.3813, + "visualDurationMs": 0.0004, + "visualStartMs": 0.3813 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 0.3822, + "visualDurationMs": 0.001, + "visualStartMs": 0.3822 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 0.3833, + "visualDurationMs": 0.0016, + "visualStartMs": 0.3833 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 0.3853, + "visualDurationMs": 0.0014, + "visualStartMs": 0.3853 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 0.3871, + "visualDurationMs": 0.0015, + "visualStartMs": 0.3871 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 0.3889, + "visualDurationMs": 0.0014, + "visualStartMs": 0.3889 + }, + { + "durationMs": 0.0012, + "name": "L3", + "startMs": 0.3907, + "visualDurationMs": 0.0012, + "visualStartMs": 0.3907 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 0.3923, + "visualDurationMs": 0.0012, + "visualStartMs": 0.3923 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 0.3939, + "visualDurationMs": 0.0012, + "visualStartMs": 0.3939 + }, + { + "durationMs": 0.0033, + "name": "L6", + "startMs": 0.3954, + "visualDurationMs": 0.0033, + "visualStartMs": 0.3954 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 0.3991, + "visualDurationMs": 0.0013, + "visualStartMs": 0.3991 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 0.4008, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4008 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 0.4025, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4025 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 0.4042, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4042 + }, + { + "durationMs": 0.0017, + "name": "L11", + "startMs": 0.4058, + "visualDurationMs": 0.0017, + "visualStartMs": 0.4058 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 0.4079, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4079 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 0.4097, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4097 + }, + { + "durationMs": 0.0039, + "name": "L14", + "startMs": 0.4114, + "visualDurationMs": 0.0039, + "visualStartMs": 0.4114 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 0.4156, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4156 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 0.4174, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4174 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 0.4192, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4192 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 0.4211, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4211 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 0.4228, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4228 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 0.4244, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4244 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 0.4261, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4261 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 0.4278, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4278 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 0.4295, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4295 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 0.4311, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4311 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 0.4327, + "visualDurationMs": 0.0012, + "visualStartMs": 0.4327 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 0.4343, + "visualDurationMs": 0.0012, + "visualStartMs": 0.4343 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 0.4358, + "visualDurationMs": 0.0012, + "visualStartMs": 0.4358 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 0.4374, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4374 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 0.4391, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4391 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 0.4409, + "visualDurationMs": 0.0054, + "visualStartMs": 0.4409 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 0.4467, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4467 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 0.4486, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4486 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 0.4502, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4502 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 0.452, + "visualDurationMs": 0.0015, + "visualStartMs": 0.452 + }, + { + "durationMs": 0.0027, + "name": "L35", + "startMs": 0.4538, + "visualDurationMs": 0.0027, + "visualStartMs": 0.4538 + }, + { + "durationMs": 0.0015, + "name": "L36", + "startMs": 0.4569, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4569 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 0.4588, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4588 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 0.4606, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4606 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 0.4625, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4625 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 0.4642, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4642 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 0.466, + "visualDurationMs": 0.0014, + "visualStartMs": 0.466 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 0.4677, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4677 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 0.4695, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4695 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 0.4713, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4713 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 0.4731, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4731 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 0.4748, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4748 + }, + { + "durationMs": 0.0016, + "name": "L47", + "startMs": 0.4765, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4765 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 0.4785, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4785 + }, + { + "durationMs": 0.0018, + "name": "L49", + "startMs": 0.4804, + "visualDurationMs": 0.0018, + "visualStartMs": 0.4804 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 0.4825, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4825 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 0.4844, + "visualDurationMs": 0.0014, + "visualStartMs": 0.4844 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 0.4862, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4862 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 0.4879, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4879 + }, + { + "durationMs": 0.0016, + "name": "L54", + "startMs": 0.4896, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4896 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 0.4916, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4916 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 0.4935, + "visualDurationMs": 0.0013, + "visualStartMs": 0.4935 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 0.4952, + "visualDurationMs": 0.0012, + "visualStartMs": 0.4952 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 0.4967, + "visualDurationMs": 0.0015, + "visualStartMs": 0.4967 + }, + { + "durationMs": 0.0016, + "name": "L59", + "startMs": 0.4985, + "visualDurationMs": 0.0016, + "visualStartMs": 0.4985 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 0.5004, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5004 + }, + { + "durationMs": 0.0018, + "name": "L61", + "startMs": 0.5021, + "visualDurationMs": 0.0018, + "visualStartMs": 0.5021 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 0.5042, + "visualDurationMs": 0.0089, + "visualStartMs": 0.5042 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 0.5135, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5135 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 0.5152, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5152 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 0.517, + "visualDurationMs": 0.0014, + "visualStartMs": 0.517 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 0.5188, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5188 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 0.5206, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5206 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 0.5223, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5223 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 0.5239, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5239 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 0.5256, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5256 + }, + { + "durationMs": 0.0016, + "name": "L71", + "startMs": 0.5274, + "visualDurationMs": 0.0016, + "visualStartMs": 0.5274 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 0.5294, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5294 + }, + { + "durationMs": 0.0015, + "name": "L73", + "startMs": 0.5311, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5311 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 0.5329, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5329 + }, + { + "durationMs": 0.0015, + "name": "L75", + "startMs": 0.5345, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5345 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 0.5364, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5364 + }, + { + "durationMs": 0.0015, + "name": "L77", + "startMs": 0.5382, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5382 + }, + { + "durationMs": 0.0016, + "name": "L78", + "startMs": 0.54, + "visualDurationMs": 0.0016, + "visualStartMs": 0.54 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 0.5419, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5419 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 0.5435, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5435 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 0.5454, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5454 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 0.5469, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5469 + }, + { + "durationMs": 0.0015, + "name": "L83", + "startMs": 0.5485, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5485 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 0.5503, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5503 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 0.5521, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5521 + }, + { + "durationMs": 0.0017, + "name": "L86", + "startMs": 0.5537, + "visualDurationMs": 0.0017, + "visualStartMs": 0.5537 + }, + { + "durationMs": 0.0015, + "name": "L87", + "startMs": 0.5557, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5557 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 0.5576, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5576 + }, + { + "durationMs": 0.0015, + "name": "L89", + "startMs": 0.5591, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5591 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 0.561, + "visualDurationMs": 0.0012, + "visualStartMs": 0.561 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 0.5625, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5625 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 0.5641, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5641 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 0.5657, + "visualDurationMs": 0.0012, + "visualStartMs": 0.5657 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 0.5673, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5673 + }, + { + "durationMs": 0.0017, + "name": "L95", + "startMs": 0.5691, + "visualDurationMs": 0.0017, + "visualStartMs": 0.5691 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 0.5711, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5711 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 0.5727, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5727 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 0.5744, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5744 + }, + { + "durationMs": 0.0015, + "name": "L99", + "startMs": 0.576, + "visualDurationMs": 0.0015, + "visualStartMs": 0.576 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 0.5777, + "visualDurationMs": 0.0006, + "visualStartMs": 0.5777 + } + ], + "durationMs": 0.1968, + "name": "Lighting", + "startMs": 0.3819, + "visualDurationMs": 0.1968, + "visualStartMs": 0.3819 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 0.5801, + "visualDurationMs": 0.0007, + "visualStartMs": 0.5801 + }, + { + "durationMs": 0.0008, + "name": "GL Draw", + "startMs": 0.5809, + "visualDurationMs": 0.0008, + "visualStartMs": 0.5809 + } + ], + "durationMs": 0.0031, + "name": "Draw", + "startMs": 0.5788, + "visualDurationMs": 0.0031, + "visualStartMs": 0.5788 + } + ], + "durationMs": 0.2056, + "name": "DrawSprite", + "startMs": 0.3764, + "visualDurationMs": 0.2056, + "visualStartMs": 0.3764 + } + ], + "durationMs": 0.2062, + "name": "Draw Sprite: Pebble_9", + "startMs": 0.3759, + "visualDurationMs": 0.2062, + "visualStartMs": 0.3759 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0006, + "name": "ShaderSelect", + "startMs": 0.585, + "visualDurationMs": 0.0006, + "visualStartMs": 0.585 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 0.5858, + "visualDurationMs": 0.0004, + "visualStartMs": 0.5858 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 0.5868, + "visualDurationMs": 0.0013, + "visualStartMs": 0.5868 + }, + { + "durationMs": 0.0009, + "name": "TexSlot", + "startMs": 0.5883, + "visualDurationMs": 0.0009, + "visualStartMs": 0.5883 + } + ], + "durationMs": 0.0028, + "name": "SetUniforms", + "startMs": 0.5865, + "visualDurationMs": 0.0028, + "visualStartMs": 0.5865 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 0.5894, + "visualDurationMs": 0.0005, + "visualStartMs": 0.5894 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "ColorCorrection", + "startMs": 0.5904, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5904 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 0.5921, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5921 + }, + { + "durationMs": 0.0017, + "name": "L0", + "startMs": 0.594, + "visualDurationMs": 0.0017, + "visualStartMs": 0.594 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 0.5961, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5961 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 0.5978, + "visualDurationMs": 0.0015, + "visualStartMs": 0.5978 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 0.5996, + "visualDurationMs": 0.0014, + "visualStartMs": 0.5996 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 0.6013, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6013 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 0.6029, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6029 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 0.6044, + "visualDurationMs": 0.0026, + "visualStartMs": 0.6044 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 0.6074, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6074 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 0.609, + "visualDurationMs": 0.0014, + "visualStartMs": 0.609 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 0.6107, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6107 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 0.6125, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6125 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 0.6141, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6141 + }, + { + "durationMs": 0.0017, + "name": "L12", + "startMs": 0.6159, + "visualDurationMs": 0.0017, + "visualStartMs": 0.6159 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 0.6179, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6179 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 0.6196, + "visualDurationMs": 0.0034, + "visualStartMs": 0.6196 + }, + { + "durationMs": 0.0018, + "name": "L15", + "startMs": 0.6234, + "visualDurationMs": 0.0018, + "visualStartMs": 0.6234 + }, + { + "durationMs": 0.0017, + "name": "L16", + "startMs": 0.6256, + "visualDurationMs": 0.0017, + "visualStartMs": 0.6256 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 0.6277, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6277 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 0.6295, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6295 + }, + { + "durationMs": 0.0017, + "name": "L19", + "startMs": 0.6312, + "visualDurationMs": 0.0017, + "visualStartMs": 0.6312 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 0.6333, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6333 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 0.6349, + "visualDurationMs": 0.0016, + "visualStartMs": 0.6349 + }, + { + "durationMs": 0.0017, + "name": "L22", + "startMs": 0.6369, + "visualDurationMs": 0.0017, + "visualStartMs": 0.6369 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 0.6389, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6389 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 0.6406, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6406 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 0.6422, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6422 + }, + { + "durationMs": 0.0016, + "name": "L26", + "startMs": 0.6438, + "visualDurationMs": 0.0016, + "visualStartMs": 0.6438 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 0.6457, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6457 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 0.6473, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6473 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 0.649, + "visualDurationMs": 0.0013, + "visualStartMs": 0.649 + }, + { + "durationMs": 0.0055, + "name": "L30", + "startMs": 0.6507, + "visualDurationMs": 0.0055, + "visualStartMs": 0.6507 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 0.6566, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6566 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 0.6584, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6584 + }, + { + "durationMs": 0.0017, + "name": "L33", + "startMs": 0.66, + "visualDurationMs": 0.0017, + "visualStartMs": 0.66 + }, + { + "durationMs": 0.0019, + "name": "L34", + "startMs": 0.6621, + "visualDurationMs": 0.0019, + "visualStartMs": 0.6621 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 0.6643, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6643 + }, + { + "durationMs": 0.0016, + "name": "L36", + "startMs": 0.6661, + "visualDurationMs": 0.0016, + "visualStartMs": 0.6661 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 0.6681, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6681 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 0.6699, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6699 + }, + { + "durationMs": 0.0017, + "name": "L39", + "startMs": 0.6715, + "visualDurationMs": 0.0017, + "visualStartMs": 0.6715 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 0.6735, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6735 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 0.6752, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6752 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 0.6769, + "visualDurationMs": 0.0012, + "visualStartMs": 0.6769 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 0.6784, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6784 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 0.6802, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6802 + }, + { + "durationMs": 0.0016, + "name": "L45", + "startMs": 0.682, + "visualDurationMs": 0.0016, + "visualStartMs": 0.682 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 0.684, + "visualDurationMs": 0.0014, + "visualStartMs": 0.684 + }, + { + "durationMs": 0.0019, + "name": "L47", + "startMs": 0.6857, + "visualDurationMs": 0.0019, + "visualStartMs": 0.6857 + }, + { + "durationMs": 0.0024, + "name": "L48", + "startMs": 0.688, + "visualDurationMs": 0.0024, + "visualStartMs": 0.688 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 0.6908, + "visualDurationMs": 0.0013, + "visualStartMs": 0.6908 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 0.6925, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6925 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 0.6942, + "visualDurationMs": 0.0014, + "visualStartMs": 0.6942 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 0.696, + "visualDurationMs": 0.0012, + "visualStartMs": 0.696 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 0.6976, + "visualDurationMs": 0.0015, + "visualStartMs": 0.6976 + }, + { + "durationMs": 0.0021, + "name": "L54", + "startMs": 0.6994, + "visualDurationMs": 0.0021, + "visualStartMs": 0.6994 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 0.7019, + "visualDurationMs": 0.0016, + "visualStartMs": 0.7019 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 0.7038, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7038 + }, + { + "durationMs": 0.0015, + "name": "L57", + "startMs": 0.7056, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7056 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 0.7075, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7075 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 0.7094, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7094 + }, + { + "durationMs": 0.0017, + "name": "L60", + "startMs": 0.711, + "visualDurationMs": 0.0017, + "visualStartMs": 0.711 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 0.713, + "visualDurationMs": 0.0014, + "visualStartMs": 0.713 + }, + { + "durationMs": 0.0094, + "name": "L62", + "startMs": 0.7148, + "visualDurationMs": 0.0094, + "visualStartMs": 0.7148 + }, + { + "durationMs": 0.0017, + "name": "L63", + "startMs": 0.7246, + "visualDurationMs": 0.0017, + "visualStartMs": 0.7246 + }, + { + "durationMs": 0.0016, + "name": "L64", + "startMs": 0.7267, + "visualDurationMs": 0.0016, + "visualStartMs": 0.7267 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 0.7287, + "visualDurationMs": 0.0014, + "visualStartMs": 0.7287 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 0.7304, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7304 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 0.7322, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7322 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 0.7339, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7339 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 0.7355, + "visualDurationMs": 0.0014, + "visualStartMs": 0.7355 + }, + { + "durationMs": 0.0017, + "name": "L70", + "startMs": 0.7372, + "visualDurationMs": 0.0017, + "visualStartMs": 0.7372 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 0.7393, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7393 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 0.741, + "visualDurationMs": 0.0012, + "visualStartMs": 0.741 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 0.7425, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7425 + }, + { + "durationMs": 0.0015, + "name": "L74", + "startMs": 0.7442, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7442 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 0.7461, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7461 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 0.7478, + "visualDurationMs": 0.0014, + "visualStartMs": 0.7478 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 0.7495, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7495 + }, + { + "durationMs": 0.0017, + "name": "L78", + "startMs": 0.7512, + "visualDurationMs": 0.0017, + "visualStartMs": 0.7512 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 0.7532, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7532 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 0.7549, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7549 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 0.7567, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7567 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 0.7586, + "visualDurationMs": 0.0012, + "visualStartMs": 0.7586 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 0.7601, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7601 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 0.7617, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7617 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 0.7633, + "visualDurationMs": 0.0016, + "visualStartMs": 0.7633 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 0.7653, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7653 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 0.7669, + "visualDurationMs": 0.0013, + "visualStartMs": 0.7669 + }, + { + "durationMs": 0.0015, + "name": "L88", + "startMs": 0.7685, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7685 + }, + { + "durationMs": 0.0016, + "name": "L89", + "startMs": 0.7703, + "visualDurationMs": 0.0016, + "visualStartMs": 0.7703 + }, + { + "durationMs": 0.0015, + "name": "L90", + "startMs": 0.7722, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7722 + }, + { + "durationMs": 0.0016, + "name": "L91", + "startMs": 0.774, + "visualDurationMs": 0.0016, + "visualStartMs": 0.774 + }, + { + "durationMs": 0.0015, + "name": "L92", + "startMs": 0.7759, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7759 + }, + { + "durationMs": 0.0015, + "name": "L93", + "startMs": 0.7777, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7777 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 0.7796, + "visualDurationMs": 0.0012, + "visualStartMs": 0.7796 + }, + { + "durationMs": 0.0015, + "name": "L95", + "startMs": 0.7811, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7811 + }, + { + "durationMs": 0.0015, + "name": "L96", + "startMs": 0.7829, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7829 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 0.7848, + "visualDurationMs": 0.0012, + "visualStartMs": 0.7848 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 0.7864, + "visualDurationMs": 0.0012, + "visualStartMs": 0.7864 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 0.788, + "visualDurationMs": 0.0014, + "visualStartMs": 0.788 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 0.7896, + "visualDurationMs": 0.0008, + "visualStartMs": 0.7896 + } + ], + "durationMs": 0.2007, + "name": "Lighting", + "startMs": 0.59, + "visualDurationMs": 0.2007, + "visualStartMs": 0.59 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 0.7914, + "visualDurationMs": 0.0004, + "visualStartMs": 0.7914 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 0.7919, + "visualDurationMs": 0.0007, + "visualStartMs": 0.7919 + } + ], + "durationMs": 0.002, + "name": "Draw", + "startMs": 0.7908, + "visualDurationMs": 0.002, + "visualStartMs": 0.7908 + } + ], + "durationMs": 0.209, + "name": "DrawSprite", + "startMs": 0.584, + "visualDurationMs": 0.209, + "visualStartMs": 0.584 + } + ], + "durationMs": 0.2099, + "name": "Draw Sprite: Pebble_7", + "startMs": 0.5832, + "visualDurationMs": 0.2099, + "visualStartMs": 0.5832 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0006, + "name": "ShaderSelect", + "startMs": 0.7951, + "visualDurationMs": 0.0006, + "visualStartMs": 0.7951 + }, + { + "durationMs": 0.0006, + "name": "ShaderUse", + "startMs": 0.7959, + "visualDurationMs": 0.0006, + "visualStartMs": 0.7959 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 0.7973, + "visualDurationMs": 0.0015, + "visualStartMs": 0.7973 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 0.799, + "visualDurationMs": 0.0005, + "visualStartMs": 0.799 + } + ], + "durationMs": 0.0029, + "name": "SetUniforms", + "startMs": 0.7967, + "visualDurationMs": 0.0029, + "visualStartMs": 0.7967 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 0.7998, + "visualDurationMs": 0.0004, + "visualStartMs": 0.7998 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 0.8007, + "visualDurationMs": 0.0009, + "visualStartMs": 0.8007 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 0.8017, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8017 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 0.8035, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8035 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 0.805, + "visualDurationMs": 0.0014, + "visualStartMs": 0.805 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 0.8068, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8068 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 0.8083, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8083 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 0.81, + "visualDurationMs": 0.0012, + "visualStartMs": 0.81 + }, + { + "durationMs": 0.0015, + "name": "L5", + "startMs": 0.8115, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8115 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 0.8133, + "visualDurationMs": 0.0026, + "visualStartMs": 0.8133 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 0.8163, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8163 + }, + { + "durationMs": 0.0015, + "name": "L8", + "startMs": 0.8179, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8179 + }, + { + "durationMs": 0.0015, + "name": "L9", + "startMs": 0.8198, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8198 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 0.8217, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8217 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 0.8233, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8233 + }, + { + "durationMs": 0.0028, + "name": "L12", + "startMs": 0.825, + "visualDurationMs": 0.0028, + "visualStartMs": 0.825 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 0.8282, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8282 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 0.83, + "visualDurationMs": 0.0035, + "visualStartMs": 0.83 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 0.8338, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8338 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 0.8356, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8356 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 0.8374, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8374 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 0.8391, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8391 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 0.8407, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8407 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 0.8424, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8424 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 0.844, + "visualDurationMs": 0.0015, + "visualStartMs": 0.844 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 0.8459, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8459 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 0.8476, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8476 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 0.8492, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8492 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 0.8508, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8508 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 0.8523, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8523 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 0.8539, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8539 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 0.8556, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8556 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 0.8572, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8572 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 0.8591, + "visualDurationMs": 0.0049, + "visualStartMs": 0.8591 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 0.8644, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8644 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 0.8661, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8661 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 0.8677, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8677 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 0.8694, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8694 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 0.8711, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8711 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 0.8728, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8728 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 0.8744, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8744 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 0.876, + "visualDurationMs": 0.0012, + "visualStartMs": 0.876 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 0.8775, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8775 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 0.8791, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8791 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 0.8808, + "visualDurationMs": 0.0012, + "visualStartMs": 0.8808 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 0.8823, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8823 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 0.8839, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8839 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 0.8857, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8857 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 0.8874, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8874 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 0.889, + "visualDurationMs": 0.0014, + "visualStartMs": 0.889 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 0.8907, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8907 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 0.8924, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8924 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 0.8942, + "visualDurationMs": 0.0014, + "visualStartMs": 0.8942 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 0.896, + "visualDurationMs": 0.0013, + "visualStartMs": 0.896 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 0.8978, + "visualDurationMs": 0.0015, + "visualStartMs": 0.8978 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 0.8996, + "visualDurationMs": 0.0013, + "visualStartMs": 0.8996 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 0.9012, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9012 + }, + { + "durationMs": 0.0012, + "name": "L54", + "startMs": 0.9029, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9029 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 0.9045, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9045 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 0.9062, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9062 + }, + { + "durationMs": 0.0026, + "name": "L57", + "startMs": 0.9079, + "visualDurationMs": 0.0026, + "visualStartMs": 0.9079 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 0.9109, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9109 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 0.9126, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9126 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 0.9142, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9142 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 0.9159, + "visualDurationMs": 0.0015, + "visualStartMs": 0.9159 + }, + { + "durationMs": 0.0083, + "name": "L62", + "startMs": 0.9177, + "visualDurationMs": 0.0083, + "visualStartMs": 0.9177 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 0.9263, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9263 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 0.928, + "visualDurationMs": 0.0013, + "visualStartMs": 0.928 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 0.9296, + "visualDurationMs": 0.0015, + "visualStartMs": 0.9296 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 0.9314, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9314 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 0.9331, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9331 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 0.9347, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9347 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 0.9364, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9364 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 0.9382, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9382 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 0.9398, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9398 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 0.9414, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9414 + }, + { + "durationMs": 0.0017, + "name": "L73", + "startMs": 0.9429, + "visualDurationMs": 0.0017, + "visualStartMs": 0.9429 + }, + { + "durationMs": 0.0016, + "name": "L74", + "startMs": 0.9449, + "visualDurationMs": 0.0016, + "visualStartMs": 0.9449 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 0.9468, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9468 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 0.9486, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9486 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 0.9503, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9503 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 0.952, + "visualDurationMs": 0.0012, + "visualStartMs": 0.952 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 0.9536, + "visualDurationMs": 0.0015, + "visualStartMs": 0.9536 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 0.9554, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9554 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 0.957, + "visualDurationMs": 0.0014, + "visualStartMs": 0.957 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 0.9587, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9587 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 0.9603, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9603 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 0.9619, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9619 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 0.9634, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9634 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 0.9652, + "visualDurationMs": 0.0015, + "visualStartMs": 0.9652 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 0.9671, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9671 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 0.9688, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9688 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 0.9705, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9705 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 0.9722, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9722 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 0.9737, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9737 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 0.9754, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9754 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 0.977, + "visualDurationMs": 0.0012, + "visualStartMs": 0.977 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 0.9785, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9785 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 0.9802, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9802 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 0.9818, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9818 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 0.9834, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9834 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 0.985, + "visualDurationMs": 0.0012, + "visualStartMs": 0.985 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 0.9865, + "visualDurationMs": 0.0013, + "visualStartMs": 0.9865 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 0.988, + "visualDurationMs": 0.0005, + "visualStartMs": 0.988 + } + ], + "durationMs": 0.1884, + "name": "Lighting", + "startMs": 0.8003, + "visualDurationMs": 0.1884, + "visualStartMs": 0.8003 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 0.9893, + "visualDurationMs": 0.0004, + "visualStartMs": 0.9893 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 0.9899, + "visualDurationMs": 0.0004, + "visualStartMs": 0.9899 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 0.9889, + "visualDurationMs": 0.0016, + "visualStartMs": 0.9889 + } + ], + "durationMs": 0.196, + "name": "DrawSprite", + "startMs": 0.7946, + "visualDurationMs": 0.196, + "visualStartMs": 0.7946 + } + ], + "durationMs": 0.1968, + "name": "Draw Sprite: Pebble_6", + "startMs": 0.7939, + "visualDurationMs": 0.1968, + "visualStartMs": 0.7939 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 0.9924, + "visualDurationMs": 0.0003, + "visualStartMs": 0.9924 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 0.9929, + "visualDurationMs": 0.0003, + "visualStartMs": 0.9929 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 0.9937, + "visualDurationMs": 0.0015, + "visualStartMs": 0.9937 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 0.9954, + "visualDurationMs": 0.0006, + "visualStartMs": 0.9954 + } + ], + "durationMs": 0.0027, + "name": "SetUniforms", + "startMs": 0.9934, + "visualDurationMs": 0.0027, + "visualStartMs": 0.9934 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 0.9962, + "visualDurationMs": 0.0004, + "visualStartMs": 0.9962 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 0.9971, + "visualDurationMs": 0.0009, + "visualStartMs": 0.9971 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 0.9981, + "visualDurationMs": 0.0014, + "visualStartMs": 0.9981 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 0.9998, + "visualDurationMs": 0.0012, + "visualStartMs": 0.9998 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 1.0014, + "visualDurationMs": 0.0012, + "visualStartMs": 1.0014 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 1.0029, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0029 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 1.0045, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0045 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 1.0061, + "visualDurationMs": 0.0012, + "visualStartMs": 1.0061 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 1.0077, + "visualDurationMs": 0.0012, + "visualStartMs": 1.0077 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 1.0092, + "visualDurationMs": 0.0026, + "visualStartMs": 1.0092 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 1.0122, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0122 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 1.0139, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0139 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 1.0157, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0157 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 1.0174, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0174 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 1.0191, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0191 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 1.0209, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0209 + }, + { + "durationMs": 0.0105, + "name": "L13", + "startMs": 1.0227, + "visualDurationMs": 0.0105, + "visualStartMs": 1.0227 + }, + { + "durationMs": 0.0044, + "name": "L14", + "startMs": 1.0336, + "visualDurationMs": 0.0044, + "visualStartMs": 1.0336 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 1.0383, + "visualDurationMs": 0.0017, + "visualStartMs": 1.0383 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 1.0403, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0403 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 1.0421, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0421 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 1.0438, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0438 + }, + { + "durationMs": 0.0017, + "name": "L19", + "startMs": 1.0455, + "visualDurationMs": 0.0017, + "visualStartMs": 1.0455 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 1.0475, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0475 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 1.0491, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0491 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 1.051, + "visualDurationMs": 0.0015, + "visualStartMs": 1.051 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 1.0529, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0529 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 1.0547, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0547 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 1.0563, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0563 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 1.058, + "visualDurationMs": 0.0013, + "visualStartMs": 1.058 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 1.0597, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0597 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 1.0613, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0613 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 1.0632, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0632 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 1.0649, + "visualDurationMs": 0.0049, + "visualStartMs": 1.0649 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 1.0701, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0701 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 1.0719, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0719 + }, + { + "durationMs": 0.0025, + "name": "L33", + "startMs": 1.0736, + "visualDurationMs": 0.0025, + "visualStartMs": 1.0736 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 1.0764, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0764 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 1.0782, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0782 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 1.0798, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0798 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 1.0815, + "visualDurationMs": 0.0012, + "visualStartMs": 1.0815 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 1.0831, + "visualDurationMs": 0.0012, + "visualStartMs": 1.0831 + }, + { + "durationMs": 0.0014, + "name": "L39", + "startMs": 1.0847, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0847 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 1.0865, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0865 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 1.0883, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0883 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 1.0899, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0899 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 1.0916, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0916 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 1.0933, + "visualDurationMs": 0.0015, + "visualStartMs": 1.0933 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 1.0951, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0951 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 1.0968, + "visualDurationMs": 0.0014, + "visualStartMs": 1.0968 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 1.0985, + "visualDurationMs": 0.0013, + "visualStartMs": 1.0985 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 1.1002, + "visualDurationMs": 0.0015, + "visualStartMs": 1.1002 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 1.102, + "visualDurationMs": 0.0014, + "visualStartMs": 1.102 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 1.1038, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1038 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 1.1055, + "visualDurationMs": 0.0015, + "visualStartMs": 1.1055 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 1.1073, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1073 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 1.109, + "visualDurationMs": 0.0014, + "visualStartMs": 1.109 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 1.1107, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1107 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 1.1124, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1124 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 1.114, + "visualDurationMs": 0.0013, + "visualStartMs": 1.114 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 1.1157, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1157 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 1.1173, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1173 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 1.119, + "visualDurationMs": 0.0013, + "visualStartMs": 1.119 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 1.1207, + "visualDurationMs": 0.0015, + "visualStartMs": 1.1207 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 1.1226, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1226 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 1.1243, + "visualDurationMs": 0.0086, + "visualStartMs": 1.1243 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 1.1333, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1333 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 1.135, + "visualDurationMs": 0.0014, + "visualStartMs": 1.135 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 1.1367, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1367 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 1.1384, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1384 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 1.1401, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1401 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 1.1418, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1418 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 1.1434, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1434 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 1.1451, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1451 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 1.1467, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1467 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 1.1483, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1483 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 1.1499, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1499 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 1.1516, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1516 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 1.1532, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1532 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 1.1549, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1549 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 1.1564, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1564 + }, + { + "durationMs": 0.009, + "name": "L78", + "startMs": 1.1581, + "visualDurationMs": 0.009, + "visualStartMs": 1.1581 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 1.1675, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1675 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 1.1692, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1692 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 1.1709, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1709 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 1.1725, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1725 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 1.1741, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1741 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 1.1757, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1757 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 1.1773, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1773 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 1.179, + "visualDurationMs": 0.0013, + "visualStartMs": 1.179 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 1.1806, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1806 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 1.1823, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1823 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 1.1839, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1839 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 1.1855, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1855 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 1.1871, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1871 + }, + { + "durationMs": 0.0018, + "name": "L92", + "startMs": 1.1887, + "visualDurationMs": 0.0018, + "visualStartMs": 1.1887 + }, + { + "durationMs": 0.0014, + "name": "L93", + "startMs": 1.1909, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1909 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 1.1926, + "visualDurationMs": 0.0015, + "visualStartMs": 1.1926 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 1.1945, + "visualDurationMs": 0.0014, + "visualStartMs": 1.1945 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 1.1962, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1962 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 1.1979, + "visualDurationMs": 0.0013, + "visualStartMs": 1.1979 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 1.1996, + "visualDurationMs": 0.0012, + "visualStartMs": 1.1996 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 1.2012, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2012 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 1.2026, + "visualDurationMs": 0.0007, + "visualStartMs": 1.2026 + } + ], + "durationMs": 0.207, + "name": "Lighting", + "startMs": 0.9967, + "visualDurationMs": 0.207, + "visualStartMs": 0.9967 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 1.2042, + "visualDurationMs": 0.0005, + "visualStartMs": 1.2042 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 1.2048, + "visualDurationMs": 0.0005, + "visualStartMs": 1.2048 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 1.2038, + "visualDurationMs": 0.0016, + "visualStartMs": 1.2038 + } + ], + "durationMs": 0.2137, + "name": "DrawSprite", + "startMs": 0.9918, + "visualDurationMs": 0.2137, + "visualStartMs": 0.9918 + } + ], + "durationMs": 0.2142, + "name": "Draw Sprite: Pebble_5", + "startMs": 0.9914, + "visualDurationMs": 0.2142, + "visualStartMs": 0.9914 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0005, + "name": "ShaderSelect", + "startMs": 1.2073, + "visualDurationMs": 0.0005, + "visualStartMs": 1.2073 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 1.2079, + "visualDurationMs": 0.0004, + "visualStartMs": 1.2079 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 1.2089, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2089 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 1.2103, + "visualDurationMs": 0.0005, + "visualStartMs": 1.2103 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 1.2085, + "visualDurationMs": 0.0025, + "visualStartMs": 1.2085 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 1.2111, + "visualDurationMs": 0.0004, + "visualStartMs": 1.2111 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 1.2119, + "visualDurationMs": 0.0009, + "visualStartMs": 1.2119 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 1.2129, + "visualDurationMs": 0.0016, + "visualStartMs": 1.2129 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 1.2148, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2148 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 1.2165, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2165 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 1.2182, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2182 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 1.2198, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2198 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 1.2214, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2214 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 1.2229, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2229 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 1.2244, + "visualDurationMs": 0.0027, + "visualStartMs": 1.2244 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 1.2274, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2274 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 1.2292, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2292 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 1.2307, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2307 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 1.2324, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2324 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 1.234, + "visualDurationMs": 0.0015, + "visualStartMs": 1.234 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 1.2358, + "visualDurationMs": 0.0015, + "visualStartMs": 1.2358 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 1.2377, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2377 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 1.2394, + "visualDurationMs": 0.0033, + "visualStartMs": 1.2394 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 1.243, + "visualDurationMs": 0.0015, + "visualStartMs": 1.243 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 1.2448, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2448 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 1.2465, + "visualDurationMs": 0.0015, + "visualStartMs": 1.2465 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 1.2483, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2483 + }, + { + "durationMs": 0.0016, + "name": "L19", + "startMs": 1.25, + "visualDurationMs": 0.0016, + "visualStartMs": 1.25 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 1.2519, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2519 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 1.2536, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2536 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 1.2554, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2554 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 1.2571, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2571 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 1.2587, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2587 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 1.2604, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2604 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 1.2621, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2621 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 1.2637, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2637 + }, + { + "durationMs": 0.0015, + "name": "L28", + "startMs": 1.2652, + "visualDurationMs": 0.0015, + "visualStartMs": 1.2652 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 1.267, + "visualDurationMs": 0.0013, + "visualStartMs": 1.267 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 1.2687, + "visualDurationMs": 0.005, + "visualStartMs": 1.2687 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 1.2741, + "visualDurationMs": 0.0015, + "visualStartMs": 1.2741 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 1.2759, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2759 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 1.2774, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2774 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 1.2791, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2791 + }, + { + "durationMs": 0.0015, + "name": "L35", + "startMs": 1.2808, + "visualDurationMs": 0.0015, + "visualStartMs": 1.2808 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 1.2826, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2826 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 1.2842, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2842 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 1.2858, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2858 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 1.2874, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2874 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 1.2889, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2889 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 1.2906, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2906 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 1.2923, + "visualDurationMs": 0.0012, + "visualStartMs": 1.2923 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 1.2939, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2939 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 1.2956, + "visualDurationMs": 0.0014, + "visualStartMs": 1.2956 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 1.2974, + "visualDurationMs": 0.0013, + "visualStartMs": 1.2974 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 1.299, + "visualDurationMs": 0.0015, + "visualStartMs": 1.299 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 1.3008, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3008 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 1.3026, + "visualDurationMs": 0.0016, + "visualStartMs": 1.3026 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 1.3045, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3045 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 1.3062, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3062 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 1.3079, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3079 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 1.3096, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3096 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 1.3113, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3113 + }, + { + "durationMs": 0.0027, + "name": "L54", + "startMs": 1.3131, + "visualDurationMs": 0.0027, + "visualStartMs": 1.3131 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 1.3162, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3162 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 1.3179, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3179 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 1.3195, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3195 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 1.3211, + "visualDurationMs": 0.0015, + "visualStartMs": 1.3211 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 1.3229, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3229 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 1.3245, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3245 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 1.3262, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3262 + }, + { + "durationMs": 0.0104, + "name": "L62", + "startMs": 1.328, + "visualDurationMs": 0.0104, + "visualStartMs": 1.328 + }, + { + "durationMs": 0.0022, + "name": "L63", + "startMs": 1.3388, + "visualDurationMs": 0.0022, + "visualStartMs": 1.3388 + }, + { + "durationMs": 0.0017, + "name": "L64", + "startMs": 1.3415, + "visualDurationMs": 0.0017, + "visualStartMs": 1.3415 + }, + { + "durationMs": 0.0022, + "name": "L65", + "startMs": 1.3436, + "visualDurationMs": 0.0022, + "visualStartMs": 1.3436 + }, + { + "durationMs": 0.002, + "name": "L66", + "startMs": 1.3462, + "visualDurationMs": 0.002, + "visualStartMs": 1.3462 + }, + { + "durationMs": 0.0023, + "name": "L67", + "startMs": 1.3487, + "visualDurationMs": 0.0023, + "visualStartMs": 1.3487 + }, + { + "durationMs": 0.0019, + "name": "L68", + "startMs": 1.3514, + "visualDurationMs": 0.0019, + "visualStartMs": 1.3514 + }, + { + "durationMs": 0.0022, + "name": "L69", + "startMs": 1.3539, + "visualDurationMs": 0.0022, + "visualStartMs": 1.3539 + }, + { + "durationMs": 0.0019, + "name": "L70", + "startMs": 1.3565, + "visualDurationMs": 0.0019, + "visualStartMs": 1.3565 + }, + { + "durationMs": 0.0018, + "name": "L71", + "startMs": 1.3588, + "visualDurationMs": 0.0018, + "visualStartMs": 1.3588 + }, + { + "durationMs": 0.0022, + "name": "L72", + "startMs": 1.3611, + "visualDurationMs": 0.0022, + "visualStartMs": 1.3611 + }, + { + "durationMs": 0.0015, + "name": "L73", + "startMs": 1.3637, + "visualDurationMs": 0.0015, + "visualStartMs": 1.3637 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 1.3656, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3656 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 1.3673, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3673 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 1.3688, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3688 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 1.3705, + "visualDurationMs": 0.0014, + "visualStartMs": 1.3705 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 1.3723, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3723 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 1.374, + "visualDurationMs": 0.0013, + "visualStartMs": 1.374 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 1.3757, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3757 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 1.3773, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3773 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 1.3789, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3789 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 1.3804, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3804 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 1.382, + "visualDurationMs": 0.0012, + "visualStartMs": 1.382 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 1.3835, + "visualDurationMs": 0.0015, + "visualStartMs": 1.3835 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 1.3854, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3854 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 1.387, + "visualDurationMs": 0.0013, + "visualStartMs": 1.387 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 1.3886, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3886 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 1.3902, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3902 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 1.3918, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3918 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 1.3933, + "visualDurationMs": 0.0013, + "visualStartMs": 1.3933 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 1.3949, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3949 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 1.3965, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3965 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 1.398, + "visualDurationMs": 0.0012, + "visualStartMs": 1.398 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 1.3996, + "visualDurationMs": 0.0012, + "visualStartMs": 1.3996 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 1.4012, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4012 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 1.4028, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4028 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 1.4043, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4043 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 1.406, + "visualDurationMs": 0.0012, + "visualStartMs": 1.406 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 1.4074, + "visualDurationMs": 0.0007, + "visualStartMs": 1.4074 + } + ], + "durationMs": 0.197, + "name": "Lighting", + "startMs": 1.2116, + "visualDurationMs": 0.197, + "visualStartMs": 1.2116 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 1.4091, + "visualDurationMs": 0.0004, + "visualStartMs": 1.4091 + }, + { + "durationMs": 0.0003, + "name": "GL Draw", + "startMs": 1.4097, + "visualDurationMs": 0.0003, + "visualStartMs": 1.4097 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 1.4087, + "visualDurationMs": 0.0016, + "visualStartMs": 1.4087 + } + ], + "durationMs": 0.2035, + "name": "DrawSprite", + "startMs": 1.2069, + "visualDurationMs": 0.2035, + "visualStartMs": 1.2069 + } + ], + "durationMs": 0.2042, + "name": "Draw Sprite: Pebble_4", + "startMs": 1.2064, + "visualDurationMs": 0.2042, + "visualStartMs": 1.2064 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 1.4122, + "visualDurationMs": 0.0003, + "visualStartMs": 1.4122 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 1.4127, + "visualDurationMs": 0.0004, + "visualStartMs": 1.4127 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 1.4137, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4137 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 1.4152, + "visualDurationMs": 0.0004, + "visualStartMs": 1.4152 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 1.4133, + "visualDurationMs": 0.0024, + "visualStartMs": 1.4133 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 1.4159, + "visualDurationMs": 0.0004, + "visualStartMs": 1.4159 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 1.4167, + "visualDurationMs": 0.0009, + "visualStartMs": 1.4167 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 1.4178, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4178 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 1.4195, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4195 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 1.4211, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4211 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 1.4227, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4227 + }, + { + "durationMs": 0.0012, + "name": "L3", + "startMs": 1.4243, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4243 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 1.4258, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4258 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 1.4274, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4274 + }, + { + "durationMs": 0.0034, + "name": "L6", + "startMs": 1.429, + "visualDurationMs": 0.0034, + "visualStartMs": 1.429 + }, + { + "durationMs": 0.0015, + "name": "L7", + "startMs": 1.4328, + "visualDurationMs": 0.0015, + "visualStartMs": 1.4328 + }, + { + "durationMs": 0.0016, + "name": "L8", + "startMs": 1.4347, + "visualDurationMs": 0.0016, + "visualStartMs": 1.4347 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 1.4367, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4367 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 1.4384, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4384 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 1.4401, + "visualDurationMs": 0.0016, + "visualStartMs": 1.4401 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 1.442, + "visualDurationMs": 0.0015, + "visualStartMs": 1.442 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 1.4439, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4439 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 1.4456, + "visualDurationMs": 0.0036, + "visualStartMs": 1.4456 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 1.4496, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4496 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 1.4514, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4514 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 1.4531, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4531 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 1.4548, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4548 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 1.4565, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4565 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 1.4582, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4582 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 1.4598, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4598 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 1.4615, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4615 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 1.4633, + "visualDurationMs": 0.0014, + "visualStartMs": 1.4633 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 1.465, + "visualDurationMs": 0.0013, + "visualStartMs": 1.465 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 1.4666, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4666 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 1.4682, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4682 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 1.4698, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4698 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 1.4714, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4714 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 1.473, + "visualDurationMs": 0.0014, + "visualStartMs": 1.473 + }, + { + "durationMs": 0.0085, + "name": "L30", + "startMs": 1.4748, + "visualDurationMs": 0.0085, + "visualStartMs": 1.4748 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 1.4837, + "visualDurationMs": 0.0015, + "visualStartMs": 1.4837 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 1.4856, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4856 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 1.4871, + "visualDurationMs": 0.0016, + "visualStartMs": 1.4871 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 1.489, + "visualDurationMs": 0.0014, + "visualStartMs": 1.489 + }, + { + "durationMs": 0.0012, + "name": "L35", + "startMs": 1.4908, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4908 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 1.4924, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4924 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 1.494, + "visualDurationMs": 0.0012, + "visualStartMs": 1.494 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 1.4955, + "visualDurationMs": 0.0013, + "visualStartMs": 1.4955 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 1.4972, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4972 + }, + { + "durationMs": 0.0012, + "name": "L40", + "startMs": 1.4988, + "visualDurationMs": 0.0012, + "visualStartMs": 1.4988 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 1.5004, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5004 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 1.502, + "visualDurationMs": 0.0013, + "visualStartMs": 1.502 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 1.5036, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5036 + }, + { + "durationMs": 0.0013, + "name": "L44", + "startMs": 1.5054, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5054 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 1.5071, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5071 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 1.5087, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5087 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 1.5104, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5104 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 1.5121, + "visualDurationMs": 0.0015, + "visualStartMs": 1.5121 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 1.5139, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5139 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 1.5156, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5156 + }, + { + "durationMs": 0.0016, + "name": "L51", + "startMs": 1.5173, + "visualDurationMs": 0.0016, + "visualStartMs": 1.5173 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 1.5192, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5192 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 1.5209, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5209 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 1.5226, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5226 + }, + { + "durationMs": 0.0015, + "name": "L55", + "startMs": 1.5242, + "visualDurationMs": 0.0015, + "visualStartMs": 1.5242 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 1.526, + "visualDurationMs": 0.0015, + "visualStartMs": 1.526 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 1.5278, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5278 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 1.5294, + "visualDurationMs": 0.0015, + "visualStartMs": 1.5294 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 1.5312, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5312 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 1.5328, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5328 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 1.5345, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5345 + }, + { + "durationMs": 0.0091, + "name": "L62", + "startMs": 1.5362, + "visualDurationMs": 0.0091, + "visualStartMs": 1.5362 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 1.5456, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5456 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 1.5473, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5473 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 1.549, + "visualDurationMs": 0.0013, + "visualStartMs": 1.549 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 1.5507, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5507 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 1.5523, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5523 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 1.554, + "visualDurationMs": 0.0014, + "visualStartMs": 1.554 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 1.5557, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5557 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 1.5574, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5574 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 1.559, + "visualDurationMs": 0.0012, + "visualStartMs": 1.559 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 1.5606, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5606 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 1.5622, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5622 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 1.5638, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5638 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 1.5653, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5653 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 1.5669, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5669 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 1.5684, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5684 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 1.57, + "visualDurationMs": 0.0012, + "visualStartMs": 1.57 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 1.5716, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5716 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 1.5732, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5732 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 1.5748, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5748 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 1.5763, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5763 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 1.5779, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5779 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 1.5794, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5794 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 1.581, + "visualDurationMs": 0.0013, + "visualStartMs": 1.581 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 1.5826, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5826 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 1.5842, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5842 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 1.5858, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5858 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 1.5874, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5874 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 1.589, + "visualDurationMs": 0.0012, + "visualStartMs": 1.589 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 1.5905, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5905 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 1.5922, + "visualDurationMs": 0.0012, + "visualStartMs": 1.5922 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 1.5937, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5937 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 1.5953, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5953 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 1.5969, + "visualDurationMs": 0.0013, + "visualStartMs": 1.5969 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 1.5985, + "visualDurationMs": 0.0014, + "visualStartMs": 1.5985 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 1.6002, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6002 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 1.6019, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6019 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 1.6035, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6035 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 1.6049, + "visualDurationMs": 0.0006, + "visualStartMs": 1.6049 + } + ], + "durationMs": 0.1895, + "name": "Lighting", + "startMs": 1.4164, + "visualDurationMs": 0.1895, + "visualStartMs": 1.4164 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 1.6064, + "visualDurationMs": 0.0005, + "visualStartMs": 1.6064 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 1.607, + "visualDurationMs": 0.0005, + "visualStartMs": 1.607 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 1.606, + "visualDurationMs": 0.0017, + "visualStartMs": 1.606 + } + ], + "durationMs": 0.196, + "name": "DrawSprite", + "startMs": 1.4118, + "visualDurationMs": 0.196, + "visualStartMs": 1.4118 + } + ], + "durationMs": 0.1965, + "name": "Draw Sprite: Pebble_3", + "startMs": 1.4114, + "visualDurationMs": 0.1965, + "visualStartMs": 1.4114 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 1.61, + "visualDurationMs": 0.0003, + "visualStartMs": 1.61 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 1.6105, + "visualDurationMs": 0.0003, + "visualStartMs": 1.6105 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 1.6114, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6114 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 1.6129, + "visualDurationMs": 0.0006, + "visualStartMs": 1.6129 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 1.6111, + "visualDurationMs": 0.0025, + "visualStartMs": 1.6111 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 1.6138, + "visualDurationMs": 0.0003, + "visualStartMs": 1.6138 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 1.6146, + "visualDurationMs": 0.0009, + "visualStartMs": 1.6146 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 1.6156, + "visualDurationMs": 0.0015, + "visualStartMs": 1.6156 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 1.6175, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6175 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 1.619, + "visualDurationMs": 0.0015, + "visualStartMs": 1.619 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 1.6208, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6208 + }, + { + "durationMs": 0.0012, + "name": "L3", + "startMs": 1.6225, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6225 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 1.6241, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6241 + }, + { + "durationMs": 0.0038, + "name": "L5", + "startMs": 1.6258, + "visualDurationMs": 0.0038, + "visualStartMs": 1.6258 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 1.6299, + "visualDurationMs": 0.0027, + "visualStartMs": 1.6299 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 1.633, + "visualDurationMs": 0.0013, + "visualStartMs": 1.633 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 1.6346, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6346 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 1.6362, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6362 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 1.6379, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6379 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 1.6395, + "visualDurationMs": 0.0015, + "visualStartMs": 1.6395 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 1.6413, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6413 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 1.643, + "visualDurationMs": 0.0013, + "visualStartMs": 1.643 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 1.6446, + "visualDurationMs": 0.0035, + "visualStartMs": 1.6446 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 1.6485, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6485 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 1.6503, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6503 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 1.6519, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6519 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 1.6537, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6537 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 1.6553, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6553 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 1.657, + "visualDurationMs": 0.0013, + "visualStartMs": 1.657 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 1.6586, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6586 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 1.6603, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6603 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 1.662, + "visualDurationMs": 0.0013, + "visualStartMs": 1.662 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 1.6637, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6637 + }, + { + "durationMs": 0.0018, + "name": "L25", + "startMs": 1.6655, + "visualDurationMs": 0.0018, + "visualStartMs": 1.6655 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 1.6677, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6677 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 1.6695, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6695 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 1.6712, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6712 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 1.673, + "visualDurationMs": 0.0014, + "visualStartMs": 1.673 + }, + { + "durationMs": 0.0056, + "name": "L30", + "startMs": 1.6748, + "visualDurationMs": 0.0056, + "visualStartMs": 1.6748 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 1.6807, + "visualDurationMs": 0.0016, + "visualStartMs": 1.6807 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 1.6826, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6826 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 1.6843, + "visualDurationMs": 0.0015, + "visualStartMs": 1.6843 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 1.6862, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6862 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 1.688, + "visualDurationMs": 0.0013, + "visualStartMs": 1.688 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 1.6896, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6896 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 1.6913, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6913 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 1.6928, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6928 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 1.6944, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6944 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 1.6959, + "visualDurationMs": 0.0014, + "visualStartMs": 1.6959 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 1.6976, + "visualDurationMs": 0.0013, + "visualStartMs": 1.6976 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 1.6993, + "visualDurationMs": 0.0012, + "visualStartMs": 1.6993 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 1.7009, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7009 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 1.7026, + "visualDurationMs": 0.0015, + "visualStartMs": 1.7026 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 1.7044, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7044 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 1.7061, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7061 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 1.7078, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7078 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 1.7095, + "visualDurationMs": 0.0015, + "visualStartMs": 1.7095 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 1.7113, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7113 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 1.7131, + "visualDurationMs": 0.0016, + "visualStartMs": 1.7131 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 1.715, + "visualDurationMs": 0.0015, + "visualStartMs": 1.715 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 1.7169, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7169 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 1.7185, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7185 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 1.7201, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7201 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 1.7218, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7218 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 1.7235, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7235 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 1.7252, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7252 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 1.7269, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7269 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 1.7287, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7287 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 1.7304, + "visualDurationMs": 0.0015, + "visualStartMs": 1.7304 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 1.7322, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7322 + }, + { + "durationMs": 0.0083, + "name": "L62", + "startMs": 1.734, + "visualDurationMs": 0.0083, + "visualStartMs": 1.734 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 1.7427, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7427 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 1.7445, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7445 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 1.7461, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7461 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 1.7479, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7479 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 1.7496, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7496 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 1.7514, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7514 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 1.7531, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7531 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 1.7547, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7547 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 1.7563, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7563 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 1.7579, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7579 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 1.7595, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7595 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 1.7611, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7611 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 1.7628, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7628 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 1.7646, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7646 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 1.7662, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7662 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 1.7679, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7679 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 1.7694, + "visualDurationMs": 0.0015, + "visualStartMs": 1.7694 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 1.7712, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7712 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 1.7729, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7729 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 1.7744, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7744 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 1.776, + "visualDurationMs": 0.0012, + "visualStartMs": 1.776 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 1.7775, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7775 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 1.7791, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7791 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 1.7808, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7808 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 1.7825, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7825 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 1.7842, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7842 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 1.7858, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7858 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 1.7875, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7875 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 1.7892, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7892 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 1.7909, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7909 + }, + { + "durationMs": 0.0011, + "name": "L93", + "startMs": 1.7926, + "visualDurationMs": 0.0011, + "visualStartMs": 1.7926 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 1.7941, + "visualDurationMs": 0.0014, + "visualStartMs": 1.7941 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 1.7959, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7959 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 1.7975, + "visualDurationMs": 0.0012, + "visualStartMs": 1.7975 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 1.7991, + "visualDurationMs": 0.0013, + "visualStartMs": 1.7991 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 1.8007, + "visualDurationMs": 0.0012, + "visualStartMs": 1.8007 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 1.8022, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8022 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 1.8036, + "visualDurationMs": 0.0006, + "visualStartMs": 1.8036 + } + ], + "durationMs": 0.1901, + "name": "Lighting", + "startMs": 1.6143, + "visualDurationMs": 0.1901, + "visualStartMs": 1.6143 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 1.8049, + "visualDurationMs": 0.0003, + "visualStartMs": 1.8049 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 1.8054, + "visualDurationMs": 0.0004, + "visualStartMs": 1.8054 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 1.8046, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8046 + } + ], + "durationMs": 0.1965, + "name": "DrawSprite", + "startMs": 1.6096, + "visualDurationMs": 0.1965, + "visualStartMs": 1.6096 + } + ], + "durationMs": 0.197, + "name": "Draw Sprite: Pebble_0", + "startMs": 1.6092, + "visualDurationMs": 0.197, + "visualStartMs": 1.6092 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 1.8094, + "visualDurationMs": 0.0003, + "visualStartMs": 1.8094 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 1.8099, + "visualDurationMs": 0.0003, + "visualStartMs": 1.8099 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 1.8109, + "visualDurationMs": 0.0012, + "visualStartMs": 1.8109 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 1.8123, + "visualDurationMs": 0.0006, + "visualStartMs": 1.8123 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 1.8105, + "visualDurationMs": 0.0025, + "visualStartMs": 1.8105 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 1.8131, + "visualDurationMs": 0.0004, + "visualStartMs": 1.8131 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 1.8139, + "visualDurationMs": 0.0011, + "visualStartMs": 1.8139 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 1.8152, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8152 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 1.817, + "visualDurationMs": 0.0012, + "visualStartMs": 1.817 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 1.8186, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8186 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 1.8203, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8203 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 1.8219, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8219 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 1.8236, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8236 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 1.8252, + "visualDurationMs": 0.0012, + "visualStartMs": 1.8252 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 1.8268, + "visualDurationMs": 0.0025, + "visualStartMs": 1.8268 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 1.8296, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8296 + }, + { + "durationMs": 0.0015, + "name": "L8", + "startMs": 1.8312, + "visualDurationMs": 0.0015, + "visualStartMs": 1.8312 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 1.833, + "visualDurationMs": 0.0013, + "visualStartMs": 1.833 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 1.8347, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8347 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 1.8364, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8364 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 1.8381, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8381 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 1.8398, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8398 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 1.8415, + "visualDurationMs": 0.0034, + "visualStartMs": 1.8415 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 1.8453, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8453 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 1.8471, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8471 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 1.8489, + "visualDurationMs": 0.0015, + "visualStartMs": 1.8489 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 1.8507, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8507 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 1.8524, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8524 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 1.8541, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8541 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 1.8558, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8558 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 1.8574, + "visualDurationMs": 0.0015, + "visualStartMs": 1.8574 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 1.8592, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8592 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 1.8608, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8608 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 1.8626, + "visualDurationMs": 0.0012, + "visualStartMs": 1.8626 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 1.8641, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8641 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 1.8657, + "visualDurationMs": 0.0012, + "visualStartMs": 1.8657 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 1.8673, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8673 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 1.869, + "visualDurationMs": 0.0013, + "visualStartMs": 1.869 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 1.8707, + "visualDurationMs": 0.0049, + "visualStartMs": 1.8707 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 1.876, + "visualDurationMs": 0.0014, + "visualStartMs": 1.876 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 1.8777, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8777 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 1.8794, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8794 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 1.8811, + "visualDurationMs": 0.0015, + "visualStartMs": 1.8811 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 1.883, + "visualDurationMs": 0.0014, + "visualStartMs": 1.883 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 1.8847, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8847 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 1.8863, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8863 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 1.8879, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8879 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 1.8895, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8895 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 1.8911, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8911 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 1.8928, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8928 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 1.8945, + "visualDurationMs": 0.0013, + "visualStartMs": 1.8945 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 1.8961, + "visualDurationMs": 0.0014, + "visualStartMs": 1.8961 + }, + { + "durationMs": 0.002, + "name": "L44", + "startMs": 1.8978, + "visualDurationMs": 0.002, + "visualStartMs": 1.8978 + }, + { + "durationMs": 0.0016, + "name": "L45", + "startMs": 1.9002, + "visualDurationMs": 0.0016, + "visualStartMs": 1.9002 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 1.9022, + "visualDurationMs": 0.0015, + "visualStartMs": 1.9022 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 1.904, + "visualDurationMs": 0.0014, + "visualStartMs": 1.904 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 1.9058, + "visualDurationMs": 0.0016, + "visualStartMs": 1.9058 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 1.9078, + "visualDurationMs": 0.0016, + "visualStartMs": 1.9078 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 1.9097, + "visualDurationMs": 0.0015, + "visualStartMs": 1.9097 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 1.9115, + "visualDurationMs": 0.0015, + "visualStartMs": 1.9115 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 1.9134, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9134 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 1.9151, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9151 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 1.9169, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9169 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 1.9186, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9186 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 1.9203, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9203 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 1.922, + "visualDurationMs": 0.0013, + "visualStartMs": 1.922 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 1.9237, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9237 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 1.9254, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9254 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 1.9271, + "visualDurationMs": 0.0015, + "visualStartMs": 1.9271 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 1.9289, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9289 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 1.9306, + "visualDurationMs": 0.0084, + "visualStartMs": 1.9306 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 1.9394, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9394 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 1.941, + "visualDurationMs": 0.0014, + "visualStartMs": 1.941 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 1.9427, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9427 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 1.9445, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9445 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 1.9461, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9461 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 1.9478, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9478 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 1.9494, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9494 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 1.9512, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9512 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 1.9527, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9527 + }, + { + "durationMs": 0.0016, + "name": "L72", + "startMs": 1.9544, + "visualDurationMs": 0.0016, + "visualStartMs": 1.9544 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 1.9563, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9563 + }, + { + "durationMs": 0.0049, + "name": "L74", + "startMs": 1.9581, + "visualDurationMs": 0.0049, + "visualStartMs": 1.9581 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 1.9633, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9633 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 1.965, + "visualDurationMs": 0.0012, + "visualStartMs": 1.965 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 1.9666, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9666 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 1.9683, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9683 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 1.9699, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9699 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 1.9716, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9716 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 1.9733, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9733 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 1.9748, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9748 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 1.9764, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9764 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 1.978, + "visualDurationMs": 0.0012, + "visualStartMs": 1.978 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 1.9796, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9796 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 1.9812, + "visualDurationMs": 0.0014, + "visualStartMs": 1.9812 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 1.983, + "visualDurationMs": 0.0012, + "visualStartMs": 1.983 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 1.9846, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9846 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 1.9862, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9862 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 1.9878, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9878 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 1.9894, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9894 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 1.9911, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9911 + }, + { + "durationMs": 0.0016, + "name": "L93", + "startMs": 1.9926, + "visualDurationMs": 0.0016, + "visualStartMs": 1.9926 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 1.9945, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9945 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 1.9961, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9961 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 1.9978, + "visualDurationMs": 0.0012, + "visualStartMs": 1.9978 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 1.9993, + "visualDurationMs": 0.0013, + "visualStartMs": 1.9993 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 2.001, + "visualDurationMs": 0.0012, + "visualStartMs": 2.001 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 2.0026, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0026 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 2.004, + "visualDurationMs": 0.0005, + "visualStartMs": 2.004 + } + ], + "durationMs": 0.1911, + "name": "Lighting", + "startMs": 1.8136, + "visualDurationMs": 0.1911, + "visualStartMs": 1.8136 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 2.0052, + "visualDurationMs": 0.0004, + "visualStartMs": 2.0052 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 2.0058, + "visualDurationMs": 0.0004, + "visualStartMs": 2.0058 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 2.0049, + "visualDurationMs": 0.0015, + "visualStartMs": 2.0049 + } + ], + "durationMs": 0.1974, + "name": "DrawSprite", + "startMs": 1.8091, + "visualDurationMs": 0.1974, + "visualStartMs": 1.8091 + } + ], + "durationMs": 0.1994, + "name": "Draw Sprite: Pebble_2", + "startMs": 1.8072, + "visualDurationMs": 0.1994, + "visualStartMs": 1.8072 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 2.0081, + "visualDurationMs": 0.0003, + "visualStartMs": 2.0081 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 2.0085, + "visualDurationMs": 0.0004, + "visualStartMs": 2.0085 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 2.0095, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0095 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 2.0109, + "visualDurationMs": 0.0005, + "visualStartMs": 2.0109 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 2.0091, + "visualDurationMs": 0.0024, + "visualStartMs": 2.0091 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 2.0117, + "visualDurationMs": 0.0004, + "visualStartMs": 2.0117 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 2.0125, + "visualDurationMs": 0.0009, + "visualStartMs": 2.0125 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 2.0136, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0136 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 2.0153, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0153 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 2.017, + "visualDurationMs": 0.0012, + "visualStartMs": 2.017 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 2.0186, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0186 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 2.0201, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0201 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 2.0218, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0218 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 2.0233, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0233 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 2.0249, + "visualDurationMs": 0.0024, + "visualStartMs": 2.0249 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 2.0276, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0276 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 2.0292, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0292 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 2.0308, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0308 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 2.0324, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0324 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 2.0341, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0341 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 2.0358, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0358 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 2.0375, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0375 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 2.0391, + "visualDurationMs": 0.0034, + "visualStartMs": 2.0391 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 2.0429, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0429 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 2.0446, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0446 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 2.0463, + "visualDurationMs": 0.0016, + "visualStartMs": 2.0463 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 2.0482, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0482 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 2.05, + "visualDurationMs": 0.0013, + "visualStartMs": 2.05 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 2.0517, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0517 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 2.0533, + "visualDurationMs": 0.0014, + "visualStartMs": 2.0533 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 2.055, + "visualDurationMs": 0.0015, + "visualStartMs": 2.055 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 2.0568, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0568 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 2.0585, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0585 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 2.0602, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0602 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 2.0618, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0618 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 2.0634, + "visualDurationMs": 0.0013, + "visualStartMs": 2.0634 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 2.0651, + "visualDurationMs": 0.0012, + "visualStartMs": 2.0651 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 2.0667, + "visualDurationMs": 0.0015, + "visualStartMs": 2.0667 + }, + { + "durationMs": 0.0105, + "name": "L30", + "startMs": 2.0687, + "visualDurationMs": 0.0105, + "visualStartMs": 2.0687 + }, + { + "durationMs": 0.0024, + "name": "L31", + "startMs": 2.0797, + "visualDurationMs": 0.0024, + "visualStartMs": 2.0797 + }, + { + "durationMs": 0.002, + "name": "L32", + "startMs": 2.0826, + "visualDurationMs": 0.002, + "visualStartMs": 2.0826 + }, + { + "durationMs": 0.002, + "name": "L33", + "startMs": 2.0851, + "visualDurationMs": 0.002, + "visualStartMs": 2.0851 + }, + { + "durationMs": 0.0021, + "name": "L34", + "startMs": 2.0876, + "visualDurationMs": 0.0021, + "visualStartMs": 2.0876 + }, + { + "durationMs": 0.002, + "name": "L35", + "startMs": 2.0901, + "visualDurationMs": 0.002, + "visualStartMs": 2.0901 + }, + { + "durationMs": 0.002, + "name": "L36", + "startMs": 2.0927, + "visualDurationMs": 0.002, + "visualStartMs": 2.0927 + }, + { + "durationMs": 0.0019, + "name": "L37", + "startMs": 2.0952, + "visualDurationMs": 0.0019, + "visualStartMs": 2.0952 + }, + { + "durationMs": 0.0018, + "name": "L38", + "startMs": 2.0975, + "visualDurationMs": 0.0018, + "visualStartMs": 2.0975 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 2.0997, + "visualDurationMs": 0.0015, + "visualStartMs": 2.0997 + }, + { + "durationMs": 0.0018, + "name": "L40", + "startMs": 2.1017, + "visualDurationMs": 0.0018, + "visualStartMs": 2.1017 + }, + { + "durationMs": 0.0018, + "name": "L41", + "startMs": 2.1044, + "visualDurationMs": 0.0018, + "visualStartMs": 2.1044 + }, + { + "durationMs": 0.0018, + "name": "L42", + "startMs": 2.1067, + "visualDurationMs": 0.0018, + "visualStartMs": 2.1067 + }, + { + "durationMs": 0.0022, + "name": "L43", + "startMs": 2.109, + "visualDurationMs": 0.0022, + "visualStartMs": 2.109 + }, + { + "durationMs": 0.0019, + "name": "L44", + "startMs": 2.1122, + "visualDurationMs": 0.0019, + "visualStartMs": 2.1122 + }, + { + "durationMs": 0.0022, + "name": "L45", + "startMs": 2.1151, + "visualDurationMs": 0.0022, + "visualStartMs": 2.1151 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 2.1176, + "visualDurationMs": 0.0016, + "visualStartMs": 2.1176 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 2.1195, + "visualDurationMs": 0.0015, + "visualStartMs": 2.1195 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 2.1214, + "visualDurationMs": 0.0016, + "visualStartMs": 2.1214 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 2.1233, + "visualDurationMs": 0.0016, + "visualStartMs": 2.1233 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 2.1253, + "visualDurationMs": 0.0016, + "visualStartMs": 2.1253 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 2.1272, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1272 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 2.1291, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1291 + }, + { + "durationMs": 0.0017, + "name": "L53", + "startMs": 2.1307, + "visualDurationMs": 0.0017, + "visualStartMs": 2.1307 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 2.1327, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1327 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 2.1344, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1344 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 2.1362, + "visualDurationMs": 0.0015, + "visualStartMs": 2.1362 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 2.138, + "visualDurationMs": 0.0013, + "visualStartMs": 2.138 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 2.1396, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1396 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 2.1414, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1414 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 2.143, + "visualDurationMs": 0.0014, + "visualStartMs": 2.143 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 2.1447, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1447 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 2.1464, + "visualDurationMs": 0.0087, + "visualStartMs": 2.1464 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 2.1555, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1555 + }, + { + "durationMs": 0.0029, + "name": "L64", + "startMs": 2.1573, + "visualDurationMs": 0.0029, + "visualStartMs": 2.1573 + }, + { + "durationMs": 0.0016, + "name": "L65", + "startMs": 2.1606, + "visualDurationMs": 0.0016, + "visualStartMs": 2.1606 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 2.1626, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1626 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 2.1643, + "visualDurationMs": 0.0014, + "visualStartMs": 2.1643 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 2.1661, + "visualDurationMs": 0.0015, + "visualStartMs": 2.1661 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 2.168, + "visualDurationMs": 0.0014, + "visualStartMs": 2.168 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 2.1698, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1698 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 2.1714, + "visualDurationMs": 0.0015, + "visualStartMs": 2.1714 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 2.1732, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1732 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 2.1748, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1748 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 2.1765, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1765 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 2.1781, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1781 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 2.1798, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1798 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 2.1815, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1815 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 2.183, + "visualDurationMs": 0.0013, + "visualStartMs": 2.183 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 2.1846, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1846 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 2.1863, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1863 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 2.1879, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1879 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 2.1895, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1895 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 2.1911, + "visualDurationMs": 0.0012, + "visualStartMs": 2.1911 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 2.1927, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1927 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 2.1943, + "visualDurationMs": 0.0013, + "visualStartMs": 2.1943 + }, + { + "durationMs": 0.0044, + "name": "L86", + "startMs": 2.2472, + "visualDurationMs": 0.0044, + "visualStartMs": 2.2472 + }, + { + "durationMs": 0.0016, + "name": "L87", + "startMs": 2.252, + "visualDurationMs": 0.0016, + "visualStartMs": 2.252 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 2.2539, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2539 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 2.2556, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2556 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 2.2574, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2574 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 2.2591, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2591 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 2.2607, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2607 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 2.2624, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2624 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 2.264, + "visualDurationMs": 0.0014, + "visualStartMs": 2.264 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 2.2657, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2657 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 2.2675, + "visualDurationMs": 0.0012, + "visualStartMs": 2.2675 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 2.2691, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2691 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 2.2709, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2709 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 2.2725, + "visualDurationMs": 0.0012, + "visualStartMs": 2.2725 + }, + { + "durationMs": 0.0021, + "name": "BindNorm", + "startMs": 2.2739, + "visualDurationMs": 0.0021, + "visualStartMs": 2.2739 + } + ], + "durationMs": 0.2651, + "name": "Lighting", + "startMs": 2.0122, + "visualDurationMs": 0.2651, + "visualStartMs": 2.0122 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 2.2779, + "visualDurationMs": 0.0006, + "visualStartMs": 2.2779 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 2.2787, + "visualDurationMs": 0.0006, + "visualStartMs": 2.2787 + } + ], + "durationMs": 0.0019, + "name": "Draw", + "startMs": 2.2775, + "visualDurationMs": 0.0019, + "visualStartMs": 2.2775 + } + ], + "durationMs": 0.2717, + "name": "DrawSprite", + "startMs": 2.0078, + "visualDurationMs": 0.2717, + "visualStartMs": 2.0078 + } + ], + "durationMs": 0.2725, + "name": "Draw Sprite: Pebble_1", + "startMs": 2.0073, + "visualDurationMs": 0.2725, + "visualStartMs": 2.0073 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0008, + "name": "ShaderSelect", + "startMs": 2.2906, + "visualDurationMs": 0.0008, + "visualStartMs": 2.2906 + }, + { + "durationMs": 0.0009, + "name": "ShaderUse", + "startMs": 2.2916, + "visualDurationMs": 0.0009, + "visualStartMs": 2.2916 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 2.2932, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2932 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 2.2947, + "visualDurationMs": 0.0005, + "visualStartMs": 2.2947 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 2.2927, + "visualDurationMs": 0.0026, + "visualStartMs": 2.2927 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 2.2955, + "visualDurationMs": 0.0004, + "visualStartMs": 2.2955 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 2.2964, + "visualDurationMs": 0.001, + "visualStartMs": 2.2964 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 2.2976, + "visualDurationMs": 0.0014, + "visualStartMs": 2.2976 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 2.2994, + "visualDurationMs": 0.0013, + "visualStartMs": 2.2994 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 2.301, + "visualDurationMs": 0.0013, + "visualStartMs": 2.301 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 2.3027, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3027 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 2.3044, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3044 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 2.3061, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3061 + }, + { + "durationMs": 0.0014, + "name": "L5", + "startMs": 2.3077, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3077 + }, + { + "durationMs": 0.0032, + "name": "L6", + "startMs": 2.3094, + "visualDurationMs": 0.0032, + "visualStartMs": 2.3094 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 2.3129, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3129 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 2.3145, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3145 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 2.3161, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3161 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 2.3177, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3177 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 2.3193, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3193 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 2.3211, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3211 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 2.3228, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3228 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 2.3245, + "visualDurationMs": 0.0035, + "visualStartMs": 2.3245 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 2.3283, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3283 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 2.3301, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3301 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 2.3319, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3319 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 2.3337, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3337 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 2.3356, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3356 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 2.3373, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3373 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 2.3389, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3389 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 2.3406, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3406 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 2.3424, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3424 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 2.344, + "visualDurationMs": 0.0012, + "visualStartMs": 2.344 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 2.3456, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3456 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 2.3471, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3471 + }, + { + "durationMs": 0.0044, + "name": "L27", + "startMs": 2.3487, + "visualDurationMs": 0.0044, + "visualStartMs": 2.3487 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 2.3535, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3535 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 2.3552, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3552 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 2.3569, + "visualDurationMs": 0.005, + "visualStartMs": 2.3569 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 2.3623, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3623 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 2.3641, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3641 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 2.3657, + "visualDurationMs": 0.0016, + "visualStartMs": 2.3657 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 2.3676, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3676 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 2.3693, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3693 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 2.371, + "visualDurationMs": 0.0013, + "visualStartMs": 2.371 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 2.3726, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3726 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 2.3742, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3742 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 2.3757, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3757 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 2.3773, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3773 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 2.3789, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3789 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 2.3806, + "visualDurationMs": 0.0012, + "visualStartMs": 2.3806 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 2.3822, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3822 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 2.3839, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3839 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 2.3857, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3857 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 2.3874, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3874 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 2.3891, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3891 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 2.3908, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3908 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 2.3927, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3927 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 2.3946, + "visualDurationMs": 0.0015, + "visualStartMs": 2.3946 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 2.3965, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3965 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 2.3982, + "visualDurationMs": 0.0013, + "visualStartMs": 2.3982 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 2.3998, + "visualDurationMs": 0.0014, + "visualStartMs": 2.3998 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 2.4015, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4015 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 2.4032, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4032 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 2.4048, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4048 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 2.4065, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4065 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 2.4081, + "visualDurationMs": 0.0016, + "visualStartMs": 2.4081 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 2.41, + "visualDurationMs": 0.0013, + "visualStartMs": 2.41 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 2.4116, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4116 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 2.4133, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4133 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 2.415, + "visualDurationMs": 0.0084, + "visualStartMs": 2.415 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 2.4238, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4238 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 2.4255, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4255 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 2.4271, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4271 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 2.4288, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4288 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 2.4305, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4305 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 2.4321, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4321 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 2.4338, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4338 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 2.4354, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4354 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 2.4371, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4371 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 2.439, + "visualDurationMs": 0.0012, + "visualStartMs": 2.439 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 2.4405, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4405 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 2.4421, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4421 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 2.4437, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4437 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 2.4453, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4453 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 2.4469, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4469 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 2.4484, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4484 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 2.4502, + "visualDurationMs": 0.0015, + "visualStartMs": 2.4502 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 2.452, + "visualDurationMs": 0.0013, + "visualStartMs": 2.452 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 2.4536, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4536 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 2.4553, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4553 + }, + { + "durationMs": 0.0022, + "name": "L83", + "startMs": 2.4568, + "visualDurationMs": 0.0022, + "visualStartMs": 2.4568 + }, + { + "durationMs": 0.0015, + "name": "L84", + "startMs": 2.4594, + "visualDurationMs": 0.0015, + "visualStartMs": 2.4594 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 2.4613, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4613 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 2.4631, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4631 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 2.4648, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4648 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 2.4665, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4665 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 2.4682, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4682 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 2.4698, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4698 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 2.4715, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4715 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 2.4731, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4731 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 2.4747, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4747 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 2.4764, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4764 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 2.478, + "visualDurationMs": 0.0013, + "visualStartMs": 2.478 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 2.4797, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4797 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 2.4813, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4813 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 2.4829, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4829 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 2.4845, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4845 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 2.4859, + "visualDurationMs": 0.0006, + "visualStartMs": 2.4859 + } + ], + "durationMs": 0.1908, + "name": "Lighting", + "startMs": 2.296, + "visualDurationMs": 0.1908, + "visualStartMs": 2.296 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 2.4872, + "visualDurationMs": 0.0006, + "visualStartMs": 2.4872 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 2.488, + "visualDurationMs": 0.0004, + "visualStartMs": 2.488 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 2.4869, + "visualDurationMs": 0.0017, + "visualStartMs": 2.4869 + } + ], + "durationMs": 0.1984, + "name": "DrawSprite", + "startMs": 2.2902, + "visualDurationMs": 0.1984, + "visualStartMs": 2.2902 + } + ], + "durationMs": 0.1992, + "name": "Draw Sprite: Pebble_17", + "startMs": 2.2896, + "visualDurationMs": 0.1992, + "visualStartMs": 2.2896 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 2.4907, + "visualDurationMs": 0.0003, + "visualStartMs": 2.4907 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 2.4911, + "visualDurationMs": 0.0004, + "visualStartMs": 2.4911 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 2.492, + "visualDurationMs": 0.0013, + "visualStartMs": 2.492 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 2.4935, + "visualDurationMs": 0.0005, + "visualStartMs": 2.4935 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 2.4917, + "visualDurationMs": 0.0024, + "visualStartMs": 2.4917 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 2.4942, + "visualDurationMs": 0.0004, + "visualStartMs": 2.4942 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 2.4951, + "visualDurationMs": 0.0008, + "visualStartMs": 2.4951 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 2.4961, + "visualDurationMs": 0.0014, + "visualStartMs": 2.4961 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 2.4978, + "visualDurationMs": 0.0012, + "visualStartMs": 2.4978 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 2.4993, + "visualDurationMs": 0.0013, + "visualStartMs": 2.4993 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 2.5009, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5009 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 2.5024, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5024 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 2.5041, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5041 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 2.5056, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5056 + }, + { + "durationMs": 0.0029, + "name": "L6", + "startMs": 2.5071, + "visualDurationMs": 0.0029, + "visualStartMs": 2.5071 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 2.5103, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5103 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 2.512, + "visualDurationMs": 0.0012, + "visualStartMs": 2.512 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 2.5135, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5135 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 2.5151, + "visualDurationMs": 0.0015, + "visualStartMs": 2.5151 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 2.517, + "visualDurationMs": 0.0014, + "visualStartMs": 2.517 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 2.5187, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5187 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 2.5204, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5204 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 2.522, + "visualDurationMs": 0.0036, + "visualStartMs": 2.522 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 2.5259, + "visualDurationMs": 0.0015, + "visualStartMs": 2.5259 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 2.5277, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5277 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 2.5294, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5294 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 2.5311, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5311 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 2.5327, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5327 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 2.5345, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5345 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 2.5361, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5361 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 2.5378, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5378 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 2.5395, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5395 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 2.5411, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5411 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 2.5427, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5427 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 2.5443, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5443 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 2.5458, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5458 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 2.5474, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5474 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 2.549, + "visualDurationMs": 0.0015, + "visualStartMs": 2.549 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 2.5508, + "visualDurationMs": 0.0049, + "visualStartMs": 2.5508 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 2.5561, + "visualDurationMs": 0.0015, + "visualStartMs": 2.5561 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 2.5579, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5579 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 2.5596, + "visualDurationMs": 0.0015, + "visualStartMs": 2.5596 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 2.5615, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5615 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 2.5631, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5631 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 2.5649, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5649 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 2.5665, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5665 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 2.5681, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5681 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 2.5696, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5696 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 2.5712, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5712 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 2.5728, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5728 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 2.5744, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5744 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 2.576, + "visualDurationMs": 0.0014, + "visualStartMs": 2.576 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 2.5778, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5778 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 2.5796, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5796 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 2.5812, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5812 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 2.5829, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5829 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 2.5846, + "visualDurationMs": 0.0016, + "visualStartMs": 2.5846 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 2.5865, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5865 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 2.5883, + "visualDurationMs": 0.0015, + "visualStartMs": 2.5883 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 2.5902, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5902 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 2.5919, + "visualDurationMs": 0.0012, + "visualStartMs": 2.5919 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 2.5935, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5935 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 2.5951, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5951 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 2.5968, + "visualDurationMs": 0.0013, + "visualStartMs": 2.5968 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 2.5984, + "visualDurationMs": 0.0014, + "visualStartMs": 2.5984 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 2.6001, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6001 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 2.6017, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6017 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 2.6034, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6034 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 2.605, + "visualDurationMs": 0.0013, + "visualStartMs": 2.605 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 2.6067, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6067 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 2.6084, + "visualDurationMs": 0.0085, + "visualStartMs": 2.6084 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 2.6173, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6173 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 2.6191, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6191 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 2.6208, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6208 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 2.6225, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6225 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 2.6242, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6242 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 2.6259, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6259 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 2.6275, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6275 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 2.6291, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6291 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 2.6307, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6307 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 2.6323, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6323 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 2.6339, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6339 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 2.6355, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6355 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 2.6371, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6371 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 2.6387, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6387 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 2.6403, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6403 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 2.6419, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6419 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 2.6434, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6434 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 2.645, + "visualDurationMs": 0.0013, + "visualStartMs": 2.645 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 2.6467, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6467 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 2.6482, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6482 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 2.6498, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6498 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 2.6514, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6514 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 2.653, + "visualDurationMs": 0.0012, + "visualStartMs": 2.653 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 2.6546, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6546 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 2.6562, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6562 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 2.6578, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6578 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 2.6594, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6594 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 2.661, + "visualDurationMs": 0.0012, + "visualStartMs": 2.661 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 2.6625, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6625 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 2.6642, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6642 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 2.6658, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6658 + }, + { + "durationMs": 0.0043, + "name": "L94", + "startMs": 2.6674, + "visualDurationMs": 0.0043, + "visualStartMs": 2.6674 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 2.672, + "visualDurationMs": 0.0012, + "visualStartMs": 2.672 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 2.6736, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6736 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 2.6752, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6752 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 2.6768, + "visualDurationMs": 0.0012, + "visualStartMs": 2.6768 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 2.6783, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6783 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 2.6798, + "visualDurationMs": 0.0005, + "visualStartMs": 2.6798 + } + ], + "durationMs": 0.1858, + "name": "Lighting", + "startMs": 2.4948, + "visualDurationMs": 0.1858, + "visualStartMs": 2.4948 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 2.6811, + "visualDurationMs": 0.0004, + "visualStartMs": 2.6811 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 2.6816, + "visualDurationMs": 0.0004, + "visualStartMs": 2.6816 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 2.6807, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6807 + } + ], + "durationMs": 0.1919, + "name": "DrawSprite", + "startMs": 2.4903, + "visualDurationMs": 0.1919, + "visualStartMs": 2.4903 + } + ], + "durationMs": 0.1924, + "name": "Draw Sprite: Pebble_11", + "startMs": 2.4899, + "visualDurationMs": 0.1924, + "visualStartMs": 2.4899 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 2.6839, + "visualDurationMs": 0.0003, + "visualStartMs": 2.6839 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 2.6844, + "visualDurationMs": 0.0004, + "visualStartMs": 2.6844 + }, + { + "children": [ + { + "durationMs": 0.0017, + "name": "Transform", + "startMs": 2.6854, + "visualDurationMs": 0.0017, + "visualStartMs": 2.6854 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 2.6873, + "visualDurationMs": 0.0006, + "visualStartMs": 2.6873 + } + ], + "durationMs": 0.003, + "name": "SetUniforms", + "startMs": 2.685, + "visualDurationMs": 0.003, + "visualStartMs": 2.685 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 2.6881, + "visualDurationMs": 0.0004, + "visualStartMs": 2.6881 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 2.6891, + "visualDurationMs": 0.0011, + "visualStartMs": 2.6891 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 2.6904, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6904 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 2.6922, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6922 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 2.6939, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6939 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 2.6956, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6956 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 2.6974, + "visualDurationMs": 0.0014, + "visualStartMs": 2.6974 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 2.6991, + "visualDurationMs": 0.0013, + "visualStartMs": 2.6991 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 2.7008, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7008 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 2.7025, + "visualDurationMs": 0.0026, + "visualStartMs": 2.7025 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 2.7055, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7055 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 2.7072, + "visualDurationMs": 0.0012, + "visualStartMs": 2.7072 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 2.7088, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7088 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 2.7105, + "visualDurationMs": 0.0012, + "visualStartMs": 2.7105 + }, + { + "durationMs": 0.0013, + "name": "L11", + "startMs": 2.7121, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7121 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 2.7138, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7138 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 2.7155, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7155 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 2.7173, + "visualDurationMs": 0.0035, + "visualStartMs": 2.7173 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 2.7212, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7212 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 2.7231, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7231 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 2.7249, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7249 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 2.7268, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7268 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 2.7285, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7285 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 2.7302, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7302 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 2.7318, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7318 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 2.7335, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7335 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 2.7352, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7352 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 2.7368, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7368 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 2.7386, + "visualDurationMs": 0.0012, + "visualStartMs": 2.7386 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 2.7402, + "visualDurationMs": 0.0012, + "visualStartMs": 2.7402 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 2.7417, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7417 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 2.7433, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7433 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 2.745, + "visualDurationMs": 0.0014, + "visualStartMs": 2.745 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 2.7467, + "visualDurationMs": 0.0051, + "visualStartMs": 2.7467 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 2.7521, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7521 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 2.7538, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7538 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 2.7556, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7556 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 2.7573, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7573 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 2.759, + "visualDurationMs": 0.0013, + "visualStartMs": 2.759 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 2.7607, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7607 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 2.7624, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7624 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 2.7641, + "visualDurationMs": 0.0012, + "visualStartMs": 2.7641 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 2.7656, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7656 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 2.7673, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7673 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 2.769, + "visualDurationMs": 0.0013, + "visualStartMs": 2.769 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 2.7706, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7706 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 2.7723, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7723 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 2.7741, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7741 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 2.7759, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7759 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 2.7776, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7776 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 2.7793, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7793 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 2.781, + "visualDurationMs": 0.0016, + "visualStartMs": 2.781 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 2.7829, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7829 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 2.7847, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7847 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 2.7865, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7865 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 2.7881, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7881 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 2.7898, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7898 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 2.7915, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7915 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 2.7931, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7931 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 2.7948, + "visualDurationMs": 0.0015, + "visualStartMs": 2.7948 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 2.7966, + "visualDurationMs": 0.0013, + "visualStartMs": 2.7966 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 2.7982, + "visualDurationMs": 0.0014, + "visualStartMs": 2.7982 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 2.8001, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8001 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 2.8017, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8017 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 2.8034, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8034 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 2.8051, + "visualDurationMs": 0.0086, + "visualStartMs": 2.8051 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 2.814, + "visualDurationMs": 0.0014, + "visualStartMs": 2.814 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 2.8158, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8158 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 2.8175, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8175 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 2.8192, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8192 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 2.8209, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8209 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 2.8226, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8226 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 2.8243, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8243 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 2.8259, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8259 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 2.8276, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8276 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 2.8292, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8292 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 2.8307, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8307 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 2.8323, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8323 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 2.8339, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8339 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 2.8356, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8356 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 2.8372, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8372 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 2.8387, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8387 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 2.8403, + "visualDurationMs": 0.0015, + "visualStartMs": 2.8403 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 2.8422, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8422 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 2.8438, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8438 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 2.8454, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8454 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 2.847, + "visualDurationMs": 0.0012, + "visualStartMs": 2.847 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 2.8485, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8485 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 2.8502, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8502 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 2.8518, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8518 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 2.8534, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8534 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 2.855, + "visualDurationMs": 0.0012, + "visualStartMs": 2.855 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 2.8566, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8566 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 2.8582, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8582 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 2.8597, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8597 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 2.8613, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8613 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 2.8629, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8629 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 2.8645, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8645 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 2.8661, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8661 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 2.8676, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8676 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 2.8692, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8692 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 2.8709, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8709 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 2.8726, + "visualDurationMs": 0.0012, + "visualStartMs": 2.8726 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 2.874, + "visualDurationMs": 0.0007, + "visualStartMs": 2.874 + } + ], + "durationMs": 0.1862, + "name": "Lighting", + "startMs": 2.6887, + "visualDurationMs": 0.1862, + "visualStartMs": 2.6887 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 2.8755, + "visualDurationMs": 0.0004, + "visualStartMs": 2.8755 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 2.8761, + "visualDurationMs": 0.0004, + "visualStartMs": 2.8761 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 2.8751, + "visualDurationMs": 0.0015, + "visualStartMs": 2.8751 + } + ], + "durationMs": 0.1932, + "name": "DrawSprite", + "startMs": 2.6835, + "visualDurationMs": 0.1932, + "visualStartMs": 2.6835 + } + ], + "durationMs": 0.1937, + "name": "Draw Sprite: Pebble_12", + "startMs": 2.6831, + "visualDurationMs": 0.1937, + "visualStartMs": 2.6831 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 2.8781, + "visualDurationMs": 0.0003, + "visualStartMs": 2.8781 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 2.8786, + "visualDurationMs": 0.0004, + "visualStartMs": 2.8786 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 2.8795, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8795 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 2.881, + "visualDurationMs": 0.0005, + "visualStartMs": 2.881 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 2.8792, + "visualDurationMs": 0.0024, + "visualStartMs": 2.8792 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 2.8817, + "visualDurationMs": 0.0003, + "visualStartMs": 2.8817 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 2.8825, + "visualDurationMs": 0.0011, + "visualStartMs": 2.8825 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 2.8837, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8837 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 2.8856, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8856 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 2.8872, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8872 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 2.8889, + "visualDurationMs": 0.0014, + "visualStartMs": 2.8889 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 2.8906, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8906 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 2.8922, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8922 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 2.8939, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8939 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 2.8955, + "visualDurationMs": 0.0026, + "visualStartMs": 2.8955 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 2.8985, + "visualDurationMs": 0.0013, + "visualStartMs": 2.8985 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 2.9001, + "visualDurationMs": 0.0012, + "visualStartMs": 2.9001 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 2.9017, + "visualDurationMs": 0.0012, + "visualStartMs": 2.9017 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 2.9033, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9033 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 2.905, + "visualDurationMs": 0.0014, + "visualStartMs": 2.905 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 2.9068, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9068 + }, + { + "durationMs": 0.0012, + "name": "L13", + "startMs": 2.9085, + "visualDurationMs": 0.0012, + "visualStartMs": 2.9085 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 2.9101, + "visualDurationMs": 0.0034, + "visualStartMs": 2.9101 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 2.9138, + "visualDurationMs": 0.0015, + "visualStartMs": 2.9138 + }, + { + "durationMs": 0.0021, + "name": "L16", + "startMs": 2.9157, + "visualDurationMs": 0.0021, + "visualStartMs": 2.9157 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 2.9182, + "visualDurationMs": 0.0016, + "visualStartMs": 2.9182 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 2.9202, + "visualDurationMs": 0.0015, + "visualStartMs": 2.9202 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 2.9221, + "visualDurationMs": 0.0015, + "visualStartMs": 2.9221 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 2.924, + "visualDurationMs": 0.0014, + "visualStartMs": 2.924 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 2.9258, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9258 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 2.9275, + "visualDurationMs": 0.0014, + "visualStartMs": 2.9275 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 2.9292, + "visualDurationMs": 0.0014, + "visualStartMs": 2.9292 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 2.9309, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9309 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 2.9326, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9326 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 2.9343, + "visualDurationMs": 0.0012, + "visualStartMs": 2.9343 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 2.9359, + "visualDurationMs": 0.0014, + "visualStartMs": 2.9359 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 2.9377, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9377 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 2.9393, + "visualDurationMs": 0.0013, + "visualStartMs": 2.9393 + }, + { + "durationMs": 0.2534, + "name": "L30", + "startMs": 2.941, + "visualDurationMs": 0.2534, + "visualStartMs": 2.941 + }, + { + "durationMs": 0.0017, + "name": "L31", + "startMs": 3.1951, + "visualDurationMs": 0.0017, + "visualStartMs": 3.1951 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 3.1972, + "visualDurationMs": 0.0013, + "visualStartMs": 3.1972 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 3.1988, + "visualDurationMs": 0.0016, + "visualStartMs": 3.1988 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 3.2007, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2007 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 3.2025, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2025 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 3.2043, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2043 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 3.206, + "visualDurationMs": 0.0012, + "visualStartMs": 3.206 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 3.2076, + "visualDurationMs": 0.0012, + "visualStartMs": 3.2076 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 3.2092, + "visualDurationMs": 0.0012, + "visualStartMs": 3.2092 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 3.2108, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2108 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 3.2125, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2125 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 3.2142, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2142 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 3.2158, + "visualDurationMs": 0.0015, + "visualStartMs": 3.2158 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 3.2176, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2176 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 3.2194, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2194 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 3.2211, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2211 + }, + { + "durationMs": 0.0064, + "name": "L47", + "startMs": 3.2229, + "visualDurationMs": 0.0064, + "visualStartMs": 3.2229 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 3.2297, + "visualDurationMs": 0.0015, + "visualStartMs": 3.2297 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 3.2315, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2315 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 3.2333, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2333 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 3.2351, + "visualDurationMs": 0.0015, + "visualStartMs": 3.2351 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 3.2369, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2369 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 3.2386, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2386 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 3.2403, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2403 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 3.2421, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2421 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 3.2438, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2438 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 3.2455, + "visualDurationMs": 0.0012, + "visualStartMs": 3.2455 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 3.2471, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2471 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 3.2488, + "visualDurationMs": 0.0013, + "visualStartMs": 3.2488 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 3.2504, + "visualDurationMs": 0.0014, + "visualStartMs": 3.2504 + }, + { + "durationMs": 0.0777, + "name": "L61", + "startMs": 3.2521, + "visualDurationMs": 0.0777, + "visualStartMs": 3.2521 + }, + { + "durationMs": 0.0105, + "name": "L62", + "startMs": 3.3309, + "visualDurationMs": 0.0105, + "visualStartMs": 3.3309 + }, + { + "durationMs": 0.0019, + "name": "L63", + "startMs": 3.3419, + "visualDurationMs": 0.0019, + "visualStartMs": 3.3419 + }, + { + "durationMs": 0.0019, + "name": "L64", + "startMs": 3.3442, + "visualDurationMs": 0.0019, + "visualStartMs": 3.3442 + }, + { + "durationMs": 0.0018, + "name": "L65", + "startMs": 3.3465, + "visualDurationMs": 0.0018, + "visualStartMs": 3.3465 + }, + { + "durationMs": 0.0017, + "name": "L66", + "startMs": 3.3486, + "visualDurationMs": 0.0017, + "visualStartMs": 3.3486 + }, + { + "durationMs": 0.0016, + "name": "L67", + "startMs": 3.3507, + "visualDurationMs": 0.0016, + "visualStartMs": 3.3507 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 3.3526, + "visualDurationMs": 0.0015, + "visualStartMs": 3.3526 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 3.3544, + "visualDurationMs": 0.0015, + "visualStartMs": 3.3544 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 3.3563, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3563 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 3.358, + "visualDurationMs": 0.0013, + "visualStartMs": 3.358 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 3.3596, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3596 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 3.3613, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3613 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 3.3629, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3629 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 3.3646, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3646 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 3.3662, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3662 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 3.3678, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3678 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 3.3694, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3694 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 3.371, + "visualDurationMs": 0.0014, + "visualStartMs": 3.371 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 3.3728, + "visualDurationMs": 0.0015, + "visualStartMs": 3.3728 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 3.3747, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3747 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 3.3763, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3763 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 3.3779, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3779 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 3.3795, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3795 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 3.3811, + "visualDurationMs": 0.0014, + "visualStartMs": 3.3811 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 3.3828, + "visualDurationMs": 0.0014, + "visualStartMs": 3.3828 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 3.3845, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3845 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 3.3861, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3861 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 3.3878, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3878 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 3.3894, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3894 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 3.391, + "visualDurationMs": 0.0015, + "visualStartMs": 3.391 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 3.3928, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3928 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 3.3944, + "visualDurationMs": 0.0012, + "visualStartMs": 3.3944 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 3.3959, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3959 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 3.3975, + "visualDurationMs": 0.0013, + "visualStartMs": 3.3975 + }, + { + "durationMs": 0.0015, + "name": "L96", + "startMs": 3.3991, + "visualDurationMs": 0.0015, + "visualStartMs": 3.3991 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 3.401, + "visualDurationMs": 0.0013, + "visualStartMs": 3.401 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 3.4026, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4026 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 3.4043, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4043 + }, + { + "durationMs": 0.0013, + "name": "BindNorm", + "startMs": 3.4059, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4059 + } + ], + "durationMs": 0.5261, + "name": "Lighting", + "startMs": 2.8822, + "visualDurationMs": 0.5261, + "visualStartMs": 2.8822 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 3.4089, + "visualDurationMs": 0.0007, + "visualStartMs": 3.4089 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 3.4098, + "visualDurationMs": 0.0007, + "visualStartMs": 3.4098 + } + ], + "durationMs": 0.0022, + "name": "Draw", + "startMs": 3.4085, + "visualDurationMs": 0.0022, + "visualStartMs": 3.4085 + } + ], + "durationMs": 0.533, + "name": "DrawSprite", + "startMs": 2.8778, + "visualDurationMs": 0.533, + "visualStartMs": 2.8778 + } + ], + "durationMs": 0.5338, + "name": "Draw Sprite: Pebble_13", + "startMs": 2.8773, + "visualDurationMs": 0.5338, + "visualStartMs": 2.8773 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 3.4139, + "visualDurationMs": 0.0004, + "visualStartMs": 3.4139 + }, + { + "durationMs": 0.0008, + "name": "ShaderUse", + "startMs": 3.4145, + "visualDurationMs": 0.0008, + "visualStartMs": 3.4145 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 3.416, + "visualDurationMs": 0.0015, + "visualStartMs": 3.416 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 3.4177, + "visualDurationMs": 0.0006, + "visualStartMs": 3.4177 + } + ], + "durationMs": 0.0028, + "name": "SetUniforms", + "startMs": 3.4156, + "visualDurationMs": 0.0028, + "visualStartMs": 3.4156 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 3.4185, + "visualDurationMs": 0.0005, + "visualStartMs": 3.4185 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 3.4195, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4195 + }, + { + "durationMs": 0.0017, + "name": "SetLightParams", + "startMs": 3.4208, + "visualDurationMs": 0.0017, + "visualStartMs": 3.4208 + }, + { + "durationMs": 0.0016, + "name": "L0", + "startMs": 3.423, + "visualDurationMs": 0.0016, + "visualStartMs": 3.423 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 3.4249, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4249 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 3.4267, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4267 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 3.4284, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4284 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 3.4301, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4301 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 3.4317, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4317 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 3.4332, + "visualDurationMs": 0.0027, + "visualStartMs": 3.4332 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 3.4362, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4362 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 3.4378, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4378 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 3.4395, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4395 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 3.4412, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4412 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 3.4427, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4427 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 3.4446, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4446 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 3.4463, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4463 + }, + { + "durationMs": 0.0037, + "name": "L14", + "startMs": 3.448, + "visualDurationMs": 0.0037, + "visualStartMs": 3.448 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 3.4521, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4521 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 3.4539, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4539 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 3.4557, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4557 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 3.4575, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4575 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 3.4592, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4592 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 3.461, + "visualDurationMs": 0.0013, + "visualStartMs": 3.461 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 3.4626, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4626 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 3.4644, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4644 + }, + { + "durationMs": 0.0015, + "name": "L23", + "startMs": 3.4662, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4662 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 3.468, + "visualDurationMs": 0.0013, + "visualStartMs": 3.468 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 3.4697, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4697 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 3.4712, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4712 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 3.4728, + "visualDurationMs": 0.0012, + "visualStartMs": 3.4728 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 3.4744, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4744 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 3.4761, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4761 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 3.478, + "visualDurationMs": 0.005, + "visualStartMs": 3.478 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 3.4833, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4833 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 3.485, + "visualDurationMs": 0.0013, + "visualStartMs": 3.485 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 3.4866, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4866 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 3.4884, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4884 + }, + { + "durationMs": 0.0024, + "name": "L35", + "startMs": 3.4901, + "visualDurationMs": 0.0024, + "visualStartMs": 3.4901 + }, + { + "durationMs": 0.0015, + "name": "L36", + "startMs": 3.4929, + "visualDurationMs": 0.0015, + "visualStartMs": 3.4929 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 3.4948, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4948 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 3.4965, + "visualDurationMs": 0.0014, + "visualStartMs": 3.4965 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 3.4983, + "visualDurationMs": 0.0013, + "visualStartMs": 3.4983 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 3.5, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 3.5018, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5018 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 3.5035, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5035 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 3.5052, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5052 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 3.5071, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5071 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 3.509, + "visualDurationMs": 0.0013, + "visualStartMs": 3.509 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 3.5106, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5106 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 3.5124, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5124 + }, + { + "durationMs": 0.002, + "name": "L48", + "startMs": 3.5142, + "visualDurationMs": 0.002, + "visualStartMs": 3.5142 + }, + { + "durationMs": 0.0018, + "name": "L49", + "startMs": 3.5165, + "visualDurationMs": 0.0018, + "visualStartMs": 3.5165 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 3.5187, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5187 + }, + { + "durationMs": 0.0017, + "name": "L51", + "startMs": 3.5204, + "visualDurationMs": 0.0017, + "visualStartMs": 3.5204 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 3.5224, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5224 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 3.524, + "visualDurationMs": 0.0014, + "visualStartMs": 3.524 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 3.5257, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5257 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 3.5274, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5274 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 3.5291, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5291 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 3.531, + "visualDurationMs": 0.0014, + "visualStartMs": 3.531 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 3.5327, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5327 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 3.5345, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5345 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 3.5362, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5362 + }, + { + "durationMs": 0.0016, + "name": "L61", + "startMs": 3.5379, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5379 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 3.5398, + "visualDurationMs": 0.009, + "visualStartMs": 3.5398 + }, + { + "durationMs": 0.0016, + "name": "L63", + "startMs": 3.5492, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5492 + }, + { + "durationMs": 0.0016, + "name": "L64", + "startMs": 3.5511, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5511 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 3.5531, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5531 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 3.5549, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5549 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 3.5567, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5567 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 3.5584, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5584 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 3.56, + "visualDurationMs": 0.0015, + "visualStartMs": 3.56 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 3.5618, + "visualDurationMs": 0.0015, + "visualStartMs": 3.5618 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 3.5636, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5636 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 3.5653, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5653 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 3.5668, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5668 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 3.5685, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5685 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 3.57, + "visualDurationMs": 0.0012, + "visualStartMs": 3.57 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 3.5716, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5716 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 3.5732, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5732 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 3.5747, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5747 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 3.5763, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5763 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 3.5779, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5779 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 3.5796, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5796 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 3.5812, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5812 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 3.5828, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5828 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 3.5846, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5846 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 3.5863, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5863 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 3.5879, + "visualDurationMs": 0.0014, + "visualStartMs": 3.5879 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 3.5896, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5896 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 3.5913, + "visualDurationMs": 0.0012, + "visualStartMs": 3.5913 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 3.5928, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5928 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 3.5945, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5945 + }, + { + "durationMs": 0.0016, + "name": "L91", + "startMs": 3.5961, + "visualDurationMs": 0.0016, + "visualStartMs": 3.5961 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 3.598, + "visualDurationMs": 0.0012, + "visualStartMs": 3.598 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 3.5995, + "visualDurationMs": 0.0013, + "visualStartMs": 3.5995 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 3.6011, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6011 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 3.6028, + "visualDurationMs": 0.0012, + "visualStartMs": 3.6028 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 3.6043, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6043 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 3.6059, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6059 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 3.6075, + "visualDurationMs": 0.0014, + "visualStartMs": 3.6075 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 3.6092, + "visualDurationMs": 0.0012, + "visualStartMs": 3.6092 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 3.6106, + "visualDurationMs": 0.0006, + "visualStartMs": 3.6106 + } + ], + "durationMs": 0.1924, + "name": "Lighting", + "startMs": 3.4192, + "visualDurationMs": 0.1924, + "visualStartMs": 3.4192 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 3.6121, + "visualDurationMs": 0.0004, + "visualStartMs": 3.6121 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 3.6127, + "visualDurationMs": 0.0005, + "visualStartMs": 3.6127 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 3.6117, + "visualDurationMs": 0.0016, + "visualStartMs": 3.6117 + } + ], + "durationMs": 0.2, + "name": "DrawSprite", + "startMs": 3.4135, + "visualDurationMs": 0.2, + "visualStartMs": 3.4135 + } + ], + "durationMs": 0.2008, + "name": "Draw Sprite: Pebble_14", + "startMs": 3.4128, + "visualDurationMs": 0.2008, + "visualStartMs": 3.4128 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 3.6152, + "visualDurationMs": 0.0004, + "visualStartMs": 3.6152 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 3.6157, + "visualDurationMs": 0.0004, + "visualStartMs": 3.6157 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 3.6167, + "visualDurationMs": 0.0014, + "visualStartMs": 3.6167 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 3.6182, + "visualDurationMs": 0.0005, + "visualStartMs": 3.6182 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 3.6163, + "visualDurationMs": 0.0025, + "visualStartMs": 3.6163 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 3.619, + "visualDurationMs": 0.0004, + "visualStartMs": 3.619 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 3.6199, + "visualDurationMs": 0.0012, + "visualStartMs": 3.6199 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 3.6212, + "visualDurationMs": 0.0014, + "visualStartMs": 3.6212 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 3.6229, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6229 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 3.6245, + "visualDurationMs": 0.0014, + "visualStartMs": 3.6245 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 3.6262, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6262 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 3.6278, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6278 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 3.6295, + "visualDurationMs": 0.0012, + "visualStartMs": 3.6295 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 3.631, + "visualDurationMs": 0.0012, + "visualStartMs": 3.631 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 3.6325, + "visualDurationMs": 0.0025, + "visualStartMs": 3.6325 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 3.6353, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6353 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 3.6369, + "visualDurationMs": 0.0012, + "visualStartMs": 3.6369 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 3.6384, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6384 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 3.64, + "visualDurationMs": 0.0013, + "visualStartMs": 3.64 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 3.6416, + "visualDurationMs": 0.0016, + "visualStartMs": 3.6416 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 3.6436, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6436 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 3.6453, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6453 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 3.6469, + "visualDurationMs": 0.0036, + "visualStartMs": 3.6469 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 3.6508, + "visualDurationMs": 0.0015, + "visualStartMs": 3.6508 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 3.6526, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6526 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 3.6543, + "visualDurationMs": 0.0013, + "visualStartMs": 3.6543 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 3.656, + "visualDurationMs": 0.0013, + "visualStartMs": 3.656 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 3.6576, + "visualDurationMs": 0.0014, + "visualStartMs": 3.6576 + }, + { + "durationMs": 0.367, + "name": "L20", + "startMs": 3.6596, + "visualDurationMs": 0.367, + "visualStartMs": 3.6596 + }, + { + "durationMs": 0.0037, + "name": "L21", + "startMs": 4.0282, + "visualDurationMs": 0.0037, + "visualStartMs": 4.0282 + }, + { + "durationMs": 0.002, + "name": "L22", + "startMs": 4.0323, + "visualDurationMs": 0.002, + "visualStartMs": 4.0323 + }, + { + "durationMs": 0.0018, + "name": "L23", + "startMs": 4.0347, + "visualDurationMs": 0.0018, + "visualStartMs": 4.0347 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 4.0369, + "visualDurationMs": 0.0015, + "visualStartMs": 4.0369 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 4.0387, + "visualDurationMs": 0.0014, + "visualStartMs": 4.0387 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 4.0405, + "visualDurationMs": 0.0014, + "visualStartMs": 4.0405 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 4.0422, + "visualDurationMs": 0.0015, + "visualStartMs": 4.0422 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 4.0441, + "visualDurationMs": 0.0014, + "visualStartMs": 4.0441 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 4.0458, + "visualDurationMs": 0.0015, + "visualStartMs": 4.0458 + }, + { + "durationMs": 0.0307, + "name": "L30", + "startMs": 4.0476, + "visualDurationMs": 0.0307, + "visualStartMs": 4.0476 + }, + { + "durationMs": 0.0029, + "name": "L31", + "startMs": 4.079, + "visualDurationMs": 0.0029, + "visualStartMs": 4.079 + }, + { + "durationMs": 0.0021, + "name": "L32", + "startMs": 4.0824, + "visualDurationMs": 0.0021, + "visualStartMs": 4.0824 + }, + { + "durationMs": 0.0021, + "name": "L33", + "startMs": 4.0849, + "visualDurationMs": 0.0021, + "visualStartMs": 4.0849 + }, + { + "durationMs": 0.0019, + "name": "L34", + "startMs": 4.0875, + "visualDurationMs": 0.0019, + "visualStartMs": 4.0875 + }, + { + "durationMs": 0.0017, + "name": "L35", + "startMs": 4.0897, + "visualDurationMs": 0.0017, + "visualStartMs": 4.0897 + }, + { + "durationMs": 0.0016, + "name": "L36", + "startMs": 4.0918, + "visualDurationMs": 0.0016, + "visualStartMs": 4.0918 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 4.0937, + "visualDurationMs": 0.0014, + "visualStartMs": 4.0937 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 4.0955, + "visualDurationMs": 0.0013, + "visualStartMs": 4.0955 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 4.0972, + "visualDurationMs": 0.0013, + "visualStartMs": 4.0972 + }, + { + "durationMs": 0.0017, + "name": "L40", + "startMs": 4.0988, + "visualDurationMs": 0.0017, + "visualStartMs": 4.0988 + }, + { + "durationMs": 0.0015, + "name": "L41", + "startMs": 4.1008, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1008 + }, + { + "durationMs": 0.0016, + "name": "L42", + "startMs": 4.1026, + "visualDurationMs": 0.0016, + "visualStartMs": 4.1026 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 4.1045, + "visualDurationMs": 0.0016, + "visualStartMs": 4.1045 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 4.1065, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1065 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 4.1084, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1084 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 4.1101, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1101 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 4.1119, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1119 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 4.1137, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1137 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 4.1156, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1156 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 4.1174, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1174 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 4.1191, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1191 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 4.121, + "visualDurationMs": 0.0013, + "visualStartMs": 4.121 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 4.1227, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1227 + }, + { + "durationMs": 0.0025, + "name": "L54", + "startMs": 4.1243, + "visualDurationMs": 0.0025, + "visualStartMs": 4.1243 + }, + { + "durationMs": 0.0015, + "name": "L55", + "startMs": 4.1272, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1272 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 4.1291, + "visualDurationMs": 0.0016, + "visualStartMs": 4.1291 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 4.131, + "visualDurationMs": 0.0014, + "visualStartMs": 4.131 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 4.1328, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1328 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 4.1347, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1347 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 4.1364, + "visualDurationMs": 0.0015, + "visualStartMs": 4.1364 + }, + { + "durationMs": 0.0017, + "name": "L61", + "startMs": 4.1382, + "visualDurationMs": 0.0017, + "visualStartMs": 4.1382 + }, + { + "durationMs": 0.0098, + "name": "L62", + "startMs": 4.1402, + "visualDurationMs": 0.0098, + "visualStartMs": 4.1402 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 4.1504, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1504 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 4.152, + "visualDurationMs": 0.0014, + "visualStartMs": 4.152 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 4.1538, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1538 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 4.1555, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1555 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 4.1572, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1572 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 4.1589, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1589 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 4.1606, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1606 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 4.1624, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1624 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 4.1639, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1639 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 4.1655, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1655 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 4.1671, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1671 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 4.1687, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1687 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 4.1703, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1703 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 4.1718, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1718 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 4.1734, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1734 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 4.175, + "visualDurationMs": 0.0012, + "visualStartMs": 4.175 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 4.1765, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1765 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 4.1782, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1782 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 4.1798, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1798 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 4.1815, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1815 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 4.1831, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1831 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 4.1848, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1848 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 4.1864, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1864 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 4.188, + "visualDurationMs": 0.0014, + "visualStartMs": 4.188 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 4.1898, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1898 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 4.1914, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1914 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 4.193, + "visualDurationMs": 0.0014, + "visualStartMs": 4.193 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 4.1947, + "visualDurationMs": 0.0012, + "visualStartMs": 4.1947 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 4.1962, + "visualDurationMs": 0.0014, + "visualStartMs": 4.1962 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 4.1979, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1979 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 4.1996, + "visualDurationMs": 0.0013, + "visualStartMs": 4.1996 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 4.2012, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2012 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 4.2028, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2028 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 4.2043, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2043 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 4.2059, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2059 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 4.2075, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2075 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 4.2091, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2091 + }, + { + "durationMs": 0.0016, + "name": "BindNorm", + "startMs": 4.2105, + "visualDurationMs": 0.0016, + "visualStartMs": 4.2105 + } + ], + "durationMs": 0.594, + "name": "Lighting", + "startMs": 3.6195, + "visualDurationMs": 0.594, + "visualStartMs": 3.6195 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 4.2143, + "visualDurationMs": 0.0006, + "visualStartMs": 4.2143 + }, + { + "durationMs": 0.0008, + "name": "GL Draw", + "startMs": 4.2151, + "visualDurationMs": 0.0008, + "visualStartMs": 4.2151 + } + ], + "durationMs": 0.0024, + "name": "Draw", + "startMs": 4.2138, + "visualDurationMs": 0.0024, + "visualStartMs": 4.2138 + } + ], + "durationMs": 0.6016, + "name": "DrawSprite", + "startMs": 3.6147, + "visualDurationMs": 0.6016, + "visualStartMs": 3.6147 + } + ], + "durationMs": 0.6023, + "name": "Draw Sprite: Pebble_10", + "startMs": 3.6142, + "visualDurationMs": 0.6023, + "visualStartMs": 3.6142 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 4.2222, + "visualDurationMs": 0.0003, + "visualStartMs": 4.2222 + }, + { + "durationMs": 0.0009, + "name": "ShaderUse", + "startMs": 4.2227, + "visualDurationMs": 0.0009, + "visualStartMs": 4.2227 + }, + { + "children": [ + { + "durationMs": 0.0017, + "name": "Transform", + "startMs": 4.2243, + "visualDurationMs": 0.0017, + "visualStartMs": 4.2243 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 4.2262, + "visualDurationMs": 0.0006, + "visualStartMs": 4.2262 + } + ], + "durationMs": 0.003, + "name": "SetUniforms", + "startMs": 4.2239, + "visualDurationMs": 0.003, + "visualStartMs": 4.2239 + }, + { + "durationMs": 0.0006, + "name": "BindTex", + "startMs": 4.227, + "visualDurationMs": 0.0006, + "visualStartMs": 4.227 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 4.2281, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2281 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 4.2295, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2295 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 4.2315, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2315 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 4.2333, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2333 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 4.235, + "visualDurationMs": 0.0013, + "visualStartMs": 4.235 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 4.2366, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2366 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 4.2384, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2384 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 4.24, + "visualDurationMs": 0.0012, + "visualStartMs": 4.24 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 4.2416, + "visualDurationMs": 0.0025, + "visualStartMs": 4.2416 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 4.2445, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2445 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 4.2463, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2463 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 4.2479, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2479 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 4.2496, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2496 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 4.2514, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2514 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 4.2532, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2532 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 4.255, + "visualDurationMs": 0.0013, + "visualStartMs": 4.255 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 4.2566, + "visualDurationMs": 0.0034, + "visualStartMs": 4.2566 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 4.2604, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2604 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 4.2622, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2622 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 4.2638, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2638 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 4.2656, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2656 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 4.2673, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2673 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 4.2691, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2691 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 4.2708, + "visualDurationMs": 0.0016, + "visualStartMs": 4.2708 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 4.2727, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2727 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 4.2745, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2745 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 4.2762, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2762 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 4.2779, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2779 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 4.2795, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2795 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 4.2811, + "visualDurationMs": 0.0012, + "visualStartMs": 4.2811 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 4.2827, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2827 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 4.2843, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2843 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 4.286, + "visualDurationMs": 0.0052, + "visualStartMs": 4.286 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 4.2916, + "visualDurationMs": 0.0015, + "visualStartMs": 4.2916 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 4.2934, + "visualDurationMs": 0.0013, + "visualStartMs": 4.2934 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 4.295, + "visualDurationMs": 0.0014, + "visualStartMs": 4.295 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 4.2967, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2967 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 4.2985, + "visualDurationMs": 0.0014, + "visualStartMs": 4.2985 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 4.3002, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3002 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 4.3019, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3019 + }, + { + "durationMs": 0.0015, + "name": "L38", + "startMs": 4.3035, + "visualDurationMs": 0.0015, + "visualStartMs": 4.3035 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 4.3053, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3053 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 4.3069, + "visualDurationMs": 0.0015, + "visualStartMs": 4.3069 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 4.3087, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3087 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 4.3103, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3103 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 4.312, + "visualDurationMs": 0.0014, + "visualStartMs": 4.312 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 4.3138, + "visualDurationMs": 0.0015, + "visualStartMs": 4.3138 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 4.3156, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3156 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 4.3173, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3173 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 4.319, + "visualDurationMs": 0.0014, + "visualStartMs": 4.319 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 4.3207, + "visualDurationMs": 0.0017, + "visualStartMs": 4.3207 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 4.3228, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3228 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 4.3246, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3246 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 4.3264, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3264 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 4.3281, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3281 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 4.3297, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3297 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 4.3314, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3314 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 4.3332, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3332 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 4.335, + "visualDurationMs": 0.0014, + "visualStartMs": 4.335 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 4.3367, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3367 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 4.3383, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3383 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 4.34, + "visualDurationMs": 0.0014, + "visualStartMs": 4.34 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 4.3427, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3427 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 4.3444, + "visualDurationMs": 0.0015, + "visualStartMs": 4.3444 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 4.3462, + "visualDurationMs": 0.0087, + "visualStartMs": 4.3462 + }, + { + "durationMs": 0.0012, + "name": "L63", + "startMs": 4.3553, + "visualDurationMs": 0.0012, + "visualStartMs": 4.3553 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 4.3569, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3569 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 4.3586, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3586 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 4.3604, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3604 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 4.362, + "visualDurationMs": 0.0014, + "visualStartMs": 4.362 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 4.3637, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3637 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 4.3653, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3653 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 4.367, + "visualDurationMs": 0.0012, + "visualStartMs": 4.367 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 4.3686, + "visualDurationMs": 0.0012, + "visualStartMs": 4.3686 + }, + { + "durationMs": 0.0015, + "name": "L72", + "startMs": 4.3701, + "visualDurationMs": 0.0015, + "visualStartMs": 4.3701 + }, + { + "durationMs": 0.0019, + "name": "L73", + "startMs": 4.3719, + "visualDurationMs": 0.0019, + "visualStartMs": 4.3719 + }, + { + "durationMs": 0.0056, + "name": "L74", + "startMs": 4.3741, + "visualDurationMs": 0.0056, + "visualStartMs": 4.3741 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 4.3801, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3801 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 4.3818, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3818 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 4.3835, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3835 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 4.3851, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3851 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 4.3868, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3868 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 4.3885, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3885 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 4.3903, + "visualDurationMs": 0.0012, + "visualStartMs": 4.3903 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 4.3919, + "visualDurationMs": 0.0012, + "visualStartMs": 4.3919 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 4.3935, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3935 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 4.3951, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3951 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 4.3967, + "visualDurationMs": 0.0014, + "visualStartMs": 4.3967 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 4.3984, + "visualDurationMs": 0.0013, + "visualStartMs": 4.3984 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 4.4001, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4001 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 4.4017, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4017 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 4.4033, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4033 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 4.4049, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4049 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 4.4067, + "visualDurationMs": 0.0015, + "visualStartMs": 4.4067 + }, + { + "durationMs": 0.0015, + "name": "L92", + "startMs": 4.4085, + "visualDurationMs": 0.0015, + "visualStartMs": 4.4085 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 4.4104, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4104 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 4.4121, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4121 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 4.4137, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4137 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 4.4155, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4155 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 4.417, + "visualDurationMs": 0.0013, + "visualStartMs": 4.417 + }, + { + "durationMs": 0.0011, + "name": "L98", + "startMs": 4.4187, + "visualDurationMs": 0.0011, + "visualStartMs": 4.4187 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 4.4202, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4202 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 4.4215, + "visualDurationMs": 0.0006, + "visualStartMs": 4.4215 + } + ], + "durationMs": 0.1948, + "name": "Lighting", + "startMs": 4.2277, + "visualDurationMs": 0.1948, + "visualStartMs": 4.2277 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 4.423, + "visualDurationMs": 0.0004, + "visualStartMs": 4.423 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 4.4235, + "visualDurationMs": 0.0004, + "visualStartMs": 4.4235 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 4.4227, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4227 + } + ], + "durationMs": 0.2023, + "name": "DrawSprite", + "startMs": 4.2218, + "visualDurationMs": 0.2023, + "visualStartMs": 4.2218 + } + ], + "durationMs": 0.2055, + "name": "Draw Sprite: Pebble_18", + "startMs": 4.2188, + "visualDurationMs": 0.2055, + "visualStartMs": 4.2188 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 4.4259, + "visualDurationMs": 0.0003, + "visualStartMs": 4.4259 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 4.4263, + "visualDurationMs": 0.0005, + "visualStartMs": 4.4263 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 4.4273, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4273 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 4.4286, + "visualDurationMs": 0.0006, + "visualStartMs": 4.4286 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 4.427, + "visualDurationMs": 0.0023, + "visualStartMs": 4.427 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 4.4294, + "visualDurationMs": 0.0004, + "visualStartMs": 4.4294 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 4.4303, + "visualDurationMs": 0.0008, + "visualStartMs": 4.4303 + }, + { + "durationMs": 0.0012, + "name": "SetLightParams", + "startMs": 4.4313, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4313 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 4.4329, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4329 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 4.4344, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4344 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 4.4362, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4362 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 4.4378, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4378 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 4.4395, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4395 + }, + { + "durationMs": 0.0014, + "name": "L5", + "startMs": 4.441, + "visualDurationMs": 0.0014, + "visualStartMs": 4.441 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 4.4427, + "visualDurationMs": 0.0027, + "visualStartMs": 4.4427 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 4.4457, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4457 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 4.4473, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4473 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 4.449, + "visualDurationMs": 0.0013, + "visualStartMs": 4.449 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 4.4506, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4506 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 4.4523, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4523 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 4.454, + "visualDurationMs": 0.0013, + "visualStartMs": 4.454 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 4.4557, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4557 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 4.4574, + "visualDurationMs": 0.0036, + "visualStartMs": 4.4574 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 4.4613, + "visualDurationMs": 0.0015, + "visualStartMs": 4.4613 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 4.4632, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4632 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 4.4648, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4648 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 4.4665, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4665 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 4.4682, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4682 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 4.4699, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4699 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 4.4716, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4716 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 4.4733, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4733 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 4.475, + "visualDurationMs": 0.0013, + "visualStartMs": 4.475 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 4.4766, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4766 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 4.4783, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4783 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 4.4798, + "visualDurationMs": 0.0012, + "visualStartMs": 4.4798 + }, + { + "durationMs": 0.0011, + "name": "L27", + "startMs": 4.4814, + "visualDurationMs": 0.0011, + "visualStartMs": 4.4814 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 4.4829, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4829 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 4.4845, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4845 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 4.4861, + "visualDurationMs": 0.005, + "visualStartMs": 4.4861 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 4.4915, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4915 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 4.4932, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4932 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 4.4948, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4948 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 4.4965, + "visualDurationMs": 0.0014, + "visualStartMs": 4.4965 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 4.4982, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4982 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 4.4998, + "visualDurationMs": 0.0013, + "visualStartMs": 4.4998 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 4.5015, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5015 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 4.5032, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5032 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 4.5049, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5049 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 4.5065, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5065 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 4.5081, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5081 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 4.5098, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5098 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 4.5113, + "visualDurationMs": 0.0015, + "visualStartMs": 4.5113 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 4.5131, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5131 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 4.5148, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5148 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 4.5165, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5165 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 4.5182, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5182 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 4.5199, + "visualDurationMs": 0.0015, + "visualStartMs": 4.5199 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 4.5218, + "visualDurationMs": 0.0016, + "visualStartMs": 4.5218 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 4.5237, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5237 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 4.5254, + "visualDurationMs": 0.0015, + "visualStartMs": 4.5254 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 4.5273, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5273 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 4.5288, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5288 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 4.5305, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5305 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 4.5322, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5322 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 4.5339, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5339 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 4.5356, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5356 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 4.5371, + "visualDurationMs": 0.0015, + "visualStartMs": 4.5371 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 4.5389, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5389 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 4.5404, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5404 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 4.5422, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5422 + }, + { + "durationMs": 0.0083, + "name": "L62", + "startMs": 4.5438, + "visualDurationMs": 0.0083, + "visualStartMs": 4.5438 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 4.5524, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5524 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 4.554, + "visualDurationMs": 0.0015, + "visualStartMs": 4.554 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 4.5558, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5558 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 4.5575, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5575 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 4.5591, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5591 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 4.5608, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5608 + }, + { + "durationMs": 0.0012, + "name": "L69", + "startMs": 4.5625, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5625 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 4.5641, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5641 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 4.5656, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5656 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 4.5673, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5673 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 4.5688, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5688 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 4.5704, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5704 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 4.572, + "visualDurationMs": 0.0013, + "visualStartMs": 4.572 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 4.5736, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5736 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 4.5753, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5753 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 4.5768, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5768 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 4.5784, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5784 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 4.5801, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5801 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 4.5817, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5817 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 4.5832, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5832 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 4.5848, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5848 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 4.5864, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5864 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 4.5879, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5879 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 4.5896, + "visualDurationMs": 0.0014, + "visualStartMs": 4.5896 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 4.5914, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5914 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 4.593, + "visualDurationMs": 0.0012, + "visualStartMs": 4.593 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 4.5946, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5946 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 4.5962, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5962 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 4.5979, + "visualDurationMs": 0.0013, + "visualStartMs": 4.5979 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 4.5995, + "visualDurationMs": 0.0012, + "visualStartMs": 4.5995 + }, + { + "durationMs": 0.0079, + "name": "L93", + "startMs": 4.6011, + "visualDurationMs": 0.0079, + "visualStartMs": 4.6011 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 4.6094, + "visualDurationMs": 0.0015, + "visualStartMs": 4.6094 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 4.6112, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6112 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 4.6129, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6129 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 4.6146, + "visualDurationMs": 0.0015, + "visualStartMs": 4.6146 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 4.6164, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6164 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 4.6181, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6181 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 4.6195, + "visualDurationMs": 0.0007, + "visualStartMs": 4.6195 + } + ], + "durationMs": 0.1907, + "name": "Lighting", + "startMs": 4.4299, + "visualDurationMs": 0.1907, + "visualStartMs": 4.4299 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 4.6212, + "visualDurationMs": 0.0004, + "visualStartMs": 4.6212 + }, + { + "durationMs": 0.0009, + "name": "GL Draw", + "startMs": 4.6218, + "visualDurationMs": 0.0009, + "visualStartMs": 4.6218 + } + ], + "durationMs": 0.0021, + "name": "Draw", + "startMs": 4.6208, + "visualDurationMs": 0.0021, + "visualStartMs": 4.6208 + } + ], + "durationMs": 0.1974, + "name": "DrawSprite", + "startMs": 4.4256, + "visualDurationMs": 0.1974, + "visualStartMs": 4.4256 + } + ], + "durationMs": 0.1979, + "name": "Draw Sprite: Pebble_15", + "startMs": 4.4252, + "visualDurationMs": 0.1979, + "visualStartMs": 4.4252 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 4.6252, + "visualDurationMs": 0.0004, + "visualStartMs": 4.6252 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 4.6258, + "visualDurationMs": 0.0007, + "visualStartMs": 4.6258 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 4.6271, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6271 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 4.6285, + "visualDurationMs": 0.0005, + "visualStartMs": 4.6285 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 4.6267, + "visualDurationMs": 0.0024, + "visualStartMs": 4.6267 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 4.6292, + "visualDurationMs": 0.0004, + "visualStartMs": 4.6292 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 4.6301, + "visualDurationMs": 0.001, + "visualStartMs": 4.6301 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 4.6312, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6312 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 4.633, + "visualDurationMs": 0.0013, + "visualStartMs": 4.633 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 4.6346, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6346 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 4.6362, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6362 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 4.6378, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6378 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 4.6395, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6395 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 4.6411, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6411 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 4.6426, + "visualDurationMs": 0.0026, + "visualStartMs": 4.6426 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 4.6455, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6455 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 4.6471, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6471 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 4.6488, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6488 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 4.6505, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6505 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 4.6521, + "visualDurationMs": 0.0016, + "visualStartMs": 4.6521 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 4.654, + "visualDurationMs": 0.0014, + "visualStartMs": 4.654 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 4.6557, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6557 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 4.6574, + "visualDurationMs": 0.0035, + "visualStartMs": 4.6574 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 4.6613, + "visualDurationMs": 0.0015, + "visualStartMs": 4.6613 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 4.6631, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6631 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 4.6648, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6648 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 4.6665, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6665 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 4.6681, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6681 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 4.6699, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6699 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 4.6715, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6715 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 4.6733, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6733 + }, + { + "durationMs": 0.0016, + "name": "L23", + "startMs": 4.675, + "visualDurationMs": 0.0016, + "visualStartMs": 4.675 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 4.677, + "visualDurationMs": 0.0013, + "visualStartMs": 4.677 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 4.6787, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6787 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 4.6803, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6803 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 4.6819, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6819 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 4.6835, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6835 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 4.6852, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6852 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 4.6869, + "visualDurationMs": 0.0053, + "visualStartMs": 4.6869 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 4.6925, + "visualDurationMs": 0.0015, + "visualStartMs": 4.6925 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 4.6943, + "visualDurationMs": 0.0012, + "visualStartMs": 4.6943 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 4.6959, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6959 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 4.6976, + "visualDurationMs": 0.0013, + "visualStartMs": 4.6976 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 4.6993, + "visualDurationMs": 0.0014, + "visualStartMs": 4.6993 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 4.701, + "visualDurationMs": 0.0013, + "visualStartMs": 4.701 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 4.7027, + "visualDurationMs": 0.0015, + "visualStartMs": 4.7027 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 4.7045, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7045 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 4.7061, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7061 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 4.7077, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7077 + }, + { + "durationMs": 0.0016, + "name": "L41", + "startMs": 4.7095, + "visualDurationMs": 0.0016, + "visualStartMs": 4.7095 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 4.7115, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7115 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 4.713, + "visualDurationMs": 0.0015, + "visualStartMs": 4.713 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 4.7148, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7148 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 4.7166, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7166 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 4.7182, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7182 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 4.7199, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7199 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 4.7216, + "visualDurationMs": 0.0016, + "visualStartMs": 4.7216 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 4.7235, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7235 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 4.7253, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7253 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 4.7269, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7269 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 4.7287, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7287 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 4.7303, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7303 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 4.732, + "visualDurationMs": 0.0014, + "visualStartMs": 4.732 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 4.7337, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7337 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 4.7354, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7354 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 4.7371, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7371 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 4.7387, + "visualDurationMs": 0.0015, + "visualStartMs": 4.7387 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 4.7405, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7405 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 4.7422, + "visualDurationMs": 0.0015, + "visualStartMs": 4.7422 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 4.744, + "visualDurationMs": 0.0014, + "visualStartMs": 4.744 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 4.7457, + "visualDurationMs": 0.0085, + "visualStartMs": 4.7457 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 4.7546, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7546 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 4.7563, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7563 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 4.758, + "visualDurationMs": 0.0014, + "visualStartMs": 4.758 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 4.7597, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7597 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 4.7614, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7614 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 4.7631, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7631 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 4.7647, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7647 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 4.7664, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7664 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 4.7681, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7681 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 4.7697, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7697 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 4.7713, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7713 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 4.7729, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7729 + }, + { + "durationMs": 0.0015, + "name": "L75", + "startMs": 4.7745, + "visualDurationMs": 0.0015, + "visualStartMs": 4.7745 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 4.7763, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7763 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 4.7779, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7779 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 4.7795, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7795 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 4.7812, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7812 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 4.7828, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7828 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 4.7845, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7845 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 4.7861, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7861 + }, + { + "durationMs": 0.0015, + "name": "L83", + "startMs": 4.7876, + "visualDurationMs": 0.0015, + "visualStartMs": 4.7876 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 4.7895, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7895 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 4.7912, + "visualDurationMs": 0.0016, + "visualStartMs": 4.7912 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 4.7931, + "visualDurationMs": 0.0014, + "visualStartMs": 4.7931 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 4.7948, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7948 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 4.7965, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7965 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 4.7981, + "visualDurationMs": 0.0013, + "visualStartMs": 4.7981 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 4.7997, + "visualDurationMs": 0.0012, + "visualStartMs": 4.7997 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 4.8013, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8013 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 4.8029, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8029 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 4.8046, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8046 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 4.8062, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8062 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 4.8077, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8077 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 4.8093, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8093 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 4.8109, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8109 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 4.8125, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8125 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 4.8141, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8141 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 4.8154, + "visualDurationMs": 0.0006, + "visualStartMs": 4.8154 + } + ], + "durationMs": 0.1866, + "name": "Lighting", + "startMs": 4.6297, + "visualDurationMs": 0.1866, + "visualStartMs": 4.6297 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 4.8168, + "visualDurationMs": 0.0004, + "visualStartMs": 4.8168 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 4.8174, + "visualDurationMs": 0.0004, + "visualStartMs": 4.8174 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 4.8164, + "visualDurationMs": 0.0015, + "visualStartMs": 4.8164 + } + ], + "durationMs": 0.1931, + "name": "DrawSprite", + "startMs": 4.6249, + "visualDurationMs": 0.1931, + "visualStartMs": 4.6249 + } + ], + "durationMs": 0.1937, + "name": "Draw Sprite: Pebble_16", + "startMs": 4.6244, + "visualDurationMs": 0.1937, + "visualStartMs": 4.6244 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 4.8213, + "visualDurationMs": 0.0003, + "visualStartMs": 4.8213 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 4.8217, + "visualDurationMs": 0.0004, + "visualStartMs": 4.8217 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 4.8227, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8227 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 4.824, + "visualDurationMs": 0.0006, + "visualStartMs": 4.824 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 4.8224, + "visualDurationMs": 0.0023, + "visualStartMs": 4.8224 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 4.8248, + "visualDurationMs": 0.0004, + "visualStartMs": 4.8248 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 4.8256, + "visualDurationMs": 0.001, + "visualStartMs": 4.8256 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 4.8268, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8268 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 4.8285, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8285 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 4.8301, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8301 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 4.8317, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8317 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 4.8333, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8333 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 4.835, + "visualDurationMs": 0.0012, + "visualStartMs": 4.835 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 4.8365, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8365 + }, + { + "durationMs": 0.0063, + "name": "L6", + "startMs": 4.838, + "visualDurationMs": 0.0063, + "visualStartMs": 4.838 + }, + { + "durationMs": 0.0016, + "name": "L7", + "startMs": 4.8447, + "visualDurationMs": 0.0016, + "visualStartMs": 4.8447 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 4.8467, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8467 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 4.8484, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8484 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 4.8502, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8502 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 4.8519, + "visualDurationMs": 0.0015, + "visualStartMs": 4.8519 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 4.8538, + "visualDurationMs": 0.0015, + "visualStartMs": 4.8538 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 4.8556, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8556 + }, + { + "durationMs": 0.0038, + "name": "L14", + "startMs": 4.8573, + "visualDurationMs": 0.0038, + "visualStartMs": 4.8573 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 4.8614, + "visualDurationMs": 0.0015, + "visualStartMs": 4.8614 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 4.8633, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8633 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 4.865, + "visualDurationMs": 0.0015, + "visualStartMs": 4.865 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 4.867, + "visualDurationMs": 0.0013, + "visualStartMs": 4.867 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 4.8686, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8686 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 4.8704, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8704 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 4.872, + "visualDurationMs": 0.0014, + "visualStartMs": 4.872 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 4.8738, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8738 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 4.8755, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8755 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 4.8772, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8772 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 4.8788, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8788 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 4.8805, + "visualDurationMs": 0.0012, + "visualStartMs": 4.8805 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 4.8821, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8821 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 4.8837, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8837 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 4.8853, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8853 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 4.8869, + "visualDurationMs": 0.0051, + "visualStartMs": 4.8869 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 4.8924, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8924 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 4.8941, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8941 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 4.8957, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8957 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 4.8975, + "visualDurationMs": 0.0013, + "visualStartMs": 4.8975 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 4.8991, + "visualDurationMs": 0.0014, + "visualStartMs": 4.8991 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 4.9009, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9009 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 4.9025, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9025 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 4.9043, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9043 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 4.9059, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9059 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 4.9075, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9075 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 4.9092, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9092 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 4.9109, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9109 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 4.9125, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9125 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 4.9143, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9143 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 4.9161, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9161 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 4.9179, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9179 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 4.9198, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9198 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 4.9215, + "visualDurationMs": 0.0016, + "visualStartMs": 4.9215 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 4.9234, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9234 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 4.9251, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9251 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 4.9268, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9268 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 4.9286, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9286 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 4.9302, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9302 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 4.9319, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9319 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 4.9335, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9335 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 4.9353, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9353 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 4.937, + "visualDurationMs": 0.0013, + "visualStartMs": 4.937 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 4.9387, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9387 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 4.9404, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9404 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 4.9421, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9421 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 4.9438, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9438 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 4.9455, + "visualDurationMs": 0.0087, + "visualStartMs": 4.9455 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 4.9546, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9546 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 4.9563, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9563 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 4.9582, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9582 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 4.96, + "visualDurationMs": 0.0016, + "visualStartMs": 4.96 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 4.9619, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9619 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 4.9636, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9636 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 4.9654, + "visualDurationMs": 0.0015, + "visualStartMs": 4.9654 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 4.9673, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9673 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 4.9689, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9689 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 4.9705, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9705 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 4.9721, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9721 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 4.9736, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9736 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 4.9752, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9752 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 4.9767, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9767 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 4.9785, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9785 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 4.9802, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9802 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 4.9818, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9818 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 4.9836, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9836 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 4.9852, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9852 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 4.9869, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9869 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 4.9885, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9885 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 4.9901, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9901 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 4.9917, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9917 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 4.9934, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9934 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 4.9951, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9951 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 4.9967, + "visualDurationMs": 0.0012, + "visualStartMs": 4.9967 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 4.9983, + "visualDurationMs": 0.0013, + "visualStartMs": 4.9983 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 4.9999, + "visualDurationMs": 0.0014, + "visualStartMs": 4.9999 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 5.0017, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0017 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 5.0033, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0033 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 5.0049, + "visualDurationMs": 0.0012, + "visualStartMs": 5.0049 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 5.0064, + "visualDurationMs": 0.0015, + "visualStartMs": 5.0064 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 5.0082, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0082 + }, + { + "durationMs": 0.0015, + "name": "L96", + "startMs": 5.0099, + "visualDurationMs": 0.0015, + "visualStartMs": 5.0099 + }, + { + "durationMs": 0.0016, + "name": "L97", + "startMs": 5.0118, + "visualDurationMs": 0.0016, + "visualStartMs": 5.0118 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 5.0138, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0138 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 5.0155, + "visualDurationMs": 0.0012, + "visualStartMs": 5.0155 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 5.0169, + "visualDurationMs": 0.0007, + "visualStartMs": 5.0169 + } + ], + "durationMs": 0.1927, + "name": "Lighting", + "startMs": 4.8253, + "visualDurationMs": 0.1927, + "visualStartMs": 4.8253 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 5.0229, + "visualDurationMs": 0.0004, + "visualStartMs": 5.0229 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 5.0234, + "visualDurationMs": 0.0004, + "visualStartMs": 5.0234 + } + ], + "durationMs": 0.0059, + "name": "Draw", + "startMs": 5.0181, + "visualDurationMs": 0.0059, + "visualStartMs": 5.0181 + } + ], + "durationMs": 0.2032, + "name": "DrawSprite", + "startMs": 4.8209, + "visualDurationMs": 0.2032, + "visualStartMs": 4.8209 + } + ], + "durationMs": 0.2038, + "name": "Draw Sprite: Pebble_19", + "startMs": 4.8204, + "visualDurationMs": 0.2038, + "visualStartMs": 4.8204 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 5.0331, + "visualDurationMs": 0.0004, + "visualStartMs": 5.0331 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 5.0337, + "visualDurationMs": 0.0004, + "visualStartMs": 5.0337 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 5.0347, + "visualDurationMs": 0.0012, + "visualStartMs": 5.0347 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 5.036, + "visualDurationMs": 0.0005, + "visualStartMs": 5.036 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 5.0343, + "visualDurationMs": 0.0023, + "visualStartMs": 5.0343 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 5.0368, + "visualDurationMs": 0.0003, + "visualStartMs": 5.0368 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 5.0376, + "visualDurationMs": 0.0009, + "visualStartMs": 5.0376 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 5.0386, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0386 + }, + { + "durationMs": 0.0018, + "name": "L0", + "startMs": 5.0497, + "visualDurationMs": 0.0018, + "visualStartMs": 5.0497 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 5.0519, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0519 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 5.0536, + "visualDurationMs": 0.0015, + "visualStartMs": 5.0536 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 5.0554, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0554 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 5.0572, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0572 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 5.0589, + "visualDurationMs": 0.0012, + "visualStartMs": 5.0589 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 5.0604, + "visualDurationMs": 0.0027, + "visualStartMs": 5.0604 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 5.0635, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0635 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 5.0651, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0651 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 5.0667, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0667 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 5.0684, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0684 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 5.0701, + "visualDurationMs": 0.0015, + "visualStartMs": 5.0701 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 5.072, + "visualDurationMs": 0.0014, + "visualStartMs": 5.072 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 5.0737, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0737 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 5.0753, + "visualDurationMs": 0.0034, + "visualStartMs": 5.0753 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 5.0791, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0791 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 5.0809, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0809 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 5.0827, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0827 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 5.0844, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0844 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 5.0861, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0861 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 5.0878, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0878 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 5.0895, + "visualDurationMs": 0.0015, + "visualStartMs": 5.0895 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 5.0913, + "visualDurationMs": 0.0014, + "visualStartMs": 5.0913 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 5.0931, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0931 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 5.0948, + "visualDurationMs": 0.0013, + "visualStartMs": 5.0948 + }, + { + "durationMs": 0.005, + "name": "L25", + "startMs": 5.0964, + "visualDurationMs": 0.005, + "visualStartMs": 5.0964 + }, + { + "durationMs": 0.0017, + "name": "L26", + "startMs": 5.1019, + "visualDurationMs": 0.0017, + "visualStartMs": 5.1019 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 5.1039, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1039 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 5.1057, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1057 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 5.1074, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1074 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 5.109, + "visualDurationMs": 0.0053, + "visualStartMs": 5.109 + }, + { + "durationMs": 0.0022, + "name": "L31", + "startMs": 5.1147, + "visualDurationMs": 0.0022, + "visualStartMs": 5.1147 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 5.1173, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1173 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 5.119, + "visualDurationMs": 0.0016, + "visualStartMs": 5.119 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 5.121, + "visualDurationMs": 0.0014, + "visualStartMs": 5.121 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 5.1228, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1228 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 5.1244, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1244 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 5.1261, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1261 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 5.1277, + "visualDurationMs": 0.0012, + "visualStartMs": 5.1277 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 5.1293, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1293 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 5.1309, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1309 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 5.1326, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1326 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 5.1344, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1344 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 5.1361, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1361 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 5.138, + "visualDurationMs": 0.0015, + "visualStartMs": 5.138 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 5.1399, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1399 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 5.1415, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1415 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 5.1432, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1432 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 5.1449, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1449 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 5.1468, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1468 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 5.1486, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1486 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 5.1503, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1503 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 5.152, + "visualDurationMs": 0.0014, + "visualStartMs": 5.152 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 5.1538, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1538 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 5.1554, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1554 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 5.1571, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1571 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 5.1589, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1589 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 5.1605, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1605 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 5.1622, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1622 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 5.164, + "visualDurationMs": 0.0013, + "visualStartMs": 5.164 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 5.1657, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1657 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 5.1674, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1674 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 5.169, + "visualDurationMs": 0.0084, + "visualStartMs": 5.169 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 5.1778, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1778 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 5.1797, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1797 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 5.1815, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1815 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 5.1832, + "visualDurationMs": 0.0015, + "visualStartMs": 5.1832 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 5.1851, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1851 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 5.1868, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1868 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 5.1886, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1886 + }, + { + "durationMs": 0.0016, + "name": "L70", + "startMs": 5.1903, + "visualDurationMs": 0.0016, + "visualStartMs": 5.1903 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 5.1922, + "visualDurationMs": 0.0013, + "visualStartMs": 5.1922 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 5.1939, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1939 + }, + { + "durationMs": 0.0016, + "name": "L73", + "startMs": 5.1956, + "visualDurationMs": 0.0016, + "visualStartMs": 5.1956 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 5.1975, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1975 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 5.1992, + "visualDurationMs": 0.0014, + "visualStartMs": 5.1992 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 5.201, + "visualDurationMs": 0.0014, + "visualStartMs": 5.201 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 5.2027, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2027 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 5.2045, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2045 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 5.206, + "visualDurationMs": 0.0013, + "visualStartMs": 5.206 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 5.2077, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2077 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 5.2094, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2094 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 5.2109, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2109 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 5.2125, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2125 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 5.2142, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2142 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 5.2158, + "visualDurationMs": 0.0015, + "visualStartMs": 5.2158 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 5.2176, + "visualDurationMs": 0.0015, + "visualStartMs": 5.2176 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 5.2194, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2194 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 5.221, + "visualDurationMs": 0.0013, + "visualStartMs": 5.221 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 5.2227, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2227 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 5.2244, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2244 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 5.226, + "visualDurationMs": 0.0013, + "visualStartMs": 5.226 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 5.2276, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2276 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 5.2292, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2292 + }, + { + "durationMs": 0.0016, + "name": "L94", + "startMs": 5.2307, + "visualDurationMs": 0.0016, + "visualStartMs": 5.2307 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 5.2326, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2326 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 5.2342, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2342 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 5.2358, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2358 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 5.2375, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2375 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 5.239, + "visualDurationMs": 0.0013, + "visualStartMs": 5.239 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 5.2404, + "visualDurationMs": 0.0007, + "visualStartMs": 5.2404 + } + ], + "durationMs": 0.2042, + "name": "Lighting", + "startMs": 5.0373, + "visualDurationMs": 0.2042, + "visualStartMs": 5.0373 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 5.242, + "visualDurationMs": 0.0004, + "visualStartMs": 5.242 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 5.2425, + "visualDurationMs": 0.0005, + "visualStartMs": 5.2425 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 5.2416, + "visualDurationMs": 0.0016, + "visualStartMs": 5.2416 + } + ], + "durationMs": 0.2105, + "name": "DrawSprite", + "startMs": 5.0328, + "visualDurationMs": 0.2105, + "visualStartMs": 5.0328 + } + ], + "durationMs": 0.2111, + "name": "Draw Sprite: Pebble_29", + "startMs": 5.0323, + "visualDurationMs": 0.2111, + "visualStartMs": 5.0323 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 5.2455, + "visualDurationMs": 0.0003, + "visualStartMs": 5.2455 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 5.246, + "visualDurationMs": 0.0004, + "visualStartMs": 5.246 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 5.247, + "visualDurationMs": 0.0013, + "visualStartMs": 5.247 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 5.2484, + "visualDurationMs": 0.0005, + "visualStartMs": 5.2484 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 5.2467, + "visualDurationMs": 0.0023, + "visualStartMs": 5.2467 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 5.2492, + "visualDurationMs": 0.0004, + "visualStartMs": 5.2492 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 5.2501, + "visualDurationMs": 0.0009, + "visualStartMs": 5.2501 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 5.2512, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2512 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 5.2529, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2529 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 5.2546, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2546 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 5.2563, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2563 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 5.2579, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2579 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 5.2598, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2598 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 5.2614, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2614 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 5.263, + "visualDurationMs": 0.0027, + "visualStartMs": 5.263 + }, + { + "durationMs": 0.0016, + "name": "L7", + "startMs": 5.2661, + "visualDurationMs": 0.0016, + "visualStartMs": 5.2661 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 5.2681, + "visualDurationMs": 0.0013, + "visualStartMs": 5.2681 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 5.2697, + "visualDurationMs": 0.0012, + "visualStartMs": 5.2697 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 5.2713, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2713 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 5.273, + "visualDurationMs": 0.0015, + "visualStartMs": 5.273 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 5.2748, + "visualDurationMs": 0.0014, + "visualStartMs": 5.2748 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 5.2765, + "visualDurationMs": 0.0015, + "visualStartMs": 5.2765 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 5.2783, + "visualDurationMs": 0.0034, + "visualStartMs": 5.2783 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 5.282, + "visualDurationMs": 0.0015, + "visualStartMs": 5.282 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 5.2839, + "visualDurationMs": 0.0015, + "visualStartMs": 5.2839 + }, + { + "durationMs": 0.2068, + "name": "L17", + "startMs": 5.2857, + "visualDurationMs": 0.2068, + "visualStartMs": 5.2857 + }, + { + "durationMs": 0.0054, + "name": "L18", + "startMs": 5.4952, + "visualDurationMs": 0.0054, + "visualStartMs": 5.4952 + }, + { + "durationMs": 0.0035, + "name": "L19", + "startMs": 5.5015, + "visualDurationMs": 0.0035, + "visualStartMs": 5.5015 + }, + { + "durationMs": 0.0035, + "name": "L20", + "startMs": 5.5058, + "visualDurationMs": 0.0035, + "visualStartMs": 5.5058 + }, + { + "durationMs": 0.0032, + "name": "L21", + "startMs": 5.5101, + "visualDurationMs": 0.0032, + "visualStartMs": 5.5101 + }, + { + "durationMs": 0.0032, + "name": "L22", + "startMs": 5.5142, + "visualDurationMs": 0.0032, + "visualStartMs": 5.5142 + }, + { + "durationMs": 0.0031, + "name": "L23", + "startMs": 5.5183, + "visualDurationMs": 0.0031, + "visualStartMs": 5.5183 + }, + { + "durationMs": 0.0029, + "name": "L24", + "startMs": 5.5223, + "visualDurationMs": 0.0029, + "visualStartMs": 5.5223 + }, + { + "durationMs": 0.0031, + "name": "L25", + "startMs": 5.526, + "visualDurationMs": 0.0031, + "visualStartMs": 5.526 + }, + { + "durationMs": 0.003, + "name": "L26", + "startMs": 5.5299, + "visualDurationMs": 0.003, + "visualStartMs": 5.5299 + }, + { + "durationMs": 0.0029, + "name": "L27", + "startMs": 5.5338, + "visualDurationMs": 0.0029, + "visualStartMs": 5.5338 + }, + { + "durationMs": 0.0034, + "name": "L28", + "startMs": 5.5375, + "visualDurationMs": 0.0034, + "visualStartMs": 5.5375 + }, + { + "durationMs": 0.0032, + "name": "L29", + "startMs": 5.5418, + "visualDurationMs": 0.0032, + "visualStartMs": 5.5418 + }, + { + "durationMs": 0.0104, + "name": "L30", + "startMs": 5.5459, + "visualDurationMs": 0.0104, + "visualStartMs": 5.5459 + }, + { + "durationMs": 0.0038, + "name": "L31", + "startMs": 5.5572, + "visualDurationMs": 0.0038, + "visualStartMs": 5.5572 + }, + { + "durationMs": 0.0033, + "name": "L32", + "startMs": 5.5618, + "visualDurationMs": 0.0033, + "visualStartMs": 5.5618 + }, + { + "durationMs": 0.0033, + "name": "L33", + "startMs": 5.5661, + "visualDurationMs": 0.0033, + "visualStartMs": 5.5661 + }, + { + "durationMs": 0.0028, + "name": "L34", + "startMs": 5.5703, + "visualDurationMs": 0.0028, + "visualStartMs": 5.5703 + }, + { + "durationMs": 0.0029, + "name": "L35", + "startMs": 5.574, + "visualDurationMs": 0.0029, + "visualStartMs": 5.574 + }, + { + "durationMs": 0.003, + "name": "L36", + "startMs": 5.578, + "visualDurationMs": 0.003, + "visualStartMs": 5.578 + }, + { + "durationMs": 0.0028, + "name": "L37", + "startMs": 5.5819, + "visualDurationMs": 0.0028, + "visualStartMs": 5.5819 + }, + { + "durationMs": 0.0028, + "name": "L38", + "startMs": 5.5856, + "visualDurationMs": 0.0028, + "visualStartMs": 5.5856 + }, + { + "durationMs": 0.0029, + "name": "L39", + "startMs": 5.5893, + "visualDurationMs": 0.0029, + "visualStartMs": 5.5893 + }, + { + "durationMs": 0.0028, + "name": "L40", + "startMs": 5.5932, + "visualDurationMs": 0.0028, + "visualStartMs": 5.5932 + }, + { + "durationMs": 0.0031, + "name": "L41", + "startMs": 5.5969, + "visualDurationMs": 0.0031, + "visualStartMs": 5.5969 + }, + { + "durationMs": 0.0029, + "name": "L42", + "startMs": 5.6009, + "visualDurationMs": 0.0029, + "visualStartMs": 5.6009 + }, + { + "durationMs": 0.0031, + "name": "L43", + "startMs": 5.6048, + "visualDurationMs": 0.0031, + "visualStartMs": 5.6048 + }, + { + "durationMs": 0.0032, + "name": "L44", + "startMs": 5.6088, + "visualDurationMs": 0.0032, + "visualStartMs": 5.6088 + }, + { + "durationMs": 0.0109, + "name": "L45", + "startMs": 5.6393, + "visualDurationMs": 0.0109, + "visualStartMs": 5.6393 + }, + { + "durationMs": 0.0018, + "name": "L46", + "startMs": 5.6511, + "visualDurationMs": 0.0018, + "visualStartMs": 5.6511 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 5.6533, + "visualDurationMs": 0.0015, + "visualStartMs": 5.6533 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 5.6552, + "visualDurationMs": 0.0017, + "visualStartMs": 5.6552 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 5.6573, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6573 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 5.6591, + "visualDurationMs": 0.0016, + "visualStartMs": 5.6591 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 5.6611, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6611 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 5.6629, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6629 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 5.6645, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6645 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 5.6662, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6662 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 5.668, + "visualDurationMs": 0.0014, + "visualStartMs": 5.668 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 5.6697, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6697 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 5.6714, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6714 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 5.6731, + "visualDurationMs": 0.0015, + "visualStartMs": 5.6731 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 5.675, + "visualDurationMs": 0.0012, + "visualStartMs": 5.675 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 5.6766, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6766 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 5.6782, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6782 + }, + { + "durationMs": 0.0095, + "name": "L62", + "startMs": 5.68, + "visualDurationMs": 0.0095, + "visualStartMs": 5.68 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 5.6898, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6898 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 5.6915, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6915 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 5.6932, + "visualDurationMs": 0.0014, + "visualStartMs": 5.6932 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 5.6949, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6949 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 5.6966, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6966 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 5.6982, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6982 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 5.6999, + "visualDurationMs": 0.0013, + "visualStartMs": 5.6999 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 5.7015, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7015 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 5.7031, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7031 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 5.7048, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7048 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 5.7063, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7063 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 5.7079, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7079 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 5.7097, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7097 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 5.7113, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7113 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 5.7129, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7129 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 5.7145, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7145 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 5.716, + "visualDurationMs": 0.0014, + "visualStartMs": 5.716 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 5.7178, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7178 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 5.7194, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7194 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 5.721, + "visualDurationMs": 0.0012, + "visualStartMs": 5.721 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 5.7226, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7226 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 5.7242, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7242 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 5.7258, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7258 + }, + { + "durationMs": 0.0016, + "name": "L86", + "startMs": 5.7274, + "visualDurationMs": 0.0016, + "visualStartMs": 5.7274 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 5.7294, + "visualDurationMs": 0.0014, + "visualStartMs": 5.7294 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 5.7311, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7311 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 5.7327, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7327 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 5.7343, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7343 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 5.7359, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7359 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 5.7375, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7375 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 5.7391, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7391 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 5.7407, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7407 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 5.7422, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7422 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 5.7439, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7439 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 5.7454, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7454 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 5.7471, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7471 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 5.7488, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7488 + }, + { + "durationMs": 0.0014, + "name": "BindNorm", + "startMs": 5.7502, + "visualDurationMs": 0.0014, + "visualStartMs": 5.7502 + } + ], + "durationMs": 0.5029, + "name": "Lighting", + "startMs": 5.2497, + "visualDurationMs": 0.5029, + "visualStartMs": 5.2497 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 5.7531, + "visualDurationMs": 0.0006, + "visualStartMs": 5.7531 + }, + { + "durationMs": 0.0009, + "name": "GL Draw", + "startMs": 5.7538, + "visualDurationMs": 0.0009, + "visualStartMs": 5.7538 + } + ], + "durationMs": 0.0022, + "name": "Draw", + "startMs": 5.7527, + "visualDurationMs": 0.0022, + "visualStartMs": 5.7527 + } + ], + "durationMs": 0.51, + "name": "DrawSprite", + "startMs": 5.245, + "visualDurationMs": 0.51, + "visualStartMs": 5.245 + } + ], + "durationMs": 0.5108, + "name": "Draw Sprite: Pebble_21", + "startMs": 5.2445, + "visualDurationMs": 0.5108, + "visualStartMs": 5.2445 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0005, + "name": "ShaderSelect", + "startMs": 5.7577, + "visualDurationMs": 0.0005, + "visualStartMs": 5.7577 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 5.7583, + "visualDurationMs": 0.0007, + "visualStartMs": 5.7583 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 5.7597, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7597 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 5.7612, + "visualDurationMs": 0.0005, + "visualStartMs": 5.7612 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 5.7594, + "visualDurationMs": 0.0024, + "visualStartMs": 5.7594 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 5.7619, + "visualDurationMs": 0.0004, + "visualStartMs": 5.7619 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 5.7628, + "visualDurationMs": 0.0011, + "visualStartMs": 5.7628 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 5.764, + "visualDurationMs": 0.0014, + "visualStartMs": 5.764 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 5.7658, + "visualDurationMs": 0.0014, + "visualStartMs": 5.7658 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 5.7675, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7675 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 5.7692, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7692 + }, + { + "durationMs": 0.0015, + "name": "L3", + "startMs": 5.7708, + "visualDurationMs": 0.0015, + "visualStartMs": 5.7708 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 5.7726, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7726 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 5.7742, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7742 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 5.7757, + "visualDurationMs": 0.0026, + "visualStartMs": 5.7757 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 5.7786, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7786 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 5.7802, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7802 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 5.7818, + "visualDurationMs": 0.0012, + "visualStartMs": 5.7818 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 5.7834, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7834 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 5.7851, + "visualDurationMs": 0.0015, + "visualStartMs": 5.7851 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 5.787, + "visualDurationMs": 0.0014, + "visualStartMs": 5.787 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 5.7888, + "visualDurationMs": 0.0013, + "visualStartMs": 5.7888 + }, + { + "durationMs": 0.004, + "name": "L14", + "startMs": 5.7905, + "visualDurationMs": 0.004, + "visualStartMs": 5.7905 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 5.7948, + "visualDurationMs": 0.0015, + "visualStartMs": 5.7948 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 5.7966, + "visualDurationMs": 0.0014, + "visualStartMs": 5.7966 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 5.7983, + "visualDurationMs": 0.0014, + "visualStartMs": 5.7983 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 5.8001, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8001 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 5.8018, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8018 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 5.8036, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8036 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 5.8053, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8053 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 5.8071, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8071 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 5.8088, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8088 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 5.8105, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8105 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 5.8122, + "visualDurationMs": 0.0012, + "visualStartMs": 5.8122 + }, + { + "durationMs": 0.0015, + "name": "L26", + "startMs": 5.8137, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8137 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 5.8155, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8155 + }, + { + "durationMs": 0.0016, + "name": "L28", + "startMs": 5.8173, + "visualDurationMs": 0.0016, + "visualStartMs": 5.8173 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 5.8193, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8193 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 5.821, + "visualDurationMs": 0.0052, + "visualStartMs": 5.821 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 5.8265, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8265 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 5.8283, + "visualDurationMs": 0.0012, + "visualStartMs": 5.8283 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 5.8299, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8299 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 5.8316, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8316 + }, + { + "durationMs": 0.0015, + "name": "L35", + "startMs": 5.8333, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8333 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 5.8352, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8352 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 5.8369, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8369 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 5.8386, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8386 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 5.8402, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8402 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 5.8418, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8418 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 5.8434, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8434 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 5.8451, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8451 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 5.8468, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8468 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 5.8485, + "visualDurationMs": 0.0016, + "visualStartMs": 5.8485 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 5.8505, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8505 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 5.8522, + "visualDurationMs": 0.0016, + "visualStartMs": 5.8522 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 5.8541, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8541 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 5.8559, + "visualDurationMs": 0.0016, + "visualStartMs": 5.8559 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 5.8579, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8579 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 5.8596, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8596 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 5.8615, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8615 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 5.8634, + "visualDurationMs": 0.0012, + "visualStartMs": 5.8634 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 5.865, + "visualDurationMs": 0.0014, + "visualStartMs": 5.865 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 5.8667, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8667 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 5.8684, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8684 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 5.8701, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8701 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 5.8718, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8718 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 5.8735, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8735 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 5.8753, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8753 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 5.8769, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8769 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 5.8786, + "visualDurationMs": 0.0013, + "visualStartMs": 5.8786 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 5.8802, + "visualDurationMs": 0.0084, + "visualStartMs": 5.8802 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 5.8889, + "visualDurationMs": 0.0014, + "visualStartMs": 5.8889 + }, + { + "durationMs": 0.0052, + "name": "L64", + "startMs": 5.8906, + "visualDurationMs": 0.0052, + "visualStartMs": 5.8906 + }, + { + "durationMs": 0.0018, + "name": "L65", + "startMs": 5.8963, + "visualDurationMs": 0.0018, + "visualStartMs": 5.8963 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 5.8984, + "visualDurationMs": 0.0015, + "visualStartMs": 5.8984 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 5.9002, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9002 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 5.902, + "visualDurationMs": 0.0014, + "visualStartMs": 5.902 + }, + { + "durationMs": 0.0016, + "name": "L69", + "startMs": 5.9037, + "visualDurationMs": 0.0016, + "visualStartMs": 5.9037 + }, + { + "durationMs": 0.0016, + "name": "L70", + "startMs": 5.9056, + "visualDurationMs": 0.0016, + "visualStartMs": 5.9056 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 5.9075, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9075 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 5.9091, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9091 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 5.9107, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9107 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 5.9125, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9125 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 5.9141, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9141 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 5.9157, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9157 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 5.9173, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9173 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 5.919, + "visualDurationMs": 0.0012, + "visualStartMs": 5.919 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 5.9205, + "visualDurationMs": 0.0015, + "visualStartMs": 5.9205 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 5.9224, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9224 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 5.924, + "visualDurationMs": 0.0015, + "visualStartMs": 5.924 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 5.9259, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9259 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 5.9275, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9275 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 5.9291, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9291 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 5.9307, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9307 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 5.9323, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9323 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 5.9339, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9339 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 5.9356, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9356 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 5.9372, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9372 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 5.9389, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9389 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 5.9405, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9405 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 5.9423, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9423 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 5.9438, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9438 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 5.9453, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9453 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 5.9469, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9469 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 5.9485, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9485 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 5.9501, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9501 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 5.9518, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9518 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 5.9533, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9533 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 5.9548, + "visualDurationMs": 0.0006, + "visualStartMs": 5.9548 + } + ], + "durationMs": 0.1933, + "name": "Lighting", + "startMs": 5.7625, + "visualDurationMs": 0.1933, + "visualStartMs": 5.7625 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 5.9563, + "visualDurationMs": 0.0004, + "visualStartMs": 5.9563 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 5.9568, + "visualDurationMs": 0.0005, + "visualStartMs": 5.9568 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 5.9559, + "visualDurationMs": 0.0016, + "visualStartMs": 5.9559 + } + ], + "durationMs": 0.2003, + "name": "DrawSprite", + "startMs": 5.7573, + "visualDurationMs": 0.2003, + "visualStartMs": 5.7573 + } + ], + "durationMs": 0.2008, + "name": "Draw Sprite: Pebble_22", + "startMs": 5.7569, + "visualDurationMs": 0.2008, + "visualStartMs": 5.7569 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 5.9591, + "visualDurationMs": 0.0003, + "visualStartMs": 5.9591 + }, + { + "durationMs": 0.0006, + "name": "ShaderUse", + "startMs": 5.9595, + "visualDurationMs": 0.0006, + "visualStartMs": 5.9595 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 5.9606, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9606 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 5.962, + "visualDurationMs": 0.0006, + "visualStartMs": 5.962 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 5.9603, + "visualDurationMs": 0.0024, + "visualStartMs": 5.9603 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 5.9628, + "visualDurationMs": 0.0004, + "visualStartMs": 5.9628 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 5.9636, + "visualDurationMs": 0.001, + "visualStartMs": 5.9636 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 5.9647, + "visualDurationMs": 0.0015, + "visualStartMs": 5.9647 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 5.9665, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9665 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 5.9682, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9682 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 5.9698, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9698 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 5.9715, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9715 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 5.9731, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9731 + }, + { + "durationMs": 0.0011, + "name": "L5", + "startMs": 5.9748, + "visualDurationMs": 0.0011, + "visualStartMs": 5.9748 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 5.9763, + "visualDurationMs": 0.0027, + "visualStartMs": 5.9763 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 5.9794, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9794 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 5.981, + "visualDurationMs": 0.0013, + "visualStartMs": 5.981 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 5.9827, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9827 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 5.9845, + "visualDurationMs": 0.0012, + "visualStartMs": 5.9845 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 5.9861, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9861 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 5.9878, + "visualDurationMs": 0.0014, + "visualStartMs": 5.9878 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 5.9895, + "visualDurationMs": 0.0013, + "visualStartMs": 5.9895 + }, + { + "durationMs": 0.0067, + "name": "L14", + "startMs": 5.9912, + "visualDurationMs": 0.0067, + "visualStartMs": 5.9912 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 5.9983, + "visualDurationMs": 0.0015, + "visualStartMs": 5.9983 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 6.0002, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0002 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 6.002, + "visualDurationMs": 0.0013, + "visualStartMs": 6.002 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 6.0036, + "visualDurationMs": 0.0015, + "visualStartMs": 6.0036 + }, + { + "durationMs": 0.0016, + "name": "L19", + "startMs": 6.0054, + "visualDurationMs": 0.0016, + "visualStartMs": 6.0054 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 6.0074, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0074 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 6.009, + "visualDurationMs": 0.0015, + "visualStartMs": 6.009 + }, + { + "durationMs": 0.0017, + "name": "L22", + "startMs": 6.0108, + "visualDurationMs": 0.0017, + "visualStartMs": 6.0108 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 6.0128, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0128 + }, + { + "durationMs": 0.0017, + "name": "L24", + "startMs": 6.0146, + "visualDurationMs": 0.0017, + "visualStartMs": 6.0146 + }, + { + "durationMs": 0.0016, + "name": "L25", + "startMs": 6.0166, + "visualDurationMs": 0.0016, + "visualStartMs": 6.0166 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 6.0186, + "visualDurationMs": 0.0012, + "visualStartMs": 6.0186 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 6.0201, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0201 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 6.0218, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0218 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 6.0235, + "visualDurationMs": 0.0012, + "visualStartMs": 6.0235 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 6.0251, + "visualDurationMs": 0.0051, + "visualStartMs": 6.0251 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 6.0306, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0306 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 6.0324, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0324 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 6.034, + "visualDurationMs": 0.0015, + "visualStartMs": 6.034 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 6.0359, + "visualDurationMs": 0.0015, + "visualStartMs": 6.0359 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 6.0377, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0377 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 6.0393, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0393 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 6.0409, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0409 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 6.0425, + "visualDurationMs": 0.0012, + "visualStartMs": 6.0425 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 6.044, + "visualDurationMs": 0.0013, + "visualStartMs": 6.044 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 6.0456, + "visualDurationMs": 0.0015, + "visualStartMs": 6.0456 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 6.0474, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0474 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 6.049, + "visualDurationMs": 0.0013, + "visualStartMs": 6.049 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 6.0506, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0506 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 6.0523, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0523 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 6.0541, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0541 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 6.0557, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0557 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 6.0574, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0574 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 6.0591, + "visualDurationMs": 0.0016, + "visualStartMs": 6.0591 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 6.061, + "visualDurationMs": 0.0014, + "visualStartMs": 6.061 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 6.0627, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0627 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 6.0644, + "visualDurationMs": 0.0015, + "visualStartMs": 6.0644 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 6.0662, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0662 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 6.0679, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0679 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 6.0696, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0696 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 6.0712, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0712 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 6.0728, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0728 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 6.0745, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0745 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 6.0761, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0761 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 6.0778, + "visualDurationMs": 0.0012, + "visualStartMs": 6.0778 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 6.0794, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0794 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 6.0811, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0811 + }, + { + "durationMs": 0.0094, + "name": "L62", + "startMs": 6.0828, + "visualDurationMs": 0.0094, + "visualStartMs": 6.0828 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 6.0925, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0925 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 6.0942, + "visualDurationMs": 0.0015, + "visualStartMs": 6.0942 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 6.0961, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0961 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 6.0978, + "visualDurationMs": 0.0013, + "visualStartMs": 6.0978 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 6.0995, + "visualDurationMs": 0.0014, + "visualStartMs": 6.0995 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 6.1012, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1012 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 6.1028, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1028 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 6.1045, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1045 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 6.106, + "visualDurationMs": 0.0015, + "visualStartMs": 6.106 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 6.1078, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1078 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 6.1093, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1093 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 6.1109, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1109 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 6.1125, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1125 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 6.1141, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1141 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 6.1157, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1157 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 6.1173, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1173 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 6.1189, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1189 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 6.1206, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1206 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 6.1223, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1223 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 6.1238, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1238 + }, + { + "durationMs": 0.0045, + "name": "L83", + "startMs": 6.1254, + "visualDurationMs": 0.0045, + "visualStartMs": 6.1254 + }, + { + "durationMs": 0.0016, + "name": "L84", + "startMs": 6.1303, + "visualDurationMs": 0.0016, + "visualStartMs": 6.1303 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 6.1322, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1322 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 6.134, + "visualDurationMs": 0.0014, + "visualStartMs": 6.134 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 6.1357, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1357 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 6.1374, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1374 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 6.1391, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1391 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 6.1407, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1407 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 6.1423, + "visualDurationMs": 0.0015, + "visualStartMs": 6.1423 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 6.1441, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1441 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 6.1459, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1459 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 6.1476, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1476 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 6.1493, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1493 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 6.1509, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1509 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 6.1526, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1526 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 6.1542, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1542 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 6.1559, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1559 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 6.1573, + "visualDurationMs": 0.0007, + "visualStartMs": 6.1573 + } + ], + "durationMs": 0.195, + "name": "Lighting", + "startMs": 5.9633, + "visualDurationMs": 0.195, + "visualStartMs": 5.9633 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 6.1589, + "visualDurationMs": 0.0004, + "visualStartMs": 6.1589 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 6.1595, + "visualDurationMs": 0.0004, + "visualStartMs": 6.1595 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 6.1585, + "visualDurationMs": 0.0016, + "visualStartMs": 6.1585 + } + ], + "durationMs": 0.2015, + "name": "DrawSprite", + "startMs": 5.9587, + "visualDurationMs": 0.2015, + "visualStartMs": 5.9587 + } + ], + "durationMs": 0.202, + "name": "Draw Sprite: Pebble_20", + "startMs": 5.9583, + "visualDurationMs": 0.202, + "visualStartMs": 5.9583 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 6.1617, + "visualDurationMs": 0.0003, + "visualStartMs": 6.1617 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 6.1621, + "visualDurationMs": 0.0004, + "visualStartMs": 6.1621 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 6.1631, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1631 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 6.1645, + "visualDurationMs": 0.0005, + "visualStartMs": 6.1645 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 6.1628, + "visualDurationMs": 0.0023, + "visualStartMs": 6.1628 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 6.1652, + "visualDurationMs": 0.0004, + "visualStartMs": 6.1652 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 6.1662, + "visualDurationMs": 0.0009, + "visualStartMs": 6.1662 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 6.1673, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1673 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 6.169, + "visualDurationMs": 0.0013, + "visualStartMs": 6.169 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 6.1706, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1706 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 6.1722, + "visualDurationMs": 0.0015, + "visualStartMs": 6.1722 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 6.174, + "visualDurationMs": 0.0013, + "visualStartMs": 6.174 + }, + { + "durationMs": 0.0015, + "name": "L4", + "startMs": 6.1756, + "visualDurationMs": 0.0015, + "visualStartMs": 6.1756 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 6.1774, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1774 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 6.179, + "visualDurationMs": 0.0026, + "visualStartMs": 6.179 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 6.1819, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1819 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 6.1835, + "visualDurationMs": 0.0012, + "visualStartMs": 6.1835 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 6.185, + "visualDurationMs": 0.0013, + "visualStartMs": 6.185 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 6.1866, + "visualDurationMs": 0.0013, + "visualStartMs": 6.1866 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 6.1882, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1882 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 6.19, + "visualDurationMs": 0.0013, + "visualStartMs": 6.19 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 6.1917, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1917 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 6.1934, + "visualDurationMs": 0.0034, + "visualStartMs": 6.1934 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 6.1972, + "visualDurationMs": 0.0014, + "visualStartMs": 6.1972 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 6.199, + "visualDurationMs": 0.0013, + "visualStartMs": 6.199 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 6.2007, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2007 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 6.2024, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2024 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 6.2041, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2041 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 6.2059, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2059 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 6.2076, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2076 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 6.2094, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2094 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 6.2111, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2111 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 6.2127, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2127 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 6.2143, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2143 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 6.216, + "visualDurationMs": 0.0012, + "visualStartMs": 6.216 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 6.2175, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2175 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 6.2193, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2193 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 6.221, + "visualDurationMs": 0.0014, + "visualStartMs": 6.221 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 6.2228, + "visualDurationMs": 0.0052, + "visualStartMs": 6.2228 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 6.2284, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2284 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 6.2302, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2302 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 6.2318, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2318 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 6.2335, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2335 + }, + { + "durationMs": 0.0015, + "name": "L35", + "startMs": 6.2352, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2352 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 6.237, + "visualDurationMs": 0.0013, + "visualStartMs": 6.237 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 6.2386, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2386 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 6.2403, + "visualDurationMs": 0.0012, + "visualStartMs": 6.2403 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 6.2419, + "visualDurationMs": 0.0012, + "visualStartMs": 6.2419 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 6.2435, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2435 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 6.2453, + "visualDurationMs": 0.0012, + "visualStartMs": 6.2453 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 6.2469, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2469 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 6.2486, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2486 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 6.2503, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2503 + }, + { + "durationMs": 0.0016, + "name": "L45", + "startMs": 6.2521, + "visualDurationMs": 0.0016, + "visualStartMs": 6.2521 + }, + { + "durationMs": 0.0017, + "name": "L46", + "startMs": 6.254, + "visualDurationMs": 0.0017, + "visualStartMs": 6.254 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 6.256, + "visualDurationMs": 0.0015, + "visualStartMs": 6.256 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 6.2579, + "visualDurationMs": 0.0016, + "visualStartMs": 6.2579 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 6.2599, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2599 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 6.2617, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2617 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 6.2634, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2634 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 6.2651, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2651 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 6.2667, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2667 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 6.2684, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2684 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 6.2703, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2703 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 6.272, + "visualDurationMs": 0.0013, + "visualStartMs": 6.272 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 6.2737, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2737 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 6.2753, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2753 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 6.277, + "visualDurationMs": 0.0015, + "visualStartMs": 6.277 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 6.2788, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2788 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 6.2806, + "visualDurationMs": 0.0013, + "visualStartMs": 6.2806 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 6.2822, + "visualDurationMs": 0.0089, + "visualStartMs": 6.2822 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 6.2915, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2915 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 6.2933, + "visualDurationMs": 0.0014, + "visualStartMs": 6.2933 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 6.2951, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2951 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 6.297, + "visualDurationMs": 0.0013, + "visualStartMs": 6.297 + }, + { + "durationMs": 0.0015, + "name": "L67", + "startMs": 6.2986, + "visualDurationMs": 0.0015, + "visualStartMs": 6.2986 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 6.3005, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3005 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 6.3021, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3021 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 6.3037, + "visualDurationMs": 0.0015, + "visualStartMs": 6.3037 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 6.3055, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3055 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 6.3072, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3072 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 6.3089, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3089 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 6.3104, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3104 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 6.3121, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3121 + }, + { + "durationMs": 0.0015, + "name": "L76", + "startMs": 6.3136, + "visualDurationMs": 0.0015, + "visualStartMs": 6.3136 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 6.3155, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3155 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 6.3171, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3171 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 6.3189, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3189 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 6.3206, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3206 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 6.3223, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3223 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 6.3238, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3238 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 6.3254, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3254 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 6.327, + "visualDurationMs": 0.0014, + "visualStartMs": 6.327 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 6.3287, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3287 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 6.3304, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3304 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 6.332, + "visualDurationMs": 0.0013, + "visualStartMs": 6.332 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 6.3337, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3337 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 6.3352, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3352 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 6.3369, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3369 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 6.3385, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3385 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 6.3402, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3402 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 6.3418, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3418 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 6.3433, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3433 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 6.3448, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3448 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 6.3464, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3464 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 6.348, + "visualDurationMs": 0.0013, + "visualStartMs": 6.348 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 6.3496, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3496 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 6.3513, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3513 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 6.3528, + "visualDurationMs": 0.0005, + "visualStartMs": 6.3528 + } + ], + "durationMs": 0.1878, + "name": "Lighting", + "startMs": 6.1658, + "visualDurationMs": 0.1878, + "visualStartMs": 6.1658 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 6.3541, + "visualDurationMs": 0.0003, + "visualStartMs": 6.3541 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 6.3546, + "visualDurationMs": 0.0004, + "visualStartMs": 6.3546 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 6.3538, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3538 + } + ], + "durationMs": 0.194, + "name": "DrawSprite", + "startMs": 6.1613, + "visualDurationMs": 0.194, + "visualStartMs": 6.1613 + } + ], + "durationMs": 0.1946, + "name": "Draw Sprite: Pebble_23", + "startMs": 6.1609, + "visualDurationMs": 0.1946, + "visualStartMs": 6.1609 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 6.3571, + "visualDurationMs": 0.0003, + "visualStartMs": 6.3571 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 6.3575, + "visualDurationMs": 0.0005, + "visualStartMs": 6.3575 + }, + { + "children": [ + { + "durationMs": 0.0045, + "name": "Transform", + "startMs": 6.3586, + "visualDurationMs": 0.0045, + "visualStartMs": 6.3586 + }, + { + "durationMs": 0.0007, + "name": "TexSlot", + "startMs": 6.3633, + "visualDurationMs": 0.0007, + "visualStartMs": 6.3633 + } + ], + "durationMs": 0.0059, + "name": "SetUniforms", + "startMs": 6.3582, + "visualDurationMs": 0.0059, + "visualStartMs": 6.3582 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 6.3643, + "visualDurationMs": 0.0005, + "visualStartMs": 6.3643 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 6.3652, + "visualDurationMs": 0.0011, + "visualStartMs": 6.3652 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 6.3664, + "visualDurationMs": 0.0015, + "visualStartMs": 6.3664 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 6.3682, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3682 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 6.3699, + "visualDurationMs": 0.0014, + "visualStartMs": 6.3699 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 6.3716, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3716 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 6.3733, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3733 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 6.375, + "visualDurationMs": 0.0012, + "visualStartMs": 6.375 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 6.3765, + "visualDurationMs": 0.0012, + "visualStartMs": 6.3765 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 6.378, + "visualDurationMs": 0.0026, + "visualStartMs": 6.378 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 6.3809, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3809 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 6.3825, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3825 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 6.3841, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3841 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 6.3858, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3858 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 6.3876, + "visualDurationMs": 0.0015, + "visualStartMs": 6.3876 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 6.3895, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3895 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 6.3912, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3912 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 6.3928, + "visualDurationMs": 0.0034, + "visualStartMs": 6.3928 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 6.3966, + "visualDurationMs": 0.0015, + "visualStartMs": 6.3966 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 6.3984, + "visualDurationMs": 0.0013, + "visualStartMs": 6.3984 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 6.4001, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4001 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 6.4018, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4018 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 6.4036, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4036 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 6.4054, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4054 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 6.4072, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4072 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 6.409, + "visualDurationMs": 0.0014, + "visualStartMs": 6.409 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 6.4107, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4107 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 6.4124, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4124 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 6.4141, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4141 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 6.4158, + "visualDurationMs": 0.0012, + "visualStartMs": 6.4158 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 6.4173, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4173 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 6.4189, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4189 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 6.4207, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4207 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 6.4223, + "visualDurationMs": 0.005, + "visualStartMs": 6.4223 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 6.4277, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4277 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 6.4296, + "visualDurationMs": 0.0012, + "visualStartMs": 6.4296 + }, + { + "durationMs": 0.0017, + "name": "L33", + "startMs": 6.4312, + "visualDurationMs": 0.0017, + "visualStartMs": 6.4312 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 6.4333, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4333 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 6.4349, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4349 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 6.4367, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4367 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 6.4383, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4383 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 6.4399, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4399 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 6.4417, + "visualDurationMs": 0.0012, + "visualStartMs": 6.4417 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 6.4432, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4432 + }, + { + "durationMs": 0.0015, + "name": "L41", + "startMs": 6.4449, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4449 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 6.4467, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4467 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 6.4484, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4484 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 6.4503, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4503 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 6.4521, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4521 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 6.4537, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4537 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 6.4555, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4555 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 6.4571, + "visualDurationMs": 0.0017, + "visualStartMs": 6.4571 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 6.4591, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4591 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 6.4608, + "visualDurationMs": 0.0016, + "visualStartMs": 6.4608 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 6.4627, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4627 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 6.4644, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4644 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 6.466, + "visualDurationMs": 0.0013, + "visualStartMs": 6.466 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 6.4677, + "visualDurationMs": 0.0013, + "visualStartMs": 6.4677 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 6.4693, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4693 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 6.471, + "visualDurationMs": 0.0015, + "visualStartMs": 6.471 + }, + { + "durationMs": 0.0015, + "name": "L57", + "startMs": 6.4728, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4728 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 6.4746, + "visualDurationMs": 0.0015, + "visualStartMs": 6.4746 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 6.4764, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4764 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 6.4781, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4781 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 6.4799, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4799 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 6.4817, + "visualDurationMs": 0.0089, + "visualStartMs": 6.4817 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 6.491, + "visualDurationMs": 0.0014, + "visualStartMs": 6.491 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 6.4927, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4927 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 6.4944, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4944 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 6.4961, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4961 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 6.4978, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4978 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 6.4995, + "visualDurationMs": 0.0014, + "visualStartMs": 6.4995 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 6.5012, + "visualDurationMs": 0.0014, + "visualStartMs": 6.5012 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 6.5029, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5029 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 6.5045, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5045 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 6.5062, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5062 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 6.5077, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5077 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 6.5094, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5094 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 6.5109, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5109 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 6.5125, + "visualDurationMs": 0.0014, + "visualStartMs": 6.5125 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 6.5142, + "visualDurationMs": 0.0014, + "visualStartMs": 6.5142 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 6.5159, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5159 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 6.5175, + "visualDurationMs": 0.0014, + "visualStartMs": 6.5175 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 6.5192, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5192 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 6.5208, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5208 + }, + { + "durationMs": 0.0011, + "name": "L82", + "startMs": 6.5225, + "visualDurationMs": 0.0011, + "visualStartMs": 6.5225 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 6.524, + "visualDurationMs": 0.0012, + "visualStartMs": 6.524 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 6.5255, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5255 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 6.5271, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5271 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 6.5287, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5287 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 6.5303, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5303 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 6.5319, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5319 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 6.5335, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5335 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 6.5351, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5351 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 6.5366, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5366 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 6.5383, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5383 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 6.5398, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5398 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 6.5414, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5414 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 6.543, + "visualDurationMs": 0.0012, + "visualStartMs": 6.543 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 6.5446, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5446 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 6.5462, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5462 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 6.5477, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5477 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 6.5493, + "visualDurationMs": 0.0014, + "visualStartMs": 6.5493 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 6.5509, + "visualDurationMs": 0.0006, + "visualStartMs": 6.5509 + } + ], + "durationMs": 0.187, + "name": "Lighting", + "startMs": 6.3649, + "visualDurationMs": 0.187, + "visualStartMs": 6.3649 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 6.5524, + "visualDurationMs": 0.0004, + "visualStartMs": 6.5524 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 6.5529, + "visualDurationMs": 0.0004, + "visualStartMs": 6.5529 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 6.552, + "visualDurationMs": 0.0014, + "visualStartMs": 6.552 + } + ], + "durationMs": 0.1967, + "name": "DrawSprite", + "startMs": 6.3568, + "visualDurationMs": 0.1967, + "visualStartMs": 6.3568 + } + ], + "durationMs": 0.1975, + "name": "Draw Sprite: Pebble_28", + "startMs": 6.3562, + "visualDurationMs": 0.1975, + "visualStartMs": 6.3562 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 6.5549, + "visualDurationMs": 0.0004, + "visualStartMs": 6.5549 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 6.5554, + "visualDurationMs": 0.0004, + "visualStartMs": 6.5554 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 6.5564, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5564 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 6.5578, + "visualDurationMs": 0.0005, + "visualStartMs": 6.5578 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 6.556, + "visualDurationMs": 0.0024, + "visualStartMs": 6.556 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 6.5585, + "visualDurationMs": 0.0003, + "visualStartMs": 6.5585 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 6.5594, + "visualDurationMs": 0.0009, + "visualStartMs": 6.5594 + }, + { + "durationMs": 0.0017, + "name": "SetLightParams", + "startMs": 6.5604, + "visualDurationMs": 0.0017, + "visualStartMs": 6.5604 + }, + { + "durationMs": 0.0016, + "name": "L0", + "startMs": 6.5624, + "visualDurationMs": 0.0016, + "visualStartMs": 6.5624 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 6.5643, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5643 + }, + { + "durationMs": 0.0016, + "name": "L2", + "startMs": 6.5659, + "visualDurationMs": 0.0016, + "visualStartMs": 6.5659 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 6.5678, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5678 + }, + { + "durationMs": 0.0011, + "name": "L4", + "startMs": 6.5695, + "visualDurationMs": 0.0011, + "visualStartMs": 6.5695 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 6.571, + "visualDurationMs": 0.0012, + "visualStartMs": 6.571 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 6.5725, + "visualDurationMs": 0.0025, + "visualStartMs": 6.5725 + }, + { + "durationMs": 0.0011, + "name": "L7", + "startMs": 6.5754, + "visualDurationMs": 0.0011, + "visualStartMs": 6.5754 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 6.5769, + "visualDurationMs": 0.0012, + "visualStartMs": 6.5769 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 6.5784, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5784 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 6.58, + "visualDurationMs": 0.0014, + "visualStartMs": 6.58 + }, + { + "durationMs": 0.0017, + "name": "L11", + "startMs": 6.5817, + "visualDurationMs": 0.0017, + "visualStartMs": 6.5817 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 6.5838, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5838 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 6.5854, + "visualDurationMs": 0.0013, + "visualStartMs": 6.5854 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 6.5871, + "visualDurationMs": 0.0033, + "visualStartMs": 6.5871 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 6.5908, + "visualDurationMs": 0.0016, + "visualStartMs": 6.5908 + }, + { + "durationMs": 0.0053, + "name": "L16", + "startMs": 6.5927, + "visualDurationMs": 0.0053, + "visualStartMs": 6.5927 + }, + { + "durationMs": 0.0017, + "name": "L17", + "startMs": 6.5984, + "visualDurationMs": 0.0017, + "visualStartMs": 6.5984 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 6.6005, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6005 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 6.6023, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6023 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 6.604, + "visualDurationMs": 0.0014, + "visualStartMs": 6.604 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 6.6057, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6057 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 6.6075, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6075 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 6.6093, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6093 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 6.6111, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6111 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 6.6128, + "visualDurationMs": 0.0012, + "visualStartMs": 6.6128 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 6.6144, + "visualDurationMs": 0.0012, + "visualStartMs": 6.6144 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 6.6159, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6159 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 6.6177, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6177 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 6.6194, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6194 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 6.621, + "visualDurationMs": 0.0051, + "visualStartMs": 6.621 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 6.6264, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6264 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 6.6282, + "visualDurationMs": 0.0012, + "visualStartMs": 6.6282 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 6.6298, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6298 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 6.6316, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6316 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 6.6332, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6332 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 6.6349, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6349 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 6.6365, + "visualDurationMs": 0.0012, + "visualStartMs": 6.6365 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 6.638, + "visualDurationMs": 0.0013, + "visualStartMs": 6.638 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 6.6396, + "visualDurationMs": 0.0012, + "visualStartMs": 6.6396 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 6.6412, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6412 + }, + { + "durationMs": 0.0042, + "name": "L41", + "startMs": 6.6428, + "visualDurationMs": 0.0042, + "visualStartMs": 6.6428 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 6.6474, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6474 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 6.649, + "visualDurationMs": 0.0014, + "visualStartMs": 6.649 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 6.6508, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6508 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 6.6526, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6526 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 6.6542, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6542 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 6.6559, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6559 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 6.6577, + "visualDurationMs": 0.0017, + "visualStartMs": 6.6577 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 6.6597, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6597 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 6.6616, + "visualDurationMs": 0.0016, + "visualStartMs": 6.6616 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 6.6635, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6635 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 6.6653, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6653 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 6.667, + "visualDurationMs": 0.0014, + "visualStartMs": 6.667 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 6.6687, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6687 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 6.6704, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6704 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 6.672, + "visualDurationMs": 0.0015, + "visualStartMs": 6.672 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 6.6739, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6739 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 6.6756, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6756 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 6.6775, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6775 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 6.6793, + "visualDurationMs": 0.0014, + "visualStartMs": 6.6793 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 6.6811, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6811 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 6.6827, + "visualDurationMs": 0.0088, + "visualStartMs": 6.6827 + }, + { + "durationMs": 0.0016, + "name": "L63", + "startMs": 6.6919, + "visualDurationMs": 0.0016, + "visualStartMs": 6.6919 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 6.6938, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6938 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 6.6956, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6956 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 6.6973, + "visualDurationMs": 0.0015, + "visualStartMs": 6.6973 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 6.6991, + "visualDurationMs": 0.0013, + "visualStartMs": 6.6991 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 6.7008, + "visualDurationMs": 0.0015, + "visualStartMs": 6.7008 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 6.7026, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7026 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 6.7042, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7042 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 6.7058, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7058 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 6.7075, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7075 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 6.7091, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7091 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 6.7107, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7107 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 6.7123, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7123 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 6.714, + "visualDurationMs": 0.0013, + "visualStartMs": 6.714 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 6.7156, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7156 + }, + { + "durationMs": 0.0015, + "name": "L78", + "startMs": 6.7171, + "visualDurationMs": 0.0015, + "visualStartMs": 6.7171 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 6.7189, + "visualDurationMs": 0.0015, + "visualStartMs": 6.7189 + }, + { + "durationMs": 0.0016, + "name": "L80", + "startMs": 6.7208, + "visualDurationMs": 0.0016, + "visualStartMs": 6.7208 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 6.7227, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7227 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 6.7244, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7244 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 6.7259, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7259 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 6.7276, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7276 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 6.7293, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7293 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 6.7309, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7309 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 6.7325, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7325 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 6.7342, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7342 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 6.7357, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7357 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 6.7373, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7373 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 6.7389, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7389 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 6.7405, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7405 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 6.742, + "visualDurationMs": 0.0012, + "visualStartMs": 6.742 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 6.7436, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7436 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 6.7451, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7451 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 6.7467, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7467 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 6.7482, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7482 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 6.7499, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7499 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 6.7515, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7515 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 6.7528, + "visualDurationMs": 0.0007, + "visualStartMs": 6.7528 + } + ], + "durationMs": 0.1948, + "name": "Lighting", + "startMs": 6.559, + "visualDurationMs": 0.1948, + "visualStartMs": 6.559 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 6.7543, + "visualDurationMs": 0.0004, + "visualStartMs": 6.7543 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 6.7549, + "visualDurationMs": 0.0005, + "visualStartMs": 6.7549 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 6.754, + "visualDurationMs": 0.0015, + "visualStartMs": 6.754 + } + ], + "durationMs": 0.201, + "name": "DrawSprite", + "startMs": 6.5546, + "visualDurationMs": 0.201, + "visualStartMs": 6.5546 + } + ], + "durationMs": 0.2015, + "name": "Draw Sprite: Pebble_24", + "startMs": 6.5542, + "visualDurationMs": 0.2015, + "visualStartMs": 6.5542 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 6.7577, + "visualDurationMs": 0.0003, + "visualStartMs": 6.7577 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 6.7581, + "visualDurationMs": 0.0004, + "visualStartMs": 6.7581 + }, + { + "children": [ + { + "durationMs": 0.0016, + "name": "Transform", + "startMs": 6.759, + "visualDurationMs": 0.0016, + "visualStartMs": 6.759 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 6.7608, + "visualDurationMs": 0.0004, + "visualStartMs": 6.7608 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 6.7587, + "visualDurationMs": 0.0026, + "visualStartMs": 6.7587 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 6.7615, + "visualDurationMs": 0.0003, + "visualStartMs": 6.7615 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 6.7623, + "visualDurationMs": 0.0009, + "visualStartMs": 6.7623 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 6.7633, + "visualDurationMs": 0.0015, + "visualStartMs": 6.7633 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 6.7651, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7651 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 6.7667, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7667 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 6.7685, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7685 + }, + { + "durationMs": 0.0012, + "name": "L3", + "startMs": 6.7701, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7701 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 6.7717, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7717 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 6.7733, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7733 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 6.7748, + "visualDurationMs": 0.0025, + "visualStartMs": 6.7748 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 6.7776, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7776 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 6.7792, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7792 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 6.7808, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7808 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 6.7825, + "visualDurationMs": 0.0012, + "visualStartMs": 6.7825 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 6.7841, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7841 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 6.7859, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7859 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 6.7875, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7875 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 6.7891, + "visualDurationMs": 0.0034, + "visualStartMs": 6.7891 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 6.7929, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7929 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 6.7946, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7946 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 6.7963, + "visualDurationMs": 0.0014, + "visualStartMs": 6.7963 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 6.798, + "visualDurationMs": 0.0013, + "visualStartMs": 6.798 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 6.7997, + "visualDurationMs": 0.0013, + "visualStartMs": 6.7997 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 6.8014, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8014 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 6.8029, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8029 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 6.8046, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8046 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 6.8064, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8064 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 6.8081, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8081 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 6.8098, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8098 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 6.8113, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8113 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 6.8129, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8129 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 6.8145, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8145 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 6.8161, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8161 + }, + { + "durationMs": 0.0048, + "name": "L30", + "startMs": 6.8177, + "visualDurationMs": 0.0048, + "visualStartMs": 6.8177 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 6.8229, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8229 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 6.8246, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8246 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 6.8262, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8262 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 6.8279, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8279 + }, + { + "durationMs": 0.0049, + "name": "L35", + "startMs": 6.8296, + "visualDurationMs": 0.0049, + "visualStartMs": 6.8296 + }, + { + "durationMs": 0.0017, + "name": "L36", + "startMs": 6.8349, + "visualDurationMs": 0.0017, + "visualStartMs": 6.8349 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 6.8369, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8369 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 6.8387, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8387 + }, + { + "durationMs": 0.0014, + "name": "L39", + "startMs": 6.8403, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8403 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 6.842, + "visualDurationMs": 0.0014, + "visualStartMs": 6.842 + }, + { + "durationMs": 0.0015, + "name": "L41", + "startMs": 6.8437, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8437 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 6.8456, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8456 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 6.8473, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8473 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 6.8491, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8491 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 6.8509, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8509 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 6.8526, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8526 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 6.8544, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8544 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 6.8562, + "visualDurationMs": 0.0016, + "visualStartMs": 6.8562 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 6.8581, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8581 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 6.86, + "visualDurationMs": 0.0013, + "visualStartMs": 6.86 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 6.8617, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8617 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 6.8635, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8635 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 6.8652, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8652 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 6.8669, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8669 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 6.8686, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8686 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 6.8703, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8703 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 6.872, + "visualDurationMs": 0.0012, + "visualStartMs": 6.872 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 6.8736, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8736 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 6.8753, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8753 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 6.8769, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8769 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 6.8787, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8787 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 6.8804, + "visualDurationMs": 0.0088, + "visualStartMs": 6.8804 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 6.8895, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8895 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 6.8912, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8912 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 6.8931, + "visualDurationMs": 0.0015, + "visualStartMs": 6.8931 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 6.8949, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8949 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 6.8966, + "visualDurationMs": 0.0013, + "visualStartMs": 6.8966 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 6.8983, + "visualDurationMs": 0.0012, + "visualStartMs": 6.8983 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 6.8998, + "visualDurationMs": 0.0014, + "visualStartMs": 6.8998 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 6.9015, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9015 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 6.9031, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9031 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 6.9047, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9047 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 6.9062, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9062 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 6.9078, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9078 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 6.9094, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9094 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 6.911, + "visualDurationMs": 0.0013, + "visualStartMs": 6.911 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 6.9126, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9126 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 6.9144, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9144 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 6.9159, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9159 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 6.9176, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9176 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 6.9192, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9192 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 6.9207, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9207 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 6.9223, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9223 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 6.9239, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9239 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 6.9256, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9256 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 6.9274, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9274 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 6.9292, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9292 + }, + { + "durationMs": 0.0011, + "name": "L88", + "startMs": 6.9309, + "visualDurationMs": 0.0011, + "visualStartMs": 6.9309 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 6.9324, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9324 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 6.934, + "visualDurationMs": 0.0012, + "visualStartMs": 6.934 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 6.9356, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9356 + }, + { + "durationMs": 0.0016, + "name": "L92", + "startMs": 6.9373, + "visualDurationMs": 0.0016, + "visualStartMs": 6.9373 + }, + { + "durationMs": 0.0014, + "name": "L93", + "startMs": 6.9392, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9392 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 6.9409, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9409 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 6.9426, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9426 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 6.9441, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9441 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 6.9457, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9457 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 6.9473, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9473 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 6.949, + "visualDurationMs": 0.0013, + "visualStartMs": 6.949 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 6.9505, + "visualDurationMs": 0.0007, + "visualStartMs": 6.9505 + } + ], + "durationMs": 0.1895, + "name": "Lighting", + "startMs": 6.762, + "visualDurationMs": 0.1895, + "visualStartMs": 6.762 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 6.9521, + "visualDurationMs": 0.0004, + "visualStartMs": 6.9521 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 6.9526, + "visualDurationMs": 0.0004, + "visualStartMs": 6.9526 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 6.9516, + "visualDurationMs": 0.0015, + "visualStartMs": 6.9516 + } + ], + "durationMs": 0.1959, + "name": "DrawSprite", + "startMs": 6.7573, + "visualDurationMs": 0.1959, + "visualStartMs": 6.7573 + } + ], + "durationMs": 0.1965, + "name": "Draw Sprite: Pebble_25", + "startMs": 6.7568, + "visualDurationMs": 0.1965, + "visualStartMs": 6.7568 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 6.9552, + "visualDurationMs": 0.0004, + "visualStartMs": 6.9552 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 6.9557, + "visualDurationMs": 0.0004, + "visualStartMs": 6.9557 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 6.9567, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9567 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 6.9581, + "visualDurationMs": 0.0005, + "visualStartMs": 6.9581 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 6.9564, + "visualDurationMs": 0.0023, + "visualStartMs": 6.9564 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 6.9588, + "visualDurationMs": 0.0004, + "visualStartMs": 6.9588 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 6.9597, + "visualDurationMs": 0.0009, + "visualStartMs": 6.9597 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 6.9607, + "visualDurationMs": 0.0015, + "visualStartMs": 6.9607 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 6.9625, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9625 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 6.9642, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9642 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 6.9658, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9658 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 6.9674, + "visualDurationMs": 0.0013, + "visualStartMs": 6.9674 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 6.969, + "visualDurationMs": 0.0013, + "visualStartMs": 6.969 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 6.9707, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9707 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 6.9723, + "visualDurationMs": 0.0026, + "visualStartMs": 6.9723 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 6.9752, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9752 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 6.9768, + "visualDurationMs": 0.0012, + "visualStartMs": 6.9768 + }, + { + "durationMs": 0.0015, + "name": "L9", + "startMs": 6.9783, + "visualDurationMs": 0.0015, + "visualStartMs": 6.9783 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 6.9802, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9802 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 6.9819, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9819 + }, + { + "durationMs": 0.0016, + "name": "L12", + "startMs": 6.9837, + "visualDurationMs": 0.0016, + "visualStartMs": 6.9837 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 6.9856, + "visualDurationMs": 0.0014, + "visualStartMs": 6.9856 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 6.9873, + "visualDurationMs": 0.0034, + "visualStartMs": 6.9873 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 6.9911, + "visualDurationMs": 0.0015, + "visualStartMs": 6.9911 + }, + { + "durationMs": 0.0017, + "name": "L16", + "startMs": 6.993, + "visualDurationMs": 0.0017, + "visualStartMs": 6.993 + }, + { + "durationMs": 0.0017, + "name": "L17", + "startMs": 6.995, + "visualDurationMs": 0.0017, + "visualStartMs": 6.995 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 6.9971, + "visualDurationMs": 0.0015, + "visualStartMs": 6.9971 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 6.999, + "visualDurationMs": 0.0014, + "visualStartMs": 6.999 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 7.0007, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0007 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 7.0024, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0024 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 7.0042, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0042 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 7.006, + "visualDurationMs": 0.0013, + "visualStartMs": 7.006 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 7.0077, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0077 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 7.0094, + "visualDurationMs": 0.0012, + "visualStartMs": 7.0094 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 7.0109, + "visualDurationMs": 0.0012, + "visualStartMs": 7.0109 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 7.0124, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0124 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 7.014, + "visualDurationMs": 0.0014, + "visualStartMs": 7.014 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 7.0157, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0157 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 7.0174, + "visualDurationMs": 0.0053, + "visualStartMs": 7.0174 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 7.0231, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0231 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 7.025, + "visualDurationMs": 0.0012, + "visualStartMs": 7.025 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 7.0266, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0266 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 7.0283, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0283 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 7.03, + "visualDurationMs": 0.0014, + "visualStartMs": 7.03 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 7.0317, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0317 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 7.0333, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0333 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 7.035, + "visualDurationMs": 0.0012, + "visualStartMs": 7.035 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 7.0365, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0365 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 7.0381, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0381 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 7.04, + "visualDurationMs": 0.0013, + "visualStartMs": 7.04 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 7.0417, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0417 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 7.0434, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0434 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 7.0451, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0451 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 7.0469, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0469 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 7.0486, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0486 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 7.0503, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0503 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 7.052, + "visualDurationMs": 0.0016, + "visualStartMs": 7.052 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 7.0539, + "visualDurationMs": 0.0016, + "visualStartMs": 7.0539 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 7.0558, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0558 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 7.0575, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0575 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 7.0592, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0592 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 7.0608, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0608 + }, + { + "durationMs": 0.0042, + "name": "L54", + "startMs": 7.0626, + "visualDurationMs": 0.0042, + "visualStartMs": 7.0626 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 7.0673, + "visualDurationMs": 0.0016, + "visualStartMs": 7.0673 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 7.0693, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0693 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 7.0711, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0711 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 7.0728, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0728 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 7.0746, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0746 + }, + { + "durationMs": 0.0016, + "name": "L60", + "startMs": 7.0763, + "visualDurationMs": 0.0016, + "visualStartMs": 7.0763 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 7.0782, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0782 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 7.0799, + "visualDurationMs": 0.0088, + "visualStartMs": 7.0799 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 7.0891, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0891 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 7.0907, + "visualDurationMs": 0.0015, + "visualStartMs": 7.0907 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 7.0925, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0925 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 7.0942, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0942 + }, + { + "durationMs": 0.0016, + "name": "L67", + "startMs": 7.0959, + "visualDurationMs": 0.0016, + "visualStartMs": 7.0959 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 7.0978, + "visualDurationMs": 0.0013, + "visualStartMs": 7.0978 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 7.0995, + "visualDurationMs": 0.0014, + "visualStartMs": 7.0995 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 7.1012, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1012 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 7.1029, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1029 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 7.1045, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1045 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 7.1061, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1061 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 7.1077, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1077 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 7.1093, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1093 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 7.1108, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1108 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 7.1124, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1124 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 7.1139, + "visualDurationMs": 0.0014, + "visualStartMs": 7.1139 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 7.1156, + "visualDurationMs": 0.0014, + "visualStartMs": 7.1156 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 7.1173, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1173 + }, + { + "durationMs": 0.0011, + "name": "L81", + "startMs": 7.119, + "visualDurationMs": 0.0011, + "visualStartMs": 7.119 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 7.1205, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1205 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 7.1221, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1221 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 7.1237, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1237 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 7.1254, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1254 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 7.127, + "visualDurationMs": 0.0012, + "visualStartMs": 7.127 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 7.1286, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1286 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 7.1303, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1303 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 7.1318, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1318 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 7.1334, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1334 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 7.135, + "visualDurationMs": 0.0013, + "visualStartMs": 7.135 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 7.1366, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1366 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 7.1382, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1382 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 7.1399, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1399 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 7.1415, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1415 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 7.1431, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1431 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 7.1447, + "visualDurationMs": 0.0014, + "visualStartMs": 7.1447 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 7.1464, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1464 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 7.148, + "visualDurationMs": 0.0013, + "visualStartMs": 7.148 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 7.1494, + "visualDurationMs": 0.0007, + "visualStartMs": 7.1494 + } + ], + "durationMs": 0.1911, + "name": "Lighting", + "startMs": 6.9593, + "visualDurationMs": 0.1911, + "visualStartMs": 6.9593 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 7.151, + "visualDurationMs": 0.0004, + "visualStartMs": 7.151 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 7.1515, + "visualDurationMs": 0.0004, + "visualStartMs": 7.1515 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 7.1506, + "visualDurationMs": 0.0015, + "visualStartMs": 7.1506 + } + ], + "durationMs": 0.1974, + "name": "DrawSprite", + "startMs": 6.9548, + "visualDurationMs": 0.1974, + "visualStartMs": 6.9548 + } + ], + "durationMs": 0.1979, + "name": "Draw Sprite: Pebble_26", + "startMs": 6.9544, + "visualDurationMs": 0.1979, + "visualStartMs": 6.9544 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 7.1538, + "visualDurationMs": 0.0004, + "visualStartMs": 7.1538 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 7.1543, + "visualDurationMs": 0.0004, + "visualStartMs": 7.1543 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 7.1552, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1552 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 7.1566, + "visualDurationMs": 0.0005, + "visualStartMs": 7.1566 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 7.1549, + "visualDurationMs": 0.0023, + "visualStartMs": 7.1549 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 7.1574, + "visualDurationMs": 0.0003, + "visualStartMs": 7.1574 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 7.1582, + "visualDurationMs": 0.0009, + "visualStartMs": 7.1582 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 7.1593, + "visualDurationMs": 0.0015, + "visualStartMs": 7.1593 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 7.1612, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1612 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 7.1629, + "visualDurationMs": 0.0014, + "visualStartMs": 7.1629 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 7.1646, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1646 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 7.1662, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1662 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 7.1678, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1678 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 7.1693, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1693 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 7.1709, + "visualDurationMs": 0.0026, + "visualStartMs": 7.1709 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 7.1739, + "visualDurationMs": 0.0012, + "visualStartMs": 7.1739 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 7.1755, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1755 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 7.1771, + "visualDurationMs": 0.0014, + "visualStartMs": 7.1771 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 7.1789, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1789 + }, + { + "durationMs": 0.0013, + "name": "L11", + "startMs": 7.1806, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1806 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 7.1823, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1823 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 7.184, + "visualDurationMs": 0.0013, + "visualStartMs": 7.184 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 7.1856, + "visualDurationMs": 0.0034, + "visualStartMs": 7.1856 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 7.1893, + "visualDurationMs": 0.0017, + "visualStartMs": 7.1893 + }, + { + "durationMs": 0.0016, + "name": "L16", + "startMs": 7.1913, + "visualDurationMs": 0.0016, + "visualStartMs": 7.1913 + }, + { + "durationMs": 0.0017, + "name": "L17", + "startMs": 7.1932, + "visualDurationMs": 0.0017, + "visualStartMs": 7.1932 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 7.1952, + "visualDurationMs": 0.0015, + "visualStartMs": 7.1952 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 7.197, + "visualDurationMs": 0.0015, + "visualStartMs": 7.197 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 7.1988, + "visualDurationMs": 0.0013, + "visualStartMs": 7.1988 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 7.2004, + "visualDurationMs": 0.0015, + "visualStartMs": 7.2004 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 7.2022, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2022 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 7.204, + "visualDurationMs": 0.0013, + "visualStartMs": 7.204 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 7.2056, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2056 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 7.2073, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2073 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 7.2088, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2088 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 7.2103, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2103 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 7.2119, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2119 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 7.2135, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2135 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 7.2151, + "visualDurationMs": 0.005, + "visualStartMs": 7.2151 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 7.2204, + "visualDurationMs": 0.0016, + "visualStartMs": 7.2204 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 7.2223, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2223 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 7.2239, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2239 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 7.2256, + "visualDurationMs": 0.0015, + "visualStartMs": 7.2256 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 7.2274, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2274 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 7.2291, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2291 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 7.2307, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2307 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 7.2322, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2322 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 7.2338, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2338 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 7.2355, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2355 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 7.2371, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2371 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 7.2388, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2388 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 7.2403, + "visualDurationMs": 0.0015, + "visualStartMs": 7.2403 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 7.2421, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2421 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 7.2438, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2438 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 7.2455, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2455 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 7.2472, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2472 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 7.2489, + "visualDurationMs": 0.0017, + "visualStartMs": 7.2489 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 7.2509, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2509 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 7.2526, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2526 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 7.2543, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2543 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 7.2561, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2561 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 7.2577, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2577 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 7.2593, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2593 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 7.2609, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2609 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 7.2626, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2626 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 7.2643, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2643 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 7.2659, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2659 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 7.2676, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2676 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 7.2692, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2692 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 7.2709, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2709 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 7.2725, + "visualDurationMs": 0.0086, + "visualStartMs": 7.2725 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 7.2815, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2815 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 7.2832, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2832 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 7.2849, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2849 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 7.2865, + "visualDurationMs": 0.0013, + "visualStartMs": 7.2865 + }, + { + "durationMs": 0.0012, + "name": "L67", + "startMs": 7.2882, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2882 + }, + { + "durationMs": 0.0045, + "name": "L68", + "startMs": 7.2898, + "visualDurationMs": 0.0045, + "visualStartMs": 7.2898 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 7.2946, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2946 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 7.2963, + "visualDurationMs": 0.0014, + "visualStartMs": 7.2963 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 7.298, + "visualDurationMs": 0.0013, + "visualStartMs": 7.298 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 7.2996, + "visualDurationMs": 0.0012, + "visualStartMs": 7.2996 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 7.3012, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3012 + }, + { + "durationMs": 0.0061, + "name": "L74", + "startMs": 7.3027, + "visualDurationMs": 0.0061, + "visualStartMs": 7.3027 + }, + { + "durationMs": 0.0016, + "name": "L75", + "startMs": 7.3092, + "visualDurationMs": 0.0016, + "visualStartMs": 7.3092 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 7.3111, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3111 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 7.3128, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3128 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 7.3144, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3144 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 7.3161, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3161 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 7.3178, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3178 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 7.3195, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3195 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 7.3212, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3212 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 7.323, + "visualDurationMs": 0.0013, + "visualStartMs": 7.323 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 7.3247, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3247 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 7.3263, + "visualDurationMs": 0.0015, + "visualStartMs": 7.3263 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 7.3282, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3282 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 7.3299, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3299 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 7.3316, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3316 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 7.3332, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3332 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 7.3348, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3348 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 7.3365, + "visualDurationMs": 0.0015, + "visualStartMs": 7.3365 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 7.3383, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3383 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 7.34, + "visualDurationMs": 0.0012, + "visualStartMs": 7.34 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 7.3416, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3416 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 7.3432, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3432 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 7.3448, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3448 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 7.3465, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3465 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 7.3482, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3482 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 7.3499, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3499 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 7.3513, + "visualDurationMs": 0.0007, + "visualStartMs": 7.3513 + } + ], + "durationMs": 0.1945, + "name": "Lighting", + "startMs": 7.1579, + "visualDurationMs": 0.1945, + "visualStartMs": 7.1579 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 7.353, + "visualDurationMs": 0.0004, + "visualStartMs": 7.353 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 7.3535, + "visualDurationMs": 0.0005, + "visualStartMs": 7.3535 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 7.3526, + "visualDurationMs": 0.0015, + "visualStartMs": 7.3526 + } + ], + "durationMs": 0.2007, + "name": "DrawSprite", + "startMs": 7.1535, + "visualDurationMs": 0.2007, + "visualStartMs": 7.1535 + } + ], + "durationMs": 0.2012, + "name": "Draw Sprite: Pebble_27", + "startMs": 7.1531, + "visualDurationMs": 0.2012, + "visualStartMs": 7.1531 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 7.3609, + "visualDurationMs": 0.0003, + "visualStartMs": 7.3609 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 7.3614, + "visualDurationMs": 0.0004, + "visualStartMs": 7.3614 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 7.3625, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3625 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 7.3639, + "visualDurationMs": 0.0005, + "visualStartMs": 7.3639 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 7.3621, + "visualDurationMs": 0.0024, + "visualStartMs": 7.3621 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 7.3647, + "visualDurationMs": 0.0004, + "visualStartMs": 7.3647 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 7.3656, + "visualDurationMs": 0.001, + "visualStartMs": 7.3656 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 7.3667, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3667 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 7.3685, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3685 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 7.3702, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3702 + }, + { + "durationMs": 0.0094, + "name": "L2", + "startMs": 7.3719, + "visualDurationMs": 0.0094, + "visualStartMs": 7.3719 + }, + { + "durationMs": 0.0018, + "name": "L3", + "startMs": 7.3817, + "visualDurationMs": 0.0018, + "visualStartMs": 7.3817 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 7.3838, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3838 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 7.3856, + "visualDurationMs": 0.0012, + "visualStartMs": 7.3856 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 7.3872, + "visualDurationMs": 0.0027, + "visualStartMs": 7.3872 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 7.3902, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3902 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 7.392, + "visualDurationMs": 0.0013, + "visualStartMs": 7.392 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 7.3937, + "visualDurationMs": 0.0013, + "visualStartMs": 7.3937 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 7.3953, + "visualDurationMs": 0.0014, + "visualStartMs": 7.3953 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 7.397, + "visualDurationMs": 0.0014, + "visualStartMs": 7.397 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 7.3988, + "visualDurationMs": 0.0015, + "visualStartMs": 7.3988 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 7.4006, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4006 + }, + { + "durationMs": 0.0042, + "name": "L14", + "startMs": 7.4023, + "visualDurationMs": 0.0042, + "visualStartMs": 7.4023 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 7.4068, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4068 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 7.4086, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4086 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 7.4104, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4104 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 7.4122, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4122 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 7.4139, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4139 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 7.4157, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4157 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 7.4174, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4174 + }, + { + "durationMs": 0.0016, + "name": "L22", + "startMs": 7.4191, + "visualDurationMs": 0.0016, + "visualStartMs": 7.4191 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 7.421, + "visualDurationMs": 0.0012, + "visualStartMs": 7.421 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 7.4226, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4226 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 7.4242, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4242 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 7.4258, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4258 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 7.4275, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4275 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 7.4291, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4291 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 7.4307, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4307 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 7.4324, + "visualDurationMs": 0.0051, + "visualStartMs": 7.4324 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 7.4379, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4379 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 7.4397, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4397 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 7.4413, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4413 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 7.443, + "visualDurationMs": 0.0014, + "visualStartMs": 7.443 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 7.4448, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4448 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 7.4464, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4464 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 7.448, + "visualDurationMs": 0.0012, + "visualStartMs": 7.448 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 7.4496, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4496 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 7.4512, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4512 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 7.4527, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4527 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 7.4544, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4544 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 7.456, + "visualDurationMs": 0.0012, + "visualStartMs": 7.456 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 7.4576, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4576 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 7.4593, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4593 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 7.4612, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4612 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 7.4631, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4631 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 7.4648, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4648 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 7.4664, + "visualDurationMs": 0.0016, + "visualStartMs": 7.4664 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 7.4684, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4684 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 7.4701, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4701 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 7.4719, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4719 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 7.4736, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4736 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 7.4751, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4751 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 7.4769, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4769 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 7.4786, + "visualDurationMs": 0.0013, + "visualStartMs": 7.4786 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 7.4802, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4802 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 7.4821, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4821 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 7.4836, + "visualDurationMs": 0.0015, + "visualStartMs": 7.4836 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 7.4854, + "visualDurationMs": 0.0012, + "visualStartMs": 7.4854 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 7.487, + "visualDurationMs": 0.0013, + "visualStartMs": 7.487 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 7.4887, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4887 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 7.4905, + "visualDurationMs": 0.0084, + "visualStartMs": 7.4905 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 7.4994, + "visualDurationMs": 0.0014, + "visualStartMs": 7.4994 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 7.5011, + "visualDurationMs": 0.0015, + "visualStartMs": 7.5011 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 7.5031, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5031 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 7.5049, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5049 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 7.5066, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5066 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 7.5082, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5082 + }, + { + "durationMs": 0.0019, + "name": "L69", + "startMs": 7.51, + "visualDurationMs": 0.0019, + "visualStartMs": 7.51 + }, + { + "durationMs": 0.0019, + "name": "L70", + "startMs": 7.5126, + "visualDurationMs": 0.0019, + "visualStartMs": 7.5126 + }, + { + "durationMs": 0.0019, + "name": "L71", + "startMs": 7.515, + "visualDurationMs": 0.0019, + "visualStartMs": 7.515 + }, + { + "durationMs": 0.0024, + "name": "L72", + "startMs": 7.5174, + "visualDurationMs": 0.0024, + "visualStartMs": 7.5174 + }, + { + "durationMs": 0.0019, + "name": "L73", + "startMs": 7.5203, + "visualDurationMs": 0.0019, + "visualStartMs": 7.5203 + }, + { + "durationMs": 0.0019, + "name": "L74", + "startMs": 7.5227, + "visualDurationMs": 0.0019, + "visualStartMs": 7.5227 + }, + { + "durationMs": 0.0021, + "name": "L75", + "startMs": 7.5257, + "visualDurationMs": 0.0021, + "visualStartMs": 7.5257 + }, + { + "durationMs": 0.002, + "name": "L76", + "startMs": 7.5283, + "visualDurationMs": 0.002, + "visualStartMs": 7.5283 + }, + { + "durationMs": 0.0018, + "name": "L77", + "startMs": 7.5308, + "visualDurationMs": 0.0018, + "visualStartMs": 7.5308 + }, + { + "durationMs": 0.0024, + "name": "L78", + "startMs": 7.5331, + "visualDurationMs": 0.0024, + "visualStartMs": 7.5331 + }, + { + "durationMs": 0.0017, + "name": "L79", + "startMs": 7.5359, + "visualDurationMs": 0.0017, + "visualStartMs": 7.5359 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 7.5379, + "visualDurationMs": 0.0015, + "visualStartMs": 7.5379 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 7.5397, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5397 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 7.5413, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5413 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 7.5429, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5429 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 7.5445, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5445 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 7.5462, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5462 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 7.5478, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5478 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 7.5494, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5494 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 7.5511, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5511 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 7.5527, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5527 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 7.5544, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5544 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 7.5561, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5561 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 7.5577, + "visualDurationMs": 0.0012, + "visualStartMs": 7.5577 + }, + { + "durationMs": 0.0054, + "name": "L93", + "startMs": 7.5593, + "visualDurationMs": 0.0054, + "visualStartMs": 7.5593 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 7.5652, + "visualDurationMs": 0.0015, + "visualStartMs": 7.5652 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 7.5671, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5671 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 7.5687, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5687 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 7.5704, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5704 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 7.5721, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5721 + }, + { + "durationMs": 0.0016, + "name": "L99", + "startMs": 7.5738, + "visualDurationMs": 0.0016, + "visualStartMs": 7.5738 + }, + { + "durationMs": 0.001, + "name": "BindNorm", + "startMs": 7.5756, + "visualDurationMs": 0.001, + "visualStartMs": 7.5756 + } + ], + "durationMs": 0.2118, + "name": "Lighting", + "startMs": 7.3652, + "visualDurationMs": 0.2118, + "visualStartMs": 7.3652 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 7.5775, + "visualDurationMs": 0.0005, + "visualStartMs": 7.5775 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 7.5782, + "visualDurationMs": 0.0005, + "visualStartMs": 7.5782 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 7.5771, + "visualDurationMs": 0.0017, + "visualStartMs": 7.5771 + } + ], + "durationMs": 0.2184, + "name": "DrawSprite", + "startMs": 7.3605, + "visualDurationMs": 0.2184, + "visualStartMs": 7.3605 + } + ], + "durationMs": 0.219, + "name": "Draw Sprite: Pebble_31", + "startMs": 7.3601, + "visualDurationMs": 0.219, + "visualStartMs": 7.3601 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 7.5811, + "visualDurationMs": 0.0003, + "visualStartMs": 7.5811 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 7.5816, + "visualDurationMs": 0.0004, + "visualStartMs": 7.5816 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 7.5826, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5826 + }, + { + "durationMs": 0.0007, + "name": "TexSlot", + "startMs": 7.5841, + "visualDurationMs": 0.0007, + "visualStartMs": 7.5841 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 7.5823, + "visualDurationMs": 0.0026, + "visualStartMs": 7.5823 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 7.585, + "visualDurationMs": 0.0004, + "visualStartMs": 7.585 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 7.5858, + "visualDurationMs": 0.001, + "visualStartMs": 7.5858 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 7.5869, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5869 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 7.5886, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5886 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 7.5903, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5903 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 7.592, + "visualDurationMs": 0.0014, + "visualStartMs": 7.592 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 7.5937, + "visualDurationMs": 0.0014, + "visualStartMs": 7.5937 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 7.5954, + "visualDurationMs": 0.0013, + "visualStartMs": 7.5954 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 7.597, + "visualDurationMs": 0.0013, + "visualStartMs": 7.597 + }, + { + "durationMs": 0.0031, + "name": "L6", + "startMs": 7.5986, + "visualDurationMs": 0.0031, + "visualStartMs": 7.5986 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 7.6021, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6021 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 7.6038, + "visualDurationMs": 0.0012, + "visualStartMs": 7.6038 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 7.6054, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6054 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 7.6071, + "visualDurationMs": 0.0012, + "visualStartMs": 7.6071 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 7.6087, + "visualDurationMs": 0.0016, + "visualStartMs": 7.6087 + }, + { + "durationMs": 0.0016, + "name": "L12", + "startMs": 7.6107, + "visualDurationMs": 0.0016, + "visualStartMs": 7.6107 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 7.6127, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6127 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 7.6143, + "visualDurationMs": 0.0036, + "visualStartMs": 7.6143 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 7.6182, + "visualDurationMs": 0.0017, + "visualStartMs": 7.6182 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 7.6202, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6202 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 7.6219, + "visualDurationMs": 0.0015, + "visualStartMs": 7.6219 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 7.6238, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6238 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 7.6256, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6256 + }, + { + "durationMs": 0.0015, + "name": "L20", + "startMs": 7.6273, + "visualDurationMs": 0.0015, + "visualStartMs": 7.6273 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 7.6291, + "visualDurationMs": 0.0015, + "visualStartMs": 7.6291 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 7.631, + "visualDurationMs": 0.0015, + "visualStartMs": 7.631 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 7.6329, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6329 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 7.6347, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6347 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 7.6365, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6365 + }, + { + "durationMs": 0.0015, + "name": "L26", + "startMs": 7.6381, + "visualDurationMs": 0.0015, + "visualStartMs": 7.6381 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 7.64, + "visualDurationMs": 0.0015, + "visualStartMs": 7.64 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 7.6419, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6419 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 7.6436, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6436 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 7.6453, + "visualDurationMs": 0.005, + "visualStartMs": 7.6453 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 7.6506, + "visualDurationMs": 0.0016, + "visualStartMs": 7.6506 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 7.6525, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6525 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 7.6542, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6542 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 7.6559, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6559 + }, + { + "durationMs": 0.0012, + "name": "L35", + "startMs": 7.6576, + "visualDurationMs": 0.0012, + "visualStartMs": 7.6576 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 7.6592, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6592 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 7.6608, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6608 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 7.6625, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6625 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 7.6642, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6642 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 7.6659, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6659 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 7.6676, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6676 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 7.6692, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6692 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 7.6709, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6709 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 7.6726, + "visualDurationMs": 0.0015, + "visualStartMs": 7.6726 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 7.6744, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6744 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 7.6761, + "visualDurationMs": 0.0016, + "visualStartMs": 7.6761 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 7.678, + "visualDurationMs": 0.0013, + "visualStartMs": 7.678 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 7.6797, + "visualDurationMs": 0.0017, + "visualStartMs": 7.6797 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 7.6817, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6817 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 7.6835, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6835 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 7.6853, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6853 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 7.687, + "visualDurationMs": 0.0013, + "visualStartMs": 7.687 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 7.6887, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6887 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 7.6904, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6904 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 7.6922, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6922 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 7.6939, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6939 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 7.6956, + "visualDurationMs": 0.0013, + "visualStartMs": 7.6956 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 7.6973, + "visualDurationMs": 0.0014, + "visualStartMs": 7.6973 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 7.699, + "visualDurationMs": 0.0014, + "visualStartMs": 7.699 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 7.7007, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7007 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 7.7024, + "visualDurationMs": 0.0015, + "visualStartMs": 7.7024 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 7.7042, + "visualDurationMs": 0.0089, + "visualStartMs": 7.7042 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 7.7134, + "visualDurationMs": 0.0015, + "visualStartMs": 7.7134 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 7.7152, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7152 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 7.717, + "visualDurationMs": 0.0014, + "visualStartMs": 7.717 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 7.7188, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7188 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 7.7206, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7206 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 7.7223, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7223 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 7.7239, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7239 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 7.7256, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7256 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 7.7272, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7272 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 7.7288, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7288 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 7.7303, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7303 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 7.7319, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7319 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 7.7336, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7336 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 7.7353, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7353 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 7.7369, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7369 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 7.7386, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7386 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 7.7403, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7403 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 7.7421, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7421 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 7.7437, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7437 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 7.7453, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7453 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 7.7469, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7469 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 7.7485, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7485 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 7.7501, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7501 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 7.7519, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7519 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 7.7536, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7536 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 7.7552, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7552 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 7.7568, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7568 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 7.7586, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7586 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 7.7601, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7601 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 7.7617, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7617 + }, + { + "durationMs": 0.0014, + "name": "L93", + "startMs": 7.7634, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7634 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 7.7651, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7651 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 7.7667, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7667 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 7.7683, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7683 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 7.77, + "visualDurationMs": 0.0014, + "visualStartMs": 7.77 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 7.7717, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7717 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 7.7733, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7733 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 7.7747, + "visualDurationMs": 0.0006, + "visualStartMs": 7.7747 + } + ], + "durationMs": 0.19, + "name": "Lighting", + "startMs": 7.5855, + "visualDurationMs": 0.19, + "visualStartMs": 7.5855 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 7.7761, + "visualDurationMs": 0.0004, + "visualStartMs": 7.7761 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 7.7767, + "visualDurationMs": 0.0005, + "visualStartMs": 7.7767 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 7.7757, + "visualDurationMs": 0.0016, + "visualStartMs": 7.7757 + } + ], + "durationMs": 0.1966, + "name": "DrawSprite", + "startMs": 7.5808, + "visualDurationMs": 0.1966, + "visualStartMs": 7.5808 + } + ], + "durationMs": 0.1973, + "name": "Draw Sprite: Pebble_30", + "startMs": 7.5803, + "visualDurationMs": 0.1973, + "visualStartMs": 7.5803 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 7.7828, + "visualDurationMs": 0.0003, + "visualStartMs": 7.7828 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 7.7832, + "visualDurationMs": 0.0004, + "visualStartMs": 7.7832 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 7.7842, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7842 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 7.7857, + "visualDurationMs": 0.0006, + "visualStartMs": 7.7857 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 7.7838, + "visualDurationMs": 0.0026, + "visualStartMs": 7.7838 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 7.7866, + "visualDurationMs": 0.0004, + "visualStartMs": 7.7866 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 7.7875, + "visualDurationMs": 0.001, + "visualStartMs": 7.7875 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 7.7886, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7886 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 7.7903, + "visualDurationMs": 0.0014, + "visualStartMs": 7.7903 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 7.792, + "visualDurationMs": 0.0013, + "visualStartMs": 7.792 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 7.7936, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7936 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 7.7953, + "visualDurationMs": 0.0013, + "visualStartMs": 7.7953 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 7.797, + "visualDurationMs": 0.0012, + "visualStartMs": 7.797 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 7.7986, + "visualDurationMs": 0.0012, + "visualStartMs": 7.7986 + }, + { + "durationMs": 0.0063, + "name": "L6", + "startMs": 7.8001, + "visualDurationMs": 0.0063, + "visualStartMs": 7.8001 + }, + { + "durationMs": 0.0018, + "name": "L7", + "startMs": 7.8069, + "visualDurationMs": 0.0018, + "visualStartMs": 7.8069 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 7.8091, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8091 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 7.8108, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8108 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 7.8125, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8125 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 7.8142, + "visualDurationMs": 0.0016, + "visualStartMs": 7.8142 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 7.8162, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8162 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 7.818, + "visualDurationMs": 0.0013, + "visualStartMs": 7.818 + }, + { + "durationMs": 0.0037, + "name": "L14", + "startMs": 7.8197, + "visualDurationMs": 0.0037, + "visualStartMs": 7.8197 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 7.8238, + "visualDurationMs": 0.0016, + "visualStartMs": 7.8238 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 7.8257, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8257 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 7.8274, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8274 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 7.8293, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8293 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 7.8309, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8309 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 7.8327, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8327 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 7.8345, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8345 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 7.8361, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8361 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 7.8379, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8379 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 7.8396, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8396 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 7.8413, + "visualDurationMs": 0.0012, + "visualStartMs": 7.8413 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 7.8428, + "visualDurationMs": 0.0012, + "visualStartMs": 7.8428 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 7.8444, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8444 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 7.846, + "visualDurationMs": 0.0013, + "visualStartMs": 7.846 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 7.8476, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8476 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 7.8492, + "visualDurationMs": 0.0052, + "visualStartMs": 7.8492 + }, + { + "durationMs": 0.0013, + "name": "L31", + "startMs": 7.8548, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8548 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 7.8565, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8565 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 7.8582, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8582 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 7.86, + "visualDurationMs": 0.0014, + "visualStartMs": 7.86 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 7.8618, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8618 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 7.8635, + "visualDurationMs": 0.0012, + "visualStartMs": 7.8635 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 7.865, + "visualDurationMs": 0.0013, + "visualStartMs": 7.865 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 7.8666, + "visualDurationMs": 0.0012, + "visualStartMs": 7.8666 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 7.8681, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8681 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 7.8699, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8699 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 7.8717, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8717 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 7.8733, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8733 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 7.8749, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8749 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 7.8768, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8768 + }, + { + "durationMs": 0.0016, + "name": "L45", + "startMs": 7.8785, + "visualDurationMs": 0.0016, + "visualStartMs": 7.8785 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 7.8805, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8805 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 7.8824, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8824 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 7.8842, + "visualDurationMs": 0.0017, + "visualStartMs": 7.8842 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 7.8862, + "visualDurationMs": 0.0015, + "visualStartMs": 7.8862 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 7.888, + "visualDurationMs": 0.0015, + "visualStartMs": 7.888 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 7.8898, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8898 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 7.8915, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8915 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 7.8931, + "visualDurationMs": 0.0013, + "visualStartMs": 7.8931 + }, + { + "durationMs": 0.0016, + "name": "L54", + "startMs": 7.8948, + "visualDurationMs": 0.0016, + "visualStartMs": 7.8948 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 7.8967, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8967 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 7.8984, + "visualDurationMs": 0.0014, + "visualStartMs": 7.8984 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 7.9001, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9001 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 7.9018, + "visualDurationMs": 0.0016, + "visualStartMs": 7.9018 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 7.9038, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9038 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 7.9053, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9053 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 7.9071, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9071 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 7.9087, + "visualDurationMs": 0.0086, + "visualStartMs": 7.9087 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 7.9177, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9177 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 7.9194, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9194 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 7.9211, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9211 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 7.9228, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9228 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 7.9244, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9244 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 7.9261, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9261 + }, + { + "durationMs": 0.0012, + "name": "L69", + "startMs": 7.9277, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9277 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 7.9293, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9293 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 7.9309, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9309 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 7.9324, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9324 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 7.934, + "visualDurationMs": 0.0013, + "visualStartMs": 7.934 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 7.9357, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9357 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 7.9373, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9373 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 7.9388, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9388 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 7.9404, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9404 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 7.9419, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9419 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 7.9435, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9435 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 7.9451, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9451 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 7.9468, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9468 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 7.9484, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9484 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 7.95, + "visualDurationMs": 0.0012, + "visualStartMs": 7.95 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 7.9515, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9515 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 7.9531, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9531 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 7.9547, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9547 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 7.9562, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9562 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 7.9579, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9579 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 7.9595, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9595 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 7.9611, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9611 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 7.9627, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9627 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 7.9643, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9643 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 7.9659, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9659 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 7.9674, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9674 + }, + { + "durationMs": 0.0045, + "name": "L95", + "startMs": 7.969, + "visualDurationMs": 0.0045, + "visualStartMs": 7.969 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 7.9739, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9739 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 7.9755, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9755 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 7.9771, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9771 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 7.9787, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9787 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 7.98, + "visualDurationMs": 0.0007, + "visualStartMs": 7.98 + } + ], + "durationMs": 0.1939, + "name": "Lighting", + "startMs": 7.7871, + "visualDurationMs": 0.1939, + "visualStartMs": 7.7871 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 7.9815, + "visualDurationMs": 0.0006, + "visualStartMs": 7.9815 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 7.9823, + "visualDurationMs": 0.0004, + "visualStartMs": 7.9823 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 7.9812, + "visualDurationMs": 0.0016, + "visualStartMs": 7.9812 + } + ], + "durationMs": 0.2005, + "name": "DrawSprite", + "startMs": 7.7824, + "visualDurationMs": 0.2005, + "visualStartMs": 7.7824 + } + ], + "durationMs": 0.2047, + "name": "Draw Sprite: Pebble_32", + "startMs": 7.7783, + "visualDurationMs": 0.2047, + "visualStartMs": 7.7783 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 7.9854, + "visualDurationMs": 0.0003, + "visualStartMs": 7.9854 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 7.9858, + "visualDurationMs": 0.0004, + "visualStartMs": 7.9858 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 7.9868, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9868 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 7.9882, + "visualDurationMs": 0.0006, + "visualStartMs": 7.9882 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 7.9865, + "visualDurationMs": 0.0023, + "visualStartMs": 7.9865 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 7.989, + "visualDurationMs": 0.0004, + "visualStartMs": 7.989 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 7.9898, + "visualDurationMs": 0.0009, + "visualStartMs": 7.9898 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 7.9909, + "visualDurationMs": 0.0014, + "visualStartMs": 7.9909 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 7.9927, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9927 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 7.9944, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9944 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 7.996, + "visualDurationMs": 0.0013, + "visualStartMs": 7.996 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 7.9976, + "visualDurationMs": 0.0013, + "visualStartMs": 7.9976 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 7.9992, + "visualDurationMs": 0.0012, + "visualStartMs": 7.9992 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 8.0007, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0007 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 8.0022, + "visualDurationMs": 0.0024, + "visualStartMs": 8.0022 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 8.0049, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0049 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 8.0064, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0064 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 8.008, + "visualDurationMs": 0.0012, + "visualStartMs": 8.008 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 8.0095, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0095 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 8.0111, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0111 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 8.0128, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0128 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 8.0145, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0145 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 8.0162, + "visualDurationMs": 0.0033, + "visualStartMs": 8.0162 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 8.0198, + "visualDurationMs": 0.0015, + "visualStartMs": 8.0198 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 8.0216, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0216 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 8.0233, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0233 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 8.0249, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0249 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 8.0266, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0266 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 8.0283, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0283 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 8.0301, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0301 + }, + { + "durationMs": 0.0024, + "name": "L22", + "startMs": 8.0317, + "visualDurationMs": 0.0024, + "visualStartMs": 8.0317 + }, + { + "durationMs": 0.0019, + "name": "L23", + "startMs": 8.0346, + "visualDurationMs": 0.0019, + "visualStartMs": 8.0346 + }, + { + "durationMs": 0.002, + "name": "L24", + "startMs": 8.037, + "visualDurationMs": 0.002, + "visualStartMs": 8.037 + }, + { + "durationMs": 0.0021, + "name": "L25", + "startMs": 8.0396, + "visualDurationMs": 0.0021, + "visualStartMs": 8.0396 + }, + { + "durationMs": 0.0073, + "name": "L26", + "startMs": 8.0422, + "visualDurationMs": 0.0073, + "visualStartMs": 8.0422 + }, + { + "durationMs": 0.0016, + "name": "L27", + "startMs": 8.0499, + "visualDurationMs": 0.0016, + "visualStartMs": 8.0499 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 8.0519, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0519 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 8.0536, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0536 + }, + { + "durationMs": 0.0055, + "name": "L30", + "startMs": 8.0553, + "visualDurationMs": 0.0055, + "visualStartMs": 8.0553 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 8.0612, + "visualDurationMs": 0.0016, + "visualStartMs": 8.0612 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 8.0631, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0631 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 8.0647, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0647 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 8.0664, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0664 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 8.068, + "visualDurationMs": 0.0014, + "visualStartMs": 8.068 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 8.0697, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0697 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 8.0714, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0714 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 8.0729, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0729 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 8.0745, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0745 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 8.076, + "visualDurationMs": 0.0014, + "visualStartMs": 8.076 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 8.0777, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0777 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 8.0793, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0793 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 8.0809, + "visualDurationMs": 0.0015, + "visualStartMs": 8.0809 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 8.0827, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0827 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 8.0844, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0844 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 8.0863, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0863 + }, + { + "durationMs": 0.0012, + "name": "L47", + "startMs": 8.0881, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0881 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 8.0897, + "visualDurationMs": 0.0015, + "visualStartMs": 8.0897 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 8.0915, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0915 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 8.0932, + "visualDurationMs": 0.0014, + "visualStartMs": 8.0932 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 8.095, + "visualDurationMs": 0.0013, + "visualStartMs": 8.095 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 8.0967, + "visualDurationMs": 0.0012, + "visualStartMs": 8.0967 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 8.0983, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0983 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 8.0999, + "visualDurationMs": 0.0013, + "visualStartMs": 8.0999 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 8.1015, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1015 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 8.1032, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1032 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 8.1048, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1048 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 8.1064, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1064 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 8.1081, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1081 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 8.1097, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1097 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 8.1114, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1114 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 8.1131, + "visualDurationMs": 0.0086, + "visualStartMs": 8.1131 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 8.1221, + "visualDurationMs": 0.0015, + "visualStartMs": 8.1221 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 8.1239, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1239 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 8.1256, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1256 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 8.1273, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1273 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 8.1289, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1289 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 8.1306, + "visualDurationMs": 0.0015, + "visualStartMs": 8.1306 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 8.1324, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1324 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 8.1342, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1342 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 8.136, + "visualDurationMs": 0.0014, + "visualStartMs": 8.136 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 8.1378, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1378 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 8.1394, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1394 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 8.141, + "visualDurationMs": 0.0013, + "visualStartMs": 8.141 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 8.1426, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1426 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 8.1441, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1441 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 8.1457, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1457 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 8.1472, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1472 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 8.1487, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1487 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 8.1504, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1504 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 8.152, + "visualDurationMs": 0.0013, + "visualStartMs": 8.152 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 8.1536, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1536 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 8.1552, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1552 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 8.1569, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1569 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 8.1585, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1585 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 8.1601, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1601 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 8.1617, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1617 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 8.1633, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1633 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 8.1648, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1648 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 8.1665, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1665 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 8.168, + "visualDurationMs": 0.0012, + "visualStartMs": 8.168 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 8.1696, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1696 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 8.1711, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1711 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 8.1727, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1727 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 8.1742, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1742 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 8.1757, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1757 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 8.1773, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1773 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 8.1789, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1789 + }, + { + "durationMs": 0.0011, + "name": "L99", + "startMs": 8.1805, + "visualDurationMs": 0.0011, + "visualStartMs": 8.1805 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 8.1818, + "visualDurationMs": 0.0007, + "visualStartMs": 8.1818 + } + ], + "durationMs": 0.1934, + "name": "Lighting", + "startMs": 7.9895, + "visualDurationMs": 0.1934, + "visualStartMs": 7.9895 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 8.1834, + "visualDurationMs": 0.0007, + "visualStartMs": 8.1834 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 8.1842, + "visualDurationMs": 0.0005, + "visualStartMs": 8.1842 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 8.1831, + "visualDurationMs": 0.0017, + "visualStartMs": 8.1831 + } + ], + "durationMs": 0.1999, + "name": "DrawSprite", + "startMs": 7.985, + "visualDurationMs": 0.1999, + "visualStartMs": 7.985 + } + ], + "durationMs": 0.2005, + "name": "Draw Sprite: Pebble_34", + "startMs": 7.9846, + "visualDurationMs": 0.2005, + "visualStartMs": 7.9846 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 8.1866, + "visualDurationMs": 0.0003, + "visualStartMs": 8.1866 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 8.1871, + "visualDurationMs": 0.0004, + "visualStartMs": 8.1871 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 8.1881, + "visualDurationMs": 0.0012, + "visualStartMs": 8.1881 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 8.1895, + "visualDurationMs": 0.0006, + "visualStartMs": 8.1895 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 8.1877, + "visualDurationMs": 0.0025, + "visualStartMs": 8.1877 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 8.1903, + "visualDurationMs": 0.0004, + "visualStartMs": 8.1903 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 8.1912, + "visualDurationMs": 0.0009, + "visualStartMs": 8.1912 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 8.1922, + "visualDurationMs": 0.0014, + "visualStartMs": 8.1922 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 8.194, + "visualDurationMs": 0.0013, + "visualStartMs": 8.194 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 8.1957, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1957 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 8.1973, + "visualDurationMs": 0.0013, + "visualStartMs": 8.1973 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 8.199, + "visualDurationMs": 0.0013, + "visualStartMs": 8.199 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 8.2006, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2006 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 8.2023, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2023 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 8.2038, + "visualDurationMs": 0.0026, + "visualStartMs": 8.2038 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 8.2067, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2067 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 8.2083, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2083 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 8.2099, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2099 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 8.2115, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2115 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 8.2132, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2132 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 8.2149, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2149 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 8.2166, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2166 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 8.2183, + "visualDurationMs": 0.0033, + "visualStartMs": 8.2183 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 8.222, + "visualDurationMs": 0.0014, + "visualStartMs": 8.222 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 8.2238, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2238 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 8.2255, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2255 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 8.2272, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2272 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 8.2288, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2288 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 8.2306, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2306 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 8.2323, + "visualDurationMs": 0.0015, + "visualStartMs": 8.2323 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 8.2341, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2341 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 8.2359, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2359 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 8.2375, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2375 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 8.2392, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2392 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 8.2407, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2407 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 8.2423, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2423 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 8.2439, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2439 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 8.2456, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2456 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 8.2473, + "visualDurationMs": 0.0049, + "visualStartMs": 8.2473 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 8.2525, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2525 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 8.2543, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2543 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 8.2559, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2559 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 8.2576, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2576 + }, + { + "durationMs": 0.0012, + "name": "L35", + "startMs": 8.2593, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2593 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 8.2609, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2609 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 8.2625, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2625 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 8.2641, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2641 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 8.2657, + "visualDurationMs": 0.0012, + "visualStartMs": 8.2657 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 8.2673, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2673 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 8.2689, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2689 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 8.2705, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2705 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 8.2722, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2722 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 8.2739, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2739 + }, + { + "durationMs": 0.0052, + "name": "L45", + "startMs": 8.2757, + "visualDurationMs": 0.0052, + "visualStartMs": 8.2757 + }, + { + "durationMs": 0.0017, + "name": "L46", + "startMs": 8.2814, + "visualDurationMs": 0.0017, + "visualStartMs": 8.2814 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 8.2834, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2834 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 8.2852, + "visualDurationMs": 0.0017, + "visualStartMs": 8.2852 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 8.2873, + "visualDurationMs": 0.0015, + "visualStartMs": 8.2873 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 8.2891, + "visualDurationMs": 0.0015, + "visualStartMs": 8.2891 + }, + { + "durationMs": 0.0017, + "name": "L51", + "startMs": 8.2909, + "visualDurationMs": 0.0017, + "visualStartMs": 8.2909 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 8.293, + "visualDurationMs": 0.0013, + "visualStartMs": 8.293 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 8.2946, + "visualDurationMs": 0.0015, + "visualStartMs": 8.2946 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 8.2965, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2965 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 8.2982, + "visualDurationMs": 0.0013, + "visualStartMs": 8.2982 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 8.2998, + "visualDurationMs": 0.0014, + "visualStartMs": 8.2998 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 8.3016, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3016 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 8.3031, + "visualDurationMs": 0.0015, + "visualStartMs": 8.3031 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 8.3049, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3049 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 8.3066, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3066 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 8.3083, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3083 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 8.3101, + "visualDurationMs": 0.0085, + "visualStartMs": 8.3101 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 8.3189, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3189 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 8.3207, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3207 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 8.3225, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3225 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 8.3242, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3242 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 8.3259, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3259 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 8.3276, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3276 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 8.3294, + "visualDurationMs": 0.0015, + "visualStartMs": 8.3294 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 8.3312, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3312 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 8.3328, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3328 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 8.3345, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3345 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 8.3361, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3361 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 8.3377, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3377 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 8.3393, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3393 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 8.3411, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3411 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 8.3427, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3427 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 8.3442, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3442 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 8.3458, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3458 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 8.3476, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3476 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 8.3492, + "visualDurationMs": 0.0015, + "visualStartMs": 8.3492 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 8.351, + "visualDurationMs": 0.0013, + "visualStartMs": 8.351 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 8.3527, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3527 + }, + { + "durationMs": 0.0015, + "name": "L84", + "startMs": 8.3545, + "visualDurationMs": 0.0015, + "visualStartMs": 8.3545 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 8.3564, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3564 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 8.358, + "visualDurationMs": 0.0013, + "visualStartMs": 8.358 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 8.3597, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3597 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 8.3612, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3612 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 8.3628, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3628 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 8.3645, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3645 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 8.366, + "visualDurationMs": 0.0013, + "visualStartMs": 8.366 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 8.3677, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3677 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 8.3693, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3693 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 8.3709, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3709 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 8.3726, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3726 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 8.3742, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3742 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 8.3758, + "visualDurationMs": 0.0015, + "visualStartMs": 8.3758 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 8.3777, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3777 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 8.3793, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3793 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 8.3806, + "visualDurationMs": 0.0007, + "visualStartMs": 8.3806 + } + ], + "durationMs": 0.1907, + "name": "Lighting", + "startMs": 8.1909, + "visualDurationMs": 0.1907, + "visualStartMs": 8.1909 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 8.3821, + "visualDurationMs": 0.0005, + "visualStartMs": 8.3821 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 8.3827, + "visualDurationMs": 0.0004, + "visualStartMs": 8.3827 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 8.3818, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3818 + } + ], + "durationMs": 0.197, + "name": "DrawSprite", + "startMs": 8.1863, + "visualDurationMs": 0.197, + "visualStartMs": 8.1863 + } + ], + "durationMs": 0.1975, + "name": "Draw Sprite: Pebble_35", + "startMs": 8.1859, + "visualDurationMs": 0.1975, + "visualStartMs": 8.1859 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 8.3853, + "visualDurationMs": 0.0003, + "visualStartMs": 8.3853 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 8.3857, + "visualDurationMs": 0.0004, + "visualStartMs": 8.3857 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 8.3869, + "visualDurationMs": 0.0014, + "visualStartMs": 8.3869 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 8.3884, + "visualDurationMs": 0.0005, + "visualStartMs": 8.3884 + } + ], + "durationMs": 0.0027, + "name": "SetUniforms", + "startMs": 8.3864, + "visualDurationMs": 0.0027, + "visualStartMs": 8.3864 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 8.3892, + "visualDurationMs": 0.0004, + "visualStartMs": 8.3892 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 8.3901, + "visualDurationMs": 0.0008, + "visualStartMs": 8.3901 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 8.3911, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3911 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 8.3928, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3928 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 8.3944, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3944 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 8.396, + "visualDurationMs": 0.0013, + "visualStartMs": 8.396 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 8.3976, + "visualDurationMs": 0.0013, + "visualStartMs": 8.3976 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 8.3992, + "visualDurationMs": 0.0012, + "visualStartMs": 8.3992 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 8.4007, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4007 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 8.4022, + "visualDurationMs": 0.0025, + "visualStartMs": 8.4022 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 8.405, + "visualDurationMs": 0.0013, + "visualStartMs": 8.405 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 8.4066, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4066 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 8.4082, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4082 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 8.4099, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4099 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 8.4115, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4115 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 8.4132, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4132 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 8.4149, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4149 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 8.4166, + "visualDurationMs": 0.0033, + "visualStartMs": 8.4166 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 8.4203, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4203 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 8.4221, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4221 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 8.4239, + "visualDurationMs": 0.0015, + "visualStartMs": 8.4239 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 8.4258, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4258 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 8.4275, + "visualDurationMs": 0.0015, + "visualStartMs": 8.4275 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 8.4294, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4294 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 8.431, + "visualDurationMs": 0.0015, + "visualStartMs": 8.431 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 8.4328, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4328 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 8.4346, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4346 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 8.4361, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4361 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 8.4377, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4377 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 8.4393, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4393 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 8.4409, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4409 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 8.4426, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4426 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 8.4442, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4442 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 8.4457, + "visualDurationMs": 0.005, + "visualStartMs": 8.4457 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 8.4511, + "visualDurationMs": 0.0015, + "visualStartMs": 8.4511 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 8.4531, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4531 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 8.4548, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4548 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 8.4566, + "visualDurationMs": 0.0015, + "visualStartMs": 8.4566 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 8.4584, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4584 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 8.46, + "visualDurationMs": 0.0013, + "visualStartMs": 8.46 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 8.4617, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4617 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 8.4632, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4632 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 8.4648, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4648 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 8.4664, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4664 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 8.4681, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4681 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 8.4699, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4699 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 8.4715, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4715 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 8.4732, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4732 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 8.475, + "visualDurationMs": 0.0013, + "visualStartMs": 8.475 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 8.4766, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4766 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 8.4783, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4783 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 8.48, + "visualDurationMs": 0.0015, + "visualStartMs": 8.48 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 8.4819, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4819 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 8.4836, + "visualDurationMs": 0.0015, + "visualStartMs": 8.4836 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 8.4854, + "visualDurationMs": 0.0014, + "visualStartMs": 8.4854 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 8.4872, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4872 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 8.4889, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4889 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 8.4905, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4905 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 8.4921, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4921 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 8.4938, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4938 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 8.4955, + "visualDurationMs": 0.0012, + "visualStartMs": 8.4955 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 8.497, + "visualDurationMs": 0.0014, + "visualStartMs": 8.497 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 8.4988, + "visualDurationMs": 0.0013, + "visualStartMs": 8.4988 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 8.5004, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5004 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 8.5021, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5021 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 8.5038, + "visualDurationMs": 0.0085, + "visualStartMs": 8.5038 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 8.5126, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5126 + }, + { + "durationMs": 0.0052, + "name": "L64", + "startMs": 8.5144, + "visualDurationMs": 0.0052, + "visualStartMs": 8.5144 + }, + { + "durationMs": 0.0017, + "name": "L65", + "startMs": 8.52, + "visualDurationMs": 0.0017, + "visualStartMs": 8.52 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 8.5221, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5221 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 8.5239, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5239 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 8.5257, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5257 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 8.5273, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5273 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 8.529, + "visualDurationMs": 0.0012, + "visualStartMs": 8.529 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 8.5305, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5305 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 8.5321, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5321 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 8.5338, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5338 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 8.5355, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5355 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 8.5371, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5371 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 8.5387, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5387 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 8.5405, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5405 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 8.5421, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5421 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 8.5437, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5437 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 8.5455, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5455 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 8.5471, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5471 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 8.5487, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5487 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 8.5503, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5503 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 8.5519, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5519 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 8.5535, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5535 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 8.5551, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5551 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 8.5567, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5567 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 8.5584, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5584 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 8.56, + "visualDurationMs": 0.0013, + "visualStartMs": 8.56 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 8.5616, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5616 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 8.5632, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5632 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 8.565, + "visualDurationMs": 0.0013, + "visualStartMs": 8.565 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 8.5666, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5666 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 8.5681, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5681 + }, + { + "durationMs": 0.0011, + "name": "L95", + "startMs": 8.5698, + "visualDurationMs": 0.0011, + "visualStartMs": 8.5698 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 8.5713, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5713 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 8.5729, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5729 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 8.5745, + "visualDurationMs": 0.0014, + "visualStartMs": 8.5745 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 8.5763, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5763 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 8.5777, + "visualDurationMs": 0.0007, + "visualStartMs": 8.5777 + } + ], + "durationMs": 0.189, + "name": "Lighting", + "startMs": 8.3897, + "visualDurationMs": 0.189, + "visualStartMs": 8.3897 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 8.5792, + "visualDurationMs": 0.0004, + "visualStartMs": 8.5792 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 8.5799, + "visualDurationMs": 0.0004, + "visualStartMs": 8.5799 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 8.5788, + "visualDurationMs": 0.0017, + "visualStartMs": 8.5788 + } + ], + "durationMs": 0.1957, + "name": "DrawSprite", + "startMs": 8.3849, + "visualDurationMs": 0.1957, + "visualStartMs": 8.3849 + } + ], + "durationMs": 0.1962, + "name": "Draw Sprite: Pebble_36", + "startMs": 8.3845, + "visualDurationMs": 0.1962, + "visualStartMs": 8.3845 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 8.5822, + "visualDurationMs": 0.0003, + "visualStartMs": 8.5822 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 8.5827, + "visualDurationMs": 0.0004, + "visualStartMs": 8.5827 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 8.5837, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5837 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 8.5854, + "visualDurationMs": 0.0004, + "visualStartMs": 8.5854 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 8.5834, + "visualDurationMs": 0.0026, + "visualStartMs": 8.5834 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 8.5861, + "visualDurationMs": 0.0003, + "visualStartMs": 8.5861 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 8.5869, + "visualDurationMs": 0.0009, + "visualStartMs": 8.5869 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 8.588, + "visualDurationMs": 0.0013, + "visualStartMs": 8.588 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 8.5896, + "visualDurationMs": 0.0012, + "visualStartMs": 8.5896 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 8.5911, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5911 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 8.5929, + "visualDurationMs": 0.0015, + "visualStartMs": 8.5929 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 8.5947, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5947 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 8.5963, + "visualDurationMs": 0.0013, + "visualStartMs": 8.5963 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 8.598, + "visualDurationMs": 0.0013, + "visualStartMs": 8.598 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 8.5996, + "visualDurationMs": 0.0027, + "visualStartMs": 8.5996 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 8.6027, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6027 + }, + { + "durationMs": 0.0045, + "name": "L8", + "startMs": 8.6045, + "visualDurationMs": 0.0045, + "visualStartMs": 8.6045 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 8.6093, + "visualDurationMs": 0.0012, + "visualStartMs": 8.6093 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 8.611, + "visualDurationMs": 0.0013, + "visualStartMs": 8.611 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 8.6126, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6126 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 8.6143, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6143 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 8.6161, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6161 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 8.6177, + "visualDurationMs": 0.0034, + "visualStartMs": 8.6177 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 8.6214, + "visualDurationMs": 0.0015, + "visualStartMs": 8.6214 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 8.6233, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6233 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 8.6249, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6249 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 8.6266, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6266 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 8.6283, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6283 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 8.63, + "visualDurationMs": 0.0013, + "visualStartMs": 8.63 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 8.6316, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6316 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 8.6333, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6333 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 8.635, + "visualDurationMs": 0.0013, + "visualStartMs": 8.635 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 8.6367, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6367 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 8.6383, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6383 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 8.64, + "visualDurationMs": 0.0012, + "visualStartMs": 8.64 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 8.6415, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6415 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 8.6431, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6431 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 8.6447, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6447 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 8.6463, + "visualDurationMs": 0.0049, + "visualStartMs": 8.6463 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 8.6516, + "visualDurationMs": 0.0016, + "visualStartMs": 8.6516 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 8.6535, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6535 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 8.6551, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6551 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 8.6568, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6568 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 8.6585, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6585 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 8.6601, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6601 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 8.6617, + "visualDurationMs": 0.0012, + "visualStartMs": 8.6617 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 8.6633, + "visualDurationMs": 0.0012, + "visualStartMs": 8.6633 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 8.6649, + "visualDurationMs": 0.0012, + "visualStartMs": 8.6649 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 8.6664, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6664 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 8.6681, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6681 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 8.6697, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6697 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 8.6713, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6713 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 8.673, + "visualDurationMs": 0.0014, + "visualStartMs": 8.673 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 8.6748, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6748 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 8.6764, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6764 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 8.6781, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6781 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 8.6798, + "visualDurationMs": 0.0015, + "visualStartMs": 8.6798 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 8.6816, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6816 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 8.6833, + "visualDurationMs": 0.0014, + "visualStartMs": 8.6833 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 8.685, + "visualDurationMs": 0.0014, + "visualStartMs": 8.685 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 8.6867, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6867 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 8.6883, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6883 + }, + { + "durationMs": 0.0016, + "name": "L54", + "startMs": 8.6899, + "visualDurationMs": 0.0016, + "visualStartMs": 8.6899 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 8.6918, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6918 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 8.6935, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6935 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 8.6951, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6951 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 8.6967, + "visualDurationMs": 0.0015, + "visualStartMs": 8.6967 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 8.6985, + "visualDurationMs": 0.0013, + "visualStartMs": 8.6985 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 8.7002, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7002 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 8.7019, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7019 + }, + { + "durationMs": 0.0083, + "name": "L62", + "startMs": 8.7036, + "visualDurationMs": 0.0083, + "visualStartMs": 8.7036 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 8.7123, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7123 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 8.7139, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7139 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 8.7156, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7156 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 8.7173, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7173 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 8.719, + "visualDurationMs": 0.0014, + "visualStartMs": 8.719 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 8.7208, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7208 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 8.7224, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7224 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 8.724, + "visualDurationMs": 0.0012, + "visualStartMs": 8.724 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 8.7256, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7256 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 8.7273, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7273 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 8.7289, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7289 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 8.7305, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7305 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 8.732, + "visualDurationMs": 0.0012, + "visualStartMs": 8.732 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 8.7335, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7335 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 8.7351, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7351 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 8.7366, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7366 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 8.7382, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7382 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 8.7398, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7398 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 8.7414, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7414 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 8.743, + "visualDurationMs": 0.0012, + "visualStartMs": 8.743 + }, + { + "durationMs": 0.0048, + "name": "L83", + "startMs": 8.7445, + "visualDurationMs": 0.0048, + "visualStartMs": 8.7445 + }, + { + "durationMs": 0.0018, + "name": "L84", + "startMs": 8.7498, + "visualDurationMs": 0.0018, + "visualStartMs": 8.7498 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 8.752, + "visualDurationMs": 0.0015, + "visualStartMs": 8.752 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 8.7538, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7538 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 8.7555, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7555 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 8.7572, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7572 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 8.7589, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7589 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 8.7606, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7606 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 8.7623, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7623 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 8.764, + "visualDurationMs": 0.0013, + "visualStartMs": 8.764 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 8.7656, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7656 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 8.7672, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7672 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 8.7689, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7689 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 8.7705, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7705 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 8.772, + "visualDurationMs": 0.0013, + "visualStartMs": 8.772 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 8.7737, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7737 + }, + { + "durationMs": 0.0015, + "name": "L99", + "startMs": 8.7752, + "visualDurationMs": 0.0015, + "visualStartMs": 8.7752 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 8.7768, + "visualDurationMs": 0.0007, + "visualStartMs": 8.7768 + } + ], + "durationMs": 0.1912, + "name": "Lighting", + "startMs": 8.5866, + "visualDurationMs": 0.1912, + "visualStartMs": 8.5866 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 8.7783, + "visualDurationMs": 0.0005, + "visualStartMs": 8.7783 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 8.7789, + "visualDurationMs": 0.0005, + "visualStartMs": 8.7789 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 8.778, + "visualDurationMs": 0.0016, + "visualStartMs": 8.778 + } + ], + "durationMs": 0.1979, + "name": "DrawSprite", + "startMs": 8.5818, + "visualDurationMs": 0.1979, + "visualStartMs": 8.5818 + } + ], + "durationMs": 0.1985, + "name": "Draw Sprite: Pebble_37", + "startMs": 8.5814, + "visualDurationMs": 0.1985, + "visualStartMs": 8.5814 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 8.7814, + "visualDurationMs": 0.0003, + "visualStartMs": 8.7814 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 8.7818, + "visualDurationMs": 0.0005, + "visualStartMs": 8.7818 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 8.7828, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7828 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 8.7843, + "visualDurationMs": 0.0005, + "visualStartMs": 8.7843 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 8.7825, + "visualDurationMs": 0.0024, + "visualStartMs": 8.7825 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 8.785, + "visualDurationMs": 0.0004, + "visualStartMs": 8.785 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 8.7859, + "visualDurationMs": 0.0009, + "visualStartMs": 8.7859 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 8.7869, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7869 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 8.7887, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7887 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 8.7903, + "visualDurationMs": 0.0013, + "visualStartMs": 8.7903 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 8.792, + "visualDurationMs": 0.0012, + "visualStartMs": 8.792 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 8.7935, + "visualDurationMs": 0.0014, + "visualStartMs": 8.7935 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 8.7952, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7952 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 8.7967, + "visualDurationMs": 0.0012, + "visualStartMs": 8.7967 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 8.7983, + "visualDurationMs": 0.0027, + "visualStartMs": 8.7983 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 8.8014, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8014 + }, + { + "durationMs": 0.0015, + "name": "L8", + "startMs": 8.803, + "visualDurationMs": 0.0015, + "visualStartMs": 8.803 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 8.8048, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8048 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 8.8065, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8065 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 8.8081, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8081 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 8.8098, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8098 + }, + { + "durationMs": 0.0016, + "name": "L13", + "startMs": 8.8115, + "visualDurationMs": 0.0016, + "visualStartMs": 8.8115 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 8.8134, + "visualDurationMs": 0.0035, + "visualStartMs": 8.8134 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 8.8172, + "visualDurationMs": 0.0015, + "visualStartMs": 8.8172 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 8.819, + "visualDurationMs": 0.0014, + "visualStartMs": 8.819 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 8.8207, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8207 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 8.8224, + "visualDurationMs": 0.0016, + "visualStartMs": 8.8224 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 8.8243, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8243 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 8.826, + "visualDurationMs": 0.0013, + "visualStartMs": 8.826 + }, + { + "durationMs": 0.0018, + "name": "L21", + "startMs": 8.8276, + "visualDurationMs": 0.0018, + "visualStartMs": 8.8276 + }, + { + "durationMs": 0.0016, + "name": "L22", + "startMs": 8.8297, + "visualDurationMs": 0.0016, + "visualStartMs": 8.8297 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 8.8316, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8316 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 8.8333, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8333 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 8.8349, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8349 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 8.8364, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8364 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 8.838, + "visualDurationMs": 0.0013, + "visualStartMs": 8.838 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 8.8396, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8396 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 8.8412, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8412 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 8.8428, + "visualDurationMs": 0.0052, + "visualStartMs": 8.8428 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 8.8483, + "visualDurationMs": 0.0015, + "visualStartMs": 8.8483 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 8.8502, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8502 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 8.8517, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8517 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 8.8534, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8534 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 8.855, + "visualDurationMs": 0.0013, + "visualStartMs": 8.855 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 8.8567, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8567 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 8.8582, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8582 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 8.8598, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8598 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 8.8613, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8613 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 8.8628, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8628 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 8.8645, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8645 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 8.8661, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8661 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 8.8677, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8677 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 8.8694, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8694 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 8.8711, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8711 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 8.8727, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8727 + }, + { + "durationMs": 0.0012, + "name": "L47", + "startMs": 8.8745, + "visualDurationMs": 0.0012, + "visualStartMs": 8.8745 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 8.8761, + "visualDurationMs": 0.0015, + "visualStartMs": 8.8761 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 8.8779, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8779 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 8.8796, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8796 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 8.8813, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8813 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 8.883, + "visualDurationMs": 0.0013, + "visualStartMs": 8.883 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 8.8846, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8846 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 8.8862, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8862 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 8.8878, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8878 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 8.8895, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8895 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 8.8911, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8911 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 8.8927, + "visualDurationMs": 0.0014, + "visualStartMs": 8.8927 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 8.8944, + "visualDurationMs": 0.0013, + "visualStartMs": 8.8944 + }, + { + "durationMs": 0.0605, + "name": "L60", + "startMs": 8.896, + "visualDurationMs": 0.0605, + "visualStartMs": 8.896 + }, + { + "durationMs": 0.0016, + "name": "L61", + "startMs": 8.9569, + "visualDurationMs": 0.0016, + "visualStartMs": 8.9569 + }, + { + "durationMs": 0.0095, + "name": "L62", + "startMs": 8.9589, + "visualDurationMs": 0.0095, + "visualStartMs": 8.9589 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 8.9687, + "visualDurationMs": 0.0014, + "visualStartMs": 8.9687 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 8.9705, + "visualDurationMs": 0.0014, + "visualStartMs": 8.9705 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 8.9722, + "visualDurationMs": 0.0015, + "visualStartMs": 8.9722 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 8.974, + "visualDurationMs": 0.0015, + "visualStartMs": 8.974 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 8.9758, + "visualDurationMs": 0.0014, + "visualStartMs": 8.9758 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 8.9776, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9776 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 8.9793, + "visualDurationMs": 0.0014, + "visualStartMs": 8.9793 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 8.981, + "visualDurationMs": 0.0013, + "visualStartMs": 8.981 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 8.9827, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9827 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 8.9843, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9843 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 8.9859, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9859 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 8.9876, + "visualDurationMs": 0.0012, + "visualStartMs": 8.9876 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 8.9891, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9891 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 8.9907, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9907 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 8.9923, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9923 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 8.994, + "visualDurationMs": 0.0013, + "visualStartMs": 8.994 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 8.9956, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9956 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 8.9973, + "visualDurationMs": 0.0013, + "visualStartMs": 8.9973 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 8.999, + "visualDurationMs": 0.0013, + "visualStartMs": 8.999 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 9.0007, + "visualDurationMs": 0.0012, + "visualStartMs": 9.0007 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 9.0024, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0024 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 9.0041, + "visualDurationMs": 0.0012, + "visualStartMs": 9.0041 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 9.0058, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0058 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 9.0075, + "visualDurationMs": 0.0015, + "visualStartMs": 9.0075 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 9.0095, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0095 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 9.0112, + "visualDurationMs": 0.0012, + "visualStartMs": 9.0112 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 9.0128, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0128 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 9.0145, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0145 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 9.0161, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0161 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 9.0177, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0177 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 9.0194, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0194 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 9.0211, + "visualDurationMs": 0.0012, + "visualStartMs": 9.0211 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 9.0226, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0226 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 9.0243, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0243 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 9.026, + "visualDurationMs": 0.0013, + "visualStartMs": 9.026 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 9.028, + "visualDurationMs": 0.0013, + "visualStartMs": 9.028 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 9.0296, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0296 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 9.0312, + "visualDurationMs": 0.0007, + "visualStartMs": 9.0312 + } + ], + "durationMs": 0.2467, + "name": "Lighting", + "startMs": 8.7856, + "visualDurationMs": 0.2467, + "visualStartMs": 8.7856 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 9.0329, + "visualDurationMs": 0.0004, + "visualStartMs": 9.0329 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 9.0334, + "visualDurationMs": 0.0004, + "visualStartMs": 9.0334 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 9.0324, + "visualDurationMs": 0.0016, + "visualStartMs": 9.0324 + } + ], + "durationMs": 0.2531, + "name": "DrawSprite", + "startMs": 8.781, + "visualDurationMs": 0.2531, + "visualStartMs": 8.781 + } + ], + "durationMs": 0.2536, + "name": "Draw Sprite: Pebble_38", + "startMs": 8.7806, + "visualDurationMs": 0.2536, + "visualStartMs": 8.7806 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 9.0367, + "visualDurationMs": 0.0003, + "visualStartMs": 9.0367 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 9.0372, + "visualDurationMs": 0.0003, + "visualStartMs": 9.0372 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 9.0381, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0381 + }, + { + "durationMs": 0.0083, + "name": "TexSlot", + "startMs": 9.0396, + "visualDurationMs": 0.0083, + "visualStartMs": 9.0396 + } + ], + "durationMs": 0.0104, + "name": "SetUniforms", + "startMs": 9.0377, + "visualDurationMs": 0.0104, + "visualStartMs": 9.0377 + }, + { + "durationMs": 0.0006, + "name": "BindTex", + "startMs": 9.0483, + "visualDurationMs": 0.0006, + "visualStartMs": 9.0483 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 9.0495, + "visualDurationMs": 0.0012, + "visualStartMs": 9.0495 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 9.0508, + "visualDurationMs": 0.0016, + "visualStartMs": 9.0508 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 9.0528, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0528 + }, + { + "durationMs": 0.0016, + "name": "L1", + "startMs": 9.0545, + "visualDurationMs": 0.0016, + "visualStartMs": 9.0545 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 9.0564, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0564 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 9.0581, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0581 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 9.06, + "visualDurationMs": 0.0014, + "visualStartMs": 9.06 + }, + { + "durationMs": 0.0014, + "name": "L5", + "startMs": 9.0617, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0617 + }, + { + "durationMs": 0.0029, + "name": "L6", + "startMs": 9.0634, + "visualDurationMs": 0.0029, + "visualStartMs": 9.0634 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 9.0666, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0666 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 9.0684, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0684 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 9.0701, + "visualDurationMs": 0.0014, + "visualStartMs": 9.0701 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 9.0719, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0719 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 9.0735, + "visualDurationMs": 0.0015, + "visualStartMs": 9.0735 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 9.0754, + "visualDurationMs": 0.0013, + "visualStartMs": 9.0754 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 9.0771, + "visualDurationMs": 0.0015, + "visualStartMs": 9.0771 + }, + { + "durationMs": 0.0463, + "name": "L14", + "startMs": 9.0789, + "visualDurationMs": 0.0463, + "visualStartMs": 9.0789 + }, + { + "durationMs": 0.0018, + "name": "L15", + "startMs": 9.1257, + "visualDurationMs": 0.0018, + "visualStartMs": 9.1257 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 9.1279, + "visualDurationMs": 0.0015, + "visualStartMs": 9.1279 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 9.1297, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1297 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 9.1315, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1315 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 9.1332, + "visualDurationMs": 0.0015, + "visualStartMs": 9.1332 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 9.135, + "visualDurationMs": 0.0014, + "visualStartMs": 9.135 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 9.1367, + "visualDurationMs": 0.0016, + "visualStartMs": 9.1367 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 9.1387, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1387 + }, + { + "durationMs": 0.0022, + "name": "L23", + "startMs": 9.1405, + "visualDurationMs": 0.0022, + "visualStartMs": 9.1405 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 9.1431, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1431 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 9.1448, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1448 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 9.1465, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1465 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 9.1481, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1481 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 9.1497, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1497 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 9.1515, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1515 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 9.153, + "visualDurationMs": 0.0054, + "visualStartMs": 9.153 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 9.1588, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1588 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 9.1606, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1606 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 9.1621, + "visualDurationMs": 0.0015, + "visualStartMs": 9.1621 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 9.164, + "visualDurationMs": 0.0013, + "visualStartMs": 9.164 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 9.1657, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1657 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 9.1673, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1673 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 9.1689, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1689 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 9.1705, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1705 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 9.1721, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1721 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 9.1736, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1736 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 9.1753, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1753 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 9.1769, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1769 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 9.1787, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1787 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 9.1804, + "visualDurationMs": 0.0016, + "visualStartMs": 9.1804 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 9.1823, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1823 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 9.1841, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1841 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 9.1859, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1859 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 9.1876, + "visualDurationMs": 0.0015, + "visualStartMs": 9.1876 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 9.1895, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1895 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 9.1912, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1912 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 9.1929, + "visualDurationMs": 0.0015, + "visualStartMs": 9.1929 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 9.1948, + "visualDurationMs": 0.0012, + "visualStartMs": 9.1948 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 9.1963, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1963 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 9.1981, + "visualDurationMs": 0.0013, + "visualStartMs": 9.1981 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 9.1997, + "visualDurationMs": 0.0014, + "visualStartMs": 9.1997 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 9.2015, + "visualDurationMs": 0.0014, + "visualStartMs": 9.2015 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 9.2033, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2033 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 9.2049, + "visualDurationMs": 0.0015, + "visualStartMs": 9.2049 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 9.2068, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2068 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 9.2084, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2084 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 9.2101, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2101 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 9.2117, + "visualDurationMs": 0.0085, + "visualStartMs": 9.2117 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 9.2205, + "visualDurationMs": 0.0015, + "visualStartMs": 9.2205 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 9.2224, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2224 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 9.224, + "visualDurationMs": 0.0014, + "visualStartMs": 9.224 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 9.2257, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2257 + }, + { + "durationMs": 0.0012, + "name": "L67", + "startMs": 9.2274, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2274 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 9.229, + "visualDurationMs": 0.0012, + "visualStartMs": 9.229 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 9.2306, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2306 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 9.2323, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2323 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 9.2339, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2339 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 9.2357, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2357 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 9.2372, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2372 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 9.2388, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2388 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 9.2404, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2404 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 9.2419, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2419 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 9.2435, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2435 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 9.245, + "visualDurationMs": 0.0013, + "visualStartMs": 9.245 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 9.2466, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2466 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 9.2482, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2482 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 9.2498, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2498 + }, + { + "durationMs": 0.0011, + "name": "L82", + "startMs": 9.2515, + "visualDurationMs": 0.0011, + "visualStartMs": 9.2515 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 9.253, + "visualDurationMs": 0.0012, + "visualStartMs": 9.253 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 9.2545, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2545 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 9.2561, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2561 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 9.2577, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2577 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 9.2594, + "visualDurationMs": 0.0014, + "visualStartMs": 9.2594 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 9.2611, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2611 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 9.2627, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2627 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 9.2643, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2643 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 9.2659, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2659 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 9.2675, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2675 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 9.2691, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2691 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 9.2706, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2706 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 9.2722, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2722 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 9.2738, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2738 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 9.2754, + "visualDurationMs": 0.0015, + "visualStartMs": 9.2754 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 9.2773, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2773 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 9.2789, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2789 + }, + { + "durationMs": 0.0012, + "name": "BindNorm", + "startMs": 9.2802, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2802 + } + ], + "durationMs": 0.2331, + "name": "Lighting", + "startMs": 9.0491, + "visualDurationMs": 0.2331, + "visualStartMs": 9.0491 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 9.2828, + "visualDurationMs": 0.0006, + "visualStartMs": 9.2828 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 9.2835, + "visualDurationMs": 0.0006, + "visualStartMs": 9.2835 + } + ], + "durationMs": 0.002, + "name": "Draw", + "startMs": 9.2823, + "visualDurationMs": 0.002, + "visualStartMs": 9.2823 + } + ], + "durationMs": 0.2481, + "name": "DrawSprite", + "startMs": 9.0363, + "visualDurationMs": 0.2481, + "visualStartMs": 9.0363 + } + ], + "durationMs": 0.2487, + "name": "Draw Sprite: Pebble_39", + "startMs": 9.0359, + "visualDurationMs": 0.2487, + "visualStartMs": 9.0359 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 9.287, + "visualDurationMs": 0.0003, + "visualStartMs": 9.287 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 9.2874, + "visualDurationMs": 0.0007, + "visualStartMs": 9.2874 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 9.2886, + "visualDurationMs": 0.0014, + "visualStartMs": 9.2886 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 9.2902, + "visualDurationMs": 0.0005, + "visualStartMs": 9.2902 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 9.2883, + "visualDurationMs": 0.0025, + "visualStartMs": 9.2883 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 9.2909, + "visualDurationMs": 0.0004, + "visualStartMs": 9.2909 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 9.2918, + "visualDurationMs": 0.0009, + "visualStartMs": 9.2918 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 9.2929, + "visualDurationMs": 0.0014, + "visualStartMs": 9.2929 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 9.2946, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2946 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 9.2963, + "visualDurationMs": 0.0012, + "visualStartMs": 9.2963 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 9.2979, + "visualDurationMs": 0.0015, + "visualStartMs": 9.2979 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 9.2997, + "visualDurationMs": 0.0013, + "visualStartMs": 9.2997 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 9.3014, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3014 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 9.303, + "visualDurationMs": 0.0012, + "visualStartMs": 9.303 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 9.3045, + "visualDurationMs": 0.0027, + "visualStartMs": 9.3045 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 9.3075, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3075 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 9.3091, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3091 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 9.3107, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3107 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 9.3123, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3123 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 9.3139, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3139 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 9.3156, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3156 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 9.3174, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3174 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 9.3191, + "visualDurationMs": 0.0035, + "visualStartMs": 9.3191 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 9.3231, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3231 + }, + { + "durationMs": 0.0026, + "name": "L16", + "startMs": 9.3249, + "visualDurationMs": 0.0026, + "visualStartMs": 9.3249 + }, + { + "durationMs": 0.0017, + "name": "L17", + "startMs": 9.3279, + "visualDurationMs": 0.0017, + "visualStartMs": 9.3279 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 9.3299, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3299 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 9.3317, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3317 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 9.3336, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3336 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 9.3352, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3352 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 9.3371, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3371 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 9.3389, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3389 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 9.3406, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3406 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 9.3425, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3425 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 9.3441, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3441 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 9.3456, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3456 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 9.3472, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3472 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 9.3489, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3489 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 9.3505, + "visualDurationMs": 0.0051, + "visualStartMs": 9.3505 + }, + { + "durationMs": 0.0018, + "name": "L31", + "startMs": 9.3559, + "visualDurationMs": 0.0018, + "visualStartMs": 9.3559 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 9.3581, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3581 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 9.3598, + "visualDurationMs": 0.0015, + "visualStartMs": 9.3598 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 9.3616, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3616 + }, + { + "durationMs": 0.0055, + "name": "L35", + "startMs": 9.3633, + "visualDurationMs": 0.0055, + "visualStartMs": 9.3633 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 9.3692, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3692 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 9.371, + "visualDurationMs": 0.0013, + "visualStartMs": 9.371 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 9.3726, + "visualDurationMs": 0.0012, + "visualStartMs": 9.3726 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 9.3742, + "visualDurationMs": 0.0013, + "visualStartMs": 9.3742 + }, + { + "durationMs": 0.0146, + "name": "L40", + "startMs": 9.3758, + "visualDurationMs": 0.0146, + "visualStartMs": 9.3758 + }, + { + "durationMs": 0.0019, + "name": "L41", + "startMs": 9.3909, + "visualDurationMs": 0.0019, + "visualStartMs": 9.3909 + }, + { + "durationMs": 0.0016, + "name": "L42", + "startMs": 9.3932, + "visualDurationMs": 0.0016, + "visualStartMs": 9.3932 + }, + { + "durationMs": 0.0017, + "name": "L43", + "startMs": 9.3952, + "visualDurationMs": 0.0017, + "visualStartMs": 9.3952 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 9.3972, + "visualDurationMs": 0.0016, + "visualStartMs": 9.3972 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 9.3991, + "visualDurationMs": 0.0014, + "visualStartMs": 9.3991 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 9.4008, + "visualDurationMs": 0.0016, + "visualStartMs": 9.4008 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 9.4027, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4027 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 9.4044, + "visualDurationMs": 0.0016, + "visualStartMs": 9.4044 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 9.4063, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4063 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 9.4081, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4081 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 9.4098, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4098 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 9.4115, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4115 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 9.4131, + "visualDurationMs": 0.0015, + "visualStartMs": 9.4131 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 9.4149, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4149 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 9.4166, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4166 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 9.4182, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4182 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 9.42, + "visualDurationMs": 0.0012, + "visualStartMs": 9.42 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 9.4216, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4216 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 9.4233, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4233 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 9.4249, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4249 + }, + { + "durationMs": 0.0016, + "name": "L61", + "startMs": 9.4266, + "visualDurationMs": 0.0016, + "visualStartMs": 9.4266 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 9.4286, + "visualDurationMs": 0.0088, + "visualStartMs": 9.4286 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 9.4378, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4378 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 9.4395, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4395 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 9.4412, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4412 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 9.443, + "visualDurationMs": 0.0013, + "visualStartMs": 9.443 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 9.4446, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4446 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 9.4463, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4463 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 9.4479, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4479 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 9.4495, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4495 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 9.4511, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4511 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 9.4528, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4528 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 9.4544, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4544 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 9.4561, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4561 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 9.4576, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4576 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 9.4591, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4591 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 9.4608, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4608 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 9.4624, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4624 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 9.4639, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4639 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 9.4656, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4656 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 9.4672, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4672 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 9.4687, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4687 + }, + { + "durationMs": 0.0011, + "name": "L83", + "startMs": 9.4703, + "visualDurationMs": 0.0011, + "visualStartMs": 9.4703 + }, + { + "durationMs": 0.0015, + "name": "L84", + "startMs": 9.4718, + "visualDurationMs": 0.0015, + "visualStartMs": 9.4718 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 9.4736, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4736 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 9.4752, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4752 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 9.4769, + "visualDurationMs": 0.0014, + "visualStartMs": 9.4769 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 9.4786, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4786 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 9.4802, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4802 + }, + { + "durationMs": 0.0011, + "name": "L90", + "startMs": 9.4818, + "visualDurationMs": 0.0011, + "visualStartMs": 9.4818 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 9.4833, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4833 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 9.4849, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4849 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 9.4864, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4864 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 9.4881, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4881 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 9.4896, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4896 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 9.4911, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4911 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 9.4927, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4927 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 9.4943, + "visualDurationMs": 0.0012, + "visualStartMs": 9.4943 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 9.4958, + "visualDurationMs": 0.0013, + "visualStartMs": 9.4958 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 9.4972, + "visualDurationMs": 0.0007, + "visualStartMs": 9.4972 + } + ], + "durationMs": 0.2068, + "name": "Lighting", + "startMs": 9.2915, + "visualDurationMs": 0.2068, + "visualStartMs": 9.2915 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 9.4988, + "visualDurationMs": 0.0004, + "visualStartMs": 9.4988 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 9.4994, + "visualDurationMs": 0.0005, + "visualStartMs": 9.4994 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 9.4984, + "visualDurationMs": 0.0017, + "visualStartMs": 9.4984 + } + ], + "durationMs": 0.2139, + "name": "DrawSprite", + "startMs": 9.2863, + "visualDurationMs": 0.2139, + "visualStartMs": 9.2863 + } + ], + "durationMs": 0.2145, + "name": "Draw Sprite: Pebble_33", + "startMs": 9.2858, + "visualDurationMs": 0.2145, + "visualStartMs": 9.2858 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 9.5086, + "visualDurationMs": 0.0003, + "visualStartMs": 9.5086 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 9.5091, + "visualDurationMs": 0.0004, + "visualStartMs": 9.5091 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 9.5101, + "visualDurationMs": 0.0013, + "visualStartMs": 9.5101 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 9.5115, + "visualDurationMs": 0.0006, + "visualStartMs": 9.5115 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 9.5097, + "visualDurationMs": 0.0025, + "visualStartMs": 9.5097 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 9.5124, + "visualDurationMs": 0.0004, + "visualStartMs": 9.5124 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 9.5133, + "visualDurationMs": 0.0009, + "visualStartMs": 9.5133 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 9.5144, + "visualDurationMs": 0.0014, + "visualStartMs": 9.5144 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 9.5162, + "visualDurationMs": 0.0012, + "visualStartMs": 9.5162 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 9.5177, + "visualDurationMs": 0.0013, + "visualStartMs": 9.5177 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 9.5194, + "visualDurationMs": 0.0012, + "visualStartMs": 9.5194 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 9.521, + "visualDurationMs": 0.0013, + "visualStartMs": 9.521 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 9.5226, + "visualDurationMs": 0.0012, + "visualStartMs": 9.5226 + }, + { + "durationMs": 0.068, + "name": "L5", + "startMs": 9.5242, + "visualDurationMs": 0.068, + "visualStartMs": 9.5242 + }, + { + "durationMs": 0.0031, + "name": "L6", + "startMs": 9.5927, + "visualDurationMs": 0.0031, + "visualStartMs": 9.5927 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 9.5961, + "visualDurationMs": 0.0014, + "visualStartMs": 9.5961 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 9.5978, + "visualDurationMs": 0.0014, + "visualStartMs": 9.5978 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 9.5996, + "visualDurationMs": 0.0013, + "visualStartMs": 9.5996 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 9.6013, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6013 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 9.603, + "visualDurationMs": 0.0014, + "visualStartMs": 9.603 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 9.6047, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6047 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 9.6065, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6065 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 9.6082, + "visualDurationMs": 0.0033, + "visualStartMs": 9.6082 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 9.6119, + "visualDurationMs": 0.0016, + "visualStartMs": 9.6119 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 9.6139, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6139 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 9.6156, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6156 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 9.6174, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6174 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 9.6191, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6191 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 9.6209, + "visualDurationMs": 0.0012, + "visualStartMs": 9.6209 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 9.6225, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6225 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 9.6242, + "visualDurationMs": 0.0015, + "visualStartMs": 9.6242 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 9.626, + "visualDurationMs": 0.0013, + "visualStartMs": 9.626 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 9.6277, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6277 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 9.6294, + "visualDurationMs": 0.0012, + "visualStartMs": 9.6294 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 9.6309, + "visualDurationMs": 0.0012, + "visualStartMs": 9.6309 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 9.6325, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6325 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 9.6341, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6341 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 9.6358, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6358 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 9.6374, + "visualDurationMs": 0.005, + "visualStartMs": 9.6374 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 9.6427, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6427 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 9.6445, + "visualDurationMs": 0.0012, + "visualStartMs": 9.6445 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 9.6461, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6461 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 9.6479, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6479 + }, + { + "durationMs": 0.0051, + "name": "L35", + "startMs": 9.6495, + "visualDurationMs": 0.0051, + "visualStartMs": 9.6495 + }, + { + "durationMs": 0.0017, + "name": "L36", + "startMs": 9.6551, + "visualDurationMs": 0.0017, + "visualStartMs": 9.6551 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 9.6572, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6572 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 9.659, + "visualDurationMs": 0.0012, + "visualStartMs": 9.659 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 9.6606, + "visualDurationMs": 0.0015, + "visualStartMs": 9.6606 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 9.6625, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6625 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 9.6643, + "visualDurationMs": 0.0013, + "visualStartMs": 9.6643 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 9.666, + "visualDurationMs": 0.0013, + "visualStartMs": 9.666 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 9.6677, + "visualDurationMs": 0.0016, + "visualStartMs": 9.6677 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 9.6696, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6696 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 9.6714, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6714 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 9.6732, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6732 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 9.6749, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6749 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 9.6766, + "visualDurationMs": 0.0016, + "visualStartMs": 9.6766 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 9.6785, + "visualDurationMs": 0.0015, + "visualStartMs": 9.6785 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 9.6803, + "visualDurationMs": 0.0015, + "visualStartMs": 9.6803 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 9.6821, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6821 + }, + { + "durationMs": 0.0015, + "name": "L52", + "startMs": 9.6838, + "visualDurationMs": 0.0015, + "visualStartMs": 9.6838 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 9.6856, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6856 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 9.6873, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6873 + }, + { + "durationMs": 0.0015, + "name": "L55", + "startMs": 9.689, + "visualDurationMs": 0.0015, + "visualStartMs": 9.689 + }, + { + "durationMs": 0.0012, + "name": "L56", + "startMs": 9.6909, + "visualDurationMs": 0.0012, + "visualStartMs": 9.6909 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 9.6925, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6925 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 9.6942, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6942 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 9.696, + "visualDurationMs": 0.0013, + "visualStartMs": 9.696 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 9.6976, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6976 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 9.6993, + "visualDurationMs": 0.0014, + "visualStartMs": 9.6993 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 9.701, + "visualDurationMs": 0.0085, + "visualStartMs": 9.701 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 9.7099, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7099 + }, + { + "durationMs": 0.0016, + "name": "L64", + "startMs": 9.7115, + "visualDurationMs": 0.0016, + "visualStartMs": 9.7115 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 9.7134, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7134 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 9.7153, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7153 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 9.7171, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7171 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 9.7189, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7189 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 9.7205, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7205 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 9.7223, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7223 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 9.7241, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7241 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 9.7258, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7258 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 9.7274, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7274 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 9.7292, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7292 + }, + { + "durationMs": 0.0015, + "name": "L75", + "startMs": 9.7308, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7308 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 9.7326, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7326 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 9.7344, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7344 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 9.7361, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7361 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 9.7377, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7377 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 9.7395, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7395 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 9.7411, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7411 + }, + { + "durationMs": 0.0015, + "name": "L82", + "startMs": 9.7427, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7427 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 9.7445, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7445 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 9.7461, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7461 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 9.7477, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7477 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 9.7495, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7495 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 9.7511, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7511 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 9.7527, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7527 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 9.7542, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7542 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 9.7559, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7559 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 9.7575, + "visualDurationMs": 0.0015, + "visualStartMs": 9.7575 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 9.7594, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7594 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 9.761, + "visualDurationMs": 0.0013, + "visualStartMs": 9.761 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 9.7626, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7626 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 9.7643, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7643 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 9.7658, + "visualDurationMs": 0.0014, + "visualStartMs": 9.7658 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 9.7675, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7675 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 9.7691, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7691 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 9.7708, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7708 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 9.7722, + "visualDurationMs": 0.0007, + "visualStartMs": 9.7722 + } + ], + "durationMs": 0.2604, + "name": "Lighting", + "startMs": 9.5129, + "visualDurationMs": 0.2604, + "visualStartMs": 9.5129 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 9.7738, + "visualDurationMs": 0.0004, + "visualStartMs": 9.7738 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 9.7744, + "visualDurationMs": 0.0005, + "visualStartMs": 9.7744 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 9.7734, + "visualDurationMs": 0.0016, + "visualStartMs": 9.7734 + } + ], + "durationMs": 0.2669, + "name": "DrawSprite", + "startMs": 9.5082, + "visualDurationMs": 0.2669, + "visualStartMs": 9.5082 + } + ], + "durationMs": 0.2675, + "name": "Draw Sprite: Pebble_49", + "startMs": 9.5077, + "visualDurationMs": 0.2675, + "visualStartMs": 9.5077 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 9.7772, + "visualDurationMs": 0.0003, + "visualStartMs": 9.7772 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 9.7776, + "visualDurationMs": 0.0005, + "visualStartMs": 9.7776 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 9.7787, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7787 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 9.7801, + "visualDurationMs": 0.0006, + "visualStartMs": 9.7801 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 9.7783, + "visualDurationMs": 0.0025, + "visualStartMs": 9.7783 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 9.7809, + "visualDurationMs": 0.0005, + "visualStartMs": 9.7809 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 9.7818, + "visualDurationMs": 0.001, + "visualStartMs": 9.7818 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 9.783, + "visualDurationMs": 0.0014, + "visualStartMs": 9.783 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 9.7847, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7847 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 9.7863, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7863 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 9.7879, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7879 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 9.7895, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7895 + }, + { + "durationMs": 0.0011, + "name": "L4", + "startMs": 9.7912, + "visualDurationMs": 0.0011, + "visualStartMs": 9.7912 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 9.7927, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7927 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 9.7943, + "visualDurationMs": 0.0027, + "visualStartMs": 9.7943 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 9.7973, + "visualDurationMs": 0.0012, + "visualStartMs": 9.7973 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 9.7988, + "visualDurationMs": 0.0013, + "visualStartMs": 9.7988 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 9.8004, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8004 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 9.8021, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8021 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 9.8038, + "visualDurationMs": 0.0015, + "visualStartMs": 9.8038 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 9.8056, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8056 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 9.8074, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8074 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 9.8091, + "visualDurationMs": 0.0035, + "visualStartMs": 9.8091 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 9.813, + "visualDurationMs": 0.0015, + "visualStartMs": 9.813 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 9.8148, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8148 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 9.8165, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8165 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 9.8182, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8182 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 9.8199, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8199 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 9.8216, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8216 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 9.8232, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8232 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 9.8249, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8249 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 9.8266, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8266 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 9.8283, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8283 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 9.8299, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8299 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 9.8315, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8315 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 9.8331, + "visualDurationMs": 0.0012, + "visualStartMs": 9.8331 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 9.8346, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8346 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 9.8363, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8363 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 9.8379, + "visualDurationMs": 0.005, + "visualStartMs": 9.8379 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 9.8433, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8433 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 9.845, + "visualDurationMs": 0.0013, + "visualStartMs": 9.845 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 9.8466, + "visualDurationMs": 0.0016, + "visualStartMs": 9.8466 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 9.8485, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8485 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 9.8502, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8502 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 9.8519, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8519 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 9.8535, + "visualDurationMs": 0.0012, + "visualStartMs": 9.8535 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 9.855, + "visualDurationMs": 0.0014, + "visualStartMs": 9.855 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 9.8567, + "visualDurationMs": 0.0012, + "visualStartMs": 9.8567 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 9.8582, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8582 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 9.8599, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8599 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 9.8615, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8615 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 9.8631, + "visualDurationMs": 0.0015, + "visualStartMs": 9.8631 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 9.8649, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8649 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 9.8667, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8667 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 9.8684, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8684 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 9.8702, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8702 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 9.8718, + "visualDurationMs": 0.0015, + "visualStartMs": 9.8718 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 9.8737, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8737 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 9.8754, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8754 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 9.8772, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8772 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 9.8789, + "visualDurationMs": 0.0012, + "visualStartMs": 9.8789 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 9.8805, + "visualDurationMs": 0.0013, + "visualStartMs": 9.8805 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 9.8821, + "visualDurationMs": 0.0015, + "visualStartMs": 9.8821 + }, + { + "durationMs": 0.0054, + "name": "L55", + "startMs": 9.8839, + "visualDurationMs": 0.0054, + "visualStartMs": 9.8839 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 9.8897, + "visualDurationMs": 0.0016, + "visualStartMs": 9.8897 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 9.8916, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8916 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 9.8933, + "visualDurationMs": 0.0016, + "visualStartMs": 9.8933 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 9.8952, + "visualDurationMs": 0.0014, + "visualStartMs": 9.8952 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 9.897, + "visualDurationMs": 0.0015, + "visualStartMs": 9.897 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 9.8988, + "visualDurationMs": 0.0015, + "visualStartMs": 9.8988 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 9.9007, + "visualDurationMs": 0.0086, + "visualStartMs": 9.9007 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 9.9097, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9097 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 9.9114, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9114 + }, + { + "durationMs": 0.0016, + "name": "L65", + "startMs": 9.9131, + "visualDurationMs": 0.0016, + "visualStartMs": 9.9131 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 9.9151, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9151 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 9.9168, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9168 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 9.9186, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9186 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 9.9202, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9202 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 9.9219, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9219 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 9.9235, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9235 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 9.9252, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9252 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 9.9269, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9269 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 9.9286, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9286 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 9.9303, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9303 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 9.9319, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9319 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 9.9336, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9336 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 9.9352, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9352 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 9.9369, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9369 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 9.9386, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9386 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 9.9402, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9402 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 9.942, + "visualDurationMs": 0.0012, + "visualStartMs": 9.942 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 9.9436, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9436 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 9.9452, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9452 + }, + { + "durationMs": 0.0017, + "name": "L85", + "startMs": 9.9467, + "visualDurationMs": 0.0017, + "visualStartMs": 9.9467 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 9.9487, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9487 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 9.9504, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9504 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 9.952, + "visualDurationMs": 0.0014, + "visualStartMs": 9.952 + }, + { + "durationMs": 0.0016, + "name": "L89", + "startMs": 9.9537, + "visualDurationMs": 0.0016, + "visualStartMs": 9.9537 + }, + { + "durationMs": 0.0015, + "name": "L90", + "startMs": 9.9556, + "visualDurationMs": 0.0015, + "visualStartMs": 9.9556 + }, + { + "durationMs": 0.0017, + "name": "L91", + "startMs": 9.9574, + "visualDurationMs": 0.0017, + "visualStartMs": 9.9574 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 9.9594, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9594 + }, + { + "durationMs": 0.0016, + "name": "L93", + "startMs": 9.961, + "visualDurationMs": 0.0016, + "visualStartMs": 9.961 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 9.963, + "visualDurationMs": 0.0014, + "visualStartMs": 9.963 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 9.9648, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9648 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 9.9664, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9664 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 9.9681, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9681 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 9.9697, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9697 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 9.9714, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9714 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 9.9729, + "visualDurationMs": 0.0007, + "visualStartMs": 9.9729 + } + ], + "durationMs": 0.1926, + "name": "Lighting", + "startMs": 9.7815, + "visualDurationMs": 0.1926, + "visualStartMs": 9.7815 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 9.9746, + "visualDurationMs": 0.0004, + "visualStartMs": 9.9746 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 9.9751, + "visualDurationMs": 0.0004, + "visualStartMs": 9.9751 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 9.9742, + "visualDurationMs": 0.0015, + "visualStartMs": 9.9742 + } + ], + "durationMs": 0.199, + "name": "DrawSprite", + "startMs": 9.7768, + "visualDurationMs": 0.199, + "visualStartMs": 9.7768 + } + ], + "durationMs": 0.1996, + "name": "Draw Sprite: Pebble_43", + "startMs": 9.7763, + "visualDurationMs": 0.1996, + "visualStartMs": 9.7763 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 9.9778, + "visualDurationMs": 0.0003, + "visualStartMs": 9.9778 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 9.9783, + "visualDurationMs": 0.0004, + "visualStartMs": 9.9783 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 9.9793, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9793 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 9.9807, + "visualDurationMs": 0.0005, + "visualStartMs": 9.9807 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 9.9789, + "visualDurationMs": 0.0024, + "visualStartMs": 9.9789 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 9.9815, + "visualDurationMs": 0.0003, + "visualStartMs": 9.9815 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 9.9823, + "visualDurationMs": 0.0009, + "visualStartMs": 9.9823 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 9.9833, + "visualDurationMs": 0.0015, + "visualStartMs": 9.9833 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 9.9852, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9852 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 9.9869, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9869 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 9.9885, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9885 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 9.9901, + "visualDurationMs": 0.0014, + "visualStartMs": 9.9901 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 9.9918, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9918 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 9.9934, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9934 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 9.9949, + "visualDurationMs": 0.0025, + "visualStartMs": 9.9949 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 9.9978, + "visualDurationMs": 0.0013, + "visualStartMs": 9.9978 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 9.9994, + "visualDurationMs": 0.0012, + "visualStartMs": 9.9994 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 10.001, + "visualDurationMs": 0.0012, + "visualStartMs": 10.001 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 10.0026, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0026 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 10.0042, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0042 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 10.006, + "visualDurationMs": 0.0014, + "visualStartMs": 10.006 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 10.0077, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0077 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 10.0094, + "visualDurationMs": 0.0035, + "visualStartMs": 10.0094 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 10.0133, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0133 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 10.015, + "visualDurationMs": 0.0014, + "visualStartMs": 10.015 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 10.0167, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0167 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 10.0184, + "visualDurationMs": 0.0016, + "visualStartMs": 10.0184 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 10.0204, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0204 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 10.0221, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0221 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 10.0237, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0237 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 10.0254, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0254 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 10.0271, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0271 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 10.0287, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0287 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 10.0303, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0303 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 10.032, + "visualDurationMs": 0.0012, + "visualStartMs": 10.032 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 10.0336, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0336 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 10.0353, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0353 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 10.037, + "visualDurationMs": 0.0013, + "visualStartMs": 10.037 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 10.0386, + "visualDurationMs": 0.005, + "visualStartMs": 10.0386 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 10.0439, + "visualDurationMs": 0.0016, + "visualStartMs": 10.0439 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 10.0458, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0458 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 10.0474, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0474 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 10.0491, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0491 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 10.0508, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0508 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 10.0525, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0525 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 10.0542, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0542 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 10.0558, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0558 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 10.0574, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0574 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 10.0589, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0589 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 10.0607, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0607 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 10.0623, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0623 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 10.0639, + "visualDurationMs": 0.0015, + "visualStartMs": 10.0639 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 10.0657, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0657 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 10.0674, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0674 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 10.0691, + "visualDurationMs": 0.0015, + "visualStartMs": 10.0691 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 10.071, + "visualDurationMs": 0.0013, + "visualStartMs": 10.071 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 10.0726, + "visualDurationMs": 0.0015, + "visualStartMs": 10.0726 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 10.0745, + "visualDurationMs": 0.0016, + "visualStartMs": 10.0745 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 10.0765, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0765 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 10.0783, + "visualDurationMs": 0.0015, + "visualStartMs": 10.0783 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 10.0802, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0802 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 10.0818, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0818 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 10.0834, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0834 + }, + { + "durationMs": 0.0012, + "name": "L55", + "startMs": 10.0851, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0851 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 10.0867, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0867 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 10.0883, + "visualDurationMs": 0.0012, + "visualStartMs": 10.0883 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 10.0899, + "visualDurationMs": 0.0014, + "visualStartMs": 10.0899 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 10.0917, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0917 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 10.0933, + "visualDurationMs": 0.0013, + "visualStartMs": 10.0933 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 10.095, + "visualDurationMs": 0.0013, + "visualStartMs": 10.095 + }, + { + "durationMs": 0.0121, + "name": "L62", + "startMs": 10.0966, + "visualDurationMs": 0.0121, + "visualStartMs": 10.0966 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 10.1091, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1091 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 10.1108, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1108 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 10.1125, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1125 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 10.1143, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1143 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 10.1159, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1159 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 10.1175, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1175 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 10.1192, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1192 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 10.1208, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1208 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 10.1226, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1226 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 10.1241, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1241 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 10.1257, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1257 + }, + { + "durationMs": 0.005, + "name": "L74", + "startMs": 10.1274, + "visualDurationMs": 0.005, + "visualStartMs": 10.1274 + }, + { + "durationMs": 0.0015, + "name": "L75", + "startMs": 10.1328, + "visualDurationMs": 0.0015, + "visualStartMs": 10.1328 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 10.1347, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1347 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 10.1365, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1365 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 10.1382, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1382 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 10.14, + "visualDurationMs": 0.0015, + "visualStartMs": 10.14 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 10.1418, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1418 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 10.1435, + "visualDurationMs": 0.0015, + "visualStartMs": 10.1435 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 10.1454, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1454 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 10.1471, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1471 + }, + { + "durationMs": 0.0015, + "name": "L84", + "startMs": 10.1489, + "visualDurationMs": 0.0015, + "visualStartMs": 10.1489 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 10.1507, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1507 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 10.1523, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1523 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 10.1541, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1541 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 10.1558, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1558 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 10.1574, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1574 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 10.1592, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1592 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 10.1608, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1608 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 10.1625, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1625 + }, + { + "durationMs": 0.0015, + "name": "L93", + "startMs": 10.1642, + "visualDurationMs": 0.0015, + "visualStartMs": 10.1642 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 10.166, + "visualDurationMs": 0.0013, + "visualStartMs": 10.166 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 10.1676, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1676 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 10.1692, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1692 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 10.1709, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1709 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 10.1725, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1725 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 10.1741, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1741 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 10.1757, + "visualDurationMs": 0.0007, + "visualStartMs": 10.1757 + } + ], + "durationMs": 0.195, + "name": "Lighting", + "startMs": 9.9819, + "visualDurationMs": 0.195, + "visualStartMs": 9.9819 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 10.1774, + "visualDurationMs": 0.0004, + "visualStartMs": 10.1774 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 10.178, + "visualDurationMs": 0.0004, + "visualStartMs": 10.178 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 10.177, + "visualDurationMs": 0.0015, + "visualStartMs": 10.177 + } + ], + "durationMs": 0.2013, + "name": "DrawSprite", + "startMs": 9.9774, + "visualDurationMs": 0.2013, + "visualStartMs": 9.9774 + } + ], + "durationMs": 0.202, + "name": "Draw Sprite: Pebble_48", + "startMs": 9.9769, + "visualDurationMs": 0.202, + "visualStartMs": 9.9769 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 10.1803, + "visualDurationMs": 0.0003, + "visualStartMs": 10.1803 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 10.1807, + "visualDurationMs": 0.0004, + "visualStartMs": 10.1807 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 10.1817, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1817 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 10.1832, + "visualDurationMs": 0.0005, + "visualStartMs": 10.1832 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 10.1814, + "visualDurationMs": 0.0024, + "visualStartMs": 10.1814 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 10.1839, + "visualDurationMs": 0.0004, + "visualStartMs": 10.1839 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 10.1848, + "visualDurationMs": 0.0009, + "visualStartMs": 10.1848 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 10.1858, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1858 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 10.1875, + "visualDurationMs": 0.0013, + "visualStartMs": 10.1875 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 10.1891, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1891 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 10.1909, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1909 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 10.1925, + "visualDurationMs": 0.0014, + "visualStartMs": 10.1925 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 10.1943, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1943 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 10.1958, + "visualDurationMs": 0.0012, + "visualStartMs": 10.1958 + }, + { + "durationMs": 0.0029, + "name": "L6", + "startMs": 10.1974, + "visualDurationMs": 0.0029, + "visualStartMs": 10.1974 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 10.2007, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2007 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 10.2023, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2023 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 10.2039, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2039 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 10.2056, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2056 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 10.2072, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2072 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 10.209, + "visualDurationMs": 0.0015, + "visualStartMs": 10.209 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 10.2108, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2108 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 10.2124, + "visualDurationMs": 0.0036, + "visualStartMs": 10.2124 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 10.2164, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2164 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 10.2183, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2183 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 10.2202, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2202 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 10.222, + "visualDurationMs": 0.0013, + "visualStartMs": 10.222 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 10.2237, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2237 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 10.2254, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2254 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 10.227, + "visualDurationMs": 0.0016, + "visualStartMs": 10.227 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 10.2289, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2289 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 10.2306, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2306 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 10.2323, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2323 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 10.2339, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2339 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 10.2356, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2356 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 10.2372, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2372 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 10.2389, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2389 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 10.2405, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2405 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 10.2422, + "visualDurationMs": 0.0052, + "visualStartMs": 10.2422 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 10.2478, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2478 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 10.2497, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2497 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 10.2514, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2514 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 10.2531, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2531 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 10.2549, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2549 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 10.2565, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2565 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 10.2583, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2583 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 10.26, + "visualDurationMs": 0.0013, + "visualStartMs": 10.26 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 10.2616, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2616 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 10.2632, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2632 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 10.2649, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2649 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 10.2665, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2665 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 10.2681, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2681 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 10.2698, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2698 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 10.2716, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2716 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 10.2733, + "visualDurationMs": 0.0016, + "visualStartMs": 10.2733 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 10.2752, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2752 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 10.2769, + "visualDurationMs": 0.0015, + "visualStartMs": 10.2769 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 10.2788, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2788 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 10.2805, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2805 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 10.2822, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2822 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 10.2839, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2839 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 10.2855, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2855 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 10.2871, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2871 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 10.2888, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2888 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 10.2904, + "visualDurationMs": 0.0014, + "visualStartMs": 10.2904 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 10.2921, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2921 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 10.2937, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2937 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 10.2954, + "visualDurationMs": 0.0012, + "visualStartMs": 10.2954 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 10.297, + "visualDurationMs": 0.0013, + "visualStartMs": 10.297 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 10.2987, + "visualDurationMs": 0.0013, + "visualStartMs": 10.2987 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 10.3004, + "visualDurationMs": 0.0087, + "visualStartMs": 10.3004 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 10.3094, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3094 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 10.311, + "visualDurationMs": 0.0014, + "visualStartMs": 10.311 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 10.3127, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3127 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 10.3144, + "visualDurationMs": 0.0016, + "visualStartMs": 10.3144 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 10.3163, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3163 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 10.318, + "visualDurationMs": 0.0012, + "visualStartMs": 10.318 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 10.3195, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3195 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 10.3211, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3211 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 10.3227, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3227 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 10.3243, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3243 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 10.3258, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3258 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 10.3273, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3273 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 10.3289, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3289 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 10.3304, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3304 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 10.3322, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3322 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 10.3338, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3338 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 10.3355, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3355 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 10.3372, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3372 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 10.3388, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3388 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 10.3403, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3403 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 10.342, + "visualDurationMs": 0.0012, + "visualStartMs": 10.342 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 10.3435, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3435 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 10.3451, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3451 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 10.3467, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3467 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 10.3483, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3483 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 10.3499, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3499 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 10.3515, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3515 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 10.3531, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3531 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 10.3547, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3547 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 10.3564, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3564 + }, + { + "durationMs": 0.0049, + "name": "L93", + "startMs": 10.358, + "visualDurationMs": 0.0049, + "visualStartMs": 10.358 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 10.3634, + "visualDurationMs": 0.0015, + "visualStartMs": 10.3634 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 10.3653, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3653 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 10.3669, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3669 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 10.3686, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3686 + }, + { + "durationMs": 0.0016, + "name": "L98", + "startMs": 10.3704, + "visualDurationMs": 0.0016, + "visualStartMs": 10.3704 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 10.3723, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3723 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 10.3738, + "visualDurationMs": 0.0008, + "visualStartMs": 10.3738 + } + ], + "durationMs": 0.1906, + "name": "Lighting", + "startMs": 10.1844, + "visualDurationMs": 0.1906, + "visualStartMs": 10.1844 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 10.3755, + "visualDurationMs": 0.0005, + "visualStartMs": 10.3755 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 10.3761, + "visualDurationMs": 0.0005, + "visualStartMs": 10.3761 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 10.3751, + "visualDurationMs": 0.0017, + "visualStartMs": 10.3751 + } + ], + "durationMs": 0.1969, + "name": "DrawSprite", + "startMs": 10.18, + "visualDurationMs": 0.1969, + "visualStartMs": 10.18 + } + ], + "durationMs": 0.1974, + "name": "Draw Sprite: Pebble_47", + "startMs": 10.1796, + "visualDurationMs": 0.1974, + "visualStartMs": 10.1796 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 10.3791, + "visualDurationMs": 0.0003, + "visualStartMs": 10.3791 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 10.3796, + "visualDurationMs": 0.0004, + "visualStartMs": 10.3796 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 10.3805, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3805 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 10.382, + "visualDurationMs": 0.0005, + "visualStartMs": 10.382 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 10.3802, + "visualDurationMs": 0.0024, + "visualStartMs": 10.3802 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 10.3827, + "visualDurationMs": 0.0004, + "visualStartMs": 10.3827 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 10.3836, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3836 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 10.3849, + "visualDurationMs": 0.0014, + "visualStartMs": 10.3849 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 10.3867, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3867 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 10.3882, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3882 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 10.3899, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3899 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 10.3916, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3916 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 10.3932, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3932 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 10.3948, + "visualDurationMs": 0.0012, + "visualStartMs": 10.3948 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 10.3964, + "visualDurationMs": 0.0027, + "visualStartMs": 10.3964 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 10.3995, + "visualDurationMs": 0.0013, + "visualStartMs": 10.3995 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 10.4011, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4011 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 10.4028, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4028 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 10.4044, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4044 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 10.4061, + "visualDurationMs": 0.0015, + "visualStartMs": 10.4061 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 10.408, + "visualDurationMs": 0.0014, + "visualStartMs": 10.408 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 10.4098, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4098 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 10.4115, + "visualDurationMs": 0.0033, + "visualStartMs": 10.4115 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 10.4152, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4152 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 10.417, + "visualDurationMs": 0.0015, + "visualStartMs": 10.417 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 10.4189, + "visualDurationMs": 0.0015, + "visualStartMs": 10.4189 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 10.4207, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4207 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 10.4225, + "visualDurationMs": 0.0015, + "visualStartMs": 10.4225 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 10.4243, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4243 + }, + { + "durationMs": 0.0017, + "name": "L21", + "startMs": 10.426, + "visualDurationMs": 0.0017, + "visualStartMs": 10.426 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 10.4281, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4281 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 10.4299, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4299 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 10.4315, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4315 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 10.4332, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4332 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 10.4348, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4348 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 10.4366, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4366 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 10.4382, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4382 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 10.4398, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4398 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 10.4414, + "visualDurationMs": 0.0051, + "visualStartMs": 10.4414 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 10.4468, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4468 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 10.4486, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4486 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 10.4502, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4502 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 10.4519, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4519 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 10.4537, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4537 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 10.4553, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4553 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 10.4569, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4569 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 10.4586, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4586 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 10.4602, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4602 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 10.4617, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4617 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 10.4635, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4635 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 10.4651, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4651 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 10.4667, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4667 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 10.4684, + "visualDurationMs": 0.0015, + "visualStartMs": 10.4684 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 10.4702, + "visualDurationMs": 0.0015, + "visualStartMs": 10.4702 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 10.472, + "visualDurationMs": 0.0014, + "visualStartMs": 10.472 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 10.4738, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4738 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 10.4755, + "visualDurationMs": 0.0016, + "visualStartMs": 10.4755 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 10.4774, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4774 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 10.4792, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4792 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 10.4809, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4809 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 10.4827, + "visualDurationMs": 0.0012, + "visualStartMs": 10.4827 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 10.4843, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4843 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 10.4859, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4859 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 10.4876, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4876 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 10.4892, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4892 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 10.4909, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4909 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 10.4925, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4925 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 10.4942, + "visualDurationMs": 0.0013, + "visualStartMs": 10.4942 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 10.4958, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4958 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 10.4975, + "visualDurationMs": 0.0014, + "visualStartMs": 10.4975 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 10.4992, + "visualDurationMs": 0.0089, + "visualStartMs": 10.4992 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 10.5085, + "visualDurationMs": 0.0013, + "visualStartMs": 10.5085 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 10.5102, + "visualDurationMs": 0.0013, + "visualStartMs": 10.5102 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 10.5118, + "visualDurationMs": 0.0014, + "visualStartMs": 10.5118 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 10.5135, + "visualDurationMs": 0.0013, + "visualStartMs": 10.5135 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 10.5152, + "visualDurationMs": 0.0013, + "visualStartMs": 10.5152 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 10.5168, + "visualDurationMs": 0.0012, + "visualStartMs": 10.5168 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 10.5184, + "visualDurationMs": 0.0015, + "visualStartMs": 10.5184 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 10.5202, + "visualDurationMs": 0.0012, + "visualStartMs": 10.5202 + }, + { + "durationMs": 0.0762, + "name": "L71", + "startMs": 10.5218, + "visualDurationMs": 0.0762, + "visualStartMs": 10.5218 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 10.5986, + "visualDurationMs": 0.0014, + "visualStartMs": 10.5986 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 10.6004, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6004 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 10.6021, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6021 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 10.6037, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6037 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 10.6054, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6054 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 10.6071, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6071 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 10.6088, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6088 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 10.6104, + "visualDurationMs": 0.0015, + "visualStartMs": 10.6104 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 10.6123, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6123 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 10.614, + "visualDurationMs": 0.0014, + "visualStartMs": 10.614 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 10.6158, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6158 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 10.6175, + "visualDurationMs": 0.0012, + "visualStartMs": 10.6175 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 10.6191, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6191 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 10.6208, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6208 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 10.6225, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6225 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 10.6242, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6242 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 10.6259, + "visualDurationMs": 0.0012, + "visualStartMs": 10.6259 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 10.6274, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6274 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 10.6291, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6291 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 10.6308, + "visualDurationMs": 0.0015, + "visualStartMs": 10.6308 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 10.6326, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6326 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 10.6342, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6342 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 10.6359, + "visualDurationMs": 0.0012, + "visualStartMs": 10.6359 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 10.6375, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6375 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 10.6391, + "visualDurationMs": 0.0012, + "visualStartMs": 10.6391 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 10.6407, + "visualDurationMs": 0.0014, + "visualStartMs": 10.6407 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 10.6424, + "visualDurationMs": 0.0013, + "visualStartMs": 10.6424 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 10.644, + "visualDurationMs": 0.0013, + "visualStartMs": 10.644 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 10.6455, + "visualDurationMs": 0.0008, + "visualStartMs": 10.6455 + } + ], + "durationMs": 0.2636, + "name": "Lighting", + "startMs": 10.3832, + "visualDurationMs": 0.2636, + "visualStartMs": 10.3832 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 10.6475, + "visualDurationMs": 0.0004, + "visualStartMs": 10.6475 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 10.6481, + "visualDurationMs": 0.0004, + "visualStartMs": 10.6481 + } + ], + "durationMs": 0.0893, + "name": "Draw", + "startMs": 10.6469, + "visualDurationMs": 0.0893, + "visualStartMs": 10.6469 + } + ], + "durationMs": 0.3581, + "name": "DrawSprite", + "startMs": 10.3785, + "visualDurationMs": 0.3581, + "visualStartMs": 10.3785 + } + ], + "durationMs": 0.3589, + "name": "Draw Sprite: Pebble_46", + "startMs": 10.378, + "visualDurationMs": 0.3589, + "visualStartMs": 10.378 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0005, + "name": "ShaderSelect", + "startMs": 10.7417, + "visualDurationMs": 0.0005, + "visualStartMs": 10.7417 + }, + { + "durationMs": 0.0011, + "name": "ShaderUse", + "startMs": 10.7424, + "visualDurationMs": 0.0011, + "visualStartMs": 10.7424 + }, + { + "children": [ + { + "durationMs": 0.0028, + "name": "Transform", + "startMs": 10.7442, + "visualDurationMs": 0.0028, + "visualStartMs": 10.7442 + }, + { + "durationMs": 0.0008, + "name": "TexSlot", + "startMs": 10.7471, + "visualDurationMs": 0.0008, + "visualStartMs": 10.7471 + } + ], + "durationMs": 0.0041, + "name": "SetUniforms", + "startMs": 10.7439, + "visualDurationMs": 0.0041, + "visualStartMs": 10.7439 + }, + { + "durationMs": 0.0009, + "name": "BindTex", + "startMs": 10.7482, + "visualDurationMs": 0.0009, + "visualStartMs": 10.7482 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 10.7497, + "visualDurationMs": 0.0012, + "visualStartMs": 10.7497 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 10.7511, + "visualDurationMs": 0.0016, + "visualStartMs": 10.7511 + }, + { + "durationMs": 0.0019, + "name": "L0", + "startMs": 10.7534, + "visualDurationMs": 0.0019, + "visualStartMs": 10.7534 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 10.7557, + "visualDurationMs": 0.0015, + "visualStartMs": 10.7557 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 10.7575, + "visualDurationMs": 0.0015, + "visualStartMs": 10.7575 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 10.7597, + "visualDurationMs": 0.0014, + "visualStartMs": 10.7597 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 10.7614, + "visualDurationMs": 0.0013, + "visualStartMs": 10.7614 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 10.763, + "visualDurationMs": 0.0013, + "visualStartMs": 10.763 + }, + { + "durationMs": 0.0032, + "name": "L6", + "startMs": 10.7646, + "visualDurationMs": 0.0032, + "visualStartMs": 10.7646 + }, + { + "durationMs": 0.0075, + "name": "L7", + "startMs": 10.7681, + "visualDurationMs": 0.0075, + "visualStartMs": 10.7681 + }, + { + "durationMs": 0.0016, + "name": "L8", + "startMs": 10.776, + "visualDurationMs": 0.0016, + "visualStartMs": 10.776 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 10.778, + "visualDurationMs": 0.0013, + "visualStartMs": 10.778 + }, + { + "durationMs": 0.0019, + "name": "L10", + "startMs": 10.7798, + "visualDurationMs": 0.0019, + "visualStartMs": 10.7798 + }, + { + "durationMs": 0.0021, + "name": "L11", + "startMs": 10.7821, + "visualDurationMs": 0.0021, + "visualStartMs": 10.7821 + }, + { + "durationMs": 0.0017, + "name": "L12", + "startMs": 10.7846, + "visualDurationMs": 0.0017, + "visualStartMs": 10.7846 + }, + { + "durationMs": 0.0016, + "name": "L13", + "startMs": 10.7866, + "visualDurationMs": 0.0016, + "visualStartMs": 10.7866 + }, + { + "durationMs": 0.0042, + "name": "L14", + "startMs": 10.7885, + "visualDurationMs": 0.0042, + "visualStartMs": 10.7885 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 10.7931, + "visualDurationMs": 0.0016, + "visualStartMs": 10.7931 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 10.7951, + "visualDurationMs": 0.0015, + "visualStartMs": 10.7951 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 10.7969, + "visualDurationMs": 0.0014, + "visualStartMs": 10.7969 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 10.7987, + "visualDurationMs": 0.0014, + "visualStartMs": 10.7987 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 10.8005, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8005 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 10.8022, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8022 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 10.804, + "visualDurationMs": 0.0016, + "visualStartMs": 10.804 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 10.806, + "visualDurationMs": 0.0014, + "visualStartMs": 10.806 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 10.8077, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8077 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 10.8094, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8094 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 10.8112, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8112 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 10.8129, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8129 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 10.8145, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8145 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 10.8161, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8161 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 10.8178, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8178 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 10.8194, + "visualDurationMs": 0.0052, + "visualStartMs": 10.8194 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 10.825, + "visualDurationMs": 0.0014, + "visualStartMs": 10.825 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 10.8268, + "visualDurationMs": 0.0012, + "visualStartMs": 10.8268 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 10.8284, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8284 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 10.8302, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8302 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 10.8319, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8319 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 10.8336, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8336 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 10.8353, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8353 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 10.8369, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8369 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 10.8386, + "visualDurationMs": 0.0012, + "visualStartMs": 10.8386 + }, + { + "durationMs": 0.0016, + "name": "L40", + "startMs": 10.8401, + "visualDurationMs": 0.0016, + "visualStartMs": 10.8401 + }, + { + "durationMs": 0.0015, + "name": "L41", + "startMs": 10.842, + "visualDurationMs": 0.0015, + "visualStartMs": 10.842 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 10.8438, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8438 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 10.8454, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8454 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 10.8473, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8473 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 10.8491, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8491 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 10.8508, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8508 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 10.8526, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8526 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 10.8545, + "visualDurationMs": 0.0016, + "visualStartMs": 10.8545 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 10.8564, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8564 + }, + { + "durationMs": 0.0017, + "name": "L50", + "startMs": 10.8582, + "visualDurationMs": 0.0017, + "visualStartMs": 10.8582 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 10.8602, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8602 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 10.8619, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8619 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 10.8635, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8635 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 10.8653, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8653 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 10.8669, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8669 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 10.8686, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8686 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 10.8703, + "visualDurationMs": 0.0012, + "visualStartMs": 10.8703 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 10.8719, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8719 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 10.8736, + "visualDurationMs": 0.0012, + "visualStartMs": 10.8736 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 10.8751, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8751 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 10.8769, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8769 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 10.8786, + "visualDurationMs": 0.0088, + "visualStartMs": 10.8786 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 10.8878, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8878 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 10.8895, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8895 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 10.8912, + "visualDurationMs": 0.0015, + "visualStartMs": 10.8912 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 10.8931, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8931 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 10.8947, + "visualDurationMs": 0.0014, + "visualStartMs": 10.8947 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 10.8964, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8964 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 10.898, + "visualDurationMs": 0.0014, + "visualStartMs": 10.898 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 10.8997, + "visualDurationMs": 0.0013, + "visualStartMs": 10.8997 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 10.9013, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9013 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 10.9029, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9029 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 10.9045, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9045 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 10.9061, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9061 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 10.9076, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9076 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 10.9092, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9092 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 10.9108, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9108 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 10.9124, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9124 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 10.9141, + "visualDurationMs": 0.0014, + "visualStartMs": 10.9141 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 10.9158, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9158 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 10.9174, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9174 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 10.919, + "visualDurationMs": 0.0013, + "visualStartMs": 10.919 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 10.9206, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9206 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 10.9222, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9222 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 10.9237, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9237 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 10.9254, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9254 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 10.927, + "visualDurationMs": 0.0014, + "visualStartMs": 10.927 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 10.9288, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9288 + }, + { + "durationMs": 0.0053, + "name": "L89", + "startMs": 10.9304, + "visualDurationMs": 0.0053, + "visualStartMs": 10.9304 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 10.9361, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9361 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 10.9377, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9377 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 10.9393, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9393 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 10.9408, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9408 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 10.9424, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9424 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 10.9439, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9439 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 10.9455, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9455 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 10.9471, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9471 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 10.9488, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9488 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 10.9503, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9503 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 10.9517, + "visualDurationMs": 0.0008, + "visualStartMs": 10.9517 + } + ], + "durationMs": 0.2041, + "name": "Lighting", + "startMs": 10.7493, + "visualDurationMs": 0.2041, + "visualStartMs": 10.7493 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 10.9541, + "visualDurationMs": 0.0005, + "visualStartMs": 10.9541 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 10.9548, + "visualDurationMs": 0.0007, + "visualStartMs": 10.9548 + } + ], + "durationMs": 0.0019, + "name": "Draw", + "startMs": 10.9537, + "visualDurationMs": 0.0019, + "visualStartMs": 10.9537 + } + ], + "durationMs": 0.2148, + "name": "DrawSprite", + "startMs": 10.741, + "visualDurationMs": 0.2148, + "visualStartMs": 10.741 + } + ], + "durationMs": 0.2166, + "name": "Draw Sprite: Pebble_45", + "startMs": 10.7393, + "visualDurationMs": 0.2166, + "visualStartMs": 10.7393 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 10.9577, + "visualDurationMs": 0.0003, + "visualStartMs": 10.9577 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 10.9582, + "visualDurationMs": 0.0004, + "visualStartMs": 10.9582 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 10.9592, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9592 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 10.9607, + "visualDurationMs": 0.0006, + "visualStartMs": 10.9607 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 10.9588, + "visualDurationMs": 0.0026, + "visualStartMs": 10.9588 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 10.9615, + "visualDurationMs": 0.0004, + "visualStartMs": 10.9615 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 10.9624, + "visualDurationMs": 0.0009, + "visualStartMs": 10.9624 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 10.9634, + "visualDurationMs": 0.0014, + "visualStartMs": 10.9634 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 10.9652, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9652 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 10.9667, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9667 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 10.9684, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9684 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 10.97, + "visualDurationMs": 0.0013, + "visualStartMs": 10.97 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 10.9716, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9716 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 10.9732, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9732 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 10.9747, + "visualDurationMs": 0.0024, + "visualStartMs": 10.9747 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 10.9774, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9774 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 10.9791, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9791 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 10.9807, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9807 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 10.9824, + "visualDurationMs": 0.0012, + "visualStartMs": 10.9824 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 10.984, + "visualDurationMs": 0.0014, + "visualStartMs": 10.984 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 10.9857, + "visualDurationMs": 0.0015, + "visualStartMs": 10.9857 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 10.9876, + "visualDurationMs": 0.0013, + "visualStartMs": 10.9876 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 10.9893, + "visualDurationMs": 0.0035, + "visualStartMs": 10.9893 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 10.9931, + "visualDurationMs": 0.0015, + "visualStartMs": 10.9931 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 10.9949, + "visualDurationMs": 0.0014, + "visualStartMs": 10.9949 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 10.9966, + "visualDurationMs": 0.0014, + "visualStartMs": 10.9966 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 10.9983, + "visualDurationMs": 0.0014, + "visualStartMs": 10.9983 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 11.0, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 11.0017, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0017 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 11.0034, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0034 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 11.0052, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0052 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 11.007, + "visualDurationMs": 0.0013, + "visualStartMs": 11.007 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 11.0086, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0086 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 11.0102, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0102 + }, + { + "durationMs": 0.0051, + "name": "L26", + "startMs": 11.0118, + "visualDurationMs": 0.0051, + "visualStartMs": 11.0118 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 11.0174, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0174 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 11.0193, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0193 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 11.021, + "visualDurationMs": 0.0014, + "visualStartMs": 11.021 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 11.0228, + "visualDurationMs": 0.0054, + "visualStartMs": 11.0228 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 11.0286, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0286 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 11.0304, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0304 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 11.0321, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0321 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 11.0339, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0339 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 11.0358, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0358 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 11.0375, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0375 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 11.0392, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0392 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 11.0409, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0409 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 11.0425, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0425 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 11.0441, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0441 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 11.0458, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0458 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 11.0475, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0475 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 11.0492, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0492 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 11.0511, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0511 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 11.0528, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0528 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 11.0545, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0545 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 11.0563, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0563 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 11.058, + "visualDurationMs": 0.0016, + "visualStartMs": 11.058 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 11.0599, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0599 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 11.0617, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0617 + }, + { + "durationMs": 0.0017, + "name": "L51", + "startMs": 11.0633, + "visualDurationMs": 0.0017, + "visualStartMs": 11.0633 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 11.0653, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0653 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 11.0669, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0669 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 11.0687, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0687 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 11.0704, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0704 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 11.0721, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0721 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 11.0739, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0739 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 11.0756, + "visualDurationMs": 0.0015, + "visualStartMs": 11.0756 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 11.0774, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0774 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 11.0791, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0791 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 11.0809, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0809 + }, + { + "durationMs": 0.0101, + "name": "L62", + "startMs": 11.0826, + "visualDurationMs": 0.0101, + "visualStartMs": 11.0826 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 11.093, + "visualDurationMs": 0.0015, + "visualStartMs": 11.093 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 11.0948, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0948 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 11.0965, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0965 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 11.0982, + "visualDurationMs": 0.0014, + "visualStartMs": 11.0982 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 11.0999, + "visualDurationMs": 0.0013, + "visualStartMs": 11.0999 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 11.1015, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1015 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 11.1031, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1031 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 11.1048, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1048 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 11.1064, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1064 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 11.1079, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1079 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 11.1095, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1095 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 11.1112, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1112 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 11.1129, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1129 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 11.1144, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1144 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 11.116, + "visualDurationMs": 0.0013, + "visualStartMs": 11.116 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 11.1177, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1177 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 11.1193, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1193 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 11.1211, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1211 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 11.1227, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1227 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 11.1243, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1243 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 11.1259, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1259 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 11.1277, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1277 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 11.1293, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1293 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 11.131, + "visualDurationMs": 0.0014, + "visualStartMs": 11.131 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 11.1327, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1327 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 11.1343, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1343 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 11.1359, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1359 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 11.1375, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1375 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 11.1392, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1392 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 11.1408, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1408 + }, + { + "durationMs": 0.0014, + "name": "L93", + "startMs": 11.1423, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1423 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 11.144, + "visualDurationMs": 0.0013, + "visualStartMs": 11.144 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 11.1456, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1456 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 11.1471, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1471 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 11.1487, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1487 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 11.1504, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1504 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 11.1519, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1519 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 11.1533, + "visualDurationMs": 0.0008, + "visualStartMs": 11.1533 + } + ], + "durationMs": 0.1925, + "name": "Lighting", + "startMs": 10.962, + "visualDurationMs": 0.1925, + "visualStartMs": 10.962 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 11.1551, + "visualDurationMs": 0.0003, + "visualStartMs": 11.1551 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 11.1556, + "visualDurationMs": 0.0005, + "visualStartMs": 11.1556 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 11.1547, + "visualDurationMs": 0.0016, + "visualStartMs": 11.1547 + } + ], + "durationMs": 0.1993, + "name": "DrawSprite", + "startMs": 10.9571, + "visualDurationMs": 0.1993, + "visualStartMs": 10.9571 + } + ], + "durationMs": 0.2, + "name": "Draw Sprite: Pebble_42", + "startMs": 10.9565, + "visualDurationMs": 0.2, + "visualStartMs": 10.9565 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 11.1581, + "visualDurationMs": 0.0004, + "visualStartMs": 11.1581 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 11.1587, + "visualDurationMs": 0.0004, + "visualStartMs": 11.1587 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 11.1596, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1596 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 11.1611, + "visualDurationMs": 0.0006, + "visualStartMs": 11.1611 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 11.1593, + "visualDurationMs": 0.0025, + "visualStartMs": 11.1593 + }, + { + "durationMs": 0.0006, + "name": "BindTex", + "startMs": 11.1619, + "visualDurationMs": 0.0006, + "visualStartMs": 11.1619 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 11.1629, + "visualDurationMs": 0.0009, + "visualStartMs": 11.1629 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 11.1639, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1639 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 11.1657, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1657 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 11.1673, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1673 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 11.1689, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1689 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 11.1706, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1706 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 11.1722, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1722 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 11.1737, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1737 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 11.1752, + "visualDurationMs": 0.0027, + "visualStartMs": 11.1752 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 11.1783, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1783 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 11.1799, + "visualDurationMs": 0.0012, + "visualStartMs": 11.1799 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 11.1814, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1814 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 11.1831, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1831 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 11.1847, + "visualDurationMs": 0.0015, + "visualStartMs": 11.1847 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 11.1865, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1865 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 11.1882, + "visualDurationMs": 0.0013, + "visualStartMs": 11.1882 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 11.1898, + "visualDurationMs": 0.0034, + "visualStartMs": 11.1898 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 11.1936, + "visualDurationMs": 0.0015, + "visualStartMs": 11.1936 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 11.1954, + "visualDurationMs": 0.0014, + "visualStartMs": 11.1954 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 11.1971, + "visualDurationMs": 0.0015, + "visualStartMs": 11.1971 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 11.199, + "visualDurationMs": 0.0013, + "visualStartMs": 11.199 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 11.2007, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2007 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 11.2023, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2023 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 11.2039, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2039 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 11.2058, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2058 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 11.2075, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2075 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 11.2091, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2091 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 11.2108, + "visualDurationMs": 0.0012, + "visualStartMs": 11.2108 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 11.2123, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2123 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 11.2139, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2139 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 11.2155, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2155 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 11.2172, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2172 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 11.219, + "visualDurationMs": 0.0051, + "visualStartMs": 11.219 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 11.2244, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2244 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 11.2262, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2262 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 11.2278, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2278 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 11.2296, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2296 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 11.2313, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2313 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 11.233, + "visualDurationMs": 0.0013, + "visualStartMs": 11.233 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 11.2346, + "visualDurationMs": 0.0012, + "visualStartMs": 11.2346 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 11.2362, + "visualDurationMs": 0.0012, + "visualStartMs": 11.2362 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 11.2377, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2377 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 11.2394, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2394 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 11.2411, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2411 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 11.2427, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2427 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 11.2443, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2443 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 11.246, + "visualDurationMs": 0.0014, + "visualStartMs": 11.246 + }, + { + "durationMs": 0.0056, + "name": "L45", + "startMs": 11.2478, + "visualDurationMs": 0.0056, + "visualStartMs": 11.2478 + }, + { + "durationMs": 0.0018, + "name": "L46", + "startMs": 11.2538, + "visualDurationMs": 0.0018, + "visualStartMs": 11.2538 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 11.256, + "visualDurationMs": 0.0014, + "visualStartMs": 11.256 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 11.2578, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2578 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 11.2597, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2597 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 11.2615, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2615 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 11.2632, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2632 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 11.2651, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2651 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 11.2667, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2667 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 11.2685, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2685 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 11.2702, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2702 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 11.2718, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2718 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 11.2736, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2736 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 11.2752, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2752 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 11.277, + "visualDurationMs": 0.0013, + "visualStartMs": 11.277 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 11.2787, + "visualDurationMs": 0.0015, + "visualStartMs": 11.2787 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 11.2805, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2805 + }, + { + "durationMs": 0.0093, + "name": "L62", + "startMs": 11.2823, + "visualDurationMs": 0.0093, + "visualStartMs": 11.2823 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 11.292, + "visualDurationMs": 0.0013, + "visualStartMs": 11.292 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 11.2937, + "visualDurationMs": 0.0013, + "visualStartMs": 11.2937 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 11.2953, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2953 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 11.2972, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2972 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 11.2989, + "visualDurationMs": 0.0014, + "visualStartMs": 11.2989 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 11.3006, + "visualDurationMs": 0.0015, + "visualStartMs": 11.3006 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 11.3024, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3024 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 11.304, + "visualDurationMs": 0.0013, + "visualStartMs": 11.304 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 11.3056, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3056 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 11.3073, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3073 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 11.3089, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3089 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 11.3104, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3104 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 11.312, + "visualDurationMs": 0.0012, + "visualStartMs": 11.312 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 11.3136, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3136 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 11.3152, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3152 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 11.3169, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3169 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 11.3184, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3184 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 11.3201, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3201 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 11.3217, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3217 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 11.3232, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3232 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 11.3248, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3248 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 11.3263, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3263 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 11.3279, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3279 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 11.3295, + "visualDurationMs": 0.0014, + "visualStartMs": 11.3295 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 11.3313, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3313 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 11.3329, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3329 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 11.3344, + "visualDurationMs": 0.0014, + "visualStartMs": 11.3344 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 11.3361, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3361 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 11.3377, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3377 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 11.3394, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3394 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 11.341, + "visualDurationMs": 0.0013, + "visualStartMs": 11.341 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 11.3426, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3426 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 11.3442, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3442 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 11.3459, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3459 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 11.3475, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3475 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 11.3491, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3491 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 11.3508, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3508 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 11.3522, + "visualDurationMs": 0.0008, + "visualStartMs": 11.3522 + } + ], + "durationMs": 0.1908, + "name": "Lighting", + "startMs": 11.1626, + "visualDurationMs": 0.1908, + "visualStartMs": 11.1626 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 11.3539, + "visualDurationMs": 0.0004, + "visualStartMs": 11.3539 + }, + { + "durationMs": 0.0003, + "name": "GL Draw", + "startMs": 11.3545, + "visualDurationMs": 0.0003, + "visualStartMs": 11.3545 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 11.3535, + "visualDurationMs": 0.0015, + "visualStartMs": 11.3535 + } + ], + "durationMs": 0.1973, + "name": "DrawSprite", + "startMs": 11.1578, + "visualDurationMs": 0.1973, + "visualStartMs": 11.1578 + } + ], + "durationMs": 0.1978, + "name": "Draw Sprite: Pebble_41", + "startMs": 11.1574, + "visualDurationMs": 0.1978, + "visualStartMs": 11.1574 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 11.3567, + "visualDurationMs": 0.0003, + "visualStartMs": 11.3567 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 11.3572, + "visualDurationMs": 0.0004, + "visualStartMs": 11.3572 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 11.3581, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3581 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 11.3596, + "visualDurationMs": 0.0004, + "visualStartMs": 11.3596 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 11.3578, + "visualDurationMs": 0.0023, + "visualStartMs": 11.3578 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 11.3603, + "visualDurationMs": 0.0003, + "visualStartMs": 11.3603 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 11.3611, + "visualDurationMs": 0.0009, + "visualStartMs": 11.3611 + }, + { + "durationMs": 0.0012, + "name": "SetLightParams", + "startMs": 11.3622, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3622 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 11.3638, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3638 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 11.3654, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3654 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 11.367, + "visualDurationMs": 0.0013, + "visualStartMs": 11.367 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 11.3686, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3686 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 11.3702, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3702 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 11.3718, + "visualDurationMs": 0.0012, + "visualStartMs": 11.3718 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 11.3733, + "visualDurationMs": 0.0026, + "visualStartMs": 11.3733 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 11.3762, + "visualDurationMs": 0.0014, + "visualStartMs": 11.3762 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 11.378, + "visualDurationMs": 0.0014, + "visualStartMs": 11.378 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 11.3797, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3797 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 11.3813, + "visualDurationMs": 0.0013, + "visualStartMs": 11.3813 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 11.3829, + "visualDurationMs": 0.0014, + "visualStartMs": 11.3829 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 11.3847, + "visualDurationMs": 0.0014, + "visualStartMs": 11.3847 + }, + { + "durationMs": 0.0097, + "name": "L13", + "startMs": 11.3864, + "visualDurationMs": 0.0097, + "visualStartMs": 11.3864 + }, + { + "durationMs": 0.0039, + "name": "L14", + "startMs": 11.3965, + "visualDurationMs": 0.0039, + "visualStartMs": 11.3965 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 11.4008, + "visualDurationMs": 0.0016, + "visualStartMs": 11.4008 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 11.4028, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4028 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 11.4046, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4046 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 11.4063, + "visualDurationMs": 0.0016, + "visualStartMs": 11.4063 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 11.4083, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4083 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 11.4102, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4102 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 11.412, + "visualDurationMs": 0.0013, + "visualStartMs": 11.412 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 11.4137, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4137 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 11.4155, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4155 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 11.4172, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4172 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 11.4191, + "visualDurationMs": 0.0012, + "visualStartMs": 11.4191 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 11.4207, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4207 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 11.4224, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4224 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 11.4241, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4241 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 11.4258, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4258 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 11.4275, + "visualDurationMs": 0.0052, + "visualStartMs": 11.4275 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 11.433, + "visualDurationMs": 0.0016, + "visualStartMs": 11.433 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 11.435, + "visualDurationMs": 0.0013, + "visualStartMs": 11.435 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 11.4366, + "visualDurationMs": 0.0016, + "visualStartMs": 11.4366 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 11.4386, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4386 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 11.4404, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4404 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 11.4422, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4422 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 11.4438, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4438 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 11.4454, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4454 + }, + { + "durationMs": 0.0014, + "name": "L39", + "startMs": 11.4471, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4471 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 11.4489, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4489 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 11.4507, + "visualDurationMs": 0.0012, + "visualStartMs": 11.4507 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 11.4523, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4523 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 11.454, + "visualDurationMs": 0.0016, + "visualStartMs": 11.454 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 11.4559, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4559 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 11.4577, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4577 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 11.4596, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4596 + }, + { + "durationMs": 0.0016, + "name": "L47", + "startMs": 11.4615, + "visualDurationMs": 0.0016, + "visualStartMs": 11.4615 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 11.4635, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4635 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 11.4654, + "visualDurationMs": 0.0016, + "visualStartMs": 11.4654 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 11.4673, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4673 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 11.469, + "visualDurationMs": 0.0015, + "visualStartMs": 11.469 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 11.4709, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4709 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 11.4727, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4727 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 11.4744, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4744 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 11.4762, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4762 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 11.4779, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4779 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 11.4796, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4796 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 11.4812, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4812 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 11.483, + "visualDurationMs": 0.0014, + "visualStartMs": 11.483 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 11.4847, + "visualDurationMs": 0.0014, + "visualStartMs": 11.4847 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 11.4865, + "visualDurationMs": 0.0013, + "visualStartMs": 11.4865 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 11.4881, + "visualDurationMs": 0.0089, + "visualStartMs": 11.4881 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 11.4973, + "visualDurationMs": 0.0015, + "visualStartMs": 11.4973 + }, + { + "durationMs": 0.0049, + "name": "L64", + "startMs": 11.4991, + "visualDurationMs": 0.0049, + "visualStartMs": 11.4991 + }, + { + "durationMs": 0.0019, + "name": "L65", + "startMs": 11.5045, + "visualDurationMs": 0.0019, + "visualStartMs": 11.5045 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 11.5068, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5068 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 11.5086, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5086 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 11.5104, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5104 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 11.512, + "visualDurationMs": 0.0013, + "visualStartMs": 11.512 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 11.5137, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5137 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 11.5154, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5154 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 11.517, + "visualDurationMs": 0.0013, + "visualStartMs": 11.517 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 11.5186, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5186 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 11.5202, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5202 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 11.5218, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5218 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 11.5235, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5235 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 11.5251, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5251 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 11.5268, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5268 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 11.5284, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5284 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 11.5302, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5302 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 11.5318, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5318 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 11.5334, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5334 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 11.5349, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5349 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 11.5365, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5365 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 11.538, + "visualDurationMs": 0.0013, + "visualStartMs": 11.538 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 11.5397, + "visualDurationMs": 0.0015, + "visualStartMs": 11.5397 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 11.5416, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5416 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 11.5432, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5432 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 11.5448, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5448 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 11.5464, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5464 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 11.5481, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5481 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 11.5497, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5497 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 11.5513, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5513 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 11.553, + "visualDurationMs": 0.0013, + "visualStartMs": 11.553 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 11.5547, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5547 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 11.5563, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5563 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 11.5578, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5578 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 11.5595, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5595 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 11.561, + "visualDurationMs": 0.0013, + "visualStartMs": 11.561 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 11.5625, + "visualDurationMs": 0.0006, + "visualStartMs": 11.5625 + } + ], + "durationMs": 0.2027, + "name": "Lighting", + "startMs": 11.3608, + "visualDurationMs": 0.2027, + "visualStartMs": 11.3608 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 11.564, + "visualDurationMs": 0.0004, + "visualStartMs": 11.564 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 11.5646, + "visualDurationMs": 0.0004, + "visualStartMs": 11.5646 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 11.5636, + "visualDurationMs": 0.0016, + "visualStartMs": 11.5636 + } + ], + "durationMs": 0.2089, + "name": "DrawSprite", + "startMs": 11.3564, + "visualDurationMs": 0.2089, + "visualStartMs": 11.3564 + } + ], + "durationMs": 0.2095, + "name": "Draw Sprite: Pebble_40", + "startMs": 11.3559, + "visualDurationMs": 0.2095, + "visualStartMs": 11.3559 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 11.5667, + "visualDurationMs": 0.0003, + "visualStartMs": 11.5667 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 11.5672, + "visualDurationMs": 0.0004, + "visualStartMs": 11.5672 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 11.5681, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5681 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 11.5696, + "visualDurationMs": 0.0005, + "visualStartMs": 11.5696 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 11.5678, + "visualDurationMs": 0.0024, + "visualStartMs": 11.5678 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 11.5704, + "visualDurationMs": 0.0003, + "visualStartMs": 11.5704 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 11.5713, + "visualDurationMs": 0.0011, + "visualStartMs": 11.5713 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 11.5725, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5725 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 11.5742, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5742 + }, + { + "durationMs": 0.0058, + "name": "L1", + "startMs": 11.5757, + "visualDurationMs": 0.0058, + "visualStartMs": 11.5757 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 11.5818, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5818 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 11.5834, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5834 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 11.585, + "visualDurationMs": 0.0012, + "visualStartMs": 11.585 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 11.5865, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5865 + }, + { + "durationMs": 0.0031, + "name": "L6", + "startMs": 11.588, + "visualDurationMs": 0.0031, + "visualStartMs": 11.588 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 11.5915, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5915 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 11.593, + "visualDurationMs": 0.0013, + "visualStartMs": 11.593 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 11.5946, + "visualDurationMs": 0.0012, + "visualStartMs": 11.5946 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 11.5962, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5962 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 11.5979, + "visualDurationMs": 0.0014, + "visualStartMs": 11.5979 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 11.5997, + "visualDurationMs": 0.0013, + "visualStartMs": 11.5997 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 11.6014, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6014 + }, + { + "durationMs": 0.0039, + "name": "L14", + "startMs": 11.603, + "visualDurationMs": 0.0039, + "visualStartMs": 11.603 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 11.6073, + "visualDurationMs": 0.0016, + "visualStartMs": 11.6073 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 11.6092, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6092 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 11.6109, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6109 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 11.6126, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6126 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 11.6143, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6143 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 11.6161, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6161 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 11.6177, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6177 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 11.6194, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6194 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 11.6212, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6212 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 11.6228, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6228 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 11.6247, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6247 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 11.6263, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6263 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 11.6278, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6278 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 11.6294, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6294 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 11.6312, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6312 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 11.6328, + "visualDurationMs": 0.0051, + "visualStartMs": 11.6328 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 11.6382, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6382 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 11.6401, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6401 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 11.6418, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6418 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 11.6435, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6435 + }, + { + "durationMs": 0.0015, + "name": "L35", + "startMs": 11.6452, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6452 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 11.647, + "visualDurationMs": 0.0013, + "visualStartMs": 11.647 + }, + { + "durationMs": 0.0017, + "name": "L37", + "startMs": 11.6487, + "visualDurationMs": 0.0017, + "visualStartMs": 11.6487 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 11.6507, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6507 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 11.6523, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6523 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 11.6538, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6538 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 11.6555, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6555 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 11.6572, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6572 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 11.6588, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6588 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 11.6606, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6606 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 11.6623, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6623 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 11.664, + "visualDurationMs": 0.0014, + "visualStartMs": 11.664 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 11.6658, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6658 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 11.6674, + "visualDurationMs": 0.0016, + "visualStartMs": 11.6674 + }, + { + "durationMs": 0.0017, + "name": "L49", + "startMs": 11.6694, + "visualDurationMs": 0.0017, + "visualStartMs": 11.6694 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 11.6715, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6715 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 11.6733, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6733 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 11.6751, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6751 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 11.6766, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6766 + }, + { + "durationMs": 0.0016, + "name": "L54", + "startMs": 11.6783, + "visualDurationMs": 0.0016, + "visualStartMs": 11.6783 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 11.6802, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6802 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 11.6819, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6819 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 11.6837, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6837 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 11.6853, + "visualDurationMs": 0.0014, + "visualStartMs": 11.6853 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 11.6871, + "visualDurationMs": 0.0012, + "visualStartMs": 11.6871 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 11.6886, + "visualDurationMs": 0.0015, + "visualStartMs": 11.6886 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 11.6905, + "visualDurationMs": 0.0013, + "visualStartMs": 11.6905 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 11.6921, + "visualDurationMs": 0.009, + "visualStartMs": 11.6921 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 11.7014, + "visualDurationMs": 0.0015, + "visualStartMs": 11.7014 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 11.7032, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7032 + }, + { + "durationMs": 0.0017, + "name": "L65", + "startMs": 11.7049, + "visualDurationMs": 0.0017, + "visualStartMs": 11.7049 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 11.707, + "visualDurationMs": 0.0016, + "visualStartMs": 11.707 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 11.709, + "visualDurationMs": 0.0014, + "visualStartMs": 11.709 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 11.7108, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7108 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 11.7125, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7125 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 11.7142, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7142 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 11.7158, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7158 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 11.7174, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7174 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 11.719, + "visualDurationMs": 0.0014, + "visualStartMs": 11.719 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 11.7208, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7208 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 11.7223, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7223 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 11.724, + "visualDurationMs": 0.0014, + "visualStartMs": 11.724 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 11.7257, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7257 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 11.7274, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7274 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 11.729, + "visualDurationMs": 0.0013, + "visualStartMs": 11.729 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 11.7307, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7307 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 11.7324, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7324 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 11.734, + "visualDurationMs": 0.0012, + "visualStartMs": 11.734 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 11.7356, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7356 + }, + { + "durationMs": 0.0051, + "name": "L84", + "startMs": 11.7371, + "visualDurationMs": 0.0051, + "visualStartMs": 11.7371 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 11.7426, + "visualDurationMs": 0.0016, + "visualStartMs": 11.7426 + }, + { + "durationMs": 0.0016, + "name": "L86", + "startMs": 11.7445, + "visualDurationMs": 0.0016, + "visualStartMs": 11.7445 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 11.7465, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7465 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 11.7482, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7482 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 11.7499, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7499 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 11.7517, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7517 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 11.7532, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7532 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 11.7549, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7549 + }, + { + "durationMs": 0.0014, + "name": "L93", + "startMs": 11.7564, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7564 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 11.7581, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7581 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 11.7597, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7597 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 11.7613, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7613 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 11.7629, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7629 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 11.7645, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7645 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 11.766, + "visualDurationMs": 0.0014, + "visualStartMs": 11.766 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 11.7675, + "visualDurationMs": 0.0008, + "visualStartMs": 11.7675 + } + ], + "durationMs": 0.1977, + "name": "Lighting", + "startMs": 11.5709, + "visualDurationMs": 0.1977, + "visualStartMs": 11.5709 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 11.7692, + "visualDurationMs": 0.0004, + "visualStartMs": 11.7692 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 11.7698, + "visualDurationMs": 0.0004, + "visualStartMs": 11.7698 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 11.7688, + "visualDurationMs": 0.0016, + "visualStartMs": 11.7688 + } + ], + "durationMs": 0.2041, + "name": "DrawSprite", + "startMs": 11.5664, + "visualDurationMs": 0.2041, + "visualStartMs": 11.5664 + } + ], + "durationMs": 0.2046, + "name": "Draw Sprite: Pebble_44", + "startMs": 11.566, + "visualDurationMs": 0.2046, + "visualStartMs": 11.566 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 11.7764, + "visualDurationMs": 0.0003, + "visualStartMs": 11.7764 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 11.7769, + "visualDurationMs": 0.0004, + "visualStartMs": 11.7769 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 11.7779, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7779 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 11.7793, + "visualDurationMs": 0.0005, + "visualStartMs": 11.7793 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 11.7775, + "visualDurationMs": 0.0024, + "visualStartMs": 11.7775 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 11.7801, + "visualDurationMs": 0.0003, + "visualStartMs": 11.7801 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 11.7809, + "visualDurationMs": 0.0008, + "visualStartMs": 11.7809 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 11.7819, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7819 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 11.7836, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7836 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 11.7852, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7852 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 11.7868, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7868 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 11.7885, + "visualDurationMs": 0.0014, + "visualStartMs": 11.7885 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 11.7903, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7903 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 11.7918, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7918 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 11.7933, + "visualDurationMs": 0.0026, + "visualStartMs": 11.7933 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 11.7964, + "visualDurationMs": 0.0012, + "visualStartMs": 11.7964 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 11.7979, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7979 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 11.7995, + "visualDurationMs": 0.0013, + "visualStartMs": 11.7995 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 11.8012, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8012 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 11.8029, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8029 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 11.8047, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8047 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 11.8065, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8065 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 11.8082, + "visualDurationMs": 0.0033, + "visualStartMs": 11.8082 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 11.8118, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8118 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 11.8137, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8137 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 11.8155, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8155 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 11.8173, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8173 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 11.819, + "visualDurationMs": 0.0013, + "visualStartMs": 11.819 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 11.8207, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8207 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 11.8224, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8224 + }, + { + "durationMs": 0.0016, + "name": "L22", + "startMs": 11.8242, + "visualDurationMs": 0.0016, + "visualStartMs": 11.8242 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 11.8261, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8261 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 11.8278, + "visualDurationMs": 0.0012, + "visualStartMs": 11.8278 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 11.8294, + "visualDurationMs": 0.0012, + "visualStartMs": 11.8294 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 11.831, + "visualDurationMs": 0.0012, + "visualStartMs": 11.831 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 11.8326, + "visualDurationMs": 0.0012, + "visualStartMs": 11.8326 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 11.8341, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8341 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 11.8358, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8358 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 11.8374, + "visualDurationMs": 0.005, + "visualStartMs": 11.8374 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 11.8427, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8427 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 11.8446, + "visualDurationMs": 0.0012, + "visualStartMs": 11.8446 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 11.8461, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8461 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 11.8479, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8479 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 11.8496, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8496 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 11.8513, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8513 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 11.8529, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8529 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 11.8547, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8547 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 11.8563, + "visualDurationMs": 0.0012, + "visualStartMs": 11.8563 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 11.8579, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8579 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 11.8596, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8596 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 11.8614, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8614 + }, + { + "durationMs": 0.0017, + "name": "L43", + "startMs": 11.863, + "visualDurationMs": 0.0017, + "visualStartMs": 11.863 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 11.865, + "visualDurationMs": 0.0015, + "visualStartMs": 11.865 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 11.8668, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8668 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 11.8685, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8685 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 11.8704, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8704 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 11.872, + "visualDurationMs": 0.0016, + "visualStartMs": 11.872 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 11.874, + "visualDurationMs": 0.0014, + "visualStartMs": 11.874 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 11.8758, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8758 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 11.8775, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8775 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 11.8793, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8793 + }, + { + "durationMs": 0.0016, + "name": "L53", + "startMs": 11.881, + "visualDurationMs": 0.0016, + "visualStartMs": 11.881 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 11.883, + "visualDurationMs": 0.0015, + "visualStartMs": 11.883 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 11.8849, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8849 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 11.8867, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8867 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 11.8884, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8884 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 11.8903, + "visualDurationMs": 0.0015, + "visualStartMs": 11.8903 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 11.8921, + "visualDurationMs": 0.0013, + "visualStartMs": 11.8921 + }, + { + "durationMs": 0.0016, + "name": "L60", + "startMs": 11.8937, + "visualDurationMs": 0.0016, + "visualStartMs": 11.8937 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 11.8956, + "visualDurationMs": 0.0014, + "visualStartMs": 11.8956 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 11.8973, + "visualDurationMs": 0.0089, + "visualStartMs": 11.8973 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 11.9065, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9065 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 11.9083, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9083 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 11.91, + "visualDurationMs": 0.0015, + "visualStartMs": 11.91 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 11.9118, + "visualDurationMs": 0.0015, + "visualStartMs": 11.9118 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 11.9136, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9136 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 11.9153, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9153 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 11.917, + "visualDurationMs": 0.0015, + "visualStartMs": 11.917 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 11.9188, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9188 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 11.9205, + "visualDurationMs": 0.0015, + "visualStartMs": 11.9205 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 11.9223, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9223 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 11.9238, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9238 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 11.9254, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9254 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 11.9271, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9271 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 11.9287, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9287 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 11.9303, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9303 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 11.9319, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9319 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 11.9335, + "visualDurationMs": 0.0015, + "visualStartMs": 11.9335 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 11.9354, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9354 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 11.937, + "visualDurationMs": 0.0013, + "visualStartMs": 11.937 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 11.9386, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9386 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 11.9401, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9401 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 11.9418, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9418 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 11.9434, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9434 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 11.945, + "visualDurationMs": 0.0013, + "visualStartMs": 11.945 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 11.9466, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9466 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 11.9483, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9483 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 11.9499, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9499 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 11.9515, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9515 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 11.9531, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9531 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 11.9547, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9547 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 11.9564, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9564 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 11.9579, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9579 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 11.9595, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9595 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 11.961, + "visualDurationMs": 0.0013, + "visualStartMs": 11.961 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 11.9626, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9626 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 11.9642, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9642 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 11.9658, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9658 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 11.9671, + "visualDurationMs": 0.0006, + "visualStartMs": 11.9671 + } + ], + "durationMs": 0.1874, + "name": "Lighting", + "startMs": 11.7805, + "visualDurationMs": 0.1874, + "visualStartMs": 11.7805 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 11.9684, + "visualDurationMs": 0.0004, + "visualStartMs": 11.9684 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 11.9689, + "visualDurationMs": 0.0004, + "visualStartMs": 11.9689 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 11.9681, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9681 + } + ], + "durationMs": 0.1935, + "name": "DrawSprite", + "startMs": 11.7761, + "visualDurationMs": 0.1935, + "visualStartMs": 11.7761 + } + ], + "durationMs": 0.1941, + "name": "Draw Sprite: Pebble_53", + "startMs": 11.7756, + "visualDurationMs": 0.1941, + "visualStartMs": 11.7756 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 11.9716, + "visualDurationMs": 0.0003, + "visualStartMs": 11.9716 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 11.972, + "visualDurationMs": 0.0004, + "visualStartMs": 11.972 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 11.9731, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9731 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 11.9745, + "visualDurationMs": 0.0005, + "visualStartMs": 11.9745 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 11.9727, + "visualDurationMs": 0.0024, + "visualStartMs": 11.9727 + }, + { + "durationMs": 0.0038, + "name": "BindTex", + "startMs": 11.9753, + "visualDurationMs": 0.0038, + "visualStartMs": 11.9753 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 11.9799, + "visualDurationMs": 0.0011, + "visualStartMs": 11.9799 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 11.9811, + "visualDurationMs": 0.0015, + "visualStartMs": 11.9811 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 11.983, + "visualDurationMs": 0.0014, + "visualStartMs": 11.983 + }, + { + "durationMs": 0.0015, + "name": "L1", + "startMs": 11.9848, + "visualDurationMs": 0.0015, + "visualStartMs": 11.9848 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 11.9867, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9867 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 11.9884, + "visualDurationMs": 0.0014, + "visualStartMs": 11.9884 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 11.9902, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9902 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 11.9917, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9917 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 11.9933, + "visualDurationMs": 0.0026, + "visualStartMs": 11.9933 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 11.9963, + "visualDurationMs": 0.0012, + "visualStartMs": 11.9963 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 11.9979, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9979 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 11.9996, + "visualDurationMs": 0.0013, + "visualStartMs": 11.9996 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 12.0013, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0013 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 12.003, + "visualDurationMs": 0.0015, + "visualStartMs": 12.003 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 12.0049, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0049 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 12.0067, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0067 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 12.0085, + "visualDurationMs": 0.0036, + "visualStartMs": 12.0085 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 12.0125, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0125 + }, + { + "durationMs": 0.0017, + "name": "L16", + "startMs": 12.0144, + "visualDurationMs": 0.0017, + "visualStartMs": 12.0144 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 12.0164, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0164 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 12.0181, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0181 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 12.0199, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0199 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 12.0216, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0216 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 12.0232, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0232 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 12.025, + "visualDurationMs": 0.0014, + "visualStartMs": 12.025 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 12.0267, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0267 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 12.0283, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0283 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 12.03, + "visualDurationMs": 0.0012, + "visualStartMs": 12.03 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 12.0315, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0315 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 12.0331, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0331 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 12.0347, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0347 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 12.0363, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0363 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 12.038, + "visualDurationMs": 0.0051, + "visualStartMs": 12.038 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 12.0435, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0435 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 12.0454, + "visualDurationMs": 0.0012, + "visualStartMs": 12.0454 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 12.047, + "visualDurationMs": 0.0013, + "visualStartMs": 12.047 + }, + { + "durationMs": 0.0016, + "name": "L34", + "startMs": 12.0487, + "visualDurationMs": 0.0016, + "visualStartMs": 12.0487 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 12.0506, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0506 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 12.0523, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0523 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 12.054, + "visualDurationMs": 0.0012, + "visualStartMs": 12.054 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 12.0555, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0555 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 12.0573, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0573 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 12.059, + "visualDurationMs": 0.0013, + "visualStartMs": 12.059 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 12.0606, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0606 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 12.0622, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0622 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 12.064, + "visualDurationMs": 0.0015, + "visualStartMs": 12.064 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 12.0658, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0658 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 12.0676, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0676 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 12.0694, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0694 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 12.0711, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0711 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 12.0728, + "visualDurationMs": 0.0016, + "visualStartMs": 12.0728 + }, + { + "durationMs": 0.0018, + "name": "L49", + "startMs": 12.0747, + "visualDurationMs": 0.0018, + "visualStartMs": 12.0747 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 12.0768, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0768 + }, + { + "durationMs": 0.0018, + "name": "L51", + "startMs": 12.0785, + "visualDurationMs": 0.0018, + "visualStartMs": 12.0785 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 12.0806, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0806 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 12.0824, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0824 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 12.0841, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0841 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 12.0858, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0858 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 12.0874, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0874 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 12.0892, + "visualDurationMs": 0.0013, + "visualStartMs": 12.0892 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 12.0909, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0909 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 12.0927, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0927 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 12.0945, + "visualDurationMs": 0.0015, + "visualStartMs": 12.0945 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 12.0963, + "visualDurationMs": 0.0014, + "visualStartMs": 12.0963 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 12.0981, + "visualDurationMs": 0.0088, + "visualStartMs": 12.0981 + }, + { + "durationMs": 0.0016, + "name": "L63", + "startMs": 12.1073, + "visualDurationMs": 0.0016, + "visualStartMs": 12.1073 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 12.1092, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1092 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 12.111, + "visualDurationMs": 0.0014, + "visualStartMs": 12.111 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 12.1128, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1128 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 12.1145, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1145 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 12.1163, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1163 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 12.1178, + "visualDurationMs": 0.0015, + "visualStartMs": 12.1178 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 12.1197, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1197 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 12.1213, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1213 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 12.123, + "visualDurationMs": 0.0013, + "visualStartMs": 12.123 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 12.1247, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1247 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 12.1262, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1262 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 12.1278, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1278 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 12.1294, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1294 + }, + { + "durationMs": 0.0015, + "name": "L77", + "startMs": 12.1311, + "visualDurationMs": 0.0015, + "visualStartMs": 12.1311 + }, + { + "durationMs": 0.0017, + "name": "L78", + "startMs": 12.1329, + "visualDurationMs": 0.0017, + "visualStartMs": 12.1329 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 12.135, + "visualDurationMs": 0.0014, + "visualStartMs": 12.135 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 12.1368, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1368 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 12.1384, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1384 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 12.14, + "visualDurationMs": 0.0012, + "visualStartMs": 12.14 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 12.1415, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1415 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 12.1431, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1431 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 12.1446, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1446 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 12.1463, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1463 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 12.1479, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1479 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 12.1495, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1495 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 12.1511, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1511 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 12.1528, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1528 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 12.1544, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1544 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 12.1561, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1561 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 12.1579, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1579 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 12.1594, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1594 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 12.161, + "visualDurationMs": 0.0012, + "visualStartMs": 12.161 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 12.1625, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1625 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 12.1641, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1641 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 12.1658, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1658 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 12.1673, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1673 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 12.1687, + "visualDurationMs": 0.0006, + "visualStartMs": 12.1687 + } + ], + "durationMs": 0.1902, + "name": "Lighting", + "startMs": 11.9794, + "visualDurationMs": 0.1902, + "visualStartMs": 11.9794 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 12.1701, + "visualDurationMs": 0.0004, + "visualStartMs": 12.1701 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 12.1707, + "visualDurationMs": 0.0004, + "visualStartMs": 12.1707 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 12.1698, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1698 + } + ], + "durationMs": 0.2002, + "name": "DrawSprite", + "startMs": 11.9712, + "visualDurationMs": 0.2002, + "visualStartMs": 11.9712 + } + ], + "durationMs": 0.2009, + "name": "Draw Sprite: Pebble_52", + "startMs": 11.9707, + "visualDurationMs": 0.2009, + "visualStartMs": 11.9707 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 12.174, + "visualDurationMs": 0.0003, + "visualStartMs": 12.174 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 12.1745, + "visualDurationMs": 0.0004, + "visualStartMs": 12.1745 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 12.1755, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1755 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 12.177, + "visualDurationMs": 0.0005, + "visualStartMs": 12.177 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 12.1751, + "visualDurationMs": 0.0026, + "visualStartMs": 12.1751 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 12.1778, + "visualDurationMs": 0.0004, + "visualStartMs": 12.1778 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 12.1787, + "visualDurationMs": 0.0009, + "visualStartMs": 12.1787 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 12.1798, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1798 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 12.1815, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1815 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 12.1833, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1833 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 12.1849, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1849 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 12.1865, + "visualDurationMs": 0.0014, + "visualStartMs": 12.1865 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 12.1882, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1882 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 12.1897, + "visualDurationMs": 0.0012, + "visualStartMs": 12.1897 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 12.1912, + "visualDurationMs": 0.0025, + "visualStartMs": 12.1912 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 12.194, + "visualDurationMs": 0.0013, + "visualStartMs": 12.194 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 12.1956, + "visualDurationMs": 0.0013, + "visualStartMs": 12.1956 + }, + { + "durationMs": 0.0015, + "name": "L9", + "startMs": 12.1972, + "visualDurationMs": 0.0015, + "visualStartMs": 12.1972 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 12.199, + "visualDurationMs": 0.0014, + "visualStartMs": 12.199 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 12.2007, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2007 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 12.2025, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2025 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 12.2042, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2042 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 12.206, + "visualDurationMs": 0.0035, + "visualStartMs": 12.206 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 12.2098, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2098 + }, + { + "durationMs": 0.0048, + "name": "L16", + "startMs": 12.2116, + "visualDurationMs": 0.0048, + "visualStartMs": 12.2116 + }, + { + "durationMs": 0.0019, + "name": "L17", + "startMs": 12.2169, + "visualDurationMs": 0.0019, + "visualStartMs": 12.2169 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 12.2191, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2191 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 12.2209, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2209 + }, + { + "durationMs": 0.0015, + "name": "L20", + "startMs": 12.2227, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2227 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 12.2245, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2245 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 12.2264, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2264 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 12.2282, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2282 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 12.2299, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2299 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 12.2316, + "visualDurationMs": 0.0012, + "visualStartMs": 12.2316 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 12.2332, + "visualDurationMs": 0.0012, + "visualStartMs": 12.2332 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 12.2348, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2348 + }, + { + "durationMs": 0.0016, + "name": "L28", + "startMs": 12.2366, + "visualDurationMs": 0.0016, + "visualStartMs": 12.2366 + }, + { + "durationMs": 0.0057, + "name": "L29", + "startMs": 12.2385, + "visualDurationMs": 0.0057, + "visualStartMs": 12.2385 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 12.2445, + "visualDurationMs": 0.0052, + "visualStartMs": 12.2445 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 12.2501, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2501 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 12.2518, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2518 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 12.2536, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2536 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 12.2553, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2553 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 12.2571, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2571 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 12.2588, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2588 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 12.2605, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2605 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 12.2622, + "visualDurationMs": 0.0012, + "visualStartMs": 12.2622 + }, + { + "durationMs": 0.0014, + "name": "L39", + "startMs": 12.2637, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2637 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 12.2655, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2655 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 12.2672, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2672 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 12.2689, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2689 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 12.2707, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2707 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 12.2724, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2724 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 12.2742, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2742 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 12.2759, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2759 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 12.2776, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2776 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 12.2793, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2793 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 12.2811, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2811 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 12.2829, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2829 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 12.2846, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2846 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 12.2863, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2863 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 12.288, + "visualDurationMs": 0.0013, + "visualStartMs": 12.288 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 12.2896, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2896 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 12.2913, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2913 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 12.293, + "visualDurationMs": 0.0013, + "visualStartMs": 12.293 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 12.2947, + "visualDurationMs": 0.0013, + "visualStartMs": 12.2947 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 12.2963, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2963 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 12.2981, + "visualDurationMs": 0.0015, + "visualStartMs": 12.2981 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 12.2999, + "visualDurationMs": 0.0014, + "visualStartMs": 12.2999 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 12.3017, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3017 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 12.3033, + "visualDurationMs": 0.0088, + "visualStartMs": 12.3033 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 12.3124, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3124 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 12.3141, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3141 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 12.3158, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3158 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 12.3175, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3175 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 12.3191, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3191 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 12.3208, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3208 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 12.3225, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3225 + }, + { + "durationMs": 0.0016, + "name": "L70", + "startMs": 12.3241, + "visualDurationMs": 0.0016, + "visualStartMs": 12.3241 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 12.326, + "visualDurationMs": 0.0013, + "visualStartMs": 12.326 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 12.3276, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3276 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 12.3292, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3292 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 12.3308, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3308 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 12.3324, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3324 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 12.334, + "visualDurationMs": 0.0012, + "visualStartMs": 12.334 + }, + { + "durationMs": 0.0016, + "name": "L77", + "startMs": 12.3355, + "visualDurationMs": 0.0016, + "visualStartMs": 12.3355 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 12.3374, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3374 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 12.3389, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3389 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 12.3406, + "visualDurationMs": 0.0015, + "visualStartMs": 12.3406 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 12.3425, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3425 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 12.344, + "visualDurationMs": 0.0013, + "visualStartMs": 12.344 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 12.3456, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3456 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 12.3474, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3474 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 12.349, + "visualDurationMs": 0.0015, + "visualStartMs": 12.349 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 12.3508, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3508 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 12.3526, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3526 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 12.3544, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3544 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 12.356, + "visualDurationMs": 0.0013, + "visualStartMs": 12.356 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 12.3576, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3576 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 12.3592, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3592 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 12.3608, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3608 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 12.3624, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3624 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 12.364, + "visualDurationMs": 0.0012, + "visualStartMs": 12.364 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 12.3655, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3655 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 12.367, + "visualDurationMs": 0.0012, + "visualStartMs": 12.367 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 12.3686, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3686 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 12.3702, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3702 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 12.3717, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3717 + }, + { + "durationMs": 0.0009, + "name": "BindNorm", + "startMs": 12.3731, + "visualDurationMs": 0.0009, + "visualStartMs": 12.3731 + } + ], + "durationMs": 0.1959, + "name": "Lighting", + "startMs": 12.1784, + "visualDurationMs": 0.1959, + "visualStartMs": 12.1784 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 12.3748, + "visualDurationMs": 0.0004, + "visualStartMs": 12.3748 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 12.3754, + "visualDurationMs": 0.0004, + "visualStartMs": 12.3754 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 12.3745, + "visualDurationMs": 0.0014, + "visualStartMs": 12.3745 + } + ], + "durationMs": 0.2026, + "name": "DrawSprite", + "startMs": 12.1734, + "visualDurationMs": 0.2026, + "visualStartMs": 12.1734 + } + ], + "durationMs": 0.2033, + "name": "Draw Sprite: Pebble_51", + "startMs": 12.1728, + "visualDurationMs": 0.2033, + "visualStartMs": 12.1728 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 12.3776, + "visualDurationMs": 0.0004, + "visualStartMs": 12.3776 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 12.3781, + "visualDurationMs": 0.0004, + "visualStartMs": 12.3781 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 12.3791, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3791 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 12.3805, + "visualDurationMs": 0.0006, + "visualStartMs": 12.3805 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 12.3787, + "visualDurationMs": 0.0025, + "visualStartMs": 12.3787 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 12.3813, + "visualDurationMs": 0.0004, + "visualStartMs": 12.3813 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 12.3821, + "visualDurationMs": 0.0009, + "visualStartMs": 12.3821 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 12.3831, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3831 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 12.3847, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3847 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 12.3863, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3863 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 12.3879, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3879 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 12.3895, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3895 + }, + { + "durationMs": 0.0011, + "name": "L4", + "startMs": 12.3912, + "visualDurationMs": 0.0011, + "visualStartMs": 12.3912 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 12.3927, + "visualDurationMs": 0.0012, + "visualStartMs": 12.3927 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 12.3942, + "visualDurationMs": 0.0024, + "visualStartMs": 12.3942 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 12.3969, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3969 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 12.3985, + "visualDurationMs": 0.0013, + "visualStartMs": 12.3985 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 12.4002, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4002 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 12.4018, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4018 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 12.4034, + "visualDurationMs": 0.0015, + "visualStartMs": 12.4034 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 12.4053, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4053 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 12.407, + "visualDurationMs": 0.0014, + "visualStartMs": 12.407 + }, + { + "durationMs": 0.0032, + "name": "L14", + "startMs": 12.4087, + "visualDurationMs": 0.0032, + "visualStartMs": 12.4087 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 12.4123, + "visualDurationMs": 0.0015, + "visualStartMs": 12.4123 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 12.4141, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4141 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 12.4158, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4158 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 12.4175, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4175 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 12.4192, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4192 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 12.4209, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4209 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 12.4225, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4225 + }, + { + "durationMs": 0.0013, + "name": "L22", + "startMs": 12.4242, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4242 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 12.4259, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4259 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 12.4275, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4275 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 12.4291, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4291 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 12.4306, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4306 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 12.4322, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4322 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 12.4339, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4339 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 12.4357, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4357 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 12.4372, + "visualDurationMs": 0.005, + "visualStartMs": 12.4372 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 12.4426, + "visualDurationMs": 0.0015, + "visualStartMs": 12.4426 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 12.4445, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4445 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 12.446, + "visualDurationMs": 0.0014, + "visualStartMs": 12.446 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 12.4478, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4478 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 12.4495, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4495 + }, + { + "durationMs": 0.005, + "name": "L36", + "startMs": 12.4511, + "visualDurationMs": 0.005, + "visualStartMs": 12.4511 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 12.4565, + "visualDurationMs": 0.0015, + "visualStartMs": 12.4565 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 12.4584, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4584 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 12.4601, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4601 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 12.4617, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4617 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 12.4634, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4634 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 12.4652, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4652 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 12.4668, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4668 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 12.4686, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4686 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 12.4703, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4703 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 12.472, + "visualDurationMs": 0.0014, + "visualStartMs": 12.472 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 12.4737, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4737 + }, + { + "durationMs": 0.0014, + "name": "L48", + "startMs": 12.4754, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4754 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 12.4772, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4772 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 12.4789, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4789 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 12.4806, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4806 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 12.4824, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4824 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 12.4841, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4841 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 12.4857, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4857 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 12.4873, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4873 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 12.489, + "visualDurationMs": 0.0013, + "visualStartMs": 12.489 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 12.4907, + "visualDurationMs": 0.0012, + "visualStartMs": 12.4907 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 12.4922, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4922 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 12.494, + "visualDurationMs": 0.0013, + "visualStartMs": 12.494 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 12.4956, + "visualDurationMs": 0.0014, + "visualStartMs": 12.4956 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 12.4973, + "visualDurationMs": 0.0013, + "visualStartMs": 12.4973 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 12.499, + "visualDurationMs": 0.009, + "visualStartMs": 12.499 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 12.5084, + "visualDurationMs": 0.0015, + "visualStartMs": 12.5084 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 12.5102, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5102 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 12.5119, + "visualDurationMs": 0.0014, + "visualStartMs": 12.5119 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 12.5136, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5136 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 12.5153, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5153 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 12.5169, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5169 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 12.5185, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5185 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 12.5201, + "visualDurationMs": 0.0014, + "visualStartMs": 12.5201 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 12.5218, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5218 + }, + { + "durationMs": 0.0015, + "name": "L72", + "startMs": 12.5234, + "visualDurationMs": 0.0015, + "visualStartMs": 12.5234 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 12.5252, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5252 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 12.5268, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5268 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 12.5284, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5284 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 12.53, + "visualDurationMs": 0.0014, + "visualStartMs": 12.53 + }, + { + "durationMs": 0.0016, + "name": "L77", + "startMs": 12.5317, + "visualDurationMs": 0.0016, + "visualStartMs": 12.5317 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 12.5336, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5336 + }, + { + "durationMs": 0.0012, + "name": "L79", + "startMs": 12.5353, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5353 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 12.5369, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5369 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 12.5386, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5386 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 12.5402, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5402 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 12.5418, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5418 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 12.5434, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5434 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 12.545, + "visualDurationMs": 0.0014, + "visualStartMs": 12.545 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 12.5467, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5467 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 12.5483, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5483 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 12.5499, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5499 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 12.5515, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5515 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 12.5531, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5531 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 12.5547, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5547 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 12.5563, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5563 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 12.5579, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5579 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 12.5595, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5595 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 12.5611, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5611 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 12.5627, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5627 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 12.5643, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5643 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 12.5658, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5658 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 12.5674, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5674 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 12.5689, + "visualDurationMs": 0.0006, + "visualStartMs": 12.5689 + } + ], + "durationMs": 0.1881, + "name": "Lighting", + "startMs": 12.3818, + "visualDurationMs": 0.1881, + "visualStartMs": 12.3818 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 12.5704, + "visualDurationMs": 0.0004, + "visualStartMs": 12.5704 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 12.5709, + "visualDurationMs": 0.0004, + "visualStartMs": 12.5709 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 12.57, + "visualDurationMs": 0.0015, + "visualStartMs": 12.57 + } + ], + "durationMs": 0.1943, + "name": "DrawSprite", + "startMs": 12.3773, + "visualDurationMs": 0.1943, + "visualStartMs": 12.3773 + } + ], + "durationMs": 0.1948, + "name": "Draw Sprite: Pebble_50", + "startMs": 12.3769, + "visualDurationMs": 0.1948, + "visualStartMs": 12.3769 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 12.5734, + "visualDurationMs": 0.0003, + "visualStartMs": 12.5734 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 12.5738, + "visualDurationMs": 0.0004, + "visualStartMs": 12.5738 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 12.5748, + "visualDurationMs": 0.0014, + "visualStartMs": 12.5748 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 12.5764, + "visualDurationMs": 0.0005, + "visualStartMs": 12.5764 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 12.5745, + "visualDurationMs": 0.0025, + "visualStartMs": 12.5745 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 12.5772, + "visualDurationMs": 0.0003, + "visualStartMs": 12.5772 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 12.578, + "visualDurationMs": 0.0011, + "visualStartMs": 12.578 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 12.5793, + "visualDurationMs": 0.0014, + "visualStartMs": 12.5793 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 12.5811, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5811 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 12.5827, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5827 + }, + { + "durationMs": 0.0016, + "name": "L2", + "startMs": 12.5843, + "visualDurationMs": 0.0016, + "visualStartMs": 12.5843 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 12.5863, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5863 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 12.588, + "visualDurationMs": 0.0012, + "visualStartMs": 12.588 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 12.5895, + "visualDurationMs": 0.0012, + "visualStartMs": 12.5895 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 12.591, + "visualDurationMs": 0.0026, + "visualStartMs": 12.591 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 12.594, + "visualDurationMs": 0.0012, + "visualStartMs": 12.594 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 12.5955, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5955 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 12.5971, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5971 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 12.5987, + "visualDurationMs": 0.0013, + "visualStartMs": 12.5987 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 12.6003, + "visualDurationMs": 0.0015, + "visualStartMs": 12.6003 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 12.6021, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6021 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 12.6039, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6039 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 12.6055, + "visualDurationMs": 0.0034, + "visualStartMs": 12.6055 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 12.6092, + "visualDurationMs": 0.0015, + "visualStartMs": 12.6092 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 12.6111, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6111 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 12.6128, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6128 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 12.6146, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6146 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 12.6163, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6163 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 12.618, + "visualDurationMs": 0.0012, + "visualStartMs": 12.618 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 12.6196, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6196 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 12.6213, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6213 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 12.623, + "visualDurationMs": 0.0013, + "visualStartMs": 12.623 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 12.6246, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6246 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 12.6262, + "visualDurationMs": 0.0012, + "visualStartMs": 12.6262 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 12.6278, + "visualDurationMs": 0.0012, + "visualStartMs": 12.6278 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 12.6293, + "visualDurationMs": 0.0012, + "visualStartMs": 12.6293 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 12.6309, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6309 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 12.6325, + "visualDurationMs": 0.0015, + "visualStartMs": 12.6325 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 12.6344, + "visualDurationMs": 0.0049, + "visualStartMs": 12.6344 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 12.6397, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6397 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 12.6415, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6415 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 12.6432, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6432 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 12.645, + "visualDurationMs": 0.0013, + "visualStartMs": 12.645 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 12.6466, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6466 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 12.6483, + "visualDurationMs": 0.0012, + "visualStartMs": 12.6483 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 12.6499, + "visualDurationMs": 0.0012, + "visualStartMs": 12.6499 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 12.6514, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6514 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 12.653, + "visualDurationMs": 0.0012, + "visualStartMs": 12.653 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 12.6546, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6546 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 12.6562, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6562 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 12.6578, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6578 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 12.6594, + "visualDurationMs": 0.0016, + "visualStartMs": 12.6594 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 12.6613, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6613 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 12.6631, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6631 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 12.6647, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6647 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 12.6664, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6664 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 12.6681, + "visualDurationMs": 0.0016, + "visualStartMs": 12.6681 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 12.67, + "visualDurationMs": 0.0014, + "visualStartMs": 12.67 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 12.6717, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6717 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 12.6734, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6734 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 12.6751, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6751 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 12.6767, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6767 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 12.6784, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6784 + }, + { + "durationMs": 0.005, + "name": "L55", + "startMs": 12.68, + "visualDurationMs": 0.005, + "visualStartMs": 12.68 + }, + { + "durationMs": 0.0017, + "name": "L56", + "startMs": 12.6855, + "visualDurationMs": 0.0017, + "visualStartMs": 12.6855 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 12.6876, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6876 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 12.6893, + "visualDurationMs": 0.0016, + "visualStartMs": 12.6893 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 12.6912, + "visualDurationMs": 0.0013, + "visualStartMs": 12.6912 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 12.6928, + "visualDurationMs": 0.0015, + "visualStartMs": 12.6928 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 12.6946, + "visualDurationMs": 0.0014, + "visualStartMs": 12.6946 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 12.6964, + "visualDurationMs": 0.0086, + "visualStartMs": 12.6964 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 12.7054, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7054 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 12.7071, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7071 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 12.7088, + "visualDurationMs": 0.0015, + "visualStartMs": 12.7088 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 12.7107, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7107 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 12.7123, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7123 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 12.7141, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7141 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 12.7157, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7157 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 12.7175, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7175 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 12.7191, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7191 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 12.7207, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7207 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 12.7222, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7222 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 12.7239, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7239 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 12.7255, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7255 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 12.7271, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7271 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 12.7287, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7287 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 12.7302, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7302 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 12.7319, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7319 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 12.7335, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7335 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 12.7352, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7352 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 12.737, + "visualDurationMs": 0.0013, + "visualStartMs": 12.737 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 12.7386, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7386 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 12.7404, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7404 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 12.7419, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7419 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 12.7435, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7435 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 12.7451, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7451 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 12.7467, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7467 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 12.7483, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7483 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 12.75, + "visualDurationMs": 0.0012, + "visualStartMs": 12.75 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 12.7515, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7515 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 12.7531, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7531 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 12.7547, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7547 + }, + { + "durationMs": 0.0015, + "name": "L94", + "startMs": 12.7564, + "visualDurationMs": 0.0015, + "visualStartMs": 12.7564 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 12.7582, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7582 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 12.7599, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7599 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 12.7617, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7617 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 12.7633, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7633 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 12.7649, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7649 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 12.7664, + "visualDurationMs": 0.0007, + "visualStartMs": 12.7664 + } + ], + "durationMs": 0.1897, + "name": "Lighting", + "startMs": 12.5777, + "visualDurationMs": 0.1897, + "visualStartMs": 12.5777 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 12.7679, + "visualDurationMs": 0.0005, + "visualStartMs": 12.7679 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 12.7685, + "visualDurationMs": 0.0004, + "visualStartMs": 12.7685 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 12.7676, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7676 + } + ], + "durationMs": 0.196, + "name": "DrawSprite", + "startMs": 12.5731, + "visualDurationMs": 0.196, + "visualStartMs": 12.5731 + } + ], + "durationMs": 0.1966, + "name": "Draw Sprite: Pebble_54", + "startMs": 12.5726, + "visualDurationMs": 0.1966, + "visualStartMs": 12.5726 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 12.771, + "visualDurationMs": 0.0004, + "visualStartMs": 12.771 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 12.7715, + "visualDurationMs": 0.0005, + "visualStartMs": 12.7715 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 12.7726, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7726 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 12.774, + "visualDurationMs": 0.0005, + "visualStartMs": 12.774 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 12.7723, + "visualDurationMs": 0.0023, + "visualStartMs": 12.7723 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 12.7748, + "visualDurationMs": 0.0004, + "visualStartMs": 12.7748 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 12.7756, + "visualDurationMs": 0.0008, + "visualStartMs": 12.7756 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 12.7766, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7766 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 12.7784, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7784 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 12.78, + "visualDurationMs": 0.0014, + "visualStartMs": 12.78 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 12.7817, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7817 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 12.7834, + "visualDurationMs": 0.0013, + "visualStartMs": 12.7834 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 12.7851, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7851 + }, + { + "durationMs": 0.0011, + "name": "L5", + "startMs": 12.7867, + "visualDurationMs": 0.0011, + "visualStartMs": 12.7867 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 12.7882, + "visualDurationMs": 0.0025, + "visualStartMs": 12.7882 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 12.7911, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7911 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 12.7928, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7928 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 12.7946, + "visualDurationMs": 0.0012, + "visualStartMs": 12.7946 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 12.7962, + "visualDurationMs": 0.0015, + "visualStartMs": 12.7962 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 12.798, + "visualDurationMs": 0.0015, + "visualStartMs": 12.798 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 12.7999, + "visualDurationMs": 0.0014, + "visualStartMs": 12.7999 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 12.8017, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8017 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 12.8033, + "visualDurationMs": 0.0035, + "visualStartMs": 12.8033 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 12.8071, + "visualDurationMs": 0.0016, + "visualStartMs": 12.8071 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 12.809, + "visualDurationMs": 0.0015, + "visualStartMs": 12.809 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 12.8108, + "visualDurationMs": 0.0015, + "visualStartMs": 12.8108 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 12.8127, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8127 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 12.8145, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8145 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 12.8163, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8163 + }, + { + "durationMs": 0.0017, + "name": "L21", + "startMs": 12.818, + "visualDurationMs": 0.0017, + "visualStartMs": 12.818 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 12.8201, + "visualDurationMs": 0.0015, + "visualStartMs": 12.8201 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 12.822, + "visualDurationMs": 0.0012, + "visualStartMs": 12.822 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 12.8236, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8236 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 12.8253, + "visualDurationMs": 0.0012, + "visualStartMs": 12.8253 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 12.8268, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8268 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 12.8284, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8284 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 12.83, + "visualDurationMs": 0.0013, + "visualStartMs": 12.83 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 12.8316, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8316 + }, + { + "durationMs": 0.0048, + "name": "L30", + "startMs": 12.8333, + "visualDurationMs": 0.0048, + "visualStartMs": 12.8333 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 12.8385, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8385 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 12.8403, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8403 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 12.8419, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8419 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 12.8436, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8436 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 12.8453, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8453 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 12.8469, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8469 + }, + { + "durationMs": 0.0014, + "name": "L37", + "startMs": 12.8486, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8486 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 12.8503, + "visualDurationMs": 0.0012, + "visualStartMs": 12.8503 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 12.8519, + "visualDurationMs": 0.0012, + "visualStartMs": 12.8519 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 12.8534, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8534 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 12.8552, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8552 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 12.8568, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8568 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 12.8584, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8584 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 12.8601, + "visualDurationMs": 0.0015, + "visualStartMs": 12.8601 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 12.8619, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8619 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 12.8635, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8635 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 12.8653, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8653 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 12.867, + "visualDurationMs": 0.0015, + "visualStartMs": 12.867 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 12.8688, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8688 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 12.8706, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8706 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 12.8724, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8724 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 12.8743, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8743 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 12.8759, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8759 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 12.8776, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8776 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 12.8792, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8792 + }, + { + "durationMs": 0.0055, + "name": "L56", + "startMs": 12.8809, + "visualDurationMs": 0.0055, + "visualStartMs": 12.8809 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 12.8867, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8867 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 12.8883, + "visualDurationMs": 0.0015, + "visualStartMs": 12.8883 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 12.8902, + "visualDurationMs": 0.0013, + "visualStartMs": 12.8902 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 12.8918, + "visualDurationMs": 0.0015, + "visualStartMs": 12.8918 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 12.8936, + "visualDurationMs": 0.0014, + "visualStartMs": 12.8936 + }, + { + "durationMs": 0.0084, + "name": "L62", + "startMs": 12.8953, + "visualDurationMs": 0.0084, + "visualStartMs": 12.8953 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 12.9041, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9041 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 12.9058, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9058 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 12.9075, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9075 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 12.9092, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9092 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 12.9109, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9109 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 12.9126, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9126 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 12.9141, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9141 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 12.9157, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9157 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 12.9173, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9173 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 12.9189, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9189 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 12.9207, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9207 + }, + { + "durationMs": 0.0048, + "name": "L74", + "startMs": 12.9222, + "visualDurationMs": 0.0048, + "visualStartMs": 12.9222 + }, + { + "durationMs": 0.0016, + "name": "L75", + "startMs": 12.9274, + "visualDurationMs": 0.0016, + "visualStartMs": 12.9274 + }, + { + "durationMs": 0.0015, + "name": "L76", + "startMs": 12.9293, + "visualDurationMs": 0.0015, + "visualStartMs": 12.9293 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 12.9311, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9311 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 12.9329, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9329 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 12.9347, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9347 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 12.9364, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9364 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 12.9382, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9382 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 12.9399, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9399 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 12.9416, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9416 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 12.9432, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9432 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 12.9448, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9448 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 12.9466, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9466 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 12.9483, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9483 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 12.95, + "visualDurationMs": 0.0013, + "visualStartMs": 12.95 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 12.9517, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9517 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 12.9534, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9534 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 12.9551, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9551 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 12.9567, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9567 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 12.9585, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9585 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 12.96, + "visualDurationMs": 0.0013, + "visualStartMs": 12.96 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 12.9616, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9616 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 12.9632, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9632 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 12.965, + "visualDurationMs": 0.0012, + "visualStartMs": 12.965 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 12.9666, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9666 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 12.9682, + "visualDurationMs": 0.0012, + "visualStartMs": 12.9682 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 12.9696, + "visualDurationMs": 0.0006, + "visualStartMs": 12.9696 + } + ], + "durationMs": 0.1953, + "name": "Lighting", + "startMs": 12.7753, + "visualDurationMs": 0.1953, + "visualStartMs": 12.7753 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 12.971, + "visualDurationMs": 0.0004, + "visualStartMs": 12.971 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 12.9716, + "visualDurationMs": 0.0004, + "visualStartMs": 12.9716 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 12.9707, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9707 + } + ], + "durationMs": 0.2016, + "name": "DrawSprite", + "startMs": 12.7706, + "visualDurationMs": 0.2016, + "visualStartMs": 12.7706 + } + ], + "durationMs": 0.2021, + "name": "Draw Sprite: Pebble_55", + "startMs": 12.7702, + "visualDurationMs": 0.2021, + "visualStartMs": 12.7702 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 12.9738, + "visualDurationMs": 0.0003, + "visualStartMs": 12.9738 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 12.9742, + "visualDurationMs": 0.0004, + "visualStartMs": 12.9742 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 12.9752, + "visualDurationMs": 0.0014, + "visualStartMs": 12.9752 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 12.9768, + "visualDurationMs": 0.0006, + "visualStartMs": 12.9768 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 12.9749, + "visualDurationMs": 0.0026, + "visualStartMs": 12.9749 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 12.9776, + "visualDurationMs": 0.0004, + "visualStartMs": 12.9776 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 12.9784, + "visualDurationMs": 0.0009, + "visualStartMs": 12.9784 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 12.9795, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9795 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 12.9813, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9813 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 12.9829, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9829 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 12.9845, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9845 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 12.9862, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9862 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 12.9878, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9878 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 12.9894, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9894 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 12.991, + "visualDurationMs": 0.0028, + "visualStartMs": 12.991 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 12.9941, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9941 + }, + { + "durationMs": 0.0015, + "name": "L8", + "startMs": 12.9958, + "visualDurationMs": 0.0015, + "visualStartMs": 12.9958 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 12.9976, + "visualDurationMs": 0.0013, + "visualStartMs": 12.9976 + }, + { + "durationMs": 0.0016, + "name": "L10", + "startMs": 12.9992, + "visualDurationMs": 0.0016, + "visualStartMs": 12.9992 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 13.0011, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0011 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 13.0029, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0029 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 13.0046, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0046 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 13.0063, + "visualDurationMs": 0.0036, + "visualStartMs": 13.0063 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 13.0102, + "visualDurationMs": 0.0016, + "visualStartMs": 13.0102 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 13.0121, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0121 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 13.0138, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0138 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 13.0157, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0157 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 13.0176, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0176 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 13.0195, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0195 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 13.0211, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0211 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 13.0229, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0229 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 13.0248, + "visualDurationMs": 0.0012, + "visualStartMs": 13.0248 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 13.0264, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0264 + }, + { + "durationMs": 0.0016, + "name": "L25", + "startMs": 13.028, + "visualDurationMs": 0.0016, + "visualStartMs": 13.028 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 13.03, + "visualDurationMs": 0.0014, + "visualStartMs": 13.03 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 13.0318, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0318 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 13.0335, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0335 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 13.0353, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0353 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 13.037, + "visualDurationMs": 0.0052, + "visualStartMs": 13.037 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 13.0426, + "visualDurationMs": 0.0016, + "visualStartMs": 13.0426 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 13.0445, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0445 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 13.0462, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0462 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 13.048, + "visualDurationMs": 0.0015, + "visualStartMs": 13.048 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 13.0498, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0498 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 13.0515, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0515 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 13.0531, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0531 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 13.0548, + "visualDurationMs": 0.0012, + "visualStartMs": 13.0548 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 13.0563, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0563 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 13.0581, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0581 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 13.0598, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0598 + }, + { + "durationMs": 0.0016, + "name": "L42", + "startMs": 13.0614, + "visualDurationMs": 0.0016, + "visualStartMs": 13.0614 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 13.0634, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0634 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 13.0652, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0652 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 13.0671, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0671 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 13.0687, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0687 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 13.0704, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0704 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 13.0721, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0721 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 13.0739, + "visualDurationMs": 0.0016, + "visualStartMs": 13.0739 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 13.0758, + "visualDurationMs": 0.0016, + "visualStartMs": 13.0758 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 13.0777, + "visualDurationMs": 0.0015, + "visualStartMs": 13.0777 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 13.0795, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0795 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 13.0812, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0812 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 13.0829, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0829 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 13.0846, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0846 + }, + { + "durationMs": 0.0012, + "name": "L56", + "startMs": 13.0864, + "visualDurationMs": 0.0012, + "visualStartMs": 13.0864 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 13.088, + "visualDurationMs": 0.0013, + "visualStartMs": 13.088 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 13.0897, + "visualDurationMs": 0.0014, + "visualStartMs": 13.0897 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 13.0915, + "visualDurationMs": 0.0012, + "visualStartMs": 13.0915 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 13.0931, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0931 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 13.0948, + "visualDurationMs": 0.0013, + "visualStartMs": 13.0948 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 13.0964, + "visualDurationMs": 0.0087, + "visualStartMs": 13.0964 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 13.1054, + "visualDurationMs": 0.0015, + "visualStartMs": 13.1054 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 13.1072, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1072 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 13.1089, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1089 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 13.1106, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1106 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 13.1123, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1123 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 13.114, + "visualDurationMs": 0.0013, + "visualStartMs": 13.114 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 13.1157, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1157 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 13.1174, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1174 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 13.1192, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1192 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 13.1207, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1207 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 13.1223, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1223 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 13.1238, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1238 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 13.1255, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1255 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 13.1271, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1271 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 13.1288, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1288 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 13.1303, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1303 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 13.132, + "visualDurationMs": 0.0013, + "visualStartMs": 13.132 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 13.1336, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1336 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 13.1352, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1352 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 13.137, + "visualDurationMs": 0.0013, + "visualStartMs": 13.137 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 13.1387, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1387 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 13.1402, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1402 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 13.1419, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1419 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 13.1436, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1436 + }, + { + "durationMs": 0.0015, + "name": "L87", + "startMs": 13.1453, + "visualDurationMs": 0.0015, + "visualStartMs": 13.1453 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 13.1471, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1471 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 13.1488, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1488 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 13.1505, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1505 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 13.152, + "visualDurationMs": 0.0013, + "visualStartMs": 13.152 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 13.1537, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1537 + }, + { + "durationMs": 0.0046, + "name": "L93", + "startMs": 13.1552, + "visualDurationMs": 0.0046, + "visualStartMs": 13.1552 + }, + { + "durationMs": 0.0017, + "name": "L94", + "startMs": 13.1603, + "visualDurationMs": 0.0017, + "visualStartMs": 13.1603 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 13.1623, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1623 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 13.164, + "visualDurationMs": 0.0013, + "visualStartMs": 13.164 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 13.1657, + "visualDurationMs": 0.0014, + "visualStartMs": 13.1657 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 13.1674, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1674 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 13.169, + "visualDurationMs": 0.0014, + "visualStartMs": 13.169 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 13.1705, + "visualDurationMs": 0.0007, + "visualStartMs": 13.1705 + } + ], + "durationMs": 0.1934, + "name": "Lighting", + "startMs": 12.9781, + "visualDurationMs": 0.1934, + "visualStartMs": 12.9781 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 13.1721, + "visualDurationMs": 0.0004, + "visualStartMs": 13.1721 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 13.1726, + "visualDurationMs": 0.0005, + "visualStartMs": 13.1726 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 13.1717, + "visualDurationMs": 0.0015, + "visualStartMs": 13.1717 + } + ], + "durationMs": 0.1998, + "name": "DrawSprite", + "startMs": 12.9735, + "visualDurationMs": 0.1998, + "visualStartMs": 12.9735 + } + ], + "durationMs": 0.2003, + "name": "Draw Sprite: Pebble_56", + "startMs": 12.9731, + "visualDurationMs": 0.2003, + "visualStartMs": 12.9731 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 13.1746, + "visualDurationMs": 0.0003, + "visualStartMs": 13.1746 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 13.1751, + "visualDurationMs": 0.0004, + "visualStartMs": 13.1751 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 13.176, + "visualDurationMs": 0.0012, + "visualStartMs": 13.176 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 13.1773, + "visualDurationMs": 0.0005, + "visualStartMs": 13.1773 + } + ], + "durationMs": 0.0022, + "name": "SetUniforms", + "startMs": 13.1757, + "visualDurationMs": 0.0022, + "visualStartMs": 13.1757 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 13.1781, + "visualDurationMs": 0.0003, + "visualStartMs": 13.1781 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 13.1789, + "visualDurationMs": 0.0009, + "visualStartMs": 13.1789 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 13.18, + "visualDurationMs": 0.0014, + "visualStartMs": 13.18 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 13.1818, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1818 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 13.1834, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1834 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 13.1849, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1849 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 13.1866, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1866 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 13.1882, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1882 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 13.1897, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1897 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 13.1913, + "visualDurationMs": 0.0026, + "visualStartMs": 13.1913 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 13.1942, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1942 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 13.1958, + "visualDurationMs": 0.0013, + "visualStartMs": 13.1958 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 13.1975, + "visualDurationMs": 0.0012, + "visualStartMs": 13.1975 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 13.199, + "visualDurationMs": 0.0013, + "visualStartMs": 13.199 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 13.2007, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2007 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 13.2024, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2024 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 13.2041, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2041 + }, + { + "durationMs": 0.0032, + "name": "L14", + "startMs": 13.2058, + "visualDurationMs": 0.0032, + "visualStartMs": 13.2058 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 13.2094, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2094 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 13.2112, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2112 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 13.2129, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2129 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 13.2146, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2146 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 13.2163, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2163 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 13.218, + "visualDurationMs": 0.0013, + "visualStartMs": 13.218 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 13.2196, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2196 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 13.2213, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2213 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 13.2232, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2232 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 13.2248, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2248 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 13.2266, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2266 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 13.2281, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2281 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 13.2297, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2297 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 13.2312, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2312 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 13.2329, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2329 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 13.2345, + "visualDurationMs": 0.0049, + "visualStartMs": 13.2345 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 13.2398, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2398 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 13.2416, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2416 + }, + { + "durationMs": 0.0017, + "name": "L33", + "startMs": 13.2431, + "visualDurationMs": 0.0017, + "visualStartMs": 13.2431 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 13.2451, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2451 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 13.2467, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2467 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 13.2485, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2485 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 13.2501, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2501 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 13.2517, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2517 + }, + { + "durationMs": 0.0014, + "name": "L39", + "startMs": 13.2533, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2533 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 13.255, + "visualDurationMs": 0.0013, + "visualStartMs": 13.255 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 13.2567, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2567 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 13.2583, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2583 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 13.2599, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2599 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 13.2617, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2617 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 13.2634, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2634 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 13.2651, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2651 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 13.2668, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2668 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 13.2685, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2685 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 13.2703, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2703 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 13.2722, + "visualDurationMs": 0.0015, + "visualStartMs": 13.2722 + }, + { + "durationMs": 0.0016, + "name": "L51", + "startMs": 13.274, + "visualDurationMs": 0.0016, + "visualStartMs": 13.274 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 13.2759, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2759 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 13.2775, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2775 + }, + { + "durationMs": 0.0012, + "name": "L54", + "startMs": 13.2792, + "visualDurationMs": 0.0012, + "visualStartMs": 13.2792 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 13.2808, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2808 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 13.2825, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2825 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 13.2843, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2843 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 13.2859, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2859 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 13.2876, + "visualDurationMs": 0.0013, + "visualStartMs": 13.2876 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 13.2892, + "visualDurationMs": 0.0014, + "visualStartMs": 13.2892 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 13.291, + "visualDurationMs": 0.0013, + "visualStartMs": 13.291 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 13.2927, + "visualDurationMs": 0.0086, + "visualStartMs": 13.2927 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 13.3017, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3017 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 13.3033, + "visualDurationMs": 0.0014, + "visualStartMs": 13.3033 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 13.305, + "visualDurationMs": 0.0014, + "visualStartMs": 13.305 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 13.3067, + "visualDurationMs": 0.0015, + "visualStartMs": 13.3067 + }, + { + "durationMs": 0.0017, + "name": "L67", + "startMs": 13.3085, + "visualDurationMs": 0.0017, + "visualStartMs": 13.3085 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 13.3105, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3105 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 13.3121, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3121 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 13.3137, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3137 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 13.3154, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3154 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 13.317, + "visualDurationMs": 0.0012, + "visualStartMs": 13.317 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 13.3186, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3186 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 13.3201, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3201 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 13.3217, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3217 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 13.3233, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3233 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 13.3249, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3249 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 13.3265, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3265 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 13.3281, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3281 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 13.3297, + "visualDurationMs": 0.0015, + "visualStartMs": 13.3297 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 13.3316, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3316 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 13.3331, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3331 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 13.3347, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3347 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 13.3363, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3363 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 13.3379, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3379 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 13.3395, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3395 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 13.3411, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3411 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 13.3427, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3427 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 13.3443, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3443 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 13.3459, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3459 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 13.3475, + "visualDurationMs": 0.0015, + "visualStartMs": 13.3475 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 13.3494, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3494 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 13.3509, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3509 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 13.3524, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3524 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 13.354, + "visualDurationMs": 0.0012, + "visualStartMs": 13.354 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 13.3556, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3556 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 13.3571, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3571 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 13.3587, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3587 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 13.3603, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3603 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 13.3618, + "visualDurationMs": 0.0005, + "visualStartMs": 13.3618 + } + ], + "durationMs": 0.184, + "name": "Lighting", + "startMs": 13.1786, + "visualDurationMs": 0.184, + "visualStartMs": 13.1786 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 13.363, + "visualDurationMs": 0.0004, + "visualStartMs": 13.363 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 13.3635, + "visualDurationMs": 0.0004, + "visualStartMs": 13.3635 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 13.3627, + "visualDurationMs": 0.0014, + "visualStartMs": 13.3627 + } + ], + "durationMs": 0.1899, + "name": "DrawSprite", + "startMs": 13.1743, + "visualDurationMs": 0.1899, + "visualStartMs": 13.1743 + } + ], + "durationMs": 0.1904, + "name": "Draw Sprite: Pebble_57", + "startMs": 13.1739, + "visualDurationMs": 0.1904, + "visualStartMs": 13.1739 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 13.3655, + "visualDurationMs": 0.0003, + "visualStartMs": 13.3655 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 13.3659, + "visualDurationMs": 0.0003, + "visualStartMs": 13.3659 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 13.3669, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3669 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 13.3683, + "visualDurationMs": 0.0005, + "visualStartMs": 13.3683 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 13.3665, + "visualDurationMs": 0.0025, + "visualStartMs": 13.3665 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 13.3691, + "visualDurationMs": 0.0003, + "visualStartMs": 13.3691 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 13.3699, + "visualDurationMs": 0.0009, + "visualStartMs": 13.3699 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 13.3709, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3709 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 13.3726, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3726 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 13.3742, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3742 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 13.3758, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3758 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 13.3774, + "visualDurationMs": 0.0013, + "visualStartMs": 13.3774 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 13.379, + "visualDurationMs": 0.0013, + "visualStartMs": 13.379 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 13.3806, + "visualDurationMs": 0.0012, + "visualStartMs": 13.3806 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 13.3821, + "visualDurationMs": 0.0024, + "visualStartMs": 13.3821 + }, + { + "durationMs": 0.0047, + "name": "L7", + "startMs": 13.3849, + "visualDurationMs": 0.0047, + "visualStartMs": 13.3849 + }, + { + "durationMs": 0.0071, + "name": "L8", + "startMs": 13.3901, + "visualDurationMs": 0.0071, + "visualStartMs": 13.3901 + }, + { + "durationMs": 0.0019, + "name": "L9", + "startMs": 13.3977, + "visualDurationMs": 0.0019, + "visualStartMs": 13.3977 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 13.3999, + "visualDurationMs": 0.0014, + "visualStartMs": 13.3999 + }, + { + "durationMs": 0.0016, + "name": "L11", + "startMs": 13.4017, + "visualDurationMs": 0.0016, + "visualStartMs": 13.4017 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 13.4036, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4036 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 13.4055, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4055 + }, + { + "durationMs": 0.0038, + "name": "L14", + "startMs": 13.4073, + "visualDurationMs": 0.0038, + "visualStartMs": 13.4073 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 13.4114, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4114 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 13.4132, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4132 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 13.415, + "visualDurationMs": 0.0014, + "visualStartMs": 13.415 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 13.4167, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4167 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 13.4184, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4184 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 13.4203, + "visualDurationMs": 0.0012, + "visualStartMs": 13.4203 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 13.4219, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4219 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 13.4236, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4236 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 13.4255, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4255 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 13.4271, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4271 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 13.4288, + "visualDurationMs": 0.0012, + "visualStartMs": 13.4288 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 13.4304, + "visualDurationMs": 0.0012, + "visualStartMs": 13.4304 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 13.432, + "visualDurationMs": 0.0013, + "visualStartMs": 13.432 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 13.4337, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4337 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 13.4354, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4354 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 13.4371, + "visualDurationMs": 0.005, + "visualStartMs": 13.4371 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 13.4424, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4424 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 13.4443, + "visualDurationMs": 0.0012, + "visualStartMs": 13.4443 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 13.4458, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4458 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 13.4476, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4476 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 13.4495, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4495 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 13.4512, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4512 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 13.4529, + "visualDurationMs": 0.0012, + "visualStartMs": 13.4529 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 13.4545, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4545 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 13.4562, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4562 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 13.4579, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4579 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 13.4596, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4596 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 13.4613, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4613 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 13.4631, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4631 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 13.4648, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4648 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 13.4666, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4666 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 13.4682, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4682 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 13.47, + "visualDurationMs": 0.0015, + "visualStartMs": 13.47 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 13.4718, + "visualDurationMs": 0.0016, + "visualStartMs": 13.4718 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 13.4738, + "visualDurationMs": 0.0016, + "visualStartMs": 13.4738 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 13.4758, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4758 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 13.4775, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4775 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 13.4793, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4793 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 13.4809, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4809 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 13.4827, + "visualDurationMs": 0.0014, + "visualStartMs": 13.4827 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 13.4844, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4844 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 13.4861, + "visualDurationMs": 0.0016, + "visualStartMs": 13.4861 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 13.4881, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4881 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 13.4898, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4898 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 13.4916, + "visualDurationMs": 0.0013, + "visualStartMs": 13.4916 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 13.4932, + "visualDurationMs": 0.0015, + "visualStartMs": 13.4932 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 13.495, + "visualDurationMs": 0.0014, + "visualStartMs": 13.495 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 13.4968, + "visualDurationMs": 0.009, + "visualStartMs": 13.4968 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 13.5062, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5062 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 13.5079, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5079 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 13.5096, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5096 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 13.5112, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5112 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 13.513, + "visualDurationMs": 0.0014, + "visualStartMs": 13.513 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 13.5147, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5147 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 13.5164, + "visualDurationMs": 0.0015, + "visualStartMs": 13.5164 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 13.5182, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5182 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 13.5198, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5198 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 13.5215, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5215 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 13.5232, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5232 + }, + { + "durationMs": 0.0015, + "name": "L74", + "startMs": 13.5249, + "visualDurationMs": 0.0015, + "visualStartMs": 13.5249 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 13.5267, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5267 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 13.5283, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5283 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 13.5301, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5301 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 13.5318, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5318 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 13.5336, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5336 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 13.5353, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5353 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 13.5369, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5369 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 13.5386, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5386 + }, + { + "durationMs": 0.0055, + "name": "L83", + "startMs": 13.5403, + "visualDurationMs": 0.0055, + "visualStartMs": 13.5403 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 13.5462, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5462 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 13.5478, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5478 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 13.5495, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5495 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 13.5512, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5512 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 13.5529, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5529 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 13.5545, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5545 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 13.5561, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5561 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 13.5576, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5576 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 13.5593, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5593 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 13.5609, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5609 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 13.5625, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5625 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 13.5641, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5641 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 13.5657, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5657 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 13.5674, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5674 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 13.569, + "visualDurationMs": 0.0013, + "visualStartMs": 13.569 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 13.5706, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5706 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 13.572, + "visualDurationMs": 0.0007, + "visualStartMs": 13.572 + } + ], + "durationMs": 0.2035, + "name": "Lighting", + "startMs": 13.3696, + "visualDurationMs": 0.2035, + "visualStartMs": 13.3696 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 13.5736, + "visualDurationMs": 0.0004, + "visualStartMs": 13.5736 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 13.5742, + "visualDurationMs": 0.0005, + "visualStartMs": 13.5742 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 13.5732, + "visualDurationMs": 0.0017, + "visualStartMs": 13.5732 + } + ], + "durationMs": 0.21, + "name": "DrawSprite", + "startMs": 13.3651, + "visualDurationMs": 0.21, + "visualStartMs": 13.3651 + } + ], + "durationMs": 0.2105, + "name": "Draw Sprite: Pebble_58", + "startMs": 13.3647, + "visualDurationMs": 0.2105, + "visualStartMs": 13.3647 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0002, + "name": "ShaderSelect", + "startMs": 13.5771, + "visualDurationMs": 0.0002, + "visualStartMs": 13.5771 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 13.5775, + "visualDurationMs": 0.0004, + "visualStartMs": 13.5775 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 13.5785, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5785 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 13.5798, + "visualDurationMs": 0.0005, + "visualStartMs": 13.5798 + } + ], + "durationMs": 0.0022, + "name": "SetUniforms", + "startMs": 13.5782, + "visualDurationMs": 0.0022, + "visualStartMs": 13.5782 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 13.5806, + "visualDurationMs": 0.0003, + "visualStartMs": 13.5806 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 13.5815, + "visualDurationMs": 0.001, + "visualStartMs": 13.5815 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 13.5826, + "visualDurationMs": 0.0015, + "visualStartMs": 13.5826 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 13.5845, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5845 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 13.5861, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5861 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 13.5877, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5877 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 13.5893, + "visualDurationMs": 0.0014, + "visualStartMs": 13.5893 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 13.591, + "visualDurationMs": 0.0012, + "visualStartMs": 13.591 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 13.5925, + "visualDurationMs": 0.0013, + "visualStartMs": 13.5925 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 13.5941, + "visualDurationMs": 0.0025, + "visualStartMs": 13.5941 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 13.5969, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5969 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 13.5984, + "visualDurationMs": 0.0012, + "visualStartMs": 13.5984 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 13.6, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 13.6017, + "visualDurationMs": 0.0012, + "visualStartMs": 13.6017 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 13.6032, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6032 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 13.605, + "visualDurationMs": 0.0013, + "visualStartMs": 13.605 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 13.6066, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6066 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 13.6083, + "visualDurationMs": 0.0033, + "visualStartMs": 13.6083 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 13.612, + "visualDurationMs": 0.0014, + "visualStartMs": 13.612 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 13.6138, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6138 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 13.6154, + "visualDurationMs": 0.0015, + "visualStartMs": 13.6154 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 13.6172, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6172 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 13.6189, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6189 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 13.6205, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6205 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 13.6221, + "visualDurationMs": 0.0015, + "visualStartMs": 13.6221 + }, + { + "durationMs": 0.0017, + "name": "L22", + "startMs": 13.6239, + "visualDurationMs": 0.0017, + "visualStartMs": 13.6239 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 13.6259, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6259 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 13.6276, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6276 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 13.6292, + "visualDurationMs": 0.0012, + "visualStartMs": 13.6292 + }, + { + "durationMs": 0.0049, + "name": "L26", + "startMs": 13.6308, + "visualDurationMs": 0.0049, + "visualStartMs": 13.6308 + }, + { + "durationMs": 0.0017, + "name": "L27", + "startMs": 13.6361, + "visualDurationMs": 0.0017, + "visualStartMs": 13.6361 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 13.6381, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6381 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 13.6399, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6399 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 13.6415, + "visualDurationMs": 0.0053, + "visualStartMs": 13.6415 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 13.6472, + "visualDurationMs": 0.0015, + "visualStartMs": 13.6472 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 13.649, + "visualDurationMs": 0.0012, + "visualStartMs": 13.649 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 13.6506, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6506 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 13.6524, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6524 + }, + { + "durationMs": 0.0016, + "name": "L35", + "startMs": 13.6541, + "visualDurationMs": 0.0016, + "visualStartMs": 13.6541 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 13.6561, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6561 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 13.6578, + "visualDurationMs": 0.0012, + "visualStartMs": 13.6578 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 13.6594, + "visualDurationMs": 0.0012, + "visualStartMs": 13.6594 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 13.661, + "visualDurationMs": 0.0012, + "visualStartMs": 13.661 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 13.6626, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6626 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 13.6642, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6642 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 13.6659, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6659 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 13.6676, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6676 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 13.6693, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6693 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 13.6711, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6711 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 13.6727, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6727 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 13.6745, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6745 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 13.6761, + "visualDurationMs": 0.0015, + "visualStartMs": 13.6761 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 13.678, + "visualDurationMs": 0.0016, + "visualStartMs": 13.678 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 13.6799, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6799 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 13.6816, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6816 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 13.6833, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6833 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 13.6849, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6849 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 13.6866, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6866 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 13.6882, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6882 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 13.6898, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6898 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 13.6915, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6915 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 13.6931, + "visualDurationMs": 0.0014, + "visualStartMs": 13.6931 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 13.6948, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6948 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 13.6964, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6964 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 13.6981, + "visualDurationMs": 0.0013, + "visualStartMs": 13.6981 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 13.6998, + "visualDurationMs": 0.0085, + "visualStartMs": 13.6998 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 13.7087, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7087 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 13.7103, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7103 + }, + { + "durationMs": 0.0016, + "name": "L65", + "startMs": 13.712, + "visualDurationMs": 0.0016, + "visualStartMs": 13.712 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 13.7139, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7139 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 13.7156, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7156 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 13.7172, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7172 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 13.7189, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7189 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 13.7206, + "visualDurationMs": 0.0015, + "visualStartMs": 13.7206 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 13.7224, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7224 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 13.724, + "visualDurationMs": 0.0014, + "visualStartMs": 13.724 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 13.7257, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7257 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 13.7273, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7273 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 13.7289, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7289 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 13.7305, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7305 + }, + { + "durationMs": 0.0017, + "name": "L77", + "startMs": 13.7321, + "visualDurationMs": 0.0017, + "visualStartMs": 13.7321 + }, + { + "durationMs": 0.0015, + "name": "L78", + "startMs": 13.7341, + "visualDurationMs": 0.0015, + "visualStartMs": 13.7341 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 13.736, + "visualDurationMs": 0.0013, + "visualStartMs": 13.736 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 13.7377, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7377 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 13.7392, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7392 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 13.7408, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7408 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 13.7426, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7426 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 13.7442, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7442 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 13.7457, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7457 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 13.7474, + "visualDurationMs": 0.0014, + "visualStartMs": 13.7474 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 13.7492, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7492 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 13.7509, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7509 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 13.7524, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7524 + }, + { + "durationMs": 0.0011, + "name": "L90", + "startMs": 13.7541, + "visualDurationMs": 0.0011, + "visualStartMs": 13.7541 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 13.7556, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7556 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 13.7573, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7573 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 13.7589, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7589 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 13.7604, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7604 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 13.762, + "visualDurationMs": 0.0013, + "visualStartMs": 13.762 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 13.7636, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7636 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 13.7652, + "visualDurationMs": 0.0015, + "visualStartMs": 13.7652 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 13.767, + "visualDurationMs": 0.0012, + "visualStartMs": 13.767 + }, + { + "durationMs": 0.0015, + "name": "L99", + "startMs": 13.7686, + "visualDurationMs": 0.0015, + "visualStartMs": 13.7686 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 13.7702, + "visualDurationMs": 0.0007, + "visualStartMs": 13.7702 + } + ], + "durationMs": 0.1902, + "name": "Lighting", + "startMs": 13.5811, + "visualDurationMs": 0.1902, + "visualStartMs": 13.5811 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 13.7718, + "visualDurationMs": 0.0003, + "visualStartMs": 13.7718 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 13.7723, + "visualDurationMs": 0.0006, + "visualStartMs": 13.7723 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 13.7714, + "visualDurationMs": 0.0017, + "visualStartMs": 13.7714 + } + ], + "durationMs": 0.1966, + "name": "DrawSprite", + "startMs": 13.5766, + "visualDurationMs": 0.1966, + "visualStartMs": 13.5766 + } + ], + "durationMs": 0.1971, + "name": "Draw Sprite: Pebble_59", + "startMs": 13.5762, + "visualDurationMs": 0.1971, + "visualStartMs": 13.5762 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 13.7805, + "visualDurationMs": 0.0004, + "visualStartMs": 13.7805 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 13.781, + "visualDurationMs": 0.0004, + "visualStartMs": 13.781 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 13.7821, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7821 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 13.7836, + "visualDurationMs": 0.0005, + "visualStartMs": 13.7836 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 13.7818, + "visualDurationMs": 0.0024, + "visualStartMs": 13.7818 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 13.7844, + "visualDurationMs": 0.0003, + "visualStartMs": 13.7844 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 13.7852, + "visualDurationMs": 0.0009, + "visualStartMs": 13.7852 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 13.7862, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7862 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 13.7879, + "visualDurationMs": 0.0012, + "visualStartMs": 13.7879 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 13.7895, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7895 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 13.7912, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7912 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 13.7928, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7928 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 13.7944, + "visualDurationMs": 0.0013, + "visualStartMs": 13.7944 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 13.796, + "visualDurationMs": 0.0012, + "visualStartMs": 13.796 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 13.7975, + "visualDurationMs": 0.0028, + "visualStartMs": 13.7975 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 13.8006, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8006 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 13.8023, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8023 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 13.8039, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8039 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 13.8055, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8055 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 13.8071, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8071 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 13.8088, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8088 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 13.8105, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8105 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 13.8122, + "visualDurationMs": 0.0035, + "visualStartMs": 13.8122 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 13.816, + "visualDurationMs": 0.0017, + "visualStartMs": 13.816 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 13.818, + "visualDurationMs": 0.0014, + "visualStartMs": 13.818 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 13.8198, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8198 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 13.8216, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8216 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 13.8232, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8232 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 13.825, + "visualDurationMs": 0.0012, + "visualStartMs": 13.825 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 13.8266, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8266 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 13.8282, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8282 + }, + { + "durationMs": 0.0015, + "name": "L23", + "startMs": 13.8299, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8299 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 13.8318, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8318 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 13.8334, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8334 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 13.8349, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8349 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 13.8365, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8365 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 13.838, + "visualDurationMs": 0.0013, + "visualStartMs": 13.838 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 13.8396, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8396 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 13.8414, + "visualDurationMs": 0.005, + "visualStartMs": 13.8414 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 13.8469, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8469 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 13.8488, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8488 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 13.8504, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8504 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 13.8521, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8521 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 13.8538, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8538 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 13.8555, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8555 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 13.8571, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8571 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 13.8587, + "visualDurationMs": 0.0012, + "visualStartMs": 13.8587 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 13.8602, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8602 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 13.8618, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8618 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 13.8636, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8636 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 13.8653, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8653 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 13.867, + "visualDurationMs": 0.0015, + "visualStartMs": 13.867 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 13.8689, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8689 + }, + { + "durationMs": 0.0047, + "name": "L45", + "startMs": 13.8706, + "visualDurationMs": 0.0047, + "visualStartMs": 13.8706 + }, + { + "durationMs": 0.0019, + "name": "L46", + "startMs": 13.8757, + "visualDurationMs": 0.0019, + "visualStartMs": 13.8757 + }, + { + "durationMs": 0.0016, + "name": "L47", + "startMs": 13.878, + "visualDurationMs": 0.0016, + "visualStartMs": 13.878 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 13.8799, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8799 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 13.8818, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8818 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 13.8836, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8836 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 13.8854, + "visualDurationMs": 0.0014, + "visualStartMs": 13.8854 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 13.8872, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8872 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 13.8888, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8888 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 13.8905, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8905 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 13.8924, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8924 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 13.8941, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8941 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 13.8957, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8957 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 13.8973, + "visualDurationMs": 0.0015, + "visualStartMs": 13.8973 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 13.8991, + "visualDurationMs": 0.0013, + "visualStartMs": 13.8991 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 13.9008, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9008 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 13.9027, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9027 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 13.9045, + "visualDurationMs": 0.0087, + "visualStartMs": 13.9045 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 13.9136, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9136 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 13.9152, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9152 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 13.917, + "visualDurationMs": 0.0014, + "visualStartMs": 13.917 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 13.9187, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9187 + }, + { + "durationMs": 0.0015, + "name": "L67", + "startMs": 13.9204, + "visualDurationMs": 0.0015, + "visualStartMs": 13.9204 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 13.9222, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9222 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 13.9239, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9239 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 13.9255, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9255 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 13.9273, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9273 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 13.9288, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9288 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 13.9305, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9305 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 13.9321, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9321 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 13.9337, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9337 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 13.9353, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9353 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 13.9369, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9369 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 13.9384, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9384 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 13.94, + "visualDurationMs": 0.0014, + "visualStartMs": 13.94 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 13.9418, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9418 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 13.9435, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9435 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 13.9451, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9451 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 13.9468, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9468 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 13.9486, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9486 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 13.9502, + "visualDurationMs": 0.0016, + "visualStartMs": 13.9502 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 13.9522, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9522 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 13.954, + "visualDurationMs": 0.0013, + "visualStartMs": 13.954 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 13.9556, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9556 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 13.9572, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9572 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 13.9588, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9588 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 13.9605, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9605 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 13.9623, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9623 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 13.9639, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9639 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 13.9655, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9655 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 13.9671, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9671 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 13.9688, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9688 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 13.9703, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9703 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 13.9719, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9719 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 13.9735, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9735 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 13.9749, + "visualDurationMs": 0.0008, + "visualStartMs": 13.9749 + } + ], + "durationMs": 0.1912, + "name": "Lighting", + "startMs": 13.7849, + "visualDurationMs": 0.1912, + "visualStartMs": 13.7849 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 13.9766, + "visualDurationMs": 0.0004, + "visualStartMs": 13.9766 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 13.9772, + "visualDurationMs": 0.0004, + "visualStartMs": 13.9772 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 13.9762, + "visualDurationMs": 0.0016, + "visualStartMs": 13.9762 + } + ], + "durationMs": 0.1979, + "name": "DrawSprite", + "startMs": 13.7801, + "visualDurationMs": 0.1979, + "visualStartMs": 13.7801 + } + ], + "durationMs": 0.1985, + "name": "Draw Sprite: Pebble_69", + "startMs": 13.7796, + "visualDurationMs": 0.1985, + "visualStartMs": 13.7796 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 13.98, + "visualDurationMs": 0.0003, + "visualStartMs": 13.98 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 13.9804, + "visualDurationMs": 0.0005, + "visualStartMs": 13.9804 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 13.9814, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9814 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 13.9828, + "visualDurationMs": 0.0005, + "visualStartMs": 13.9828 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 13.9811, + "visualDurationMs": 0.0023, + "visualStartMs": 13.9811 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 13.9835, + "visualDurationMs": 0.0005, + "visualStartMs": 13.9835 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 13.9844, + "visualDurationMs": 0.0009, + "visualStartMs": 13.9844 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 13.9854, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9854 + }, + { + "durationMs": 0.0016, + "name": "L0", + "startMs": 13.987, + "visualDurationMs": 0.0016, + "visualStartMs": 13.987 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 13.9889, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9889 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 13.9905, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9905 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 13.9921, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9921 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 13.9938, + "visualDurationMs": 0.0013, + "visualStartMs": 13.9938 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 13.9954, + "visualDurationMs": 0.0012, + "visualStartMs": 13.9954 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 13.997, + "visualDurationMs": 0.0025, + "visualStartMs": 13.997 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 13.9999, + "visualDurationMs": 0.0014, + "visualStartMs": 13.9999 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 14.0017, + "visualDurationMs": 0.0012, + "visualStartMs": 14.0017 + }, + { + "durationMs": 0.0015, + "name": "L9", + "startMs": 14.0033, + "visualDurationMs": 0.0015, + "visualStartMs": 14.0033 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 14.0052, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0052 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 14.0069, + "visualDurationMs": 0.0015, + "visualStartMs": 14.0069 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 14.0087, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0087 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 14.0104, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0104 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 14.0121, + "visualDurationMs": 0.0034, + "visualStartMs": 14.0121 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 14.0159, + "visualDurationMs": 0.0015, + "visualStartMs": 14.0159 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 14.0177, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0177 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 14.0194, + "visualDurationMs": 0.0016, + "visualStartMs": 14.0194 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 14.0213, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0213 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 14.023, + "visualDurationMs": 0.0014, + "visualStartMs": 14.023 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 14.0247, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0247 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 14.0263, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0263 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 14.0281, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0281 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 14.0298, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0298 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 14.0314, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0314 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 14.033, + "visualDurationMs": 0.0013, + "visualStartMs": 14.033 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 14.0346, + "visualDurationMs": 0.0012, + "visualStartMs": 14.0346 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 14.0362, + "visualDurationMs": 0.0012, + "visualStartMs": 14.0362 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 14.0377, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0377 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 14.0393, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0393 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 14.0409, + "visualDurationMs": 0.005, + "visualStartMs": 14.0409 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 14.0463, + "visualDurationMs": 0.0015, + "visualStartMs": 14.0463 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 14.0481, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0481 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 14.0497, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0497 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 14.0514, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0514 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 14.0531, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0531 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 14.0547, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0547 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 14.0563, + "visualDurationMs": 0.0012, + "visualStartMs": 14.0563 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 14.0579, + "visualDurationMs": 0.0012, + "visualStartMs": 14.0579 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 14.0594, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0594 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 14.0611, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0611 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 14.0628, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0628 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 14.0644, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0644 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 14.066, + "visualDurationMs": 0.0015, + "visualStartMs": 14.066 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 14.0678, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0678 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 14.0695, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0695 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 14.0712, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0712 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 14.0729, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0729 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 14.0745, + "visualDurationMs": 0.0015, + "visualStartMs": 14.0745 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 14.0764, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0764 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 14.0781, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0781 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 14.0798, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0798 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 14.0815, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0815 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 14.0831, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0831 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 14.0848, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0848 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 14.0864, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0864 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 14.0881, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0881 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 14.0897, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0897 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 14.0913, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0913 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 14.093, + "visualDurationMs": 0.0012, + "visualStartMs": 14.093 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 14.0946, + "visualDurationMs": 0.0013, + "visualStartMs": 14.0946 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 14.0963, + "visualDurationMs": 0.0014, + "visualStartMs": 14.0963 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 14.098, + "visualDurationMs": 0.0088, + "visualStartMs": 14.098 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 14.1072, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1072 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 14.1088, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1088 + }, + { + "durationMs": 0.0052, + "name": "L65", + "startMs": 14.1105, + "visualDurationMs": 0.0052, + "visualStartMs": 14.1105 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 14.1161, + "visualDurationMs": 0.0016, + "visualStartMs": 14.1161 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 14.1181, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1181 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 14.1198, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1198 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 14.1215, + "visualDurationMs": 0.0015, + "visualStartMs": 14.1215 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 14.1234, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1234 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 14.1249, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1249 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 14.1266, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1266 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 14.1282, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1282 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 14.1298, + "visualDurationMs": 0.0014, + "visualStartMs": 14.1298 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 14.1316, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1316 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 14.1333, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1333 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 14.1349, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1349 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 14.1364, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1364 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 14.138, + "visualDurationMs": 0.0013, + "visualStartMs": 14.138 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 14.1397, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1397 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 14.1413, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1413 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 14.1429, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1429 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 14.1444, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1444 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 14.146, + "visualDurationMs": 0.0012, + "visualStartMs": 14.146 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 14.1476, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1476 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 14.1492, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1492 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 14.1508, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1508 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 14.1525, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1525 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 14.1541, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1541 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 14.1556, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1556 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 14.1572, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1572 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 14.1588, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1588 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 14.1604, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1604 + }, + { + "durationMs": 0.0011, + "name": "L94", + "startMs": 14.162, + "visualDurationMs": 0.0011, + "visualStartMs": 14.162 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 14.1635, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1635 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 14.1651, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1651 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 14.1668, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1668 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 14.1684, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1684 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 14.1699, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1699 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 14.1714, + "visualDurationMs": 0.0007, + "visualStartMs": 14.1714 + } + ], + "durationMs": 0.1883, + "name": "Lighting", + "startMs": 13.9841, + "visualDurationMs": 0.1883, + "visualStartMs": 13.9841 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 14.1729, + "visualDurationMs": 0.0004, + "visualStartMs": 14.1729 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 14.1736, + "visualDurationMs": 0.0004, + "visualStartMs": 14.1736 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 14.1725, + "visualDurationMs": 0.0017, + "visualStartMs": 14.1725 + } + ], + "durationMs": 0.1947, + "name": "DrawSprite", + "startMs": 13.9796, + "visualDurationMs": 0.1947, + "visualStartMs": 13.9796 + } + ], + "durationMs": 0.1952, + "name": "Draw Sprite: Pebble_68", + "startMs": 13.9792, + "visualDurationMs": 0.1952, + "visualStartMs": 13.9792 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 14.1763, + "visualDurationMs": 0.0003, + "visualStartMs": 14.1763 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 14.1768, + "visualDurationMs": 0.0004, + "visualStartMs": 14.1768 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 14.1778, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1778 + }, + { + "durationMs": 0.0043, + "name": "TexSlot", + "startMs": 14.1792, + "visualDurationMs": 0.0043, + "visualStartMs": 14.1792 + } + ], + "durationMs": 0.0061, + "name": "SetUniforms", + "startMs": 14.1775, + "visualDurationMs": 0.0061, + "visualStartMs": 14.1775 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 14.1838, + "visualDurationMs": 0.0004, + "visualStartMs": 14.1838 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 14.1846, + "visualDurationMs": 0.0009, + "visualStartMs": 14.1846 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 14.1857, + "visualDurationMs": 0.0015, + "visualStartMs": 14.1857 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 14.1876, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1876 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 14.1892, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1892 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 14.1909, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1909 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 14.1924, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1924 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 14.1941, + "visualDurationMs": 0.0013, + "visualStartMs": 14.1941 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 14.1957, + "visualDurationMs": 0.0012, + "visualStartMs": 14.1957 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 14.1973, + "visualDurationMs": 0.0024, + "visualStartMs": 14.1973 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 14.2001, + "visualDurationMs": 0.0012, + "visualStartMs": 14.2001 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 14.2016, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2016 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 14.2032, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2032 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 14.2051, + "visualDurationMs": 0.0012, + "visualStartMs": 14.2051 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 14.2067, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2067 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 14.2085, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2085 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 14.2102, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2102 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 14.2119, + "visualDurationMs": 0.0034, + "visualStartMs": 14.2119 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 14.2156, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2156 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 14.2174, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2174 + }, + { + "durationMs": 0.0018, + "name": "L17", + "startMs": 14.2192, + "visualDurationMs": 0.0018, + "visualStartMs": 14.2192 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 14.2213, + "visualDurationMs": 0.0015, + "visualStartMs": 14.2213 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 14.2231, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2231 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 14.225, + "visualDurationMs": 0.0013, + "visualStartMs": 14.225 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 14.2266, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2266 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 14.2283, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2283 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 14.2301, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2301 + }, + { + "durationMs": 0.0016, + "name": "L24", + "startMs": 14.2317, + "visualDurationMs": 0.0016, + "visualStartMs": 14.2317 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 14.2336, + "visualDurationMs": 0.0012, + "visualStartMs": 14.2336 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 14.2351, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2351 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 14.2367, + "visualDurationMs": 0.0012, + "visualStartMs": 14.2367 + }, + { + "durationMs": 0.0016, + "name": "L28", + "startMs": 14.2383, + "visualDurationMs": 0.0016, + "visualStartMs": 14.2383 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 14.2402, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2402 + }, + { + "durationMs": 0.0055, + "name": "L30", + "startMs": 14.2419, + "visualDurationMs": 0.0055, + "visualStartMs": 14.2419 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 14.2477, + "visualDurationMs": 0.0015, + "visualStartMs": 14.2477 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 14.2495, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2495 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 14.2511, + "visualDurationMs": 0.0015, + "visualStartMs": 14.2511 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 14.253, + "visualDurationMs": 0.0015, + "visualStartMs": 14.253 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 14.2549, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2549 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 14.2565, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2565 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 14.2582, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2582 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 14.2598, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2598 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 14.2614, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2614 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 14.263, + "visualDurationMs": 0.0013, + "visualStartMs": 14.263 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 14.2647, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2647 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 14.2663, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2663 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 14.2679, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2679 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 14.2697, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2697 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 14.2714, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2714 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 14.2731, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2731 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 14.2748, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2748 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 14.2765, + "visualDurationMs": 0.0015, + "visualStartMs": 14.2765 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 14.2783, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2783 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 14.28, + "visualDurationMs": 0.0014, + "visualStartMs": 14.28 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 14.2817, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2817 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 14.2834, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2834 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 14.2851, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2851 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 14.2868, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2868 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 14.2885, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2885 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 14.2901, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2901 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 14.2918, + "visualDurationMs": 0.0012, + "visualStartMs": 14.2918 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 14.2934, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2934 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 14.2951, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2951 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 14.2967, + "visualDurationMs": 0.0014, + "visualStartMs": 14.2967 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 14.2985, + "visualDurationMs": 0.0013, + "visualStartMs": 14.2985 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 14.3001, + "visualDurationMs": 0.0087, + "visualStartMs": 14.3001 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 14.3092, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3092 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 14.311, + "visualDurationMs": 0.0014, + "visualStartMs": 14.311 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 14.3127, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3127 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 14.3145, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3145 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 14.3162, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3162 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 14.318, + "visualDurationMs": 0.0013, + "visualStartMs": 14.318 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 14.3196, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3196 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 14.3213, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3213 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 14.3229, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3229 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 14.3244, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3244 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 14.326, + "visualDurationMs": 0.0012, + "visualStartMs": 14.326 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 14.3275, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3275 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 14.3291, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3291 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 14.3307, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3307 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 14.3323, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3323 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 14.3338, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3338 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 14.3354, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3354 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 14.337, + "visualDurationMs": 0.0013, + "visualStartMs": 14.337 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 14.3386, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3386 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 14.3403, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3403 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 14.3419, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3419 + }, + { + "durationMs": 0.005, + "name": "L84", + "startMs": 14.3435, + "visualDurationMs": 0.005, + "visualStartMs": 14.3435 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 14.3489, + "visualDurationMs": 0.0016, + "visualStartMs": 14.3489 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 14.3508, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3508 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 14.3526, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3526 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 14.3542, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3542 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 14.3559, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3559 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 14.3575, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3575 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 14.359, + "visualDurationMs": 0.0013, + "visualStartMs": 14.359 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 14.3607, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3607 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 14.3623, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3623 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 14.3639, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3639 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 14.3655, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3655 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 14.3671, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3671 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 14.3688, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3688 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 14.3704, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3704 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 14.372, + "visualDurationMs": 0.0013, + "visualStartMs": 14.372 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 14.3735, + "visualDurationMs": 0.0007, + "visualStartMs": 14.3735 + } + ], + "durationMs": 0.1902, + "name": "Lighting", + "startMs": 14.1843, + "visualDurationMs": 0.1902, + "visualStartMs": 14.1843 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 14.375, + "visualDurationMs": 0.0004, + "visualStartMs": 14.375 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 14.3756, + "visualDurationMs": 0.0004, + "visualStartMs": 14.3756 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 14.3747, + "visualDurationMs": 0.0015, + "visualStartMs": 14.3747 + } + ], + "durationMs": 0.2003, + "name": "DrawSprite", + "startMs": 14.176, + "visualDurationMs": 0.2003, + "visualStartMs": 14.176 + } + ], + "durationMs": 0.2009, + "name": "Draw Sprite: Pebble_67", + "startMs": 14.1755, + "visualDurationMs": 0.2009, + "visualStartMs": 14.1755 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 14.3784, + "visualDurationMs": 0.0003, + "visualStartMs": 14.3784 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 14.3789, + "visualDurationMs": 0.0004, + "visualStartMs": 14.3789 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 14.3798, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3798 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 14.3812, + "visualDurationMs": 0.0005, + "visualStartMs": 14.3812 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 14.3795, + "visualDurationMs": 0.0023, + "visualStartMs": 14.3795 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 14.3819, + "visualDurationMs": 0.0004, + "visualStartMs": 14.3819 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 14.3828, + "visualDurationMs": 0.0008, + "visualStartMs": 14.3828 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 14.3838, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3838 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 14.3855, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3855 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 14.3872, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3872 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 14.3888, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3888 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 14.3904, + "visualDurationMs": 0.0014, + "visualStartMs": 14.3904 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 14.3921, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3921 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 14.3937, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3937 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 14.3953, + "visualDurationMs": 0.0026, + "visualStartMs": 14.3953 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 14.3982, + "visualDurationMs": 0.0013, + "visualStartMs": 14.3982 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 14.3999, + "visualDurationMs": 0.0012, + "visualStartMs": 14.3999 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 14.4015, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4015 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 14.4032, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4032 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 14.4048, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4048 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 14.4066, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4066 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 14.4084, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4084 + }, + { + "durationMs": 0.004, + "name": "L14", + "startMs": 14.4102, + "visualDurationMs": 0.004, + "visualStartMs": 14.4102 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 14.4146, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4146 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 14.4165, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4165 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 14.4183, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4183 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 14.4201, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4201 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 14.4217, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4217 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 14.4235, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4235 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 14.4251, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4251 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 14.4268, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4268 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 14.4286, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4286 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 14.4302, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4302 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 14.4319, + "visualDurationMs": 0.0012, + "visualStartMs": 14.4319 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 14.4335, + "visualDurationMs": 0.0012, + "visualStartMs": 14.4335 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 14.4351, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4351 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 14.4367, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4367 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 14.4383, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4383 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 14.44, + "visualDurationMs": 0.0051, + "visualStartMs": 14.44 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 14.4454, + "visualDurationMs": 0.0016, + "visualStartMs": 14.4454 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 14.4473, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4473 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 14.4489, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4489 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 14.4506, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4506 + }, + { + "durationMs": 0.0012, + "name": "L35", + "startMs": 14.4523, + "visualDurationMs": 0.0012, + "visualStartMs": 14.4523 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 14.4539, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4539 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 14.4556, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4556 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 14.4574, + "visualDurationMs": 0.0012, + "visualStartMs": 14.4574 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 14.4589, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4589 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 14.4605, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4605 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 14.4623, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4623 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 14.464, + "visualDurationMs": 0.0013, + "visualStartMs": 14.464 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 14.4656, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4656 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 14.4675, + "visualDurationMs": 0.0016, + "visualStartMs": 14.4675 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 14.4694, + "visualDurationMs": 0.0015, + "visualStartMs": 14.4694 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 14.4712, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4712 + }, + { + "durationMs": 0.0016, + "name": "L47", + "startMs": 14.473, + "visualDurationMs": 0.0016, + "visualStartMs": 14.473 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 14.4749, + "visualDurationMs": 0.0017, + "visualStartMs": 14.4749 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 14.4769, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4769 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 14.4787, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4787 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 14.4804, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4804 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 14.4822, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4822 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 14.4838, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4838 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 14.4855, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4855 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 14.4872, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4872 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 14.4888, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4888 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 14.4906, + "visualDurationMs": 0.0012, + "visualStartMs": 14.4906 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 14.4922, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4922 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 14.4939, + "visualDurationMs": 0.0013, + "visualStartMs": 14.4939 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 14.4955, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4955 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 14.4972, + "visualDurationMs": 0.0014, + "visualStartMs": 14.4972 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 14.499, + "visualDurationMs": 0.0088, + "visualStartMs": 14.499 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 14.5081, + "visualDurationMs": 0.0015, + "visualStartMs": 14.5081 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 14.51, + "visualDurationMs": 0.0014, + "visualStartMs": 14.51 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 14.5117, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5117 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 14.5134, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5134 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 14.5152, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5152 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 14.5168, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5168 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 14.5185, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5185 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 14.5201, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5201 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 14.5217, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5217 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 14.5233, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5233 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 14.5248, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5248 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 14.5264, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5264 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 14.528, + "visualDurationMs": 0.0012, + "visualStartMs": 14.528 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 14.5295, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5295 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 14.5311, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5311 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 14.5327, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5327 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 14.5343, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5343 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 14.536, + "visualDurationMs": 0.0013, + "visualStartMs": 14.536 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 14.5377, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5377 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 14.5392, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5392 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 14.5408, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5408 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 14.5425, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5425 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 14.5441, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5441 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 14.5457, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5457 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 14.5473, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5473 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 14.5489, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5489 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 14.5505, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5505 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 14.5521, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5521 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 14.5537, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5537 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 14.5553, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5553 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 14.5569, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5569 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 14.5585, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5585 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 14.5601, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5601 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 14.5616, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5616 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 14.5632, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5632 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 14.5648, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5648 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 14.5664, + "visualDurationMs": 0.0012, + "visualStartMs": 14.5664 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 14.5678, + "visualDurationMs": 0.0005, + "visualStartMs": 14.5678 + } + ], + "durationMs": 0.1861, + "name": "Lighting", + "startMs": 14.3825, + "visualDurationMs": 0.1861, + "visualStartMs": 14.3825 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 14.5691, + "visualDurationMs": 0.0003, + "visualStartMs": 14.5691 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 14.5696, + "visualDurationMs": 0.0004, + "visualStartMs": 14.5696 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 14.5687, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5687 + } + ], + "durationMs": 0.1922, + "name": "DrawSprite", + "startMs": 14.378, + "visualDurationMs": 0.1922, + "visualStartMs": 14.378 + } + ], + "durationMs": 0.1928, + "name": "Draw Sprite: Pebble_66", + "startMs": 14.3775, + "visualDurationMs": 0.1928, + "visualStartMs": 14.3775 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 14.5793, + "visualDurationMs": 0.0003, + "visualStartMs": 14.5793 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 14.5798, + "visualDurationMs": 0.0003, + "visualStartMs": 14.5798 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 14.5807, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5807 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 14.5821, + "visualDurationMs": 0.0005, + "visualStartMs": 14.5821 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 14.5804, + "visualDurationMs": 0.0023, + "visualStartMs": 14.5804 + }, + { + "durationMs": 0.0037, + "name": "BindTex", + "startMs": 14.5828, + "visualDurationMs": 0.0037, + "visualStartMs": 14.5828 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 14.5872, + "visualDurationMs": 0.0011, + "visualStartMs": 14.5872 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 14.5885, + "visualDurationMs": 0.0016, + "visualStartMs": 14.5885 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 14.5905, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5905 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 14.5922, + "visualDurationMs": 0.0014, + "visualStartMs": 14.5922 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 14.594, + "visualDurationMs": 0.0013, + "visualStartMs": 14.594 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 14.5956, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5956 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 14.5973, + "visualDurationMs": 0.0013, + "visualStartMs": 14.5973 + }, + { + "durationMs": 0.0011, + "name": "L5", + "startMs": 14.599, + "visualDurationMs": 0.0011, + "visualStartMs": 14.599 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 14.6005, + "visualDurationMs": 0.0024, + "visualStartMs": 14.6005 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 14.6033, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6033 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 14.6049, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6049 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 14.6065, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6065 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 14.6081, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6081 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 14.6097, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6097 + }, + { + "durationMs": 0.0016, + "name": "L12", + "startMs": 14.6114, + "visualDurationMs": 0.0016, + "visualStartMs": 14.6114 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 14.6133, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6133 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 14.615, + "visualDurationMs": 0.0034, + "visualStartMs": 14.615 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 14.6187, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6187 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 14.6205, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6205 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 14.6222, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6222 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 14.6239, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6239 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 14.6256, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6256 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 14.6273, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6273 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 14.6289, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6289 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 14.6307, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6307 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 14.6324, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6324 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 14.6341, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6341 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 14.6357, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6357 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 14.6373, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6373 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 14.6388, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6388 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 14.6404, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6404 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 14.642, + "visualDurationMs": 0.0013, + "visualStartMs": 14.642 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 14.6436, + "visualDurationMs": 0.0052, + "visualStartMs": 14.6436 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 14.6492, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6492 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 14.6509, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6509 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 14.6526, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6526 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 14.6543, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6543 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 14.656, + "visualDurationMs": 0.0014, + "visualStartMs": 14.656 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 14.6578, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6578 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 14.6593, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6593 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 14.6609, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6609 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 14.6626, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6626 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 14.6642, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6642 + }, + { + "durationMs": 0.0016, + "name": "L41", + "startMs": 14.6659, + "visualDurationMs": 0.0016, + "visualStartMs": 14.6659 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 14.6678, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6678 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 14.6695, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6695 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 14.6713, + "visualDurationMs": 0.0016, + "visualStartMs": 14.6713 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 14.6732, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6732 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 14.6749, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6749 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 14.6767, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6767 + }, + { + "durationMs": 0.0014, + "name": "L48", + "startMs": 14.6785, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6785 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 14.6803, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6803 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 14.682, + "visualDurationMs": 0.0014, + "visualStartMs": 14.682 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 14.6838, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6838 + }, + { + "durationMs": 0.0015, + "name": "L52", + "startMs": 14.6856, + "visualDurationMs": 0.0015, + "visualStartMs": 14.6856 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 14.6874, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6874 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 14.6891, + "visualDurationMs": 0.0014, + "visualStartMs": 14.6891 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 14.6908, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6908 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 14.6924, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6924 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 14.6941, + "visualDurationMs": 0.0012, + "visualStartMs": 14.6941 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 14.6957, + "visualDurationMs": 0.0013, + "visualStartMs": 14.6957 + }, + { + "durationMs": 0.0016, + "name": "L59", + "startMs": 14.6974, + "visualDurationMs": 0.0016, + "visualStartMs": 14.6974 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 14.6994, + "visualDurationMs": 0.0015, + "visualStartMs": 14.6994 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 14.7012, + "visualDurationMs": 0.0015, + "visualStartMs": 14.7012 + }, + { + "durationMs": 0.0092, + "name": "L62", + "startMs": 14.703, + "visualDurationMs": 0.0092, + "visualStartMs": 14.703 + }, + { + "durationMs": 0.0023, + "name": "L63", + "startMs": 14.7127, + "visualDurationMs": 0.0023, + "visualStartMs": 14.7127 + }, + { + "durationMs": 0.002, + "name": "L64", + "startMs": 14.7154, + "visualDurationMs": 0.002, + "visualStartMs": 14.7154 + }, + { + "durationMs": 0.002, + "name": "L65", + "startMs": 14.7179, + "visualDurationMs": 0.002, + "visualStartMs": 14.7179 + }, + { + "durationMs": 0.002, + "name": "L66", + "startMs": 14.7205, + "visualDurationMs": 0.002, + "visualStartMs": 14.7205 + }, + { + "durationMs": 0.002, + "name": "L67", + "startMs": 14.723, + "visualDurationMs": 0.002, + "visualStartMs": 14.723 + }, + { + "durationMs": 0.0019, + "name": "L68", + "startMs": 14.7256, + "visualDurationMs": 0.0019, + "visualStartMs": 14.7256 + }, + { + "durationMs": 0.0017, + "name": "L69", + "startMs": 14.728, + "visualDurationMs": 0.0017, + "visualStartMs": 14.728 + }, + { + "durationMs": 0.0022, + "name": "L70", + "startMs": 14.7301, + "visualDurationMs": 0.0022, + "visualStartMs": 14.7301 + }, + { + "durationMs": 0.0025, + "name": "L71", + "startMs": 14.7329, + "visualDurationMs": 0.0025, + "visualStartMs": 14.7329 + }, + { + "durationMs": 0.0017, + "name": "L72", + "startMs": 14.7359, + "visualDurationMs": 0.0017, + "visualStartMs": 14.7359 + }, + { + "durationMs": 0.0018, + "name": "L73", + "startMs": 14.738, + "visualDurationMs": 0.0018, + "visualStartMs": 14.738 + }, + { + "durationMs": 0.0019, + "name": "L74", + "startMs": 14.7402, + "visualDurationMs": 0.0019, + "visualStartMs": 14.7402 + }, + { + "durationMs": 0.0016, + "name": "L75", + "startMs": 14.7426, + "visualDurationMs": 0.0016, + "visualStartMs": 14.7426 + }, + { + "durationMs": 0.0018, + "name": "L76", + "startMs": 14.7447, + "visualDurationMs": 0.0018, + "visualStartMs": 14.7447 + }, + { + "durationMs": 0.0017, + "name": "L77", + "startMs": 14.747, + "visualDurationMs": 0.0017, + "visualStartMs": 14.747 + }, + { + "durationMs": 0.0017, + "name": "L78", + "startMs": 14.7492, + "visualDurationMs": 0.0017, + "visualStartMs": 14.7492 + }, + { + "durationMs": 0.002, + "name": "L79", + "startMs": 14.7513, + "visualDurationMs": 0.002, + "visualStartMs": 14.7513 + }, + { + "durationMs": 0.0019, + "name": "L80", + "startMs": 14.7541, + "visualDurationMs": 0.0019, + "visualStartMs": 14.7541 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 14.7565, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7565 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 14.7581, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7581 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 14.7598, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7598 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 14.7615, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7615 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 14.7632, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7632 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 14.7649, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7649 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 14.7665, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7665 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 14.7683, + "visualDurationMs": 0.0012, + "visualStartMs": 14.7683 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 14.7699, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7699 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 14.7715, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7715 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 14.7731, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7731 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 14.7748, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7748 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 14.7766, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7766 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 14.7782, + "visualDurationMs": 0.0012, + "visualStartMs": 14.7782 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 14.7798, + "visualDurationMs": 0.0012, + "visualStartMs": 14.7798 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 14.7814, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7814 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 14.783, + "visualDurationMs": 0.0013, + "visualStartMs": 14.783 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 14.7847, + "visualDurationMs": 0.0012, + "visualStartMs": 14.7847 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 14.7862, + "visualDurationMs": 0.0014, + "visualStartMs": 14.7862 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 14.7878, + "visualDurationMs": 0.0008, + "visualStartMs": 14.7878 + } + ], + "durationMs": 0.2024, + "name": "Lighting", + "startMs": 14.5867, + "visualDurationMs": 0.2024, + "visualStartMs": 14.5867 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 14.7897, + "visualDurationMs": 0.0004, + "visualStartMs": 14.7897 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 14.7903, + "visualDurationMs": 0.0005, + "visualStartMs": 14.7903 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 14.7893, + "visualDurationMs": 0.0017, + "visualStartMs": 14.7893 + } + ], + "durationMs": 0.2124, + "name": "DrawSprite", + "startMs": 14.5787, + "visualDurationMs": 0.2124, + "visualStartMs": 14.5787 + } + ], + "durationMs": 0.2199, + "name": "Draw Sprite: Pebble_65", + "startMs": 14.5713, + "visualDurationMs": 0.2199, + "visualStartMs": 14.5713 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 14.793, + "visualDurationMs": 0.0003, + "visualStartMs": 14.793 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 14.7935, + "visualDurationMs": 0.0004, + "visualStartMs": 14.7935 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 14.7945, + "visualDurationMs": 0.0012, + "visualStartMs": 14.7945 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 14.7959, + "visualDurationMs": 0.0005, + "visualStartMs": 14.7959 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 14.7942, + "visualDurationMs": 0.0023, + "visualStartMs": 14.7942 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 14.7967, + "visualDurationMs": 0.0004, + "visualStartMs": 14.7967 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 14.7975, + "visualDurationMs": 0.001, + "visualStartMs": 14.7975 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 14.7986, + "visualDurationMs": 0.0013, + "visualStartMs": 14.7986 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 14.8003, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8003 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 14.802, + "visualDurationMs": 0.0014, + "visualStartMs": 14.802 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 14.8038, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8038 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 14.8054, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8054 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 14.8071, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8071 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 14.8087, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8087 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 14.8102, + "visualDurationMs": 0.0026, + "visualStartMs": 14.8102 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 14.8132, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8132 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 14.8149, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8149 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 14.8166, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8166 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 14.8182, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8182 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 14.8198, + "visualDurationMs": 0.0015, + "visualStartMs": 14.8198 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 14.8217, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8217 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 14.8235, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8235 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 14.8251, + "visualDurationMs": 0.0034, + "visualStartMs": 14.8251 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 14.8289, + "visualDurationMs": 0.0015, + "visualStartMs": 14.8289 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 14.8308, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8308 + }, + { + "durationMs": 0.0055, + "name": "L17", + "startMs": 14.8326, + "visualDurationMs": 0.0055, + "visualStartMs": 14.8326 + }, + { + "durationMs": 0.0017, + "name": "L18", + "startMs": 14.8385, + "visualDurationMs": 0.0017, + "visualStartMs": 14.8385 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 14.8405, + "visualDurationMs": 0.0015, + "visualStartMs": 14.8405 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 14.8423, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8423 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 14.8441, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8441 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 14.8458, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8458 + }, + { + "durationMs": 0.0056, + "name": "L23", + "startMs": 14.8476, + "visualDurationMs": 0.0056, + "visualStartMs": 14.8476 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 14.8535, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8535 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 14.8553, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8553 + }, + { + "durationMs": 0.0015, + "name": "L26", + "startMs": 14.8569, + "visualDurationMs": 0.0015, + "visualStartMs": 14.8569 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 14.8587, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8587 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 14.8603, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8603 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 14.8621, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8621 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 14.8637, + "visualDurationMs": 0.0052, + "visualStartMs": 14.8637 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 14.8692, + "visualDurationMs": 0.0015, + "visualStartMs": 14.8692 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 14.8711, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8711 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 14.8728, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8728 + }, + { + "durationMs": 0.0016, + "name": "L34", + "startMs": 14.8745, + "visualDurationMs": 0.0016, + "visualStartMs": 14.8745 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 14.8764, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8764 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 14.8781, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8781 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 14.8797, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8797 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 14.8812, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8812 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 14.8828, + "visualDurationMs": 0.0012, + "visualStartMs": 14.8828 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 14.8843, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8843 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 14.886, + "visualDurationMs": 0.0013, + "visualStartMs": 14.886 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 14.8876, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8876 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 14.8893, + "visualDurationMs": 0.0016, + "visualStartMs": 14.8893 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 14.8912, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8912 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 14.893, + "visualDurationMs": 0.0014, + "visualStartMs": 14.893 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 14.8947, + "visualDurationMs": 0.0014, + "visualStartMs": 14.8947 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 14.8964, + "visualDurationMs": 0.0013, + "visualStartMs": 14.8964 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 14.8981, + "visualDurationMs": 0.0017, + "visualStartMs": 14.8981 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 14.9001, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9001 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 14.9018, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9018 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 14.9036, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9036 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 14.9054, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9054 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 14.907, + "visualDurationMs": 0.0013, + "visualStartMs": 14.907 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 14.9087, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9087 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 14.9104, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9104 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 14.9121, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9121 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 14.9139, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9139 + }, + { + "durationMs": 0.0018, + "name": "L58", + "startMs": 14.9155, + "visualDurationMs": 0.0018, + "visualStartMs": 14.9155 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 14.9176, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9176 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 14.9192, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9192 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 14.9209, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9209 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 14.9226, + "visualDurationMs": 0.0089, + "visualStartMs": 14.9226 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 14.9319, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9319 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 14.9336, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9336 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 14.9355, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9355 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 14.9373, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9373 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 14.939, + "visualDurationMs": 0.0013, + "visualStartMs": 14.939 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 14.9406, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9406 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 14.9422, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9422 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 14.9441, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9441 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 14.9458, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9458 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 14.9474, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9474 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 14.9491, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9491 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 14.9508, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9508 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 14.9523, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9523 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 14.9539, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9539 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 14.9555, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9555 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 14.9571, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9571 + }, + { + "durationMs": 0.0012, + "name": "L79", + "startMs": 14.9587, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9587 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 14.9603, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9603 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 14.9619, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9619 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 14.9635, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9635 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 14.9653, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9653 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 14.9669, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9669 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 14.9684, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9684 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 14.9702, + "visualDurationMs": 0.0014, + "visualStartMs": 14.9702 + }, + { + "durationMs": 0.0015, + "name": "L87", + "startMs": 14.9719, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9719 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 14.9737, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9737 + }, + { + "durationMs": 0.0016, + "name": "L89", + "startMs": 14.9753, + "visualDurationMs": 0.0016, + "visualStartMs": 14.9753 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 14.9772, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9772 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 14.9788, + "visualDurationMs": 0.0015, + "visualStartMs": 14.9788 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 14.9806, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9806 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 14.9823, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9823 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 14.984, + "visualDurationMs": 0.0012, + "visualStartMs": 14.984 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 14.9855, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9855 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 14.9871, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9871 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 14.9887, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9887 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 14.9903, + "visualDurationMs": 0.0012, + "visualStartMs": 14.9903 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 14.9919, + "visualDurationMs": 0.0013, + "visualStartMs": 14.9919 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 14.9933, + "visualDurationMs": 0.0008, + "visualStartMs": 14.9933 + } + ], + "durationMs": 0.1973, + "name": "Lighting", + "startMs": 14.7972, + "visualDurationMs": 0.1973, + "visualStartMs": 14.7972 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 14.995, + "visualDurationMs": 0.0005, + "visualStartMs": 14.995 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 14.9956, + "visualDurationMs": 0.0005, + "visualStartMs": 14.9956 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 14.9946, + "visualDurationMs": 0.0017, + "visualStartMs": 14.9946 + } + ], + "durationMs": 0.2037, + "name": "DrawSprite", + "startMs": 14.7927, + "visualDurationMs": 0.2037, + "visualStartMs": 14.7927 + } + ], + "durationMs": 0.2043, + "name": "Draw Sprite: Pebble_64", + "startMs": 14.7922, + "visualDurationMs": 0.2043, + "visualStartMs": 14.7922 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 14.9987, + "visualDurationMs": 0.0003, + "visualStartMs": 14.9987 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 14.9992, + "visualDurationMs": 0.0004, + "visualStartMs": 14.9992 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 15.0002, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0002 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 15.0016, + "visualDurationMs": 0.0005, + "visualStartMs": 15.0016 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 14.9998, + "visualDurationMs": 0.0024, + "visualStartMs": 14.9998 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 15.0024, + "visualDurationMs": 0.0003, + "visualStartMs": 15.0024 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 15.0033, + "visualDurationMs": 0.0009, + "visualStartMs": 15.0033 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 15.0043, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0043 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 15.0061, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0061 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 15.0078, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0078 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 15.0094, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0094 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 15.0111, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0111 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 15.0127, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0127 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 15.0143, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0143 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 15.0158, + "visualDurationMs": 0.0025, + "visualStartMs": 15.0158 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 15.0187, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0187 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 15.0203, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0203 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 15.0219, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0219 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 15.0236, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0236 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 15.0252, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0252 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 15.027, + "visualDurationMs": 0.0013, + "visualStartMs": 15.027 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 15.0287, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0287 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 15.0303, + "visualDurationMs": 0.0034, + "visualStartMs": 15.0303 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 15.0341, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0341 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 15.0358, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0358 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 15.0376, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0376 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 15.0393, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0393 + }, + { + "durationMs": 0.0016, + "name": "L19", + "startMs": 15.0409, + "visualDurationMs": 0.0016, + "visualStartMs": 15.0409 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 15.0429, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0429 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 15.0444, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0444 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 15.0461, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0461 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 15.0478, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0478 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 15.0494, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0494 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 15.0512, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0512 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 15.0527, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0527 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 15.0543, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0543 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 15.0558, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0558 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 15.0574, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0574 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 15.0591, + "visualDurationMs": 0.0051, + "visualStartMs": 15.0591 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 15.0646, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0646 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 15.0664, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0664 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 15.068, + "visualDurationMs": 0.0013, + "visualStartMs": 15.068 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 15.0697, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0697 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 15.0715, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0715 + }, + { + "durationMs": 0.0048, + "name": "L36", + "startMs": 15.0732, + "visualDurationMs": 0.0048, + "visualStartMs": 15.0732 + }, + { + "durationMs": 0.0016, + "name": "L37", + "startMs": 15.0784, + "visualDurationMs": 0.0016, + "visualStartMs": 15.0784 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 15.0804, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0804 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 15.0821, + "visualDurationMs": 0.0012, + "visualStartMs": 15.0821 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 15.0837, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0837 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 15.0855, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0855 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 15.0873, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0873 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 15.0889, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0889 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 15.0907, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0907 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 15.0926, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0926 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 15.0943, + "visualDurationMs": 0.0014, + "visualStartMs": 15.0943 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 15.0961, + "visualDurationMs": 0.0013, + "visualStartMs": 15.0961 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 15.0978, + "visualDurationMs": 0.0016, + "visualStartMs": 15.0978 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 15.0998, + "visualDurationMs": 0.0015, + "visualStartMs": 15.0998 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 15.1017, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1017 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 15.1036, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1036 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 15.1054, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1054 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 15.1069, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1069 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 15.1088, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1088 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 15.1104, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1104 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 15.1121, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1121 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 15.114, + "visualDurationMs": 0.0013, + "visualStartMs": 15.114 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 15.1157, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1157 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 15.1175, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1175 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 15.1191, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1191 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 15.121, + "visualDurationMs": 0.0013, + "visualStartMs": 15.121 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 15.1227, + "visualDurationMs": 0.0089, + "visualStartMs": 15.1227 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 15.132, + "visualDurationMs": 0.0015, + "visualStartMs": 15.132 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 15.1339, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1339 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 15.1357, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1357 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 15.1375, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1375 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 15.1392, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1392 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 15.1408, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1408 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 15.1425, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1425 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 15.1442, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1442 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 15.1458, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1458 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 15.1475, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1475 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 15.1491, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1491 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 15.1508, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1508 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 15.1524, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1524 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 15.1539, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1539 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 15.1555, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1555 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 15.1571, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1571 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 15.1587, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1587 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 15.1604, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1604 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 15.162, + "visualDurationMs": 0.0013, + "visualStartMs": 15.162 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 15.1637, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1637 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 15.1652, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1652 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 15.1668, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1668 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 15.1684, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1684 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 15.17, + "visualDurationMs": 0.0013, + "visualStartMs": 15.17 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 15.1716, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1716 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 15.1732, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1732 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 15.175, + "visualDurationMs": 0.0013, + "visualStartMs": 15.175 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 15.1766, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1766 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 15.1783, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1783 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 15.1799, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1799 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 15.1815, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1815 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 15.1831, + "visualDurationMs": 0.0014, + "visualStartMs": 15.1831 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 15.1848, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1848 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 15.1864, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1864 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 15.1879, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1879 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 15.1895, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1895 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 15.1911, + "visualDurationMs": 0.0012, + "visualStartMs": 15.1911 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 15.1925, + "visualDurationMs": 0.0007, + "visualStartMs": 15.1925 + } + ], + "durationMs": 0.1906, + "name": "Lighting", + "startMs": 15.0029, + "visualDurationMs": 0.1906, + "visualStartMs": 15.0029 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 15.194, + "visualDurationMs": 0.0005, + "visualStartMs": 15.194 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 15.1946, + "visualDurationMs": 0.0004, + "visualStartMs": 15.1946 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 15.1936, + "visualDurationMs": 0.0015, + "visualStartMs": 15.1936 + } + ], + "durationMs": 0.1968, + "name": "DrawSprite", + "startMs": 14.9984, + "visualDurationMs": 0.1968, + "visualStartMs": 14.9984 + } + ], + "durationMs": 0.1974, + "name": "Draw Sprite: Pebble_63", + "startMs": 14.998, + "visualDurationMs": 0.1974, + "visualStartMs": 14.998 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 15.1969, + "visualDurationMs": 0.0004, + "visualStartMs": 15.1969 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 15.1974, + "visualDurationMs": 0.0005, + "visualStartMs": 15.1974 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 15.1985, + "visualDurationMs": 0.0013, + "visualStartMs": 15.1985 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 15.1999, + "visualDurationMs": 0.0006, + "visualStartMs": 15.1999 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 15.1982, + "visualDurationMs": 0.0024, + "visualStartMs": 15.1982 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 15.2007, + "visualDurationMs": 0.0004, + "visualStartMs": 15.2007 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 15.2015, + "visualDurationMs": 0.001, + "visualStartMs": 15.2015 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 15.2027, + "visualDurationMs": 0.0016, + "visualStartMs": 15.2027 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 15.2047, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2047 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 15.2064, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2064 + }, + { + "durationMs": 0.0015, + "name": "L2", + "startMs": 15.208, + "visualDurationMs": 0.0015, + "visualStartMs": 15.208 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 15.2099, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2099 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 15.2116, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2116 + }, + { + "durationMs": 0.0014, + "name": "L5", + "startMs": 15.2132, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2132 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 15.2149, + "visualDurationMs": 0.0026, + "visualStartMs": 15.2149 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 15.2179, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2179 + }, + { + "durationMs": 0.0015, + "name": "L8", + "startMs": 15.2196, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2196 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 15.2215, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2215 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 15.2232, + "visualDurationMs": 0.0012, + "visualStartMs": 15.2232 + }, + { + "durationMs": 0.0017, + "name": "L11", + "startMs": 15.2248, + "visualDurationMs": 0.0017, + "visualStartMs": 15.2248 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 15.2268, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2268 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 15.2287, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2287 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 15.2305, + "visualDurationMs": 0.0034, + "visualStartMs": 15.2305 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 15.2342, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2342 + }, + { + "durationMs": 0.0016, + "name": "L16", + "startMs": 15.2361, + "visualDurationMs": 0.0016, + "visualStartMs": 15.2361 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 15.238, + "visualDurationMs": 0.0014, + "visualStartMs": 15.238 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 15.2398, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2398 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 15.2414, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2414 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 15.2431, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2431 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 15.2448, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2448 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 15.2465, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2465 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 15.2483, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2483 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 15.2499, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2499 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 15.2516, + "visualDurationMs": 0.0012, + "visualStartMs": 15.2516 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 15.2532, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2532 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 15.2549, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2549 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 15.2566, + "visualDurationMs": 0.0012, + "visualStartMs": 15.2566 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 15.2582, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2582 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 15.2598, + "visualDurationMs": 0.0051, + "visualStartMs": 15.2598 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 15.2652, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2652 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 15.2671, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2671 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 15.2687, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2687 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 15.2705, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2705 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 15.2722, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2722 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 15.274, + "visualDurationMs": 0.0013, + "visualStartMs": 15.274 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 15.2756, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2756 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 15.2772, + "visualDurationMs": 0.0012, + "visualStartMs": 15.2772 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 15.2787, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2787 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 15.2805, + "visualDurationMs": 0.0014, + "visualStartMs": 15.2805 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 15.2822, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2822 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 15.2839, + "visualDurationMs": 0.0013, + "visualStartMs": 15.2839 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 15.2856, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2856 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 15.2874, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2874 + }, + { + "durationMs": 0.0016, + "name": "L45", + "startMs": 15.2892, + "visualDurationMs": 0.0016, + "visualStartMs": 15.2892 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 15.2911, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2911 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 15.2929, + "visualDurationMs": 0.0015, + "visualStartMs": 15.2929 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 15.2948, + "visualDurationMs": 0.0016, + "visualStartMs": 15.2948 + }, + { + "durationMs": 0.0017, + "name": "L49", + "startMs": 15.2967, + "visualDurationMs": 0.0017, + "visualStartMs": 15.2967 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 15.2988, + "visualDurationMs": 0.0016, + "visualStartMs": 15.2988 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 15.3007, + "visualDurationMs": 0.0015, + "visualStartMs": 15.3007 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 15.3026, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3026 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 15.3043, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3043 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 15.306, + "visualDurationMs": 0.0013, + "visualStartMs": 15.306 + }, + { + "durationMs": 0.005, + "name": "L55", + "startMs": 15.3076, + "visualDurationMs": 0.005, + "visualStartMs": 15.3076 + }, + { + "durationMs": 0.0018, + "name": "L56", + "startMs": 15.313, + "visualDurationMs": 0.0018, + "visualStartMs": 15.313 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 15.3152, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3152 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 15.3169, + "visualDurationMs": 0.0015, + "visualStartMs": 15.3169 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 15.3188, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3188 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 15.3205, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3205 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 15.3222, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3222 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 15.324, + "visualDurationMs": 0.0088, + "visualStartMs": 15.324 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 15.3332, + "visualDurationMs": 0.0015, + "visualStartMs": 15.3332 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 15.3351, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3351 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 15.3369, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3369 + }, + { + "durationMs": 0.0017, + "name": "L66", + "startMs": 15.3385, + "visualDurationMs": 0.0017, + "visualStartMs": 15.3385 + }, + { + "durationMs": 0.0016, + "name": "L67", + "startMs": 15.3405, + "visualDurationMs": 0.0016, + "visualStartMs": 15.3405 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 15.3424, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3424 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 15.344, + "visualDurationMs": 0.0013, + "visualStartMs": 15.344 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 15.3456, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3456 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 15.3471, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3471 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 15.3487, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3487 + }, + { + "durationMs": 0.0011, + "name": "L73", + "startMs": 15.3504, + "visualDurationMs": 0.0011, + "visualStartMs": 15.3504 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 15.3519, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3519 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 15.3535, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3535 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 15.3551, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3551 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 15.3567, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3567 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 15.3582, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3582 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 15.3598, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3598 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 15.3615, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3615 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 15.3631, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3631 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 15.3646, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3646 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 15.3662, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3662 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 15.3677, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3677 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 15.3693, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3693 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 15.3709, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3709 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 15.3726, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3726 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 15.3744, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3744 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 15.3759, + "visualDurationMs": 0.0014, + "visualStartMs": 15.3759 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 15.3776, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3776 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 15.3793, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3793 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 15.381, + "visualDurationMs": 0.0012, + "visualStartMs": 15.381 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 15.3825, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3825 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 15.3841, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3841 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 15.3857, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3857 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 15.3873, + "visualDurationMs": 0.0012, + "visualStartMs": 15.3873 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 15.3888, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3888 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 15.3904, + "visualDurationMs": 0.0013, + "visualStartMs": 15.3904 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 15.392, + "visualDurationMs": 0.0014, + "visualStartMs": 15.392 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 15.3935, + "visualDurationMs": 0.0007, + "visualStartMs": 15.3935 + } + ], + "durationMs": 0.1934, + "name": "Lighting", + "startMs": 15.2012, + "visualDurationMs": 0.1934, + "visualStartMs": 15.2012 + }, + { + "children": [ + { + "durationMs": 0.0073, + "name": "VAO Bind", + "startMs": 15.3951, + "visualDurationMs": 0.0073, + "visualStartMs": 15.3951 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 15.4063, + "visualDurationMs": 0.0007, + "visualStartMs": 15.4063 + } + ], + "durationMs": 0.0125, + "name": "Draw", + "startMs": 15.3947, + "visualDurationMs": 0.0125, + "visualStartMs": 15.3947 + } + ], + "durationMs": 0.2107, + "name": "DrawSprite", + "startMs": 15.1966, + "visualDurationMs": 0.2107, + "visualStartMs": 15.1966 + } + ], + "durationMs": 0.2115, + "name": "Draw Sprite: Pebble_62", + "startMs": 15.1961, + "visualDurationMs": 0.2115, + "visualStartMs": 15.1961 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0005, + "name": "ShaderSelect", + "startMs": 15.4102, + "visualDurationMs": 0.0005, + "visualStartMs": 15.4102 + }, + { + "durationMs": 0.0006, + "name": "ShaderUse", + "startMs": 15.4109, + "visualDurationMs": 0.0006, + "visualStartMs": 15.4109 + }, + { + "children": [ + { + "durationMs": 0.0021, + "name": "Transform", + "startMs": 15.4125, + "visualDurationMs": 0.0021, + "visualStartMs": 15.4125 + }, + { + "durationMs": 0.0009, + "name": "TexSlot", + "startMs": 15.4148, + "visualDurationMs": 0.0009, + "visualStartMs": 15.4148 + } + ], + "durationMs": 0.0039, + "name": "SetUniforms", + "startMs": 15.4119, + "visualDurationMs": 0.0039, + "visualStartMs": 15.4119 + }, + { + "durationMs": 0.0007, + "name": "BindTex", + "startMs": 15.4161, + "visualDurationMs": 0.0007, + "visualStartMs": 15.4161 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "ColorCorrection", + "startMs": 15.4174, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4174 + }, + { + "durationMs": 0.0023, + "name": "SetLightParams", + "startMs": 15.4189, + "visualDurationMs": 0.0023, + "visualStartMs": 15.4189 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 15.4216, + "visualDurationMs": 0.0015, + "visualStartMs": 15.4216 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 15.4234, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4234 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 15.4251, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4251 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 15.4269, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4269 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 15.4285, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4285 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 15.43, + "visualDurationMs": 0.0012, + "visualStartMs": 15.43 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 15.4316, + "visualDurationMs": 0.0027, + "visualStartMs": 15.4316 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 15.4347, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4347 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 15.4364, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4364 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 15.4381, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4381 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 15.4397, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4397 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 15.4413, + "visualDurationMs": 0.0015, + "visualStartMs": 15.4413 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 15.4432, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4432 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 15.445, + "visualDurationMs": 0.0014, + "visualStartMs": 15.445 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 15.4468, + "visualDurationMs": 0.0034, + "visualStartMs": 15.4468 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 15.4507, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4507 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 15.4525, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4525 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 15.4541, + "visualDurationMs": 0.0016, + "visualStartMs": 15.4541 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 15.456, + "visualDurationMs": 0.0014, + "visualStartMs": 15.456 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 15.4578, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4578 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 15.4595, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4595 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 15.4612, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4612 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 15.4629, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4629 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 15.4646, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4646 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 15.4662, + "visualDurationMs": 0.0015, + "visualStartMs": 15.4662 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 15.468, + "visualDurationMs": 0.0012, + "visualStartMs": 15.468 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 15.4696, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4696 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 15.4712, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4712 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 15.4727, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4727 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 15.4744, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4744 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 15.4759, + "visualDurationMs": 0.0054, + "visualStartMs": 15.4759 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 15.4816, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4816 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 15.4833, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4833 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 15.4849, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4849 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 15.4866, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4866 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 15.4883, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4883 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 15.49, + "visualDurationMs": 0.0012, + "visualStartMs": 15.49 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 15.4916, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4916 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 15.4931, + "visualDurationMs": 0.0012, + "visualStartMs": 15.4931 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 15.4946, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4946 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 15.4962, + "visualDurationMs": 0.0014, + "visualStartMs": 15.4962 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 15.498, + "visualDurationMs": 0.0014, + "visualStartMs": 15.498 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 15.4997, + "visualDurationMs": 0.0013, + "visualStartMs": 15.4997 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 15.5014, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5014 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 15.5031, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5031 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 15.5048, + "visualDurationMs": 0.0015, + "visualStartMs": 15.5048 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 15.5067, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5067 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 15.5084, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5084 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 15.5101, + "visualDurationMs": 0.0015, + "visualStartMs": 15.5101 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 15.5119, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5119 + }, + { + "durationMs": 0.0074, + "name": "L50", + "startMs": 15.5136, + "visualDurationMs": 0.0074, + "visualStartMs": 15.5136 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 15.5213, + "visualDurationMs": 0.0015, + "visualStartMs": 15.5213 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 15.5232, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5232 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 15.5248, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5248 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 15.5265, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5265 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 15.5282, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5282 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 15.5299, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5299 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 15.5315, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5315 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 15.5331, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5331 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 15.5348, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5348 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 15.5365, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5365 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 15.5382, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5382 + }, + { + "durationMs": 0.0102, + "name": "L62", + "startMs": 15.5398, + "visualDurationMs": 0.0102, + "visualStartMs": 15.5398 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 15.5503, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5503 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 15.5519, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5519 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 15.5537, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5537 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 15.5554, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5554 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 15.557, + "visualDurationMs": 0.0014, + "visualStartMs": 15.557 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 15.5587, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5587 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 15.5603, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5603 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 15.562, + "visualDurationMs": 0.0012, + "visualStartMs": 15.562 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 15.5636, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5636 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 15.5651, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5651 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 15.5667, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5667 + }, + { + "durationMs": 0.0044, + "name": "L74", + "startMs": 15.5682, + "visualDurationMs": 0.0044, + "visualStartMs": 15.5682 + }, + { + "durationMs": 0.0017, + "name": "L75", + "startMs": 15.5732, + "visualDurationMs": 0.0017, + "visualStartMs": 15.5732 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 15.5753, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5753 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 15.577, + "visualDurationMs": 0.0014, + "visualStartMs": 15.577 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 15.5787, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5787 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 15.5803, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5803 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 15.5821, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5821 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 15.5838, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5838 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 15.5853, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5853 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 15.5869, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5869 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 15.5885, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5885 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 15.5901, + "visualDurationMs": 0.0014, + "visualStartMs": 15.5901 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 15.5918, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5918 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 15.5935, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5935 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 15.5951, + "visualDurationMs": 0.0012, + "visualStartMs": 15.5951 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 15.5967, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5967 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 15.5983, + "visualDurationMs": 0.0013, + "visualStartMs": 15.5983 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 15.5999, + "visualDurationMs": 0.0015, + "visualStartMs": 15.5999 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 15.6018, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6018 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 15.6034, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6034 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 15.605, + "visualDurationMs": 0.0012, + "visualStartMs": 15.605 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 15.6066, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6066 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 15.6082, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6082 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 15.6098, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6098 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 15.6115, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6115 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 15.6131, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6131 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 15.6145, + "visualDurationMs": 0.0007, + "visualStartMs": 15.6145 + } + ], + "durationMs": 0.1988, + "name": "Lighting", + "startMs": 15.417, + "visualDurationMs": 0.1988, + "visualStartMs": 15.417 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 15.6164, + "visualDurationMs": 0.0004, + "visualStartMs": 15.6164 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 15.617, + "visualDurationMs": 0.0007, + "visualStartMs": 15.617 + } + ], + "durationMs": 0.0018, + "name": "Draw", + "startMs": 15.616, + "visualDurationMs": 0.0018, + "visualStartMs": 15.616 + } + ], + "durationMs": 0.2084, + "name": "DrawSprite", + "startMs": 15.4095, + "visualDurationMs": 0.2084, + "visualStartMs": 15.4095 + } + ], + "durationMs": 0.2094, + "name": "Draw Sprite: Pebble_61", + "startMs": 15.4087, + "visualDurationMs": 0.2094, + "visualStartMs": 15.4087 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 15.62, + "visualDurationMs": 0.0003, + "visualStartMs": 15.62 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 15.6204, + "visualDurationMs": 0.0005, + "visualStartMs": 15.6204 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 15.6215, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6215 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 15.6229, + "visualDurationMs": 0.0005, + "visualStartMs": 15.6229 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 15.6211, + "visualDurationMs": 0.0024, + "visualStartMs": 15.6211 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 15.6236, + "visualDurationMs": 0.0004, + "visualStartMs": 15.6236 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 15.6244, + "visualDurationMs": 0.0011, + "visualStartMs": 15.6244 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 15.6257, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6257 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 15.6275, + "visualDurationMs": 0.0015, + "visualStartMs": 15.6275 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 15.6293, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6293 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 15.631, + "visualDurationMs": 0.0012, + "visualStartMs": 15.631 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 15.6326, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6326 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 15.6342, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6342 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 15.6359, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6359 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 15.6374, + "visualDurationMs": 0.0027, + "visualStartMs": 15.6374 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 15.6404, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6404 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 15.6419, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6419 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 15.6436, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6436 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 15.6452, + "visualDurationMs": 0.0012, + "visualStartMs": 15.6452 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 15.6468, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6468 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 15.6485, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6485 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 15.6502, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6502 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 15.6518, + "visualDurationMs": 0.0035, + "visualStartMs": 15.6518 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 15.6556, + "visualDurationMs": 0.0015, + "visualStartMs": 15.6556 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 15.6574, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6574 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 15.6591, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6591 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 15.6608, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6608 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 15.6625, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6625 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 15.6644, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6644 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 15.666, + "visualDurationMs": 0.0014, + "visualStartMs": 15.666 + }, + { + "durationMs": 0.0017, + "name": "L22", + "startMs": 15.6677, + "visualDurationMs": 0.0017, + "visualStartMs": 15.6677 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 15.6697, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6697 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 15.6714, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6714 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 15.673, + "visualDurationMs": 0.0014, + "visualStartMs": 15.673 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 15.6747, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6747 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 15.6764, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6764 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 15.6782, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6782 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 15.6799, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6799 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 15.6815, + "visualDurationMs": 0.005, + "visualStartMs": 15.6815 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 15.6869, + "visualDurationMs": 0.0016, + "visualStartMs": 15.6869 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 15.6888, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6888 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 15.6904, + "visualDurationMs": 0.0015, + "visualStartMs": 15.6904 + }, + { + "durationMs": 0.0016, + "name": "L34", + "startMs": 15.6923, + "visualDurationMs": 0.0016, + "visualStartMs": 15.6923 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 15.6942, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6942 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 15.6959, + "visualDurationMs": 0.0014, + "visualStartMs": 15.6959 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 15.6976, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6976 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 15.6992, + "visualDurationMs": 0.0013, + "visualStartMs": 15.6992 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 15.7008, + "visualDurationMs": 0.0012, + "visualStartMs": 15.7008 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 15.7024, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7024 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 15.7041, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7041 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 15.7058, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7058 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 15.7074, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7074 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 15.7092, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7092 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 15.711, + "visualDurationMs": 0.0013, + "visualStartMs": 15.711 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 15.7127, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7127 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 15.7144, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7144 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 15.7161, + "visualDurationMs": 0.0016, + "visualStartMs": 15.7161 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 15.718, + "visualDurationMs": 0.0014, + "visualStartMs": 15.718 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 15.7197, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7197 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 15.7215, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7215 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 15.7233, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7233 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 15.7249, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7249 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 15.7266, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7266 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 15.7282, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7282 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 15.7299, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7299 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 15.7317, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7317 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 15.7333, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7333 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 15.7351, + "visualDurationMs": 0.0012, + "visualStartMs": 15.7351 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 15.7367, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7367 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 15.7384, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7384 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 15.7402, + "visualDurationMs": 0.0085, + "visualStartMs": 15.7402 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 15.749, + "visualDurationMs": 0.0014, + "visualStartMs": 15.749 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 15.7507, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7507 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 15.7524, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7524 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 15.7541, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7541 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 15.7558, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7558 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 15.7575, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7575 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 15.7591, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7591 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 15.7609, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7609 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 15.7625, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7625 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 15.7641, + "visualDurationMs": 0.0012, + "visualStartMs": 15.7641 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 15.7657, + "visualDurationMs": 0.0012, + "visualStartMs": 15.7657 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 15.7672, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7672 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 15.7689, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7689 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 15.7705, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7705 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 15.7721, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7721 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 15.7737, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7737 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 15.7754, + "visualDurationMs": 0.0015, + "visualStartMs": 15.7754 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 15.7773, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7773 + }, + { + "durationMs": 0.0016, + "name": "L81", + "startMs": 15.7789, + "visualDurationMs": 0.0016, + "visualStartMs": 15.7789 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 15.7808, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7808 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 15.7825, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7825 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 15.7841, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7841 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 15.7857, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7857 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 15.7874, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7874 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 15.789, + "visualDurationMs": 0.0014, + "visualStartMs": 15.789 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 15.7907, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7907 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 15.7923, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7923 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 15.7941, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7941 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 15.7958, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7958 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 15.7974, + "visualDurationMs": 0.0014, + "visualStartMs": 15.7974 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 15.7991, + "visualDurationMs": 0.0013, + "visualStartMs": 15.7991 + }, + { + "durationMs": 0.0081, + "name": "L94", + "startMs": 15.8007, + "visualDurationMs": 0.0081, + "visualStartMs": 15.8007 + }, + { + "durationMs": 0.0015, + "name": "L95", + "startMs": 15.8092, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8092 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 15.811, + "visualDurationMs": 0.0014, + "visualStartMs": 15.811 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 15.8128, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8128 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 15.8145, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8145 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 15.8162, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8162 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 15.8177, + "visualDurationMs": 0.0007, + "visualStartMs": 15.8177 + } + ], + "durationMs": 0.1947, + "name": "Lighting", + "startMs": 15.6241, + "visualDurationMs": 0.1947, + "visualStartMs": 15.6241 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 15.8194, + "visualDurationMs": 0.0004, + "visualStartMs": 15.8194 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 15.82, + "visualDurationMs": 0.0004, + "visualStartMs": 15.82 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 15.819, + "visualDurationMs": 0.0016, + "visualStartMs": 15.819 + } + ], + "durationMs": 0.201, + "name": "DrawSprite", + "startMs": 15.6197, + "visualDurationMs": 0.201, + "visualStartMs": 15.6197 + } + ], + "durationMs": 0.2017, + "name": "Draw Sprite: Pebble_60", + "startMs": 15.6191, + "visualDurationMs": 0.2017, + "visualStartMs": 15.6191 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 15.8254, + "visualDurationMs": 0.0004, + "visualStartMs": 15.8254 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 15.826, + "visualDurationMs": 0.0004, + "visualStartMs": 15.826 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 15.8269, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8269 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 15.8285, + "visualDurationMs": 0.0005, + "visualStartMs": 15.8285 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 15.8266, + "visualDurationMs": 0.0025, + "visualStartMs": 15.8266 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 15.8293, + "visualDurationMs": 0.0004, + "visualStartMs": 15.8293 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 15.8302, + "visualDurationMs": 0.0009, + "visualStartMs": 15.8302 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 15.8313, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8313 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 15.833, + "visualDurationMs": 0.0013, + "visualStartMs": 15.833 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 15.8347, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8347 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 15.8365, + "visualDurationMs": 0.0012, + "visualStartMs": 15.8365 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 15.8381, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8381 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 15.8398, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8398 + }, + { + "durationMs": 0.0011, + "name": "L5", + "startMs": 15.8415, + "visualDurationMs": 0.0011, + "visualStartMs": 15.8415 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 15.8431, + "visualDurationMs": 0.0028, + "visualStartMs": 15.8431 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 15.8462, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8462 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 15.8479, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8479 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 15.8496, + "visualDurationMs": 0.0012, + "visualStartMs": 15.8496 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 15.8512, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8512 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 15.853, + "visualDurationMs": 0.0015, + "visualStartMs": 15.853 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 15.8548, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8548 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 15.8565, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8565 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 15.8583, + "visualDurationMs": 0.0036, + "visualStartMs": 15.8583 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 15.8622, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8622 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 15.864, + "visualDurationMs": 0.0015, + "visualStartMs": 15.864 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 15.8659, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8659 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 15.8677, + "visualDurationMs": 0.0016, + "visualStartMs": 15.8677 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 15.8696, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8696 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 15.8713, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8713 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 15.873, + "visualDurationMs": 0.0015, + "visualStartMs": 15.873 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 15.8748, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8748 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 15.8766, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8766 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 15.8782, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8782 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 15.8799, + "visualDurationMs": 0.0012, + "visualStartMs": 15.8799 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 15.8814, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8814 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 15.883, + "visualDurationMs": 0.0012, + "visualStartMs": 15.883 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 15.8845, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8845 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 15.8862, + "visualDurationMs": 0.0013, + "visualStartMs": 15.8862 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 15.8878, + "visualDurationMs": 0.005, + "visualStartMs": 15.8878 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 15.8932, + "visualDurationMs": 0.0015, + "visualStartMs": 15.8932 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 15.895, + "visualDurationMs": 0.0013, + "visualStartMs": 15.895 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 15.8966, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8966 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 15.8983, + "visualDurationMs": 0.0014, + "visualStartMs": 15.8983 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 15.9001, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9001 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 15.9018, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9018 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 15.9034, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9034 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 15.9049, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9049 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 15.9065, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9065 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 15.9081, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9081 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 15.9098, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9098 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 15.9114, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9114 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 15.9131, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9131 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 15.9149, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9149 + }, + { + "durationMs": 0.0012, + "name": "L45", + "startMs": 15.9167, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9167 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 15.9183, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9183 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 15.92, + "visualDurationMs": 0.0013, + "visualStartMs": 15.92 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 15.9217, + "visualDurationMs": 0.0015, + "visualStartMs": 15.9217 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 15.9236, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9236 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 15.9253, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9253 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 15.927, + "visualDurationMs": 0.0013, + "visualStartMs": 15.927 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 15.9287, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9287 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 15.9302, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9302 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 15.932, + "visualDurationMs": 0.0013, + "visualStartMs": 15.932 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 15.9337, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9337 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 15.9355, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9355 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 15.9372, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9372 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 15.9388, + "visualDurationMs": 0.0015, + "visualStartMs": 15.9388 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 15.9406, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9406 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 15.9422, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9422 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 15.9439, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9439 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 15.9456, + "visualDurationMs": 0.0087, + "visualStartMs": 15.9456 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 15.9547, + "visualDurationMs": 0.0015, + "visualStartMs": 15.9547 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 15.9565, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9565 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 15.9582, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9582 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 15.9599, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9599 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 15.9615, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9615 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 15.9633, + "visualDurationMs": 0.0014, + "visualStartMs": 15.9633 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 15.9651, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9651 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 15.9667, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9667 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 15.9683, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9683 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 15.9698, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9698 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 15.9713, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9713 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 15.9729, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9729 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 15.9745, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9745 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 15.976, + "visualDurationMs": 0.0013, + "visualStartMs": 15.976 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 15.9776, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9776 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 15.9792, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9792 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 15.9808, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9808 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 15.9824, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9824 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 15.984, + "visualDurationMs": 0.0012, + "visualStartMs": 15.984 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 15.9856, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9856 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 15.9872, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9872 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 15.9888, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9888 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 15.9903, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9903 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 15.9919, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9919 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 15.9935, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9935 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 15.9952, + "visualDurationMs": 0.0012, + "visualStartMs": 15.9952 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 15.9967, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9967 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 15.9983, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9983 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 15.9999, + "visualDurationMs": 0.0013, + "visualStartMs": 15.9999 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 16.0015, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0015 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 16.003, + "visualDurationMs": 0.0013, + "visualStartMs": 16.003 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 16.0046, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0046 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 16.0062, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0062 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 16.0077, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0077 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 16.0093, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0093 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 16.0109, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0109 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 16.0125, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0125 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 16.0138, + "visualDurationMs": 0.0005, + "visualStartMs": 16.0138 + } + ], + "durationMs": 0.1847, + "name": "Lighting", + "startMs": 15.8299, + "visualDurationMs": 0.1847, + "visualStartMs": 15.8299 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 16.0151, + "visualDurationMs": 0.0004, + "visualStartMs": 16.0151 + }, + { + "durationMs": 0.0003, + "name": "GL Draw", + "startMs": 16.0156, + "visualDurationMs": 0.0003, + "visualStartMs": 16.0156 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 16.0147, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0147 + } + ], + "durationMs": 0.1912, + "name": "DrawSprite", + "startMs": 15.825, + "visualDurationMs": 0.1912, + "visualStartMs": 15.825 + } + ], + "durationMs": 0.1918, + "name": "Draw Sprite: Pebble_70", + "startMs": 15.8245, + "visualDurationMs": 0.1918, + "visualStartMs": 15.8245 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 16.0179, + "visualDurationMs": 0.0004, + "visualStartMs": 16.0179 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 16.0184, + "visualDurationMs": 0.0003, + "visualStartMs": 16.0184 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 16.0192, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0192 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 16.0207, + "visualDurationMs": 0.0006, + "visualStartMs": 16.0207 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 16.0189, + "visualDurationMs": 0.0025, + "visualStartMs": 16.0189 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 16.0215, + "visualDurationMs": 0.0004, + "visualStartMs": 16.0215 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 16.0223, + "visualDurationMs": 0.0009, + "visualStartMs": 16.0223 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 16.0233, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0233 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 16.025, + "visualDurationMs": 0.0013, + "visualStartMs": 16.025 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 16.0267, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0267 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 16.0283, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0283 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 16.03, + "visualDurationMs": 0.0014, + "visualStartMs": 16.03 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 16.0317, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0317 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 16.0332, + "visualDurationMs": 0.0012, + "visualStartMs": 16.0332 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 16.0347, + "visualDurationMs": 0.0025, + "visualStartMs": 16.0347 + }, + { + "durationMs": 0.0134, + "name": "L7", + "startMs": 16.0375, + "visualDurationMs": 0.0134, + "visualStartMs": 16.0375 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 16.0514, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0514 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 16.0532, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0532 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 16.0549, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0549 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 16.0567, + "visualDurationMs": 0.0015, + "visualStartMs": 16.0567 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 16.0585, + "visualDurationMs": 0.0015, + "visualStartMs": 16.0585 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 16.0603, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0603 + }, + { + "durationMs": 0.0037, + "name": "L14", + "startMs": 16.0621, + "visualDurationMs": 0.0037, + "visualStartMs": 16.0621 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 16.0661, + "visualDurationMs": 0.0017, + "visualStartMs": 16.0661 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 16.0681, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0681 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 16.0698, + "visualDurationMs": 0.0015, + "visualStartMs": 16.0698 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 16.0716, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0716 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 16.0733, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0733 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 16.075, + "visualDurationMs": 0.0013, + "visualStartMs": 16.075 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 16.0766, + "visualDurationMs": 0.0015, + "visualStartMs": 16.0766 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 16.0785, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0785 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 16.0802, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0802 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 16.0818, + "visualDurationMs": 0.0015, + "visualStartMs": 16.0818 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 16.0836, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0836 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 16.0853, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0853 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 16.087, + "visualDurationMs": 0.0012, + "visualStartMs": 16.087 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 16.0886, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0886 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 16.0904, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0904 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 16.0921, + "visualDurationMs": 0.0053, + "visualStartMs": 16.0921 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 16.0977, + "visualDurationMs": 0.0014, + "visualStartMs": 16.0977 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 16.0995, + "visualDurationMs": 0.0013, + "visualStartMs": 16.0995 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 16.1011, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1011 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 16.1028, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1028 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 16.1046, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1046 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 16.1063, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1063 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 16.1081, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1081 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 16.1098, + "visualDurationMs": 0.0012, + "visualStartMs": 16.1098 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 16.1113, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1113 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 16.113, + "visualDurationMs": 0.0014, + "visualStartMs": 16.113 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 16.1147, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1147 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 16.1164, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1164 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 16.1181, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1181 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 16.1198, + "visualDurationMs": 0.0016, + "visualStartMs": 16.1198 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 16.1217, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1217 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 16.1234, + "visualDurationMs": 0.0015, + "visualStartMs": 16.1234 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 16.1252, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1252 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 16.127, + "visualDurationMs": 0.0016, + "visualStartMs": 16.127 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 16.129, + "visualDurationMs": 0.0014, + "visualStartMs": 16.129 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 16.1307, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1307 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 16.1324, + "visualDurationMs": 0.0015, + "visualStartMs": 16.1324 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 16.1342, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1342 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 16.1359, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1359 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 16.1376, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1376 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 16.1392, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1392 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 16.1409, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1409 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 16.1427, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1427 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 16.1444, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1444 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 16.1461, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1461 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 16.1478, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1478 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 16.1495, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1495 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 16.1512, + "visualDurationMs": 0.009, + "visualStartMs": 16.1512 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 16.1605, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1605 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 16.1622, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1622 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 16.1639, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1639 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 16.1656, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1656 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 16.1674, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1674 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 16.1692, + "visualDurationMs": 0.0012, + "visualStartMs": 16.1692 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 16.1708, + "visualDurationMs": 0.0015, + "visualStartMs": 16.1708 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 16.1726, + "visualDurationMs": 0.0015, + "visualStartMs": 16.1726 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 16.1744, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1744 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 16.1762, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1762 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 16.1778, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1778 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 16.1794, + "visualDurationMs": 0.0014, + "visualStartMs": 16.1794 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 16.1811, + "visualDurationMs": 0.0012, + "visualStartMs": 16.1811 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 16.1827, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1827 + }, + { + "durationMs": 0.0068, + "name": "L77", + "startMs": 16.1843, + "visualDurationMs": 0.0068, + "visualStartMs": 16.1843 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 16.1915, + "visualDurationMs": 0.0012, + "visualStartMs": 16.1915 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 16.193, + "visualDurationMs": 0.0015, + "visualStartMs": 16.193 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 16.1948, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1948 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 16.1965, + "visualDurationMs": 0.0012, + "visualStartMs": 16.1965 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 16.1981, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1981 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 16.1997, + "visualDurationMs": 0.0013, + "visualStartMs": 16.1997 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 16.2013, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2013 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 16.203, + "visualDurationMs": 0.0015, + "visualStartMs": 16.203 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 16.2048, + "visualDurationMs": 0.0015, + "visualStartMs": 16.2048 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 16.2067, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2067 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 16.2083, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2083 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 16.2099, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2099 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 16.2116, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2116 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 16.2132, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2132 + }, + { + "durationMs": 0.0015, + "name": "L92", + "startMs": 16.2148, + "visualDurationMs": 0.0015, + "visualStartMs": 16.2148 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 16.2167, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2167 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 16.2183, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2183 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 16.22, + "visualDurationMs": 0.0012, + "visualStartMs": 16.22 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 16.2216, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2216 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 16.2233, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2233 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 16.225, + "visualDurationMs": 0.0012, + "visualStartMs": 16.225 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 16.2266, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2266 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 16.228, + "visualDurationMs": 0.0006, + "visualStartMs": 16.228 + } + ], + "durationMs": 0.2069, + "name": "Lighting", + "startMs": 16.022, + "visualDurationMs": 0.2069, + "visualStartMs": 16.022 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 16.2295, + "visualDurationMs": 0.0004, + "visualStartMs": 16.2295 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 16.23, + "visualDurationMs": 0.0004, + "visualStartMs": 16.23 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 16.2291, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2291 + } + ], + "durationMs": 0.213, + "name": "DrawSprite", + "startMs": 16.0176, + "visualDurationMs": 0.213, + "visualStartMs": 16.0176 + } + ], + "durationMs": 0.2136, + "name": "Draw Sprite: Pebble_71", + "startMs": 16.0171, + "visualDurationMs": 0.2136, + "visualStartMs": 16.0171 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 16.2323, + "visualDurationMs": 0.0003, + "visualStartMs": 16.2323 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 16.2327, + "visualDurationMs": 0.0004, + "visualStartMs": 16.2327 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 16.2336, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2336 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 16.2351, + "visualDurationMs": 0.0004, + "visualStartMs": 16.2351 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 16.2333, + "visualDurationMs": 0.0023, + "visualStartMs": 16.2333 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 16.2358, + "visualDurationMs": 0.0003, + "visualStartMs": 16.2358 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 16.2366, + "visualDurationMs": 0.0009, + "visualStartMs": 16.2366 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 16.2376, + "visualDurationMs": 0.0015, + "visualStartMs": 16.2376 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 16.2395, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2395 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 16.2411, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2411 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 16.2427, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2427 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 16.2445, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2445 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 16.2462, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2462 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 16.2478, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2478 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 16.2494, + "visualDurationMs": 0.0024, + "visualStartMs": 16.2494 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 16.2521, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2521 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 16.2538, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2538 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 16.2555, + "visualDurationMs": 0.0012, + "visualStartMs": 16.2555 + }, + { + "durationMs": 0.0016, + "name": "L10", + "startMs": 16.2571, + "visualDurationMs": 0.0016, + "visualStartMs": 16.2571 + }, + { + "durationMs": 0.0018, + "name": "L11", + "startMs": 16.259, + "visualDurationMs": 0.0018, + "visualStartMs": 16.259 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 16.2611, + "visualDurationMs": 0.0015, + "visualStartMs": 16.2611 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 16.263, + "visualDurationMs": 0.0013, + "visualStartMs": 16.263 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 16.2647, + "visualDurationMs": 0.0034, + "visualStartMs": 16.2647 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 16.2684, + "visualDurationMs": 0.0015, + "visualStartMs": 16.2684 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 16.2702, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2702 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 16.2719, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2719 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 16.2737, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2737 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 16.2754, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2754 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 16.2771, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2771 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 16.2787, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2787 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 16.2805, + "visualDurationMs": 0.0014, + "visualStartMs": 16.2805 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 16.2823, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2823 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 16.284, + "visualDurationMs": 0.0012, + "visualStartMs": 16.284 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 16.2856, + "visualDurationMs": 0.0013, + "visualStartMs": 16.2856 + }, + { + "durationMs": 0.0125, + "name": "L26", + "startMs": 16.2873, + "visualDurationMs": 0.0125, + "visualStartMs": 16.2873 + }, + { + "durationMs": 0.0017, + "name": "L27", + "startMs": 16.3003, + "visualDurationMs": 0.0017, + "visualStartMs": 16.3003 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 16.3024, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3024 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 16.3042, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3042 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 16.3059, + "visualDurationMs": 0.0054, + "visualStartMs": 16.3059 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 16.3116, + "visualDurationMs": 0.0015, + "visualStartMs": 16.3116 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 16.3135, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3135 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 16.3151, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3151 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 16.3169, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3169 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 16.3186, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3186 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 16.3202, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3202 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 16.3219, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3219 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 16.3235, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3235 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 16.3251, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3251 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 16.3267, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3267 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 16.3285, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3285 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 16.3301, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3301 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 16.3317, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3317 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 16.3335, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3335 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 16.3352, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3352 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 16.3369, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3369 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 16.3386, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3386 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 16.3403, + "visualDurationMs": 0.0016, + "visualStartMs": 16.3403 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 16.3422, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3422 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 16.344, + "visualDurationMs": 0.0015, + "visualStartMs": 16.344 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 16.3458, + "visualDurationMs": 0.0015, + "visualStartMs": 16.3458 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 16.3477, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3477 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 16.3493, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3493 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 16.351, + "visualDurationMs": 0.0014, + "visualStartMs": 16.351 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 16.3527, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3527 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 16.3544, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3544 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 16.356, + "visualDurationMs": 0.0014, + "visualStartMs": 16.356 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 16.3577, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3577 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 16.3594, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3594 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 16.361, + "visualDurationMs": 0.0013, + "visualStartMs": 16.361 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 16.3627, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3627 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 16.3643, + "visualDurationMs": 0.0087, + "visualStartMs": 16.3643 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 16.3734, + "visualDurationMs": 0.0015, + "visualStartMs": 16.3734 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 16.3753, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3753 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 16.377, + "visualDurationMs": 0.0014, + "visualStartMs": 16.377 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 16.3787, + "visualDurationMs": 0.0015, + "visualStartMs": 16.3787 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 16.3806, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3806 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 16.3823, + "visualDurationMs": 0.0014, + "visualStartMs": 16.3823 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 16.384, + "visualDurationMs": 0.0014, + "visualStartMs": 16.384 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 16.3858, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3858 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 16.3874, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3874 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 16.3891, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3891 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 16.3906, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3906 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 16.3922, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3922 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 16.3938, + "visualDurationMs": 0.0012, + "visualStartMs": 16.3938 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 16.3954, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3954 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 16.397, + "visualDurationMs": 0.0012, + "visualStartMs": 16.397 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 16.3985, + "visualDurationMs": 0.0013, + "visualStartMs": 16.3985 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 16.4002, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4002 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 16.4018, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4018 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 16.4036, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4036 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 16.4053, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4053 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 16.4068, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4068 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 16.4085, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4085 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 16.4101, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4101 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 16.4118, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4118 + }, + { + "durationMs": 0.0015, + "name": "L87", + "startMs": 16.4135, + "visualDurationMs": 0.0015, + "visualStartMs": 16.4135 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 16.4153, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4153 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 16.417, + "visualDurationMs": 0.0014, + "visualStartMs": 16.417 + }, + { + "durationMs": 0.0015, + "name": "L90", + "startMs": 16.4187, + "visualDurationMs": 0.0015, + "visualStartMs": 16.4187 + }, + { + "durationMs": 0.0015, + "name": "L91", + "startMs": 16.4206, + "visualDurationMs": 0.0015, + "visualStartMs": 16.4206 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 16.4224, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4224 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 16.424, + "visualDurationMs": 0.0013, + "visualStartMs": 16.424 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 16.4256, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4256 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 16.4272, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4272 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 16.4289, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4289 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 16.4305, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4305 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 16.4323, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4323 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 16.4339, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4339 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 16.4354, + "visualDurationMs": 0.0007, + "visualStartMs": 16.4354 + } + ], + "durationMs": 0.2002, + "name": "Lighting", + "startMs": 16.2362, + "visualDurationMs": 0.2002, + "visualStartMs": 16.2362 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 16.4369, + "visualDurationMs": 0.0005, + "visualStartMs": 16.4369 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 16.4375, + "visualDurationMs": 0.0005, + "visualStartMs": 16.4375 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 16.4366, + "visualDurationMs": 0.0015, + "visualStartMs": 16.4366 + } + ], + "durationMs": 0.2063, + "name": "DrawSprite", + "startMs": 16.2319, + "visualDurationMs": 0.2063, + "visualStartMs": 16.2319 + } + ], + "durationMs": 0.2068, + "name": "Draw Sprite: Pebble_72", + "startMs": 16.2315, + "visualDurationMs": 0.2068, + "visualStartMs": 16.2315 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 16.4404, + "visualDurationMs": 0.0003, + "visualStartMs": 16.4404 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 16.4409, + "visualDurationMs": 0.0004, + "visualStartMs": 16.4409 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 16.4419, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4419 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 16.4433, + "visualDurationMs": 0.0006, + "visualStartMs": 16.4433 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 16.4416, + "visualDurationMs": 0.0024, + "visualStartMs": 16.4416 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 16.4441, + "visualDurationMs": 0.0004, + "visualStartMs": 16.4441 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 16.445, + "visualDurationMs": 0.0009, + "visualStartMs": 16.445 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 16.4461, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4461 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 16.4478, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4478 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 16.4495, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4495 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 16.451, + "visualDurationMs": 0.0013, + "visualStartMs": 16.451 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 16.4527, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4527 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 16.4544, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4544 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 16.4559, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4559 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 16.4574, + "visualDurationMs": 0.0025, + "visualStartMs": 16.4574 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 16.4603, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4603 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 16.4618, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4618 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 16.4636, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4636 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 16.4651, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4651 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 16.4667, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4667 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 16.4685, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4685 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 16.4702, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4702 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 16.4718, + "visualDurationMs": 0.0034, + "visualStartMs": 16.4718 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 16.4756, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4756 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 16.4774, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4774 + }, + { + "durationMs": 0.0013, + "name": "L17", + "startMs": 16.4791, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4791 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 16.4807, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4807 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 16.4824, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4824 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 16.484, + "visualDurationMs": 0.0013, + "visualStartMs": 16.484 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 16.4856, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4856 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 16.4873, + "visualDurationMs": 0.0014, + "visualStartMs": 16.4873 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 16.489, + "visualDurationMs": 0.0014, + "visualStartMs": 16.489 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 16.4907, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4907 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 16.4924, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4924 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 16.4939, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4939 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 16.4955, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4955 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 16.4971, + "visualDurationMs": 0.0013, + "visualStartMs": 16.4971 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 16.4988, + "visualDurationMs": 0.0012, + "visualStartMs": 16.4988 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 16.5004, + "visualDurationMs": 0.005, + "visualStartMs": 16.5004 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 16.5058, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5058 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 16.5076, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5076 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 16.5091, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5091 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 16.5108, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5108 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 16.5125, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5125 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 16.5141, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5141 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 16.5157, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5157 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 16.5173, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5173 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 16.5189, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5189 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 16.5205, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5205 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 16.5221, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5221 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 16.5237, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5237 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 16.5253, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5253 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 16.527, + "visualDurationMs": 0.0015, + "visualStartMs": 16.527 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 16.5288, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5288 + }, + { + "durationMs": 0.0048, + "name": "L46", + "startMs": 16.5304, + "visualDurationMs": 0.0048, + "visualStartMs": 16.5304 + }, + { + "durationMs": 0.0016, + "name": "L47", + "startMs": 16.5356, + "visualDurationMs": 0.0016, + "visualStartMs": 16.5356 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 16.5375, + "visualDurationMs": 0.0017, + "visualStartMs": 16.5375 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 16.5396, + "visualDurationMs": 0.0015, + "visualStartMs": 16.5396 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 16.5415, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5415 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 16.5433, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5433 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 16.545, + "visualDurationMs": 0.0014, + "visualStartMs": 16.545 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 16.5467, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5467 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 16.5484, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5484 + }, + { + "durationMs": 0.0015, + "name": "L55", + "startMs": 16.5501, + "visualDurationMs": 0.0015, + "visualStartMs": 16.5501 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 16.5519, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5519 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 16.5536, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5536 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 16.5552, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5552 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 16.557, + "visualDurationMs": 0.0013, + "visualStartMs": 16.557 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 16.5586, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5586 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 16.5603, + "visualDurationMs": 0.0015, + "visualStartMs": 16.5603 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 16.5622, + "visualDurationMs": 0.0088, + "visualStartMs": 16.5622 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 16.5714, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5714 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 16.5731, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5731 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 16.5747, + "visualDurationMs": 0.0014, + "visualStartMs": 16.5747 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 16.5765, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5765 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 16.5782, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5782 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 16.5799, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5799 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 16.5815, + "visualDurationMs": 0.0015, + "visualStartMs": 16.5815 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 16.5833, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5833 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 16.5849, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5849 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 16.5866, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5866 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 16.5882, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5882 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 16.5898, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5898 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 16.5914, + "visualDurationMs": 0.0012, + "visualStartMs": 16.5914 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 16.593, + "visualDurationMs": 0.0012, + "visualStartMs": 16.593 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 16.5946, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5946 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 16.5962, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5962 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 16.5979, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5979 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 16.5996, + "visualDurationMs": 0.0013, + "visualStartMs": 16.5996 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 16.6012, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6012 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 16.6029, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6029 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 16.6044, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6044 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 16.606, + "visualDurationMs": 0.0013, + "visualStartMs": 16.606 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 16.6077, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6077 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 16.6093, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6093 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 16.6109, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6109 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 16.6125, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6125 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 16.6142, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6142 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 16.6159, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6159 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 16.6175, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6175 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 16.6191, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6191 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 16.6208, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6208 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 16.6224, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6224 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 16.624, + "visualDurationMs": 0.0013, + "visualStartMs": 16.624 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 16.6256, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6256 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 16.6273, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6273 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 16.6289, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6289 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 16.6306, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6306 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 16.6319, + "visualDurationMs": 0.0008, + "visualStartMs": 16.6319 + } + ], + "durationMs": 0.1882, + "name": "Lighting", + "startMs": 16.4447, + "visualDurationMs": 0.1882, + "visualStartMs": 16.4447 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 16.6335, + "visualDurationMs": 0.0004, + "visualStartMs": 16.6335 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 16.634, + "visualDurationMs": 0.0007, + "visualStartMs": 16.634 + } + ], + "durationMs": 0.0018, + "name": "Draw", + "startMs": 16.6331, + "visualDurationMs": 0.0018, + "visualStartMs": 16.6331 + } + ], + "durationMs": 0.1949, + "name": "DrawSprite", + "startMs": 16.4401, + "visualDurationMs": 0.1949, + "visualStartMs": 16.4401 + } + ], + "durationMs": 0.1955, + "name": "Draw Sprite: Pebble_73", + "startMs": 16.4396, + "visualDurationMs": 0.1955, + "visualStartMs": 16.4396 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 16.6369, + "visualDurationMs": 0.0003, + "visualStartMs": 16.6369 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 16.6373, + "visualDurationMs": 0.0004, + "visualStartMs": 16.6373 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 16.6383, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6383 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 16.6397, + "visualDurationMs": 0.0005, + "visualStartMs": 16.6397 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 16.638, + "visualDurationMs": 0.0023, + "visualStartMs": 16.638 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 16.6404, + "visualDurationMs": 0.0004, + "visualStartMs": 16.6404 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 16.6412, + "visualDurationMs": 0.0009, + "visualStartMs": 16.6412 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 16.6422, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6422 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 16.6441, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6441 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 16.6457, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6457 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 16.6473, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6473 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 16.649, + "visualDurationMs": 0.0014, + "visualStartMs": 16.649 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 16.6508, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6508 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 16.6523, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6523 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 16.6539, + "visualDurationMs": 0.0025, + "visualStartMs": 16.6539 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 16.6567, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6567 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 16.6583, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6583 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 16.6599, + "visualDurationMs": 0.0012, + "visualStartMs": 16.6599 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 16.6615, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6615 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 16.6631, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6631 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 16.6649, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6649 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 16.6666, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6666 + }, + { + "durationMs": 0.0033, + "name": "L14", + "startMs": 16.6682, + "visualDurationMs": 0.0033, + "visualStartMs": 16.6682 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 16.6719, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6719 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 16.6736, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6736 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 16.6754, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6754 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 16.6771, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6771 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 16.6788, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6788 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 16.6807, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6807 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 16.6824, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6824 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 16.6841, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6841 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 16.6858, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6858 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 16.6875, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6875 + }, + { + "durationMs": 0.0015, + "name": "L25", + "startMs": 16.6893, + "visualDurationMs": 0.0015, + "visualStartMs": 16.6893 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 16.6912, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6912 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 16.6928, + "visualDurationMs": 0.0014, + "visualStartMs": 16.6928 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 16.6945, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6945 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 16.6961, + "visualDurationMs": 0.0013, + "visualStartMs": 16.6961 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 16.6977, + "visualDurationMs": 0.0051, + "visualStartMs": 16.6977 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 16.7032, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7032 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 16.7049, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7049 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 16.7066, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7066 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 16.7084, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7084 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 16.7101, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7101 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 16.7118, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7118 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 16.7135, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7135 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 16.715, + "visualDurationMs": 0.0012, + "visualStartMs": 16.715 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 16.7166, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7166 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 16.7182, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7182 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 16.7198, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7198 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 16.7215, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7215 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 16.7231, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7231 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 16.7248, + "visualDurationMs": 0.0015, + "visualStartMs": 16.7248 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 16.7266, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7266 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 16.7283, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7283 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 16.73, + "visualDurationMs": 0.0014, + "visualStartMs": 16.73 + }, + { + "durationMs": 0.0014, + "name": "L48", + "startMs": 16.7318, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7318 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 16.7336, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7336 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 16.7353, + "visualDurationMs": 0.0015, + "visualStartMs": 16.7353 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 16.7371, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7371 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 16.7388, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7388 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 16.7405, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7405 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 16.7421, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7421 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 16.7438, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7438 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 16.7454, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7454 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 16.7472, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7472 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 16.7488, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7488 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 16.7505, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7505 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 16.7521, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7521 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 16.7538, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7538 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 16.7555, + "visualDurationMs": 0.0085, + "visualStartMs": 16.7555 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 16.7644, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7644 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 16.766, + "visualDurationMs": 0.0014, + "visualStartMs": 16.766 + }, + { + "durationMs": 0.0024, + "name": "L65", + "startMs": 16.7678, + "visualDurationMs": 0.0024, + "visualStartMs": 16.7678 + }, + { + "durationMs": 0.0018, + "name": "L66", + "startMs": 16.7706, + "visualDurationMs": 0.0018, + "visualStartMs": 16.7706 + }, + { + "durationMs": 0.0019, + "name": "L67", + "startMs": 16.7728, + "visualDurationMs": 0.0019, + "visualStartMs": 16.7728 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 16.775, + "visualDurationMs": 0.0013, + "visualStartMs": 16.775 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 16.7767, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7767 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 16.7785, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7785 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 16.7801, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7801 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 16.7818, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7818 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 16.7834, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7834 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 16.785, + "visualDurationMs": 0.0013, + "visualStartMs": 16.785 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 16.7867, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7867 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 16.7884, + "visualDurationMs": 0.0013, + "visualStartMs": 16.7884 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 16.7901, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7901 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 16.7917, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7917 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 16.7932, + "visualDurationMs": 0.0014, + "visualStartMs": 16.7932 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 16.795, + "visualDurationMs": 0.0014, + "visualStartMs": 16.795 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 16.7968, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7968 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 16.7984, + "visualDurationMs": 0.0012, + "visualStartMs": 16.7984 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 16.8, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 16.8015, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8015 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 16.8031, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8031 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 16.8049, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8049 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 16.8065, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8065 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 16.8082, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8082 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 16.8099, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8099 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 16.8116, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8116 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 16.8131, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8131 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 16.8148, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8148 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 16.8164, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8164 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 16.8179, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8179 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 16.8195, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8195 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 16.8211, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8211 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 16.8227, + "visualDurationMs": 0.0015, + "visualStartMs": 16.8227 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 16.8245, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8245 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 16.826, + "visualDurationMs": 0.0013, + "visualStartMs": 16.826 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 16.8275, + "visualDurationMs": 0.0005, + "visualStartMs": 16.8275 + } + ], + "durationMs": 0.1875, + "name": "Lighting", + "startMs": 16.6409, + "visualDurationMs": 0.1875, + "visualStartMs": 16.6409 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 16.8289, + "visualDurationMs": 0.0005, + "visualStartMs": 16.8289 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 16.8295, + "visualDurationMs": 0.0004, + "visualStartMs": 16.8295 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 16.8286, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8286 + } + ], + "durationMs": 0.1936, + "name": "DrawSprite", + "startMs": 16.6365, + "visualDurationMs": 0.1936, + "visualStartMs": 16.6365 + } + ], + "durationMs": 0.1941, + "name": "Draw Sprite: Pebble_74", + "startMs": 16.6361, + "visualDurationMs": 0.1941, + "visualStartMs": 16.6361 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 16.8368, + "visualDurationMs": 0.0003, + "visualStartMs": 16.8368 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 16.8372, + "visualDurationMs": 0.0004, + "visualStartMs": 16.8372 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 16.8381, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8381 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 16.8395, + "visualDurationMs": 0.0005, + "visualStartMs": 16.8395 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 16.8378, + "visualDurationMs": 0.0023, + "visualStartMs": 16.8378 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 16.8402, + "visualDurationMs": 0.0004, + "visualStartMs": 16.8402 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 16.841, + "visualDurationMs": 0.0009, + "visualStartMs": 16.841 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 16.842, + "visualDurationMs": 0.0014, + "visualStartMs": 16.842 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 16.8438, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8438 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 16.8453, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8453 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 16.847, + "visualDurationMs": 0.0013, + "visualStartMs": 16.847 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 16.8486, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8486 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 16.8502, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8502 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 16.8519, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8519 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 16.8534, + "visualDurationMs": 0.0026, + "visualStartMs": 16.8534 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 16.8563, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8563 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 16.8579, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8579 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 16.8596, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8596 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 16.8612, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8612 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 16.8628, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8628 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 16.8645, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8645 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 16.8662, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8662 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 16.8678, + "visualDurationMs": 0.0034, + "visualStartMs": 16.8678 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 16.8716, + "visualDurationMs": 0.0015, + "visualStartMs": 16.8716 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 16.8735, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8735 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 16.8751, + "visualDurationMs": 0.0016, + "visualStartMs": 16.8751 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 16.877, + "visualDurationMs": 0.0014, + "visualStartMs": 16.877 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 16.8788, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8788 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 16.8805, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8805 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 16.8821, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8821 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 16.8839, + "visualDurationMs": 0.0014, + "visualStartMs": 16.8839 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 16.8856, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8856 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 16.8872, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8872 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 16.8889, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8889 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 16.8905, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8905 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 16.8922, + "visualDurationMs": 0.0012, + "visualStartMs": 16.8922 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 16.8937, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8937 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 16.8953, + "visualDurationMs": 0.0013, + "visualStartMs": 16.8953 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 16.8969, + "visualDurationMs": 0.005, + "visualStartMs": 16.8969 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 16.9023, + "visualDurationMs": 0.0015, + "visualStartMs": 16.9023 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 16.9041, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9041 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 16.9058, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9058 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 16.9076, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9076 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 16.9092, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9092 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 16.911, + "visualDurationMs": 0.0012, + "visualStartMs": 16.911 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 16.9126, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9126 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 16.9141, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9141 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 16.9157, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9157 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 16.9172, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9172 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 16.9189, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9189 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 16.9206, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9206 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 16.9222, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9222 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 16.9239, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9239 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 16.9256, + "visualDurationMs": 0.0015, + "visualStartMs": 16.9256 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 16.9274, + "visualDurationMs": 0.0015, + "visualStartMs": 16.9274 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 16.9292, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9292 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 16.9308, + "visualDurationMs": 0.0016, + "visualStartMs": 16.9308 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 16.9327, + "visualDurationMs": 0.0015, + "visualStartMs": 16.9327 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 16.9345, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9345 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 16.9362, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9362 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 16.9379, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9379 + }, + { + "durationMs": 0.0012, + "name": "L53", + "startMs": 16.9395, + "visualDurationMs": 0.0012, + "visualStartMs": 16.9395 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 16.9411, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9411 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 16.9428, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9428 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 16.9444, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9444 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 16.946, + "visualDurationMs": 0.0013, + "visualStartMs": 16.946 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 16.9476, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9476 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 16.9493, + "visualDurationMs": 0.0013, + "visualStartMs": 16.9493 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 16.951, + "visualDurationMs": 0.0014, + "visualStartMs": 16.951 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 16.9528, + "visualDurationMs": 0.0014, + "visualStartMs": 16.9528 + }, + { + "durationMs": 0.0763, + "name": "L62", + "startMs": 16.9545, + "visualDurationMs": 0.0763, + "visualStartMs": 16.9545 + }, + { + "durationMs": 0.0017, + "name": "L63", + "startMs": 17.0313, + "visualDurationMs": 0.0017, + "visualStartMs": 17.0313 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 17.0334, + "visualDurationMs": 0.0014, + "visualStartMs": 17.0334 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 17.0352, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0352 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 17.0371, + "visualDurationMs": 0.0014, + "visualStartMs": 17.0371 + }, + { + "durationMs": 0.0015, + "name": "L67", + "startMs": 17.0388, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0388 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 17.0407, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0407 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 17.0423, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0423 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 17.0442, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0442 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 17.0458, + "visualDurationMs": 0.0014, + "visualStartMs": 17.0458 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 17.0476, + "visualDurationMs": 0.0012, + "visualStartMs": 17.0476 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 17.0492, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0492 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 17.0509, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0509 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 17.0525, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0525 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 17.0542, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0542 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 17.0558, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0558 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 17.0574, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0574 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 17.059, + "visualDurationMs": 0.0014, + "visualStartMs": 17.059 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 17.0607, + "visualDurationMs": 0.0014, + "visualStartMs": 17.0607 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 17.0624, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0624 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 17.0641, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0641 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 17.0657, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0657 + }, + { + "durationMs": 0.0036, + "name": "L84", + "startMs": 17.0673, + "visualDurationMs": 0.0036, + "visualStartMs": 17.0673 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 17.0713, + "visualDurationMs": 0.0016, + "visualStartMs": 17.0713 + }, + { + "durationMs": 0.0015, + "name": "L86", + "startMs": 17.0733, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0733 + }, + { + "durationMs": 0.0017, + "name": "L87", + "startMs": 17.0751, + "visualDurationMs": 0.0017, + "visualStartMs": 17.0751 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 17.0771, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0771 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 17.0788, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0788 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 17.0805, + "visualDurationMs": 0.0012, + "visualStartMs": 17.0805 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 17.0821, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0821 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 17.0837, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0837 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 17.0854, + "visualDurationMs": 0.0012, + "visualStartMs": 17.0854 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 17.0871, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0871 + }, + { + "durationMs": 0.0015, + "name": "L95", + "startMs": 17.0887, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0887 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 17.0906, + "visualDurationMs": 0.0012, + "visualStartMs": 17.0906 + }, + { + "durationMs": 0.0015, + "name": "L97", + "startMs": 17.0922, + "visualDurationMs": 0.0015, + "visualStartMs": 17.0922 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 17.094, + "visualDurationMs": 0.0013, + "visualStartMs": 17.094 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 17.0957, + "visualDurationMs": 0.0013, + "visualStartMs": 17.0957 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 17.0971, + "visualDurationMs": 0.0007, + "visualStartMs": 17.0971 + } + ], + "durationMs": 0.2575, + "name": "Lighting", + "startMs": 16.8407, + "visualDurationMs": 0.2575, + "visualStartMs": 16.8407 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 17.0987, + "visualDurationMs": 0.0004, + "visualStartMs": 17.0987 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 17.0993, + "visualDurationMs": 0.0006, + "visualStartMs": 17.0993 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 17.0984, + "visualDurationMs": 0.0017, + "visualStartMs": 17.0984 + } + ], + "durationMs": 0.2638, + "name": "DrawSprite", + "startMs": 16.8364, + "visualDurationMs": 0.2638, + "visualStartMs": 16.8364 + } + ], + "durationMs": 0.2693, + "name": "Draw Sprite: Pebble_75", + "startMs": 16.831, + "visualDurationMs": 0.2693, + "visualStartMs": 16.831 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 17.1023, + "visualDurationMs": 0.0003, + "visualStartMs": 17.1023 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 17.1027, + "visualDurationMs": 0.0005, + "visualStartMs": 17.1027 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 17.1039, + "visualDurationMs": 0.0012, + "visualStartMs": 17.1039 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 17.1053, + "visualDurationMs": 0.0005, + "visualStartMs": 17.1053 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 17.1034, + "visualDurationMs": 0.0026, + "visualStartMs": 17.1034 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 17.1061, + "visualDurationMs": 0.0004, + "visualStartMs": 17.1061 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 17.1071, + "visualDurationMs": 0.0011, + "visualStartMs": 17.1071 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 17.1083, + "visualDurationMs": 0.0015, + "visualStartMs": 17.1083 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 17.1102, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1102 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 17.1118, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1118 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 17.1135, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1135 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 17.1151, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1151 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 17.1169, + "visualDurationMs": 0.0012, + "visualStartMs": 17.1169 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 17.1185, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1185 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 17.1201, + "visualDurationMs": 0.0028, + "visualStartMs": 17.1201 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 17.1233, + "visualDurationMs": 0.0012, + "visualStartMs": 17.1233 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 17.1249, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1249 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 17.1266, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1266 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 17.1283, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1283 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 17.13, + "visualDurationMs": 0.0014, + "visualStartMs": 17.13 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 17.1317, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1317 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 17.1334, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1334 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 17.1351, + "visualDurationMs": 0.0035, + "visualStartMs": 17.1351 + }, + { + "durationMs": 0.0144, + "name": "L15", + "startMs": 17.1389, + "visualDurationMs": 0.0144, + "visualStartMs": 17.1389 + }, + { + "durationMs": 0.0017, + "name": "L16", + "startMs": 17.1537, + "visualDurationMs": 0.0017, + "visualStartMs": 17.1537 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 17.1558, + "visualDurationMs": 0.0015, + "visualStartMs": 17.1558 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 17.1576, + "visualDurationMs": 0.0016, + "visualStartMs": 17.1576 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 17.1595, + "visualDurationMs": 0.0015, + "visualStartMs": 17.1595 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 17.1614, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1614 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 17.1631, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1631 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 17.1649, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1649 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 17.1666, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1666 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 17.1683, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1683 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 17.17, + "visualDurationMs": 0.0013, + "visualStartMs": 17.17 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 17.1716, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1716 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 17.1732, + "visualDurationMs": 0.0012, + "visualStartMs": 17.1732 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 17.1748, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1748 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 17.1764, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1764 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 17.178, + "visualDurationMs": 0.0054, + "visualStartMs": 17.178 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 17.1838, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1838 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 17.1856, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1856 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 17.1872, + "visualDurationMs": 0.0015, + "visualStartMs": 17.1872 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 17.1891, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1891 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 17.1908, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1908 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 17.1925, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1925 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 17.1942, + "visualDurationMs": 0.0012, + "visualStartMs": 17.1942 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 17.1958, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1958 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 17.1975, + "visualDurationMs": 0.0013, + "visualStartMs": 17.1975 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 17.1991, + "visualDurationMs": 0.0014, + "visualStartMs": 17.1991 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 17.2009, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2009 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 17.2026, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2026 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 17.2043, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2043 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 17.2061, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2061 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 17.2079, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2079 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 17.2098, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2098 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 17.2115, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2115 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 17.2133, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2133 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 17.2151, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2151 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 17.2169, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2169 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 17.2186, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2186 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 17.2203, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2203 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 17.2219, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2219 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 17.2237, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2237 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 17.2254, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2254 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 17.2271, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2271 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 17.2288, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2288 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 17.2305, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2305 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 17.2322, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2322 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 17.2338, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2338 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 17.2355, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2355 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 17.2373, + "visualDurationMs": 0.0088, + "visualStartMs": 17.2373 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 17.2465, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2465 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 17.2482, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2482 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 17.2499, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2499 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 17.2516, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2516 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 17.2533, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2533 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 17.2549, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2549 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 17.2565, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2565 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 17.2581, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2581 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 17.2598, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2598 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 17.2614, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2614 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 17.2631, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2631 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 17.2646, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2646 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 17.2662, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2662 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 17.2678, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2678 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 17.2693, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2693 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 17.2709, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2709 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 17.2725, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2725 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 17.2742, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2742 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 17.2758, + "visualDurationMs": 0.0015, + "visualStartMs": 17.2758 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 17.2777, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2777 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 17.2793, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2793 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 17.2809, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2809 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 17.2824, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2824 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 17.2842, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2842 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 17.2858, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2858 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 17.2874, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2874 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 17.289, + "visualDurationMs": 0.0012, + "visualStartMs": 17.289 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 17.2906, + "visualDurationMs": 0.0012, + "visualStartMs": 17.2906 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 17.2922, + "visualDurationMs": 0.0014, + "visualStartMs": 17.2922 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 17.2939, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2939 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 17.2955, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2955 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 17.2971, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2971 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 17.2988, + "visualDurationMs": 0.0013, + "visualStartMs": 17.2988 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 17.3004, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3004 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 17.3021, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3021 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 17.3037, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3037 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 17.3052, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3052 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 17.3067, + "visualDurationMs": 0.0007, + "visualStartMs": 17.3067 + } + ], + "durationMs": 0.2011, + "name": "Lighting", + "startMs": 17.1067, + "visualDurationMs": 0.2011, + "visualStartMs": 17.1067 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 17.3082, + "visualDurationMs": 0.0005, + "visualStartMs": 17.3082 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 17.3088, + "visualDurationMs": 0.0005, + "visualStartMs": 17.3088 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 17.3079, + "visualDurationMs": 0.0016, + "visualStartMs": 17.3079 + } + ], + "durationMs": 0.2077, + "name": "DrawSprite", + "startMs": 17.1019, + "visualDurationMs": 0.2077, + "visualStartMs": 17.1019 + } + ], + "durationMs": 0.2082, + "name": "Draw Sprite: Pebble_76", + "startMs": 17.1015, + "visualDurationMs": 0.2082, + "visualStartMs": 17.1015 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 17.312, + "visualDurationMs": 0.0003, + "visualStartMs": 17.312 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 17.3124, + "visualDurationMs": 0.0004, + "visualStartMs": 17.3124 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 17.3134, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3134 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 17.3148, + "visualDurationMs": 0.0005, + "visualStartMs": 17.3148 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 17.313, + "visualDurationMs": 0.0024, + "visualStartMs": 17.313 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 17.3156, + "visualDurationMs": 0.0003, + "visualStartMs": 17.3156 + }, + { + "children": [ + { + "durationMs": 0.0017, + "name": "ColorCorrection", + "startMs": 17.3164, + "visualDurationMs": 0.0017, + "visualStartMs": 17.3164 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 17.3183, + "visualDurationMs": 0.0016, + "visualStartMs": 17.3183 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 17.3203, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3203 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 17.322, + "visualDurationMs": 0.0014, + "visualStartMs": 17.322 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 17.3238, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3238 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 17.3254, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3254 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 17.3272, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3272 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 17.3288, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3288 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 17.3304, + "visualDurationMs": 0.0024, + "visualStartMs": 17.3304 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 17.3331, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3331 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 17.3347, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3347 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 17.3365, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3365 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 17.3381, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3381 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 17.3396, + "visualDurationMs": 0.0015, + "visualStartMs": 17.3396 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 17.3414, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3414 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 17.3432, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3432 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 17.3449, + "visualDurationMs": 0.0034, + "visualStartMs": 17.3449 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 17.3487, + "visualDurationMs": 0.0015, + "visualStartMs": 17.3487 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 17.3506, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3506 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 17.3522, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3522 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 17.3539, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3539 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 17.3556, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3556 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 17.3573, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3573 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 17.359, + "visualDurationMs": 0.0014, + "visualStartMs": 17.359 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 17.3607, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3607 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 17.3624, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3624 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 17.364, + "visualDurationMs": 0.0014, + "visualStartMs": 17.364 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 17.3658, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3658 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 17.3673, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3673 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 17.369, + "visualDurationMs": 0.0012, + "visualStartMs": 17.369 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 17.3705, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3705 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 17.3722, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3722 + }, + { + "durationMs": 0.0049, + "name": "L30", + "startMs": 17.3739, + "visualDurationMs": 0.0049, + "visualStartMs": 17.3739 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 17.3791, + "visualDurationMs": 0.0015, + "visualStartMs": 17.3791 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 17.381, + "visualDurationMs": 0.0013, + "visualStartMs": 17.381 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 17.3827, + "visualDurationMs": 0.0015, + "visualStartMs": 17.3827 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 17.3845, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3845 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 17.3862, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3862 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 17.3879, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3879 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 17.3895, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3895 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 17.3911, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3911 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 17.3927, + "visualDurationMs": 0.0012, + "visualStartMs": 17.3927 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 17.3943, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3943 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 17.3959, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3959 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 17.3976, + "visualDurationMs": 0.0014, + "visualStartMs": 17.3976 + }, + { + "durationMs": 0.0013, + "name": "L43", + "startMs": 17.3994, + "visualDurationMs": 0.0013, + "visualStartMs": 17.3994 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 17.4011, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4011 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 17.4029, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4029 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 17.4046, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4046 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 17.4063, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4063 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 17.408, + "visualDurationMs": 0.0015, + "visualStartMs": 17.408 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 17.4099, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4099 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 17.4116, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4116 + }, + { + "durationMs": 0.0016, + "name": "L51", + "startMs": 17.4134, + "visualDurationMs": 0.0016, + "visualStartMs": 17.4134 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 17.4153, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4153 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 17.417, + "visualDurationMs": 0.0014, + "visualStartMs": 17.417 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 17.4187, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4187 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 17.4203, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4203 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 17.4221, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4221 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 17.4237, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4237 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 17.4253, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4253 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 17.4271, + "visualDurationMs": 0.0014, + "visualStartMs": 17.4271 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 17.4289, + "visualDurationMs": 0.0013, + "visualStartMs": 17.4289 + }, + { + "durationMs": 0.0713, + "name": "L61", + "startMs": 17.4305, + "visualDurationMs": 0.0713, + "visualStartMs": 17.4305 + }, + { + "durationMs": 0.0092, + "name": "L62", + "startMs": 17.5024, + "visualDurationMs": 0.0092, + "visualStartMs": 17.5024 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 17.5119, + "visualDurationMs": 0.0015, + "visualStartMs": 17.5119 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 17.5138, + "visualDurationMs": 0.0014, + "visualStartMs": 17.5138 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 17.5156, + "visualDurationMs": 0.0015, + "visualStartMs": 17.5156 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 17.5175, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5175 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 17.5192, + "visualDurationMs": 0.0014, + "visualStartMs": 17.5192 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 17.5209, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5209 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 17.5226, + "visualDurationMs": 0.0015, + "visualStartMs": 17.5226 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 17.5245, + "visualDurationMs": 0.0014, + "visualStartMs": 17.5245 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 17.5262, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5262 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 17.5278, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5278 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 17.5294, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5294 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 17.531, + "visualDurationMs": 0.0014, + "visualStartMs": 17.531 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 17.5328, + "visualDurationMs": 0.0012, + "visualStartMs": 17.5328 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 17.5344, + "visualDurationMs": 0.0012, + "visualStartMs": 17.5344 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 17.5359, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5359 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 17.5375, + "visualDurationMs": 0.0014, + "visualStartMs": 17.5375 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 17.5392, + "visualDurationMs": 0.0014, + "visualStartMs": 17.5392 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 17.5409, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5409 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 17.5426, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5426 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 17.5442, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5442 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 17.5459, + "visualDurationMs": 0.0012, + "visualStartMs": 17.5459 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 17.5475, + "visualDurationMs": 0.0013, + "visualStartMs": 17.5475 + }, + { + "durationMs": 0.0015, + "name": "L85", + "startMs": 17.5492, + "visualDurationMs": 0.0015, + "visualStartMs": 17.5492 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 17.5511, + "visualDurationMs": 0.0012, + "visualStartMs": 17.5511 + }, + { + "durationMs": 0.1085, + "name": "L87", + "startMs": 17.5527, + "visualDurationMs": 0.1085, + "visualStartMs": 17.5527 + }, + { + "durationMs": 0.005, + "name": "L88", + "startMs": 17.6627, + "visualDurationMs": 0.005, + "visualStartMs": 17.6627 + }, + { + "durationMs": 0.0022, + "name": "L89", + "startMs": 17.6683, + "visualDurationMs": 0.0022, + "visualStartMs": 17.6683 + }, + { + "durationMs": 0.0019, + "name": "L90", + "startMs": 17.6709, + "visualDurationMs": 0.0019, + "visualStartMs": 17.6709 + }, + { + "durationMs": 0.0023, + "name": "L91", + "startMs": 17.6733, + "visualDurationMs": 0.0023, + "visualStartMs": 17.6733 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 17.676, + "visualDurationMs": 0.0014, + "visualStartMs": 17.676 + }, + { + "durationMs": 0.0017, + "name": "L93", + "startMs": 17.6778, + "visualDurationMs": 0.0017, + "visualStartMs": 17.6778 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 17.6799, + "visualDurationMs": 0.0014, + "visualStartMs": 17.6799 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 17.6817, + "visualDurationMs": 0.0012, + "visualStartMs": 17.6817 + }, + { + "durationMs": 0.0017, + "name": "L96", + "startMs": 17.6833, + "visualDurationMs": 0.0017, + "visualStartMs": 17.6833 + }, + { + "durationMs": 0.0018, + "name": "L97", + "startMs": 17.6853, + "visualDurationMs": 0.0018, + "visualStartMs": 17.6853 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 17.6875, + "visualDurationMs": 0.0013, + "visualStartMs": 17.6875 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 17.6891, + "visualDurationMs": 0.0014, + "visualStartMs": 17.6891 + }, + { + "durationMs": 0.0017, + "name": "BindNorm", + "startMs": 17.6907, + "visualDurationMs": 0.0017, + "visualStartMs": 17.6907 + } + ], + "durationMs": 0.3776, + "name": "Lighting", + "startMs": 17.3161, + "visualDurationMs": 0.3776, + "visualStartMs": 17.3161 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 17.6944, + "visualDurationMs": 0.0007, + "visualStartMs": 17.6944 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 17.6954, + "visualDurationMs": 0.0006, + "visualStartMs": 17.6954 + } + ], + "durationMs": 0.0024, + "name": "Draw", + "startMs": 17.6939, + "visualDurationMs": 0.0024, + "visualStartMs": 17.6939 + } + ], + "durationMs": 0.3848, + "name": "DrawSprite", + "startMs": 17.3116, + "visualDurationMs": 0.3848, + "visualStartMs": 17.3116 + } + ], + "durationMs": 0.3856, + "name": "Draw Sprite: Pebble_77", + "startMs": 17.3111, + "visualDurationMs": 0.3856, + "visualStartMs": 17.3111 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 17.7006, + "visualDurationMs": 0.0004, + "visualStartMs": 17.7006 + }, + { + "durationMs": 0.0008, + "name": "ShaderUse", + "startMs": 17.7011, + "visualDurationMs": 0.0008, + "visualStartMs": 17.7011 + }, + { + "children": [ + { + "durationMs": 0.0016, + "name": "Transform", + "startMs": 17.7028, + "visualDurationMs": 0.0016, + "visualStartMs": 17.7028 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 17.7046, + "visualDurationMs": 0.0006, + "visualStartMs": 17.7046 + } + ], + "durationMs": 0.0029, + "name": "SetUniforms", + "startMs": 17.7024, + "visualDurationMs": 0.0029, + "visualStartMs": 17.7024 + }, + { + "durationMs": 0.0005, + "name": "BindTex", + "startMs": 17.7055, + "visualDurationMs": 0.0005, + "visualStartMs": 17.7055 + }, + { + "children": [ + { + "durationMs": 0.0018, + "name": "ColorCorrection", + "startMs": 17.7065, + "visualDurationMs": 0.0018, + "visualStartMs": 17.7065 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 17.7084, + "visualDurationMs": 0.0016, + "visualStartMs": 17.7084 + }, + { + "durationMs": 0.0017, + "name": "L0", + "startMs": 17.7105, + "visualDurationMs": 0.0017, + "visualStartMs": 17.7105 + }, + { + "durationMs": 0.0016, + "name": "L1", + "startMs": 17.7126, + "visualDurationMs": 0.0016, + "visualStartMs": 17.7126 + }, + { + "durationMs": 0.0016, + "name": "L2", + "startMs": 17.7146, + "visualDurationMs": 0.0016, + "visualStartMs": 17.7146 + }, + { + "durationMs": 0.0039, + "name": "L3", + "startMs": 17.7595, + "visualDurationMs": 0.0039, + "visualStartMs": 17.7595 + }, + { + "durationMs": 0.0018, + "name": "L4", + "startMs": 17.7639, + "visualDurationMs": 0.0018, + "visualStartMs": 17.7639 + }, + { + "durationMs": 0.0015, + "name": "L5", + "startMs": 17.7661, + "visualDurationMs": 0.0015, + "visualStartMs": 17.7661 + }, + { + "durationMs": 0.0038, + "name": "L6", + "startMs": 17.7679, + "visualDurationMs": 0.0038, + "visualStartMs": 17.7679 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 17.7721, + "visualDurationMs": 0.0014, + "visualStartMs": 17.7721 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 17.7739, + "visualDurationMs": 0.0013, + "visualStartMs": 17.7739 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 17.7755, + "visualDurationMs": 0.0013, + "visualStartMs": 17.7755 + }, + { + "durationMs": 0.0019, + "name": "L10", + "startMs": 17.7773, + "visualDurationMs": 0.0019, + "visualStartMs": 17.7773 + }, + { + "durationMs": 0.0019, + "name": "L11", + "startMs": 17.7796, + "visualDurationMs": 0.0019, + "visualStartMs": 17.7796 + }, + { + "durationMs": 0.0017, + "name": "L12", + "startMs": 17.7818, + "visualDurationMs": 0.0017, + "visualStartMs": 17.7818 + }, + { + "durationMs": 0.0016, + "name": "L13", + "startMs": 17.7839, + "visualDurationMs": 0.0016, + "visualStartMs": 17.7839 + }, + { + "durationMs": 0.0038, + "name": "L14", + "startMs": 17.7858, + "visualDurationMs": 0.0038, + "visualStartMs": 17.7858 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 17.79, + "visualDurationMs": 0.0015, + "visualStartMs": 17.79 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 17.7919, + "visualDurationMs": 0.0013, + "visualStartMs": 17.7919 + }, + { + "durationMs": 0.008, + "name": "L17", + "startMs": 17.7936, + "visualDurationMs": 0.008, + "visualStartMs": 17.7936 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 17.8019, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8019 + }, + { + "durationMs": 0.0016, + "name": "L19", + "startMs": 17.8038, + "visualDurationMs": 0.0016, + "visualStartMs": 17.8038 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 17.8058, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8058 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 17.8075, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8075 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 17.8095, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8095 + }, + { + "durationMs": 0.0015, + "name": "L23", + "startMs": 17.8113, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8113 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 17.8131, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8131 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 17.8148, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8148 + }, + { + "durationMs": 0.0017, + "name": "L26", + "startMs": 17.8165, + "visualDurationMs": 0.0017, + "visualStartMs": 17.8165 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 17.8185, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8185 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 17.8202, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8202 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 17.8219, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8219 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 17.8237, + "visualDurationMs": 0.0053, + "visualStartMs": 17.8237 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 17.8294, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8294 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 17.8314, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8314 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 17.833, + "visualDurationMs": 0.0016, + "visualStartMs": 17.833 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 17.8349, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8349 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 17.8367, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8367 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 17.8384, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8384 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 17.8401, + "visualDurationMs": 0.0012, + "visualStartMs": 17.8401 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 17.8416, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8416 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 17.8432, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8432 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 17.8448, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8448 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 17.8465, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8465 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 17.8483, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8483 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 17.8499, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8499 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 17.8518, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8518 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 17.8537, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8537 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 17.8554, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8554 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 17.8572, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8572 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 17.8589, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8589 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 17.8607, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8607 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 17.8625, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8625 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 17.8641, + "visualDurationMs": 0.0015, + "visualStartMs": 17.8641 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 17.8659, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8659 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 17.8676, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8676 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 17.8693, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8693 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 17.871, + "visualDurationMs": 0.0013, + "visualStartMs": 17.871 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 17.8727, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8727 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 17.8744, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8744 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 17.876, + "visualDurationMs": 0.0014, + "visualStartMs": 17.876 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 17.8778, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8778 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 17.8795, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8795 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 17.8812, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8812 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 17.8829, + "visualDurationMs": 0.0089, + "visualStartMs": 17.8829 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 17.8922, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8922 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 17.8938, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8938 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 17.8955, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8955 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 17.8972, + "visualDurationMs": 0.0014, + "visualStartMs": 17.8972 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 17.8989, + "visualDurationMs": 0.0013, + "visualStartMs": 17.8989 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 17.9006, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9006 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 17.9022, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9022 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 17.9039, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9039 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 17.9054, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9054 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 17.9074, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9074 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 17.909, + "visualDurationMs": 0.0014, + "visualStartMs": 17.909 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 17.9108, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9108 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 17.9124, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9124 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 17.914, + "visualDurationMs": 0.0012, + "visualStartMs": 17.914 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 17.9156, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9156 + }, + { + "durationMs": 0.0015, + "name": "L78", + "startMs": 17.9171, + "visualDurationMs": 0.0015, + "visualStartMs": 17.9171 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 17.9189, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9189 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 17.9206, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9206 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 17.9222, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9222 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 17.9238, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9238 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 17.9254, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9254 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 17.927, + "visualDurationMs": 0.0012, + "visualStartMs": 17.927 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 17.9286, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9286 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 17.9302, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9302 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 17.9318, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9318 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 17.9334, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9334 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 17.935, + "visualDurationMs": 0.0013, + "visualStartMs": 17.935 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 17.9366, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9366 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 17.9381, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9381 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 17.9398, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9398 + }, + { + "durationMs": 0.0015, + "name": "L93", + "startMs": 17.9414, + "visualDurationMs": 0.0015, + "visualStartMs": 17.9414 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 17.9432, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9432 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 17.9448, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9448 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 17.9464, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9464 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 17.9482, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9482 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 17.9498, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9498 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 17.9514, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9514 + }, + { + "durationMs": 0.0013, + "name": "BindNorm", + "startMs": 17.9529, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9529 + } + ], + "durationMs": 0.249, + "name": "Lighting", + "startMs": 17.7061, + "visualDurationMs": 0.249, + "visualStartMs": 17.7061 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 17.9558, + "visualDurationMs": 0.0007, + "visualStartMs": 17.9558 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 17.9567, + "visualDurationMs": 0.0006, + "visualStartMs": 17.9567 + } + ], + "durationMs": 0.0023, + "name": "Draw", + "startMs": 17.9553, + "visualDurationMs": 0.0023, + "visualStartMs": 17.9553 + } + ], + "durationMs": 0.2576, + "name": "DrawSprite", + "startMs": 17.7001, + "visualDurationMs": 0.2576, + "visualStartMs": 17.7001 + } + ], + "durationMs": 0.2586, + "name": "Draw Sprite: Pebble_78", + "startMs": 17.6993, + "visualDurationMs": 0.2586, + "visualStartMs": 17.6993 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 17.9602, + "visualDurationMs": 0.0004, + "visualStartMs": 17.9602 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 17.9608, + "visualDurationMs": 0.0007, + "visualStartMs": 17.9608 + }, + { + "children": [ + { + "durationMs": 0.0017, + "name": "Transform", + "startMs": 17.9622, + "visualDurationMs": 0.0017, + "visualStartMs": 17.9622 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 17.9641, + "visualDurationMs": 0.0006, + "visualStartMs": 17.9641 + } + ], + "durationMs": 0.0031, + "name": "SetUniforms", + "startMs": 17.9617, + "visualDurationMs": 0.0031, + "visualStartMs": 17.9617 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 17.965, + "visualDurationMs": 0.0004, + "visualStartMs": 17.965 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "ColorCorrection", + "startMs": 17.966, + "visualDurationMs": 0.0013, + "visualStartMs": 17.966 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 17.9674, + "visualDurationMs": 0.0016, + "visualStartMs": 17.9674 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 17.9694, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9694 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 17.971, + "visualDurationMs": 0.0013, + "visualStartMs": 17.971 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 17.9726, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9726 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 17.9743, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9743 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 17.976, + "visualDurationMs": 0.0013, + "visualStartMs": 17.976 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 17.9776, + "visualDurationMs": 0.0012, + "visualStartMs": 17.9776 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 17.9792, + "visualDurationMs": 0.0027, + "visualStartMs": 17.9792 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 17.9822, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9822 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 17.984, + "visualDurationMs": 0.0013, + "visualStartMs": 17.984 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 17.9856, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9856 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 17.9872, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9872 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 17.9889, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9889 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 17.9906, + "visualDurationMs": 0.0014, + "visualStartMs": 17.9906 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 17.9923, + "visualDurationMs": 0.0013, + "visualStartMs": 17.9923 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 17.994, + "visualDurationMs": 0.0034, + "visualStartMs": 17.994 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 17.9978, + "visualDurationMs": 0.0016, + "visualStartMs": 17.9978 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 17.9997, + "visualDurationMs": 0.0015, + "visualStartMs": 17.9997 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 18.0015, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0015 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 18.0033, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0033 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 18.005, + "visualDurationMs": 0.0014, + "visualStartMs": 18.005 + }, + { + "durationMs": 0.0015, + "name": "L20", + "startMs": 18.0067, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0067 + }, + { + "durationMs": 0.0013, + "name": "L21", + "startMs": 18.0086, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0086 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 18.0102, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0102 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 18.012, + "visualDurationMs": 0.0013, + "visualStartMs": 18.012 + }, + { + "durationMs": 0.0015, + "name": "L24", + "startMs": 18.0136, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0136 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 18.0154, + "visualDurationMs": 0.0012, + "visualStartMs": 18.0154 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 18.017, + "visualDurationMs": 0.0012, + "visualStartMs": 18.017 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 18.0185, + "visualDurationMs": 0.0012, + "visualStartMs": 18.0185 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 18.0201, + "visualDurationMs": 0.0012, + "visualStartMs": 18.0201 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 18.0217, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0217 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 18.0233, + "visualDurationMs": 0.0053, + "visualStartMs": 18.0233 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 18.0289, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0289 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 18.0308, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0308 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 18.0325, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0325 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 18.0343, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0343 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 18.036, + "visualDurationMs": 0.0013, + "visualStartMs": 18.036 + }, + { + "durationMs": 0.002, + "name": "L36", + "startMs": 18.0377, + "visualDurationMs": 0.002, + "visualStartMs": 18.0377 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 18.0403, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0403 + }, + { + "durationMs": 0.0015, + "name": "L38", + "startMs": 18.0422, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0422 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 18.0441, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0441 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 18.046, + "visualDurationMs": 0.0015, + "visualStartMs": 18.046 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 18.0479, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0479 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 18.0496, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0496 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 18.0514, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0514 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 18.0532, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0532 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 18.055, + "visualDurationMs": 0.0015, + "visualStartMs": 18.055 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 18.0569, + "visualDurationMs": 0.0016, + "visualStartMs": 18.0569 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 18.0588, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0588 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 18.0605, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0605 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 18.0623, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0623 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 18.0641, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0641 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 18.0658, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0658 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 18.0676, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0676 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 18.0693, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0693 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 18.0709, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0709 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 18.0726, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0726 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 18.0742, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0742 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 18.0759, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0759 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 18.0777, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0777 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 18.0795, + "visualDurationMs": 0.0013, + "visualStartMs": 18.0795 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 18.0811, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0811 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 18.083, + "visualDurationMs": 0.0013, + "visualStartMs": 18.083 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 18.0846, + "visualDurationMs": 0.0088, + "visualStartMs": 18.0846 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 18.0937, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0937 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 18.0954, + "visualDurationMs": 0.0014, + "visualStartMs": 18.0954 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 18.0971, + "visualDurationMs": 0.0015, + "visualStartMs": 18.0971 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 18.099, + "visualDurationMs": 0.0013, + "visualStartMs": 18.099 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 18.1007, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1007 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 18.1023, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1023 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 18.1039, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1039 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 18.1057, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1057 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 18.1074, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1074 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 18.1089, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1089 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 18.1106, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1106 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 18.1122, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1122 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 18.1137, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1137 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 18.1153, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1153 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 18.117, + "visualDurationMs": 0.0012, + "visualStartMs": 18.117 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 18.1186, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1186 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 18.1201, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1201 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 18.1217, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1217 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 18.1235, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1235 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 18.125, + "visualDurationMs": 0.0013, + "visualStartMs": 18.125 + }, + { + "durationMs": 0.0014, + "name": "L83", + "startMs": 18.1266, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1266 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 18.1283, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1283 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 18.13, + "visualDurationMs": 0.0012, + "visualStartMs": 18.13 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 18.1316, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1316 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 18.1332, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1332 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 18.1348, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1348 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 18.1365, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1365 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 18.1382, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1382 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 18.1398, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1398 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 18.1414, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1414 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 18.143, + "visualDurationMs": 0.0012, + "visualStartMs": 18.143 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 18.1445, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1445 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 18.1462, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1462 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 18.1477, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1477 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 18.1493, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1493 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 18.151, + "visualDurationMs": 0.0013, + "visualStartMs": 18.151 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 18.1526, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1526 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 18.154, + "visualDurationMs": 0.0005, + "visualStartMs": 18.154 + } + ], + "durationMs": 0.1892, + "name": "Lighting", + "startMs": 17.9656, + "visualDurationMs": 0.1892, + "visualStartMs": 17.9656 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 18.1555, + "visualDurationMs": 0.0004, + "visualStartMs": 18.1555 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 18.156, + "visualDurationMs": 0.0004, + "visualStartMs": 18.156 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 18.1551, + "visualDurationMs": 0.0015, + "visualStartMs": 18.1551 + } + ], + "durationMs": 0.197, + "name": "DrawSprite", + "startMs": 17.9597, + "visualDurationMs": 0.197, + "visualStartMs": 17.9597 + } + ], + "durationMs": 0.1978, + "name": "Draw Sprite: Pebble_79", + "startMs": 17.959, + "visualDurationMs": 0.1978, + "visualStartMs": 17.959 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 18.162, + "visualDurationMs": 0.0003, + "visualStartMs": 18.162 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 18.1625, + "visualDurationMs": 0.0004, + "visualStartMs": 18.1625 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 18.1636, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1636 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 18.1651, + "visualDurationMs": 0.0005, + "visualStartMs": 18.1651 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 18.1631, + "visualDurationMs": 0.0026, + "visualStartMs": 18.1631 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 18.1659, + "visualDurationMs": 0.0004, + "visualStartMs": 18.1659 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 18.1667, + "visualDurationMs": 0.0009, + "visualStartMs": 18.1667 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 18.1677, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1677 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 18.1694, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1694 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 18.1712, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1712 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 18.1728, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1728 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 18.1743, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1743 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 18.176, + "visualDurationMs": 0.0012, + "visualStartMs": 18.176 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 18.1775, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1775 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 18.1791, + "visualDurationMs": 0.0024, + "visualStartMs": 18.1791 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 18.1819, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1819 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 18.1834, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1834 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 18.1851, + "visualDurationMs": 0.0012, + "visualStartMs": 18.1851 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 18.1867, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1867 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 18.1885, + "visualDurationMs": 0.0015, + "visualStartMs": 18.1885 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 18.1903, + "visualDurationMs": 0.0013, + "visualStartMs": 18.1903 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 18.192, + "visualDurationMs": 0.0013, + "visualStartMs": 18.192 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 18.1937, + "visualDurationMs": 0.0036, + "visualStartMs": 18.1937 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 18.1977, + "visualDurationMs": 0.0015, + "visualStartMs": 18.1977 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 18.1995, + "visualDurationMs": 0.0014, + "visualStartMs": 18.1995 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 18.2012, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2012 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 18.2029, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2029 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 18.2047, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2047 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 18.2064, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2064 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 18.2081, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2081 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 18.2098, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2098 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 18.2116, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2116 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 18.2132, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2132 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 18.2149, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2149 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 18.2164, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2164 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 18.2181, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2181 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 18.2198, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2198 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 18.2215, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2215 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 18.223, + "visualDurationMs": 0.0052, + "visualStartMs": 18.223 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 18.2285, + "visualDurationMs": 0.0015, + "visualStartMs": 18.2285 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 18.2303, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2303 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 18.2319, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2319 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 18.2337, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2337 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 18.2353, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2353 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 18.2371, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2371 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 18.2387, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2387 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 18.2403, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2403 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 18.2421, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2421 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 18.2436, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2436 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 18.2453, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2453 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 18.2469, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2469 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 18.2485, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2485 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 18.2502, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2502 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 18.252, + "visualDurationMs": 0.0013, + "visualStartMs": 18.252 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 18.2536, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2536 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 18.2553, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2553 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 18.257, + "visualDurationMs": 0.0015, + "visualStartMs": 18.257 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 18.2588, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2588 + }, + { + "durationMs": 0.0016, + "name": "L50", + "startMs": 18.2605, + "visualDurationMs": 0.0016, + "visualStartMs": 18.2605 + }, + { + "durationMs": 0.0013, + "name": "L51", + "startMs": 18.2624, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2624 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 18.2641, + "visualDurationMs": 0.0012, + "visualStartMs": 18.2641 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 18.2656, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2656 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 18.2673, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2673 + }, + { + "durationMs": 0.0019, + "name": "L55", + "startMs": 18.269, + "visualDurationMs": 0.0019, + "visualStartMs": 18.269 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 18.2714, + "visualDurationMs": 0.0016, + "visualStartMs": 18.2714 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 18.2734, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2734 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 18.2751, + "visualDurationMs": 0.0015, + "visualStartMs": 18.2751 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 18.277, + "visualDurationMs": 0.0014, + "visualStartMs": 18.277 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 18.2787, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2787 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 18.2804, + "visualDurationMs": 0.0015, + "visualStartMs": 18.2804 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 18.2822, + "visualDurationMs": 0.009, + "visualStartMs": 18.2822 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 18.2916, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2916 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 18.2932, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2932 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 18.2949, + "visualDurationMs": 0.0014, + "visualStartMs": 18.2949 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 18.2967, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2967 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 18.2984, + "visualDurationMs": 0.0013, + "visualStartMs": 18.2984 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 18.3001, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3001 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 18.3018, + "visualDurationMs": 0.0014, + "visualStartMs": 18.3018 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 18.3036, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3036 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 18.3052, + "visualDurationMs": 0.0015, + "visualStartMs": 18.3052 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 18.307, + "visualDurationMs": 0.0012, + "visualStartMs": 18.307 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 18.3086, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3086 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 18.3101, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3101 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 18.3117, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3117 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 18.3132, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3132 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 18.3148, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3148 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 18.3163, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3163 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 18.3179, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3179 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 18.3196, + "visualDurationMs": 0.0015, + "visualStartMs": 18.3196 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 18.3214, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3214 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 18.323, + "visualDurationMs": 0.0012, + "visualStartMs": 18.323 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 18.3245, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3245 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 18.3261, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3261 + }, + { + "durationMs": 0.0018, + "name": "L85", + "startMs": 18.3277, + "visualDurationMs": 0.0018, + "visualStartMs": 18.3277 + }, + { + "durationMs": 0.002, + "name": "L86", + "startMs": 18.3301, + "visualDurationMs": 0.002, + "visualStartMs": 18.3301 + }, + { + "durationMs": 0.0018, + "name": "L87", + "startMs": 18.3326, + "visualDurationMs": 0.0018, + "visualStartMs": 18.3326 + }, + { + "durationMs": 0.0018, + "name": "L88", + "startMs": 18.3349, + "visualDurationMs": 0.0018, + "visualStartMs": 18.3349 + }, + { + "durationMs": 0.002, + "name": "L89", + "startMs": 18.3371, + "visualDurationMs": 0.002, + "visualStartMs": 18.3371 + }, + { + "durationMs": 0.0019, + "name": "L90", + "startMs": 18.3396, + "visualDurationMs": 0.0019, + "visualStartMs": 18.3396 + }, + { + "durationMs": 0.0019, + "name": "L91", + "startMs": 18.342, + "visualDurationMs": 0.0019, + "visualStartMs": 18.342 + }, + { + "durationMs": 0.0019, + "name": "L92", + "startMs": 18.3444, + "visualDurationMs": 0.0019, + "visualStartMs": 18.3444 + }, + { + "durationMs": 0.0019, + "name": "L93", + "startMs": 18.3467, + "visualDurationMs": 0.0019, + "visualStartMs": 18.3467 + }, + { + "durationMs": 0.0018, + "name": "L94", + "startMs": 18.349, + "visualDurationMs": 0.0018, + "visualStartMs": 18.349 + }, + { + "durationMs": 0.0017, + "name": "L95", + "startMs": 18.3513, + "visualDurationMs": 0.0017, + "visualStartMs": 18.3513 + }, + { + "durationMs": 0.0019, + "name": "L96", + "startMs": 18.3535, + "visualDurationMs": 0.0019, + "visualStartMs": 18.3535 + }, + { + "durationMs": 0.0022, + "name": "L97", + "startMs": 18.3558, + "visualDurationMs": 0.0022, + "visualStartMs": 18.3558 + }, + { + "durationMs": 0.0015, + "name": "L98", + "startMs": 18.3584, + "visualDurationMs": 0.0015, + "visualStartMs": 18.3584 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 18.3602, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3602 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 18.3617, + "visualDurationMs": 0.0007, + "visualStartMs": 18.3617 + } + ], + "durationMs": 0.1964, + "name": "Lighting", + "startMs": 18.1664, + "visualDurationMs": 0.1964, + "visualStartMs": 18.1664 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 18.3633, + "visualDurationMs": 0.0004, + "visualStartMs": 18.3633 + }, + { + "durationMs": 0.0007, + "name": "GL Draw", + "startMs": 18.3638, + "visualDurationMs": 0.0007, + "visualStartMs": 18.3638 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 18.3629, + "visualDurationMs": 0.0017, + "visualStartMs": 18.3629 + } + ], + "durationMs": 0.2031, + "name": "DrawSprite", + "startMs": 18.1616, + "visualDurationMs": 0.2031, + "visualStartMs": 18.1616 + } + ], + "durationMs": 0.2037, + "name": "Draw Sprite: Pebble_81", + "startMs": 18.1612, + "visualDurationMs": 0.2037, + "visualStartMs": 18.1612 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 18.3664, + "visualDurationMs": 0.0004, + "visualStartMs": 18.3664 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 18.3669, + "visualDurationMs": 0.0005, + "visualStartMs": 18.3669 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 18.3679, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3679 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 18.3694, + "visualDurationMs": 0.0005, + "visualStartMs": 18.3694 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 18.3676, + "visualDurationMs": 0.0024, + "visualStartMs": 18.3676 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 18.3702, + "visualDurationMs": 0.0004, + "visualStartMs": 18.3702 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 18.3711, + "visualDurationMs": 0.001, + "visualStartMs": 18.3711 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 18.3722, + "visualDurationMs": 0.0014, + "visualStartMs": 18.3722 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 18.3739, + "visualDurationMs": 0.0014, + "visualStartMs": 18.3739 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 18.3756, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3756 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 18.3773, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3773 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 18.3788, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3788 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 18.3805, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3805 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 18.382, + "visualDurationMs": 0.0012, + "visualStartMs": 18.382 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 18.3836, + "visualDurationMs": 0.0026, + "visualStartMs": 18.3836 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 18.3866, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3866 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 18.3882, + "visualDurationMs": 0.0012, + "visualStartMs": 18.3882 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 18.3897, + "visualDurationMs": 0.0014, + "visualStartMs": 18.3897 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 18.3915, + "visualDurationMs": 0.0013, + "visualStartMs": 18.3915 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 18.3931, + "visualDurationMs": 0.0015, + "visualStartMs": 18.3931 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 18.395, + "visualDurationMs": 0.0014, + "visualStartMs": 18.395 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 18.3967, + "visualDurationMs": 0.0014, + "visualStartMs": 18.3967 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 18.3984, + "visualDurationMs": 0.0034, + "visualStartMs": 18.3984 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 18.4022, + "visualDurationMs": 0.0016, + "visualStartMs": 18.4022 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 18.4041, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4041 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 18.4058, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4058 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 18.4075, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4075 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 18.4092, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4092 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 18.4109, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4109 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 18.4125, + "visualDurationMs": 0.0015, + "visualStartMs": 18.4125 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 18.4144, + "visualDurationMs": 0.0015, + "visualStartMs": 18.4144 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 18.4163, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4163 + }, + { + "durationMs": 0.0012, + "name": "L24", + "startMs": 18.4179, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4179 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 18.4195, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4195 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 18.421, + "visualDurationMs": 0.0013, + "visualStartMs": 18.421 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 18.4226, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4226 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 18.4242, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4242 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 18.4258, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4258 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 18.4274, + "visualDurationMs": 0.0051, + "visualStartMs": 18.4274 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 18.4329, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4329 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 18.4347, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4347 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 18.4362, + "visualDurationMs": 0.0015, + "visualStartMs": 18.4362 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 18.4381, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4381 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 18.4398, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4398 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 18.4414, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4414 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 18.4431, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4431 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 18.4446, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4446 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 18.4462, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4462 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 18.4478, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4478 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 18.4495, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4495 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 18.4512, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4512 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 18.4527, + "visualDurationMs": 0.0015, + "visualStartMs": 18.4527 + }, + { + "durationMs": 0.0063, + "name": "L44", + "startMs": 18.4545, + "visualDurationMs": 0.0063, + "visualStartMs": 18.4545 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 18.4611, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4611 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 18.4627, + "visualDurationMs": 0.0015, + "visualStartMs": 18.4627 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 18.4646, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4646 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 18.4662, + "visualDurationMs": 0.0016, + "visualStartMs": 18.4662 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 18.4681, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4681 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 18.4698, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4698 + }, + { + "durationMs": 0.0016, + "name": "L51", + "startMs": 18.4715, + "visualDurationMs": 0.0016, + "visualStartMs": 18.4715 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 18.4734, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4734 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 18.475, + "visualDurationMs": 0.0013, + "visualStartMs": 18.475 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 18.4767, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4767 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 18.4784, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4784 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 18.48, + "visualDurationMs": 0.0014, + "visualStartMs": 18.48 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 18.4818, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4818 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 18.4833, + "visualDurationMs": 0.0014, + "visualStartMs": 18.4833 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 18.4851, + "visualDurationMs": 0.0012, + "visualStartMs": 18.4851 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 18.4867, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4867 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 18.4883, + "visualDurationMs": 0.0013, + "visualStartMs": 18.4883 + }, + { + "durationMs": 0.0159, + "name": "L62", + "startMs": 18.4902, + "visualDurationMs": 0.0159, + "visualStartMs": 18.4902 + }, + { + "durationMs": 0.0023, + "name": "L63", + "startMs": 18.5066, + "visualDurationMs": 0.0023, + "visualStartMs": 18.5066 + }, + { + "durationMs": 0.0017, + "name": "L64", + "startMs": 18.5093, + "visualDurationMs": 0.0017, + "visualStartMs": 18.5093 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 18.5114, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5114 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 18.5132, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5132 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 18.5149, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5149 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 18.5167, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5167 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 18.5183, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5183 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 18.52, + "visualDurationMs": 0.0012, + "visualStartMs": 18.52 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 18.5215, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5215 + }, + { + "durationMs": 0.0011, + "name": "L72", + "startMs": 18.5233, + "visualDurationMs": 0.0011, + "visualStartMs": 18.5233 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 18.5248, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5248 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 18.5266, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5266 + }, + { + "durationMs": 0.0019, + "name": "L75", + "startMs": 18.5281, + "visualDurationMs": 0.0019, + "visualStartMs": 18.5281 + }, + { + "durationMs": 0.0015, + "name": "L76", + "startMs": 18.5304, + "visualDurationMs": 0.0015, + "visualStartMs": 18.5304 + }, + { + "durationMs": 0.0015, + "name": "L77", + "startMs": 18.5323, + "visualDurationMs": 0.0015, + "visualStartMs": 18.5323 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 18.5342, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5342 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 18.5359, + "visualDurationMs": 0.0015, + "visualStartMs": 18.5359 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 18.5377, + "visualDurationMs": 0.0015, + "visualStartMs": 18.5377 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 18.5395, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5395 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 18.5411, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5411 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 18.5427, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5427 + }, + { + "durationMs": 0.0011, + "name": "L84", + "startMs": 18.5444, + "visualDurationMs": 0.0011, + "visualStartMs": 18.5444 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 18.5459, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5459 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 18.5475, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5475 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 18.5492, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5492 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 18.5509, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5509 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 18.5525, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5525 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 18.5542, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5542 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 18.556, + "visualDurationMs": 0.0014, + "visualStartMs": 18.556 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 18.5578, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5578 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 18.5596, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5596 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 18.5612, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5612 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 18.5627, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5627 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 18.5643, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5643 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 18.5659, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5659 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 18.5676, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5676 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 18.5692, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5692 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 18.5706, + "visualDurationMs": 0.0007, + "visualStartMs": 18.5706 + } + ], + "durationMs": 0.2008, + "name": "Lighting", + "startMs": 18.3708, + "visualDurationMs": 0.2008, + "visualStartMs": 18.3708 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 18.5721, + "visualDurationMs": 0.0004, + "visualStartMs": 18.5721 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 18.5726, + "visualDurationMs": 0.0004, + "visualStartMs": 18.5726 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 18.5717, + "visualDurationMs": 0.0015, + "visualStartMs": 18.5717 + } + ], + "durationMs": 0.2072, + "name": "DrawSprite", + "startMs": 18.3661, + "visualDurationMs": 0.2072, + "visualStartMs": 18.3661 + } + ], + "durationMs": 0.2078, + "name": "Draw Sprite: Pebble_80", + "startMs": 18.3657, + "visualDurationMs": 0.2078, + "visualStartMs": 18.3657 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 18.5754, + "visualDurationMs": 0.0003, + "visualStartMs": 18.5754 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 18.5759, + "visualDurationMs": 0.0004, + "visualStartMs": 18.5759 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 18.5769, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5769 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 18.5785, + "visualDurationMs": 0.0005, + "visualStartMs": 18.5785 + } + ], + "durationMs": 0.0027, + "name": "SetUniforms", + "startMs": 18.5765, + "visualDurationMs": 0.0027, + "visualStartMs": 18.5765 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 18.5793, + "visualDurationMs": 0.0004, + "visualStartMs": 18.5793 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 18.5801, + "visualDurationMs": 0.0009, + "visualStartMs": 18.5801 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 18.5812, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5812 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 18.5829, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5829 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 18.5845, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5845 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 18.5861, + "visualDurationMs": 0.0013, + "visualStartMs": 18.5861 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 18.5877, + "visualDurationMs": 0.0014, + "visualStartMs": 18.5877 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 18.5894, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5894 + }, + { + "durationMs": 0.0011, + "name": "L5", + "startMs": 18.591, + "visualDurationMs": 0.0011, + "visualStartMs": 18.591 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 18.5925, + "visualDurationMs": 0.0025, + "visualStartMs": 18.5925 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 18.5954, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5954 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 18.597, + "visualDurationMs": 0.0013, + "visualStartMs": 18.597 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 18.5986, + "visualDurationMs": 0.0012, + "visualStartMs": 18.5986 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 18.6002, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6002 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 18.6019, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6019 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 18.6036, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6036 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 18.6054, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6054 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 18.607, + "visualDurationMs": 0.0034, + "visualStartMs": 18.607 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 18.6109, + "visualDurationMs": 0.0015, + "visualStartMs": 18.6109 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 18.6128, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6128 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 18.6146, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6146 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 18.6163, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6163 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 18.618, + "visualDurationMs": 0.0014, + "visualStartMs": 18.618 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 18.6197, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6197 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 18.6213, + "visualDurationMs": 0.0016, + "visualStartMs": 18.6213 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 18.6232, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6232 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 18.625, + "visualDurationMs": 0.0013, + "visualStartMs": 18.625 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 18.6266, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6266 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 18.6282, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6282 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 18.6298, + "visualDurationMs": 0.0012, + "visualStartMs": 18.6298 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 18.6314, + "visualDurationMs": 0.0012, + "visualStartMs": 18.6314 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 18.633, + "visualDurationMs": 0.0012, + "visualStartMs": 18.633 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 18.6346, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6346 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 18.6362, + "visualDurationMs": 0.0052, + "visualStartMs": 18.6362 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 18.6417, + "visualDurationMs": 0.0016, + "visualStartMs": 18.6417 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 18.6437, + "visualDurationMs": 0.0012, + "visualStartMs": 18.6437 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 18.6452, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6452 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 18.6469, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6469 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 18.6487, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6487 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 18.6503, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6503 + }, + { + "durationMs": 0.0015, + "name": "L37", + "startMs": 18.6519, + "visualDurationMs": 0.0015, + "visualStartMs": 18.6519 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 18.6537, + "visualDurationMs": 0.0012, + "visualStartMs": 18.6537 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 18.6552, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6552 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 18.6568, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6568 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 18.6585, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6585 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 18.6601, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6601 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 18.6618, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6618 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 18.6636, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6636 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 18.6653, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6653 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 18.667, + "visualDurationMs": 0.0014, + "visualStartMs": 18.667 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 18.6688, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6688 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 18.6705, + "visualDurationMs": 0.0015, + "visualStartMs": 18.6705 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 18.6724, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6724 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 18.6741, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6741 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 18.6757, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6757 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 18.6774, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6774 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 18.679, + "visualDurationMs": 0.0014, + "visualStartMs": 18.679 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 18.6808, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6808 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 18.6824, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6824 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 18.684, + "visualDurationMs": 0.0014, + "visualStartMs": 18.684 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 18.6857, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6857 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 18.6874, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6874 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 18.689, + "visualDurationMs": 0.0013, + "visualStartMs": 18.689 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 18.6907, + "visualDurationMs": 0.0013, + "visualStartMs": 18.6907 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 18.6923, + "visualDurationMs": 0.0014, + "visualStartMs": 18.6923 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 18.694, + "visualDurationMs": 0.009, + "visualStartMs": 18.694 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 18.7034, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7034 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 18.7052, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7052 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 18.7069, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7069 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 18.7086, + "visualDurationMs": 0.0016, + "visualStartMs": 18.7086 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 18.7105, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7105 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 18.7122, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7122 + }, + { + "durationMs": 0.0012, + "name": "L69", + "startMs": 18.7138, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7138 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 18.7154, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7154 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 18.7169, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7169 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 18.7186, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7186 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 18.7202, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7202 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 18.7218, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7218 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 18.7235, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7235 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 18.7251, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7251 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 18.7267, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7267 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 18.7283, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7283 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 18.7298, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7298 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 18.7315, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7315 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 18.7331, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7331 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 18.7347, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7347 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 18.7363, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7363 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 18.7379, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7379 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 18.7395, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7395 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 18.7413, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7413 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 18.743, + "visualDurationMs": 0.0013, + "visualStartMs": 18.743 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 18.7446, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7446 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 18.7462, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7462 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 18.7478, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7478 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 18.7493, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7493 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 18.7509, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7509 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 18.7525, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7525 + }, + { + "durationMs": 0.0019, + "name": "L94", + "startMs": 18.7541, + "visualDurationMs": 0.0019, + "visualStartMs": 18.7541 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 18.7564, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7564 + }, + { + "durationMs": 0.0018, + "name": "L96", + "startMs": 18.7582, + "visualDurationMs": 0.0018, + "visualStartMs": 18.7582 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 18.7604, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7604 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 18.7623, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7623 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 18.7638, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7638 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 18.7653, + "visualDurationMs": 0.0007, + "visualStartMs": 18.7653 + } + ], + "durationMs": 0.1865, + "name": "Lighting", + "startMs": 18.5798, + "visualDurationMs": 0.1865, + "visualStartMs": 18.5798 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 18.7668, + "visualDurationMs": 0.0003, + "visualStartMs": 18.7668 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 18.7673, + "visualDurationMs": 0.0004, + "visualStartMs": 18.7673 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 18.7664, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7664 + } + ], + "durationMs": 0.1929, + "name": "DrawSprite", + "startMs": 18.575, + "visualDurationMs": 0.1929, + "visualStartMs": 18.575 + } + ], + "durationMs": 0.1935, + "name": "Draw Sprite: Pebble_89", + "startMs": 18.5746, + "visualDurationMs": 0.1935, + "visualStartMs": 18.5746 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0005, + "name": "ShaderSelect", + "startMs": 18.7694, + "visualDurationMs": 0.0005, + "visualStartMs": 18.7694 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 18.7701, + "visualDurationMs": 0.0003, + "visualStartMs": 18.7701 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 18.771, + "visualDurationMs": 0.0012, + "visualStartMs": 18.771 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 18.7724, + "visualDurationMs": 0.0005, + "visualStartMs": 18.7724 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 18.7706, + "visualDurationMs": 0.0024, + "visualStartMs": 18.7706 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 18.7731, + "visualDurationMs": 0.0004, + "visualStartMs": 18.7731 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 18.7739, + "visualDurationMs": 0.0009, + "visualStartMs": 18.7739 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 18.7749, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7749 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 18.7766, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7766 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 18.7782, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7782 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 18.7798, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7798 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 18.7814, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7814 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 18.783, + "visualDurationMs": 0.0012, + "visualStartMs": 18.783 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 18.7846, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7846 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 18.7861, + "visualDurationMs": 0.0028, + "visualStartMs": 18.7861 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 18.7893, + "visualDurationMs": 0.0013, + "visualStartMs": 18.7893 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 18.791, + "visualDurationMs": 0.0013, + "visualStartMs": 18.791 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 18.7927, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7927 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 18.7943, + "visualDurationMs": 0.0012, + "visualStartMs": 18.7943 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 18.7958, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7958 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 18.7975, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7975 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 18.7993, + "visualDurationMs": 0.0014, + "visualStartMs": 18.7993 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 18.801, + "visualDurationMs": 0.0035, + "visualStartMs": 18.801 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 18.8049, + "visualDurationMs": 0.0015, + "visualStartMs": 18.8049 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 18.8068, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8068 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 18.8086, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8086 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 18.8104, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8104 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 18.8121, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8121 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 18.8138, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8138 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 18.8154, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8154 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 18.8171, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8171 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 18.8188, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8188 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 18.8204, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8204 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 18.822, + "visualDurationMs": 0.0013, + "visualStartMs": 18.822 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 18.8236, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8236 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 18.8253, + "visualDurationMs": 0.0012, + "visualStartMs": 18.8253 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 18.8269, + "visualDurationMs": 0.0012, + "visualStartMs": 18.8269 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 18.8285, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8285 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 18.8301, + "visualDurationMs": 0.0053, + "visualStartMs": 18.8301 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 18.8358, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8358 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 18.8375, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8375 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 18.8391, + "visualDurationMs": 0.0015, + "visualStartMs": 18.8391 + }, + { + "durationMs": 0.0016, + "name": "L34", + "startMs": 18.8409, + "visualDurationMs": 0.0016, + "visualStartMs": 18.8409 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 18.8428, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8428 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 18.8445, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8445 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 18.8461, + "visualDurationMs": 0.0012, + "visualStartMs": 18.8461 + }, + { + "durationMs": 0.0011, + "name": "L38", + "startMs": 18.8477, + "visualDurationMs": 0.0011, + "visualStartMs": 18.8477 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 18.8492, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8492 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 18.8508, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8508 + }, + { + "durationMs": 0.0012, + "name": "L41", + "startMs": 18.8525, + "visualDurationMs": 0.0012, + "visualStartMs": 18.8525 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 18.8541, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8541 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 18.8557, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8557 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 18.8574, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8574 + }, + { + "durationMs": 0.0021, + "name": "L45", + "startMs": 18.8591, + "visualDurationMs": 0.0021, + "visualStartMs": 18.8591 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 18.8615, + "visualDurationMs": 0.0016, + "visualStartMs": 18.8615 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 18.8634, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8634 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 18.8651, + "visualDurationMs": 0.0016, + "visualStartMs": 18.8651 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 18.867, + "visualDurationMs": 0.0015, + "visualStartMs": 18.867 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 18.8688, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8688 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 18.8705, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8705 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 18.8723, + "visualDurationMs": 0.0012, + "visualStartMs": 18.8723 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 18.8739, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8739 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 18.8755, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8755 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 18.8772, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8772 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 18.8788, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8788 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 18.8804, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8804 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 18.882, + "visualDurationMs": 0.0015, + "visualStartMs": 18.882 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 18.8838, + "visualDurationMs": 0.0014, + "visualStartMs": 18.8838 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 18.8855, + "visualDurationMs": 0.0015, + "visualStartMs": 18.8855 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 18.8873, + "visualDurationMs": 0.0013, + "visualStartMs": 18.8873 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 18.889, + "visualDurationMs": 0.0087, + "visualStartMs": 18.889 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 18.898, + "visualDurationMs": 0.0014, + "visualStartMs": 18.898 + }, + { + "durationMs": 0.0016, + "name": "L64", + "startMs": 18.8997, + "visualDurationMs": 0.0016, + "visualStartMs": 18.8997 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 18.9016, + "visualDurationMs": 0.0015, + "visualStartMs": 18.9016 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 18.9034, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9034 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 18.9051, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9051 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 18.9068, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9068 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 18.9084, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9084 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 18.91, + "visualDurationMs": 0.0012, + "visualStartMs": 18.91 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 18.9116, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9116 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 18.9131, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9131 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 18.9147, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9147 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 18.9163, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9163 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 18.9179, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9179 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 18.9194, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9194 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 18.921, + "visualDurationMs": 0.0013, + "visualStartMs": 18.921 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 18.9226, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9226 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 18.9242, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9242 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 18.9258, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9258 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 18.9274, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9274 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 18.9291, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9291 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 18.9307, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9307 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 18.9322, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9322 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 18.9339, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9339 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 18.9356, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9356 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 18.9371, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9371 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 18.9387, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9387 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 18.9404, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9404 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 18.9421, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9421 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 18.9438, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9438 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 18.9454, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9454 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 18.9469, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9469 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 18.9485, + "visualDurationMs": 0.0012, + "visualStartMs": 18.9485 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 18.95, + "visualDurationMs": 0.0013, + "visualStartMs": 18.95 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 18.9516, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9516 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 18.9532, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9532 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 18.9549, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9549 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 18.9565, + "visualDurationMs": 0.0013, + "visualStartMs": 18.9565 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 18.958, + "visualDurationMs": 0.0005, + "visualStartMs": 18.958 + } + ], + "durationMs": 0.1853, + "name": "Lighting", + "startMs": 18.7736, + "visualDurationMs": 0.1853, + "visualStartMs": 18.7736 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 18.9595, + "visualDurationMs": 0.0003, + "visualStartMs": 18.9595 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 18.96, + "visualDurationMs": 0.0004, + "visualStartMs": 18.96 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 18.9591, + "visualDurationMs": 0.0014, + "visualStartMs": 18.9591 + } + ], + "durationMs": 0.1915, + "name": "DrawSprite", + "startMs": 18.7691, + "visualDurationMs": 0.1915, + "visualStartMs": 18.7691 + } + ], + "durationMs": 0.1921, + "name": "Draw Sprite: Pebble_88", + "startMs": 18.7686, + "visualDurationMs": 0.1921, + "visualStartMs": 18.7686 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 19.0267, + "visualDurationMs": 0.0004, + "visualStartMs": 19.0267 + }, + { + "durationMs": 0.0013, + "name": "ShaderUse", + "startMs": 19.0273, + "visualDurationMs": 0.0013, + "visualStartMs": 19.0273 + }, + { + "children": [ + { + "durationMs": 0.0022, + "name": "Transform", + "startMs": 19.0294, + "visualDurationMs": 0.0022, + "visualStartMs": 19.0294 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 19.0318, + "visualDurationMs": 0.0006, + "visualStartMs": 19.0318 + } + ], + "durationMs": 0.0035, + "name": "SetUniforms", + "startMs": 19.029, + "visualDurationMs": 0.0035, + "visualStartMs": 19.029 + }, + { + "durationMs": 0.0007, + "name": "BindTex", + "startMs": 19.0327, + "visualDurationMs": 0.0007, + "visualStartMs": 19.0327 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 19.0338, + "visualDurationMs": 0.0011, + "visualStartMs": 19.0338 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 19.0351, + "visualDurationMs": 0.0013, + "visualStartMs": 19.0351 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 19.0369, + "visualDurationMs": 0.0015, + "visualStartMs": 19.0369 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 19.0387, + "visualDurationMs": 0.0014, + "visualStartMs": 19.0387 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 19.0404, + "visualDurationMs": 0.0013, + "visualStartMs": 19.0404 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 19.042, + "visualDurationMs": 0.0014, + "visualStartMs": 19.042 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 19.0437, + "visualDurationMs": 0.0014, + "visualStartMs": 19.0437 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 19.0454, + "visualDurationMs": 0.0012, + "visualStartMs": 19.0454 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 19.0469, + "visualDurationMs": 0.0028, + "visualStartMs": 19.0469 + }, + { + "durationMs": 0.0022, + "name": "L7", + "startMs": 19.05, + "visualDurationMs": 0.0022, + "visualStartMs": 19.05 + }, + { + "durationMs": 0.0016, + "name": "L8", + "startMs": 19.0526, + "visualDurationMs": 0.0016, + "visualStartMs": 19.0526 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 19.0546, + "visualDurationMs": 0.0014, + "visualStartMs": 19.0546 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 19.0563, + "visualDurationMs": 0.0015, + "visualStartMs": 19.0563 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 19.0581, + "visualDurationMs": 0.0015, + "visualStartMs": 19.0581 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 19.0599, + "visualDurationMs": 0.0015, + "visualStartMs": 19.0599 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 19.0617, + "visualDurationMs": 0.0014, + "visualStartMs": 19.0617 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 19.0635, + "visualDurationMs": 0.0036, + "visualStartMs": 19.0635 + }, + { + "durationMs": 0.0223, + "name": "L15", + "startMs": 19.0675, + "visualDurationMs": 0.0223, + "visualStartMs": 19.0675 + }, + { + "durationMs": 0.0022, + "name": "L16", + "startMs": 19.0905, + "visualDurationMs": 0.0022, + "visualStartMs": 19.0905 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 19.093, + "visualDurationMs": 0.0016, + "visualStartMs": 19.093 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 19.0949, + "visualDurationMs": 0.0016, + "visualStartMs": 19.0949 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 19.0969, + "visualDurationMs": 0.0015, + "visualStartMs": 19.0969 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 19.0987, + "visualDurationMs": 0.0013, + "visualStartMs": 19.0987 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 19.1004, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1004 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 19.1022, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1022 + }, + { + "durationMs": 0.0015, + "name": "L23", + "startMs": 19.1041, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1041 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 19.1059, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1059 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 19.1077, + "visualDurationMs": 0.0012, + "visualStartMs": 19.1077 + }, + { + "durationMs": 0.0014, + "name": "L26", + "startMs": 19.1093, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1093 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 19.1111, + "visualDurationMs": 0.0012, + "visualStartMs": 19.1111 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 19.1127, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1127 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 19.1144, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1144 + }, + { + "durationMs": 0.0057, + "name": "L30", + "startMs": 19.1161, + "visualDurationMs": 0.0057, + "visualStartMs": 19.1161 + }, + { + "durationMs": 0.0017, + "name": "L31", + "startMs": 19.1221, + "visualDurationMs": 0.0017, + "visualStartMs": 19.1221 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 19.1242, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1242 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 19.1258, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1258 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 19.1276, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1276 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 19.1293, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1293 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 19.131, + "visualDurationMs": 0.0014, + "visualStartMs": 19.131 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 19.1327, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1327 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 19.1343, + "visualDurationMs": 0.0012, + "visualStartMs": 19.1343 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 19.1359, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1359 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 19.1376, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1376 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 19.1392, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1392 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 19.1409, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1409 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 19.1426, + "visualDurationMs": 0.0016, + "visualStartMs": 19.1426 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 19.1445, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1445 + }, + { + "durationMs": 0.0015, + "name": "L45", + "startMs": 19.1463, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1463 + }, + { + "durationMs": 0.0089, + "name": "L46", + "startMs": 19.1481, + "visualDurationMs": 0.0089, + "visualStartMs": 19.1481 + }, + { + "durationMs": 0.0018, + "name": "L47", + "startMs": 19.1574, + "visualDurationMs": 0.0018, + "visualStartMs": 19.1574 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 19.1596, + "visualDurationMs": 0.0016, + "visualStartMs": 19.1596 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 19.1616, + "visualDurationMs": 0.0016, + "visualStartMs": 19.1616 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 19.1635, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1635 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 19.1654, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1654 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 19.1672, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1672 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 19.1689, + "visualDurationMs": 0.0015, + "visualStartMs": 19.1689 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 19.1707, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1707 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 19.1724, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1724 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 19.1742, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1742 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 19.1759, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1759 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 19.1776, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1776 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 19.1793, + "visualDurationMs": 0.0013, + "visualStartMs": 19.1793 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 19.181, + "visualDurationMs": 0.0014, + "visualStartMs": 19.181 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 19.1827, + "visualDurationMs": 0.0014, + "visualStartMs": 19.1827 + }, + { + "durationMs": 0.0092, + "name": "L62", + "startMs": 19.1844, + "visualDurationMs": 0.0092, + "visualStartMs": 19.1844 + }, + { + "durationMs": 0.011, + "name": "L63", + "startMs": 19.194, + "visualDurationMs": 0.011, + "visualStartMs": 19.194 + }, + { + "durationMs": 0.0024, + "name": "L64", + "startMs": 19.2058, + "visualDurationMs": 0.0024, + "visualStartMs": 19.2058 + }, + { + "durationMs": 0.0016, + "name": "L65", + "startMs": 19.2086, + "visualDurationMs": 0.0016, + "visualStartMs": 19.2086 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 19.2105, + "visualDurationMs": 0.0015, + "visualStartMs": 19.2105 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 19.2123, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2123 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 19.2141, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2141 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 19.2158, + "visualDurationMs": 0.0015, + "visualStartMs": 19.2158 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 19.2177, + "visualDurationMs": 0.0012, + "visualStartMs": 19.2177 + }, + { + "durationMs": 0.0175, + "name": "L71", + "startMs": 19.2193, + "visualDurationMs": 0.0175, + "visualStartMs": 19.2193 + }, + { + "durationMs": 0.0015, + "name": "L72", + "startMs": 19.2372, + "visualDurationMs": 0.0015, + "visualStartMs": 19.2372 + }, + { + "durationMs": 0.0014, + "name": "L73", + "startMs": 19.239, + "visualDurationMs": 0.0014, + "visualStartMs": 19.239 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 19.2408, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2408 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 19.2425, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2425 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 19.2442, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2442 + }, + { + "durationMs": 0.0015, + "name": "L77", + "startMs": 19.2458, + "visualDurationMs": 0.0015, + "visualStartMs": 19.2458 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 19.2476, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2476 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 19.2493, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2493 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 19.2511, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2511 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 19.2528, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2528 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 19.2544, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2544 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 19.2562, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2562 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 19.2579, + "visualDurationMs": 0.0012, + "visualStartMs": 19.2579 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 19.2595, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2595 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 19.2613, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2613 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 19.2629, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2629 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 19.2646, + "visualDurationMs": 0.0012, + "visualStartMs": 19.2646 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 19.2662, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2662 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 19.268, + "visualDurationMs": 0.0012, + "visualStartMs": 19.268 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 19.2696, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2696 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 19.2712, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2712 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 19.2728, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2728 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 19.2744, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2744 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 19.2761, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2761 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 19.2778, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2778 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 19.2796, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2796 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 19.2812, + "visualDurationMs": 0.0013, + "visualStartMs": 19.2812 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 19.2828, + "visualDurationMs": 0.0012, + "visualStartMs": 19.2828 + }, + { + "durationMs": 0.0011, + "name": "BindNorm", + "startMs": 19.2843, + "visualDurationMs": 0.0011, + "visualStartMs": 19.2843 + } + ], + "durationMs": 0.2527, + "name": "Lighting", + "startMs": 19.0335, + "visualDurationMs": 0.2527, + "visualStartMs": 19.0335 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "VAO Bind", + "startMs": 19.2868, + "visualDurationMs": 0.0008, + "visualStartMs": 19.2868 + }, + { + "durationMs": 0.0008, + "name": "GL Draw", + "startMs": 19.2877, + "visualDurationMs": 0.0008, + "visualStartMs": 19.2877 + } + ], + "durationMs": 0.0023, + "name": "Draw", + "startMs": 19.2864, + "visualDurationMs": 0.0023, + "visualStartMs": 19.2864 + } + ], + "durationMs": 0.2626, + "name": "DrawSprite", + "startMs": 19.0262, + "visualDurationMs": 0.2626, + "visualStartMs": 19.0262 + } + ], + "durationMs": 0.2645, + "name": "Draw Sprite: Pebble_87", + "startMs": 19.0244, + "visualDurationMs": 0.2645, + "visualStartMs": 19.0244 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0006, + "name": "ShaderSelect", + "startMs": 19.2912, + "visualDurationMs": 0.0006, + "visualStartMs": 19.2912 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 19.2919, + "visualDurationMs": 0.0007, + "visualStartMs": 19.2919 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 19.2932, + "visualDurationMs": 0.0012, + "visualStartMs": 19.2932 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 19.2946, + "visualDurationMs": 0.0005, + "visualStartMs": 19.2946 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 19.2929, + "visualDurationMs": 0.0023, + "visualStartMs": 19.2929 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 19.2953, + "visualDurationMs": 0.0004, + "visualStartMs": 19.2953 + }, + { + "children": [ + { + "durationMs": 0.001, + "name": "ColorCorrection", + "startMs": 19.2962, + "visualDurationMs": 0.001, + "visualStartMs": 19.2962 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 19.2973, + "visualDurationMs": 0.0015, + "visualStartMs": 19.2973 + }, + { + "durationMs": 0.0014, + "name": "L0", + "startMs": 19.2992, + "visualDurationMs": 0.0014, + "visualStartMs": 19.2992 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 19.3009, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3009 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 19.3027, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3027 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 19.3043, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3043 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 19.306, + "visualDurationMs": 0.0012, + "visualStartMs": 19.306 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 19.3075, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3075 + }, + { + "durationMs": 0.0028, + "name": "L6", + "startMs": 19.3091, + "visualDurationMs": 0.0028, + "visualStartMs": 19.3091 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 19.3122, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3122 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 19.3138, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3138 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 19.3155, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3155 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 19.3171, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3171 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 19.3189, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3189 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 19.3207, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3207 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 19.3224, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3224 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 19.3241, + "visualDurationMs": 0.0035, + "visualStartMs": 19.3241 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 19.328, + "visualDurationMs": 0.0015, + "visualStartMs": 19.328 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 19.3298, + "visualDurationMs": 0.0015, + "visualStartMs": 19.3298 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 19.3316, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3316 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 19.3333, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3333 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 19.335, + "visualDurationMs": 0.0014, + "visualStartMs": 19.335 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 19.3368, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3368 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 19.3385, + "visualDurationMs": 0.0015, + "visualStartMs": 19.3385 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 19.3403, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3403 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 19.3421, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3421 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 19.3438, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3438 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 19.3454, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3454 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 19.347, + "visualDurationMs": 0.0013, + "visualStartMs": 19.347 + }, + { + "durationMs": 0.0022, + "name": "L27", + "startMs": 19.3486, + "visualDurationMs": 0.0022, + "visualStartMs": 19.3486 + }, + { + "durationMs": 0.0015, + "name": "L28", + "startMs": 19.3512, + "visualDurationMs": 0.0015, + "visualStartMs": 19.3512 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 19.3531, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3531 + }, + { + "durationMs": 0.0055, + "name": "L30", + "startMs": 19.355, + "visualDurationMs": 0.0055, + "visualStartMs": 19.355 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 19.3609, + "visualDurationMs": 0.0016, + "visualStartMs": 19.3609 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 19.3628, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3628 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 19.3644, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3644 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 19.3662, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3662 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 19.3679, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3679 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 19.3697, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3697 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 19.3713, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3713 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 19.3729, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3729 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 19.3745, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3745 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 19.3761, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3761 + }, + { + "durationMs": 0.0015, + "name": "L41", + "startMs": 19.3778, + "visualDurationMs": 0.0015, + "visualStartMs": 19.3778 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 19.3797, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3797 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 19.3813, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3813 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 19.383, + "visualDurationMs": 0.0015, + "visualStartMs": 19.383 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 19.3849, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3849 + }, + { + "durationMs": 0.0015, + "name": "L46", + "startMs": 19.3865, + "visualDurationMs": 0.0015, + "visualStartMs": 19.3865 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 19.3884, + "visualDurationMs": 0.0013, + "visualStartMs": 19.3884 + }, + { + "durationMs": 0.0017, + "name": "L48", + "startMs": 19.3901, + "visualDurationMs": 0.0017, + "visualStartMs": 19.3901 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 19.3921, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3921 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 19.3938, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3938 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 19.3955, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3955 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 19.3973, + "visualDurationMs": 0.0012, + "visualStartMs": 19.3973 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 19.3989, + "visualDurationMs": 0.0014, + "visualStartMs": 19.3989 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 19.4006, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4006 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 19.4023, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4023 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 19.4041, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4041 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 19.4058, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4058 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 19.4074, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4074 + }, + { + "durationMs": 0.0017, + "name": "L59", + "startMs": 19.4092, + "visualDurationMs": 0.0017, + "visualStartMs": 19.4092 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 19.4112, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4112 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 19.4129, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4129 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 19.4146, + "visualDurationMs": 0.0089, + "visualStartMs": 19.4146 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 19.4239, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4239 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 19.4256, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4256 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 19.4273, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4273 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 19.4289, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4289 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 19.4307, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4307 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 19.4323, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4323 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 19.434, + "visualDurationMs": 0.0014, + "visualStartMs": 19.434 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 19.4358, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4358 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 19.4374, + "visualDurationMs": 0.0015, + "visualStartMs": 19.4374 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 19.4392, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4392 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 19.4408, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4408 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 19.4424, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4424 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 19.4441, + "visualDurationMs": 0.0012, + "visualStartMs": 19.4441 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 19.4457, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4457 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 19.4473, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4473 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 19.4489, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4489 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 19.4505, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4505 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 19.4522, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4522 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 19.454, + "visualDurationMs": 0.0013, + "visualStartMs": 19.454 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 19.4556, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4556 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 19.4572, + "visualDurationMs": 0.0012, + "visualStartMs": 19.4572 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 19.4587, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4587 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 19.4603, + "visualDurationMs": 0.0014, + "visualStartMs": 19.4603 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 19.462, + "visualDurationMs": 0.0013, + "visualStartMs": 19.462 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 19.4636, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4636 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 19.4652, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4652 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 19.4669, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4669 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 19.4685, + "visualDurationMs": 0.0012, + "visualStartMs": 19.4685 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 19.47, + "visualDurationMs": 0.0013, + "visualStartMs": 19.47 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 19.4717, + "visualDurationMs": 0.0012, + "visualStartMs": 19.4717 + }, + { + "durationMs": 0.0015, + "name": "L93", + "startMs": 19.4732, + "visualDurationMs": 0.0015, + "visualStartMs": 19.4732 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 19.475, + "visualDurationMs": 0.0012, + "visualStartMs": 19.475 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 19.4765, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4765 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 19.4782, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4782 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 19.4799, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4799 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 19.4816, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4816 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 19.4832, + "visualDurationMs": 0.0013, + "visualStartMs": 19.4832 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 19.4846, + "visualDurationMs": 0.0008, + "visualStartMs": 19.4846 + } + ], + "durationMs": 0.1898, + "name": "Lighting", + "startMs": 19.2959, + "visualDurationMs": 0.1898, + "visualStartMs": 19.2959 + }, + { + "children": [ + { + "durationMs": 0.0022, + "name": "VAO Bind", + "startMs": 19.5383, + "visualDurationMs": 0.0022, + "visualStartMs": 19.5383 + }, + { + "durationMs": 0.0008, + "name": "GL Draw", + "startMs": 19.5409, + "visualDurationMs": 0.0008, + "visualStartMs": 19.5409 + } + ], + "durationMs": 0.0562, + "name": "Draw", + "startMs": 19.4858, + "visualDurationMs": 0.0562, + "visualStartMs": 19.4858 + } + ], + "durationMs": 0.2514, + "name": "DrawSprite", + "startMs": 19.2908, + "visualDurationMs": 0.2514, + "visualStartMs": 19.2908 + } + ], + "durationMs": 0.2521, + "name": "Draw Sprite: Pebble_86", + "startMs": 19.2903, + "visualDurationMs": 0.2521, + "visualStartMs": 19.2903 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 19.5454, + "visualDurationMs": 0.0004, + "visualStartMs": 19.5454 + }, + { + "durationMs": 0.0009, + "name": "ShaderUse", + "startMs": 19.546, + "visualDurationMs": 0.0009, + "visualStartMs": 19.546 + }, + { + "children": [ + { + "durationMs": 0.0025, + "name": "Transform", + "startMs": 19.5477, + "visualDurationMs": 0.0025, + "visualStartMs": 19.5477 + }, + { + "durationMs": 0.0007, + "name": "TexSlot", + "startMs": 19.5503, + "visualDurationMs": 0.0007, + "visualStartMs": 19.5503 + } + ], + "durationMs": 0.0039, + "name": "SetUniforms", + "startMs": 19.5473, + "visualDurationMs": 0.0039, + "visualStartMs": 19.5473 + }, + { + "durationMs": 0.0006, + "name": "BindTex", + "startMs": 19.5514, + "visualDurationMs": 0.0006, + "visualStartMs": 19.5514 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "ColorCorrection", + "startMs": 19.5526, + "visualDurationMs": 0.0012, + "visualStartMs": 19.5526 + }, + { + "durationMs": 0.0016, + "name": "SetLightParams", + "startMs": 19.554, + "visualDurationMs": 0.0016, + "visualStartMs": 19.554 + }, + { + "durationMs": 0.002, + "name": "L0", + "startMs": 19.5562, + "visualDurationMs": 0.002, + "visualStartMs": 19.5562 + }, + { + "durationMs": 0.0016, + "name": "L1", + "startMs": 19.5586, + "visualDurationMs": 0.0016, + "visualStartMs": 19.5586 + }, + { + "durationMs": 0.0017, + "name": "L2", + "startMs": 19.5606, + "visualDurationMs": 0.0017, + "visualStartMs": 19.5606 + }, + { + "durationMs": 0.0015, + "name": "L3", + "startMs": 19.5626, + "visualDurationMs": 0.0015, + "visualStartMs": 19.5626 + }, + { + "durationMs": 0.0014, + "name": "L4", + "startMs": 19.5644, + "visualDurationMs": 0.0014, + "visualStartMs": 19.5644 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 19.5661, + "visualDurationMs": 0.0012, + "visualStartMs": 19.5661 + }, + { + "durationMs": 0.003, + "name": "L6", + "startMs": 19.5676, + "visualDurationMs": 0.003, + "visualStartMs": 19.5676 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 19.5709, + "visualDurationMs": 0.0013, + "visualStartMs": 19.5709 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 19.5726, + "visualDurationMs": 0.0013, + "visualStartMs": 19.5726 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 19.5742, + "visualDurationMs": 0.0013, + "visualStartMs": 19.5742 + }, + { + "durationMs": 0.0019, + "name": "L10", + "startMs": 19.576, + "visualDurationMs": 0.0019, + "visualStartMs": 19.576 + }, + { + "durationMs": 0.0018, + "name": "L11", + "startMs": 19.5783, + "visualDurationMs": 0.0018, + "visualStartMs": 19.5783 + }, + { + "durationMs": 0.0017, + "name": "L12", + "startMs": 19.5804, + "visualDurationMs": 0.0017, + "visualStartMs": 19.5804 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 19.5824, + "visualDurationMs": 0.0015, + "visualStartMs": 19.5824 + }, + { + "durationMs": 0.0037, + "name": "L14", + "startMs": 19.5843, + "visualDurationMs": 0.0037, + "visualStartMs": 19.5843 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 19.5884, + "visualDurationMs": 0.0015, + "visualStartMs": 19.5884 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 19.5903, + "visualDurationMs": 0.0013, + "visualStartMs": 19.5903 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 19.592, + "visualDurationMs": 0.0014, + "visualStartMs": 19.592 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 19.5938, + "visualDurationMs": 0.0014, + "visualStartMs": 19.5938 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 19.5955, + "visualDurationMs": 0.0015, + "visualStartMs": 19.5955 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 19.5973, + "visualDurationMs": 0.0013, + "visualStartMs": 19.5973 + }, + { + "durationMs": 0.0016, + "name": "L21", + "startMs": 19.5989, + "visualDurationMs": 0.0016, + "visualStartMs": 19.5989 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 19.6008, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6008 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 19.6027, + "visualDurationMs": 0.0012, + "visualStartMs": 19.6027 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 19.6043, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6043 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 19.606, + "visualDurationMs": 0.0012, + "visualStartMs": 19.606 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 19.6075, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6075 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 19.6091, + "visualDurationMs": 0.0012, + "visualStartMs": 19.6091 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 19.6107, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6107 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 19.6123, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6123 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 19.6139, + "visualDurationMs": 0.0051, + "visualStartMs": 19.6139 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 19.6194, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6194 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 19.6213, + "visualDurationMs": 0.0012, + "visualStartMs": 19.6213 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 19.6228, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6228 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 19.6246, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6246 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 19.6263, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6263 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 19.628, + "visualDurationMs": 0.0013, + "visualStartMs": 19.628 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 19.6296, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6296 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 19.6312, + "visualDurationMs": 0.0012, + "visualStartMs": 19.6312 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 19.6327, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6327 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 19.6343, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6343 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 19.636, + "visualDurationMs": 0.0014, + "visualStartMs": 19.636 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 19.6377, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6377 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 19.6393, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6393 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 19.6412, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6412 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 19.643, + "visualDurationMs": 0.0013, + "visualStartMs": 19.643 + }, + { + "durationMs": 0.0024, + "name": "L46", + "startMs": 19.6446, + "visualDurationMs": 0.0024, + "visualStartMs": 19.6446 + }, + { + "durationMs": 0.0017, + "name": "L47", + "startMs": 19.6474, + "visualDurationMs": 0.0017, + "visualStartMs": 19.6474 + }, + { + "durationMs": 0.0019, + "name": "L48", + "startMs": 19.6494, + "visualDurationMs": 0.0019, + "visualStartMs": 19.6494 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 19.6516, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6516 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 19.6534, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6534 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 19.6553, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6553 + }, + { + "durationMs": 0.0015, + "name": "L52", + "startMs": 19.6571, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6571 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 19.6589, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6589 + }, + { + "durationMs": 0.0021, + "name": "L54", + "startMs": 19.6606, + "visualDurationMs": 0.0021, + "visualStartMs": 19.6606 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 19.6631, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6631 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 19.6649, + "visualDurationMs": 0.0016, + "visualStartMs": 19.6649 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 19.6668, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6668 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 19.6685, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6685 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 19.6704, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6704 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 19.6722, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6722 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 19.674, + "visualDurationMs": 0.0014, + "visualStartMs": 19.674 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 19.6758, + "visualDurationMs": 0.009, + "visualStartMs": 19.6758 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 19.6851, + "visualDurationMs": 0.0015, + "visualStartMs": 19.6851 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 19.687, + "visualDurationMs": 0.0013, + "visualStartMs": 19.687 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 19.6887, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6887 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 19.6905, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6905 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 19.6923, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6923 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 19.6939, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6939 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 19.6955, + "visualDurationMs": 0.0013, + "visualStartMs": 19.6955 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 19.6971, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6971 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 19.6988, + "visualDurationMs": 0.0014, + "visualStartMs": 19.6988 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 19.7005, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7005 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 19.7023, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7023 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 19.7038, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7038 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 19.7054, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7054 + }, + { + "durationMs": 0.0014, + "name": "L76", + "startMs": 19.707, + "visualDurationMs": 0.0014, + "visualStartMs": 19.707 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 19.7087, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7087 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 19.7104, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7104 + }, + { + "durationMs": 0.0014, + "name": "L79", + "startMs": 19.7119, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7119 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 19.7136, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7136 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 19.7153, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7153 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 19.7169, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7169 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 19.7185, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7185 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 19.7201, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7201 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 19.7217, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7217 + }, + { + "durationMs": 0.002, + "name": "L86", + "startMs": 19.7235, + "visualDurationMs": 0.002, + "visualStartMs": 19.7235 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 19.7259, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7259 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 19.7276, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7276 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 19.7291, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7291 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 19.7308, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7308 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 19.7324, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7324 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 19.734, + "visualDurationMs": 0.0013, + "visualStartMs": 19.734 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 19.7356, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7356 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 19.7372, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7372 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 19.7388, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7388 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 19.7403, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7403 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 19.7419, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7419 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 19.7436, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7436 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 19.7452, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7452 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 19.7466, + "visualDurationMs": 0.0008, + "visualStartMs": 19.7466 + } + ], + "durationMs": 0.1959, + "name": "Lighting", + "startMs": 19.5522, + "visualDurationMs": 0.1959, + "visualStartMs": 19.5522 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 19.7487, + "visualDurationMs": 0.0004, + "visualStartMs": 19.7487 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 19.7494, + "visualDurationMs": 0.0004, + "visualStartMs": 19.7494 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 19.7483, + "visualDurationMs": 0.0017, + "visualStartMs": 19.7483 + } + ], + "durationMs": 0.2053, + "name": "DrawSprite", + "startMs": 19.5448, + "visualDurationMs": 0.2053, + "visualStartMs": 19.5448 + } + ], + "durationMs": 0.2063, + "name": "Draw Sprite: Pebble_85", + "startMs": 19.5439, + "visualDurationMs": 0.2063, + "visualStartMs": 19.5439 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 19.7522, + "visualDurationMs": 0.0003, + "visualStartMs": 19.7522 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 19.7527, + "visualDurationMs": 0.0004, + "visualStartMs": 19.7527 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 19.7536, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7536 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 19.7552, + "visualDurationMs": 0.0006, + "visualStartMs": 19.7552 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 19.7533, + "visualDurationMs": 0.0026, + "visualStartMs": 19.7533 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 19.7561, + "visualDurationMs": 0.0004, + "visualStartMs": 19.7561 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "ColorCorrection", + "startMs": 19.757, + "visualDurationMs": 0.0015, + "visualStartMs": 19.757 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 19.7586, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7586 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 19.7604, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7604 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 19.7621, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7621 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 19.7638, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7638 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 19.7655, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7655 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 19.7672, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7672 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 19.7688, + "visualDurationMs": 0.0012, + "visualStartMs": 19.7688 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 19.7703, + "visualDurationMs": 0.0026, + "visualStartMs": 19.7703 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 19.7733, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7733 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 19.775, + "visualDurationMs": 0.0013, + "visualStartMs": 19.775 + }, + { + "durationMs": 0.0014, + "name": "L9", + "startMs": 19.7766, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7766 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 19.7784, + "visualDurationMs": 0.0015, + "visualStartMs": 19.7784 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 19.7802, + "visualDurationMs": 0.0015, + "visualStartMs": 19.7802 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 19.782, + "visualDurationMs": 0.0014, + "visualStartMs": 19.782 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 19.7838, + "visualDurationMs": 0.0013, + "visualStartMs": 19.7838 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 19.7855, + "visualDurationMs": 0.0035, + "visualStartMs": 19.7855 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 19.7894, + "visualDurationMs": 0.0015, + "visualStartMs": 19.7894 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 19.7912, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7912 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 19.7929, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7929 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 19.7946, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7946 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 19.7964, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7964 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 19.7981, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7981 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 19.7998, + "visualDurationMs": 0.0014, + "visualStartMs": 19.7998 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 19.8015, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8015 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 19.8034, + "visualDurationMs": 0.0012, + "visualStartMs": 19.8034 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 19.805, + "visualDurationMs": 0.0013, + "visualStartMs": 19.805 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 19.8066, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8066 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 19.8082, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8082 + }, + { + "durationMs": 0.0015, + "name": "L27", + "startMs": 19.8098, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8098 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 19.8116, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8116 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 19.8132, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8132 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 19.815, + "visualDurationMs": 0.005, + "visualStartMs": 19.815 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 19.8204, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8204 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 19.8222, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8222 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 19.8239, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8239 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 19.8256, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8256 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 19.8275, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8275 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 19.8292, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8292 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 19.8309, + "visualDurationMs": 0.0012, + "visualStartMs": 19.8309 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 19.8324, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8324 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 19.834, + "visualDurationMs": 0.0012, + "visualStartMs": 19.834 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 19.8356, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8356 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 19.8375, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8375 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 19.8391, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8391 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 19.8408, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8408 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 19.8425, + "visualDurationMs": 0.0016, + "visualStartMs": 19.8425 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 19.8444, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8444 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 19.8462, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8462 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 19.8479, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8479 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 19.8496, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8496 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 19.8515, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8515 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 19.8532, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8532 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 19.855, + "visualDurationMs": 0.0015, + "visualStartMs": 19.855 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 19.8568, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8568 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 19.8586, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8586 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 19.8603, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8603 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 19.862, + "visualDurationMs": 0.0014, + "visualStartMs": 19.862 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 19.8637, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8637 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 19.8653, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8653 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 19.8669, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8669 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 19.8687, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8687 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 19.8705, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8705 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 19.8723, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8723 + }, + { + "durationMs": 0.0097, + "name": "L62", + "startMs": 19.874, + "visualDurationMs": 0.0097, + "visualStartMs": 19.874 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 19.8841, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8841 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 19.8858, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8858 + }, + { + "durationMs": 0.0024, + "name": "L65", + "startMs": 19.8876, + "visualDurationMs": 0.0024, + "visualStartMs": 19.8876 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 19.8904, + "visualDurationMs": 0.0016, + "visualStartMs": 19.8904 + }, + { + "durationMs": 0.0016, + "name": "L67", + "startMs": 19.8923, + "visualDurationMs": 0.0016, + "visualStartMs": 19.8923 + }, + { + "durationMs": 0.0015, + "name": "L68", + "startMs": 19.8942, + "visualDurationMs": 0.0015, + "visualStartMs": 19.8942 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 19.8962, + "visualDurationMs": 0.0014, + "visualStartMs": 19.8962 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 19.898, + "visualDurationMs": 0.0014, + "visualStartMs": 19.898 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 19.8998, + "visualDurationMs": 0.0013, + "visualStartMs": 19.8998 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 19.9014, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9014 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 19.9031, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9031 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 19.9047, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9047 + }, + { + "durationMs": 0.0014, + "name": "L75", + "startMs": 19.9064, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9064 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 19.9082, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9082 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 19.9097, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9097 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 19.9114, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9114 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 19.913, + "visualDurationMs": 0.0015, + "visualStartMs": 19.913 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 19.9149, + "visualDurationMs": 0.0015, + "visualStartMs": 19.9149 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 19.9167, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9167 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 19.9184, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9184 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 19.9201, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9201 + }, + { + "durationMs": 0.0014, + "name": "L84", + "startMs": 19.9217, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9217 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 19.9234, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9234 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 19.9252, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9252 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 19.9268, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9268 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 19.9285, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9285 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 19.9301, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9301 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 19.9317, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9317 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 19.9334, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9334 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 19.9351, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9351 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 19.9367, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9367 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 19.9382, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9382 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 19.94, + "visualDurationMs": 0.0012, + "visualStartMs": 19.94 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 19.9416, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9416 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 19.9431, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9431 + }, + { + "durationMs": 0.0152, + "name": "L98", + "startMs": 19.9448, + "visualDurationMs": 0.0152, + "visualStartMs": 19.9448 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 19.9604, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9604 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 19.9618, + "visualDurationMs": 0.0006, + "visualStartMs": 19.9618 + } + ], + "durationMs": 0.206, + "name": "Lighting", + "startMs": 19.7567, + "visualDurationMs": 0.206, + "visualStartMs": 19.7567 + }, + { + "children": [ + { + "durationMs": 0.0007, + "name": "VAO Bind", + "startMs": 19.9631, + "visualDurationMs": 0.0007, + "visualStartMs": 19.9631 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 19.964, + "visualDurationMs": 0.0005, + "visualStartMs": 19.964 + } + ], + "durationMs": 0.0019, + "name": "Draw", + "startMs": 19.9628, + "visualDurationMs": 0.0019, + "visualStartMs": 19.9628 + } + ], + "durationMs": 0.2131, + "name": "DrawSprite", + "startMs": 19.7517, + "visualDurationMs": 0.2131, + "visualStartMs": 19.7517 + } + ], + "durationMs": 0.2138, + "name": "Draw Sprite: Pebble_84", + "startMs": 19.7511, + "visualDurationMs": 0.2138, + "visualStartMs": 19.7511 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 19.9665, + "visualDurationMs": 0.0004, + "visualStartMs": 19.9665 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 19.967, + "visualDurationMs": 0.0004, + "visualStartMs": 19.967 + }, + { + "children": [ + { + "durationMs": 0.0014, + "name": "Transform", + "startMs": 19.9679, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9679 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 19.9694, + "visualDurationMs": 0.0005, + "visualStartMs": 19.9694 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 19.9676, + "visualDurationMs": 0.0024, + "visualStartMs": 19.9676 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 19.9702, + "visualDurationMs": 0.0003, + "visualStartMs": 19.9702 + }, + { + "children": [ + { + "durationMs": 0.0008, + "name": "ColorCorrection", + "startMs": 19.971, + "visualDurationMs": 0.0008, + "visualStartMs": 19.971 + }, + { + "durationMs": 0.0012, + "name": "SetLightParams", + "startMs": 19.972, + "visualDurationMs": 0.0012, + "visualStartMs": 19.972 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 19.9736, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9736 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 19.9752, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9752 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 19.9769, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9769 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 19.9786, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9786 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 19.9803, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9803 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 19.9819, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9819 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 19.9835, + "visualDurationMs": 0.0025, + "visualStartMs": 19.9835 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 19.9864, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9864 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 19.9879, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9879 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 19.9895, + "visualDurationMs": 0.0012, + "visualStartMs": 19.9895 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 19.9912, + "visualDurationMs": 0.0013, + "visualStartMs": 19.9912 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 19.9928, + "visualDurationMs": 0.0015, + "visualStartMs": 19.9928 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 19.9947, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9947 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 19.9964, + "visualDurationMs": 0.0014, + "visualStartMs": 19.9964 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 19.9982, + "visualDurationMs": 0.0035, + "visualStartMs": 19.9982 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 20.002, + "visualDurationMs": 0.0015, + "visualStartMs": 20.002 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 20.0038, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0038 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 20.0055, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0055 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 20.0073, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0073 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 20.0092, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0092 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 20.011, + "visualDurationMs": 0.0014, + "visualStartMs": 20.011 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 20.0127, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0127 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 20.0146, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0146 + }, + { + "durationMs": 0.0012, + "name": "L23", + "startMs": 20.0164, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0164 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 20.018, + "visualDurationMs": 0.0013, + "visualStartMs": 20.018 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 20.0196, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0196 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 20.0213, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0213 + }, + { + "durationMs": 0.0011, + "name": "L27", + "startMs": 20.0229, + "visualDurationMs": 0.0011, + "visualStartMs": 20.0229 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 20.0244, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0244 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 20.0261, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0261 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 20.0278, + "visualDurationMs": 0.0051, + "visualStartMs": 20.0278 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 20.0333, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0333 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 20.0351, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0351 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 20.0367, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0367 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 20.0384, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0384 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 20.0401, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0401 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 20.0417, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0417 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 20.0435, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0435 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 20.045, + "visualDurationMs": 0.0013, + "visualStartMs": 20.045 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 20.0466, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0466 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 20.0482, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0482 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 20.0499, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0499 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 20.0515, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0515 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 20.0531, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0531 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 20.0548, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0548 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 20.0566, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0566 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 20.0583, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0583 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 20.06, + "visualDurationMs": 0.0013, + "visualStartMs": 20.06 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 20.0617, + "visualDurationMs": 0.0016, + "visualStartMs": 20.0617 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 20.0636, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0636 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 20.0653, + "visualDurationMs": 0.0015, + "visualStartMs": 20.0653 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 20.0671, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0671 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 20.0689, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0689 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 20.0705, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0705 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 20.0721, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0721 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 20.0738, + "visualDurationMs": 0.0016, + "visualStartMs": 20.0738 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 20.0757, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0757 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 20.0774, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0774 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 20.079, + "visualDurationMs": 0.0014, + "visualStartMs": 20.079 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 20.0808, + "visualDurationMs": 0.0012, + "visualStartMs": 20.0808 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 20.0823, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0823 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 20.084, + "visualDurationMs": 0.0015, + "visualStartMs": 20.084 + }, + { + "durationMs": 0.0095, + "name": "L62", + "startMs": 20.0859, + "visualDurationMs": 0.0095, + "visualStartMs": 20.0859 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 20.0958, + "visualDurationMs": 0.0013, + "visualStartMs": 20.0958 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 20.0975, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0975 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 20.0992, + "visualDurationMs": 0.0014, + "visualStartMs": 20.0992 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 20.1009, + "visualDurationMs": 0.0014, + "visualStartMs": 20.1009 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 20.1026, + "visualDurationMs": 0.0014, + "visualStartMs": 20.1026 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 20.1043, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1043 + }, + { + "durationMs": 0.0012, + "name": "L69", + "startMs": 20.106, + "visualDurationMs": 0.0012, + "visualStartMs": 20.106 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 20.1076, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1076 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 20.1091, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1091 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 20.111, + "visualDurationMs": 0.0013, + "visualStartMs": 20.111 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 20.1127, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1127 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 20.1142, + "visualDurationMs": 0.0014, + "visualStartMs": 20.1142 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 20.1159, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1159 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 20.1175, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1175 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 20.1192, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1192 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 20.1207, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1207 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 20.1223, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1223 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 20.1241, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1241 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 20.1257, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1257 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 20.1274, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1274 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 20.1289, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1289 + }, + { + "durationMs": 0.0017, + "name": "L84", + "startMs": 20.1305, + "visualDurationMs": 0.0017, + "visualStartMs": 20.1305 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 20.1325, + "visualDurationMs": 0.0016, + "visualStartMs": 20.1325 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 20.1346, + "visualDurationMs": 0.0014, + "visualStartMs": 20.1346 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 20.1364, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1364 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 20.138, + "visualDurationMs": 0.0013, + "visualStartMs": 20.138 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 20.1396, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1396 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 20.1413, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1413 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 20.1429, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1429 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 20.1446, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1446 + }, + { + "durationMs": 0.0015, + "name": "L93", + "startMs": 20.1462, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1462 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 20.1481, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1481 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 20.1497, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1497 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 20.1513, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1513 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 20.1529, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1529 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 20.1545, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1545 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 20.1561, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1561 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 20.1575, + "visualDurationMs": 0.0005, + "visualStartMs": 20.1575 + } + ], + "durationMs": 0.1876, + "name": "Lighting", + "startMs": 19.9707, + "visualDurationMs": 0.1876, + "visualStartMs": 19.9707 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 20.1587, + "visualDurationMs": 0.0004, + "visualStartMs": 20.1587 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 20.1593, + "visualDurationMs": 0.0004, + "visualStartMs": 20.1593 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 20.1584, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1584 + } + ], + "durationMs": 0.194, + "name": "DrawSprite", + "startMs": 19.966, + "visualDurationMs": 0.194, + "visualStartMs": 19.966 + } + ], + "durationMs": 0.1946, + "name": "Draw Sprite: Pebble_83", + "startMs": 19.9655, + "visualDurationMs": 0.1946, + "visualStartMs": 19.9655 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.001, + "name": "ShaderSelect", + "startMs": 20.1617, + "visualDurationMs": 0.001, + "visualStartMs": 20.1617 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 20.1628, + "visualDurationMs": 0.0004, + "visualStartMs": 20.1628 + }, + { + "children": [ + { + "durationMs": 0.002, + "name": "Transform", + "startMs": 20.1637, + "visualDurationMs": 0.002, + "visualStartMs": 20.1637 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 20.1658, + "visualDurationMs": 0.0005, + "visualStartMs": 20.1658 + } + ], + "durationMs": 0.003, + "name": "SetUniforms", + "startMs": 20.1634, + "visualDurationMs": 0.003, + "visualStartMs": 20.1634 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 20.1666, + "visualDurationMs": 0.0003, + "visualStartMs": 20.1666 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 20.1674, + "visualDurationMs": 0.0009, + "visualStartMs": 20.1674 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 20.1684, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1684 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 20.1703, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1703 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 20.1719, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1719 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 20.1735, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1735 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 20.1751, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1751 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 20.1768, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1768 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 20.1783, + "visualDurationMs": 0.0012, + "visualStartMs": 20.1783 + }, + { + "durationMs": 0.0027, + "name": "L6", + "startMs": 20.1798, + "visualDurationMs": 0.0027, + "visualStartMs": 20.1798 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 20.1828, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1828 + }, + { + "durationMs": 0.0014, + "name": "L8", + "startMs": 20.1845, + "visualDurationMs": 0.0014, + "visualStartMs": 20.1845 + }, + { + "durationMs": 0.0015, + "name": "L9", + "startMs": 20.1862, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1862 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 20.188, + "visualDurationMs": 0.0013, + "visualStartMs": 20.188 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 20.1896, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1896 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 20.1915, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1915 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 20.1931, + "visualDurationMs": 0.0013, + "visualStartMs": 20.1931 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 20.1948, + "visualDurationMs": 0.0034, + "visualStartMs": 20.1948 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 20.1986, + "visualDurationMs": 0.0015, + "visualStartMs": 20.1986 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 20.2004, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2004 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 20.2022, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2022 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 20.2039, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2039 + }, + { + "durationMs": 0.0015, + "name": "L19", + "startMs": 20.2057, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2057 + }, + { + "durationMs": 0.0017, + "name": "L20", + "startMs": 20.2075, + "visualDurationMs": 0.0017, + "visualStartMs": 20.2075 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 20.2095, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2095 + }, + { + "durationMs": 0.0016, + "name": "L22", + "startMs": 20.2113, + "visualDurationMs": 0.0016, + "visualStartMs": 20.2113 + }, + { + "durationMs": 0.0015, + "name": "L23", + "startMs": 20.2132, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2132 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 20.215, + "visualDurationMs": 0.0013, + "visualStartMs": 20.215 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 20.2166, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2166 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 20.2181, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2181 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 20.2197, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2197 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 20.2212, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2212 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 20.2229, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2229 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 20.2245, + "visualDurationMs": 0.0053, + "visualStartMs": 20.2245 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 20.2302, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2302 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 20.2319, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2319 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 20.2335, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2335 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 20.2352, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2352 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 20.2369, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2369 + }, + { + "durationMs": 0.0015, + "name": "L36", + "startMs": 20.2386, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2386 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 20.2404, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2404 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 20.2419, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2419 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 20.2436, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2436 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 20.2452, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2452 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 20.2468, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2468 + }, + { + "durationMs": 0.0012, + "name": "L42", + "startMs": 20.2485, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2485 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 20.25, + "visualDurationMs": 0.0015, + "visualStartMs": 20.25 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 20.2518, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2518 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 20.2535, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2535 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 20.2552, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2552 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 20.2569, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2569 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 20.2586, + "visualDurationMs": 0.0015, + "visualStartMs": 20.2586 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 20.2604, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2604 + }, + { + "durationMs": 0.0013, + "name": "L50", + "startMs": 20.2621, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2621 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 20.2637, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2637 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 20.2654, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2654 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 20.267, + "visualDurationMs": 0.0013, + "visualStartMs": 20.267 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 20.2687, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2687 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 20.2703, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2703 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 20.272, + "visualDurationMs": 0.0013, + "visualStartMs": 20.272 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 20.2737, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2737 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 20.2753, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2753 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 20.2771, + "visualDurationMs": 0.0012, + "visualStartMs": 20.2771 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 20.2786, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2786 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 20.2803, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2803 + }, + { + "durationMs": 0.0092, + "name": "L62", + "startMs": 20.282, + "visualDurationMs": 0.0092, + "visualStartMs": 20.282 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 20.2915, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2915 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 20.2933, + "visualDurationMs": 0.0014, + "visualStartMs": 20.2933 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 20.295, + "visualDurationMs": 0.0014, + "visualStartMs": 20.295 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 20.2967, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2967 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 20.2984, + "visualDurationMs": 0.0013, + "visualStartMs": 20.2984 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 20.3, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 20.3016, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3016 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 20.3033, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3033 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 20.3048, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3048 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 20.3064, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3064 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 20.308, + "visualDurationMs": 0.0012, + "visualStartMs": 20.308 + }, + { + "durationMs": 0.0014, + "name": "L74", + "startMs": 20.3096, + "visualDurationMs": 0.0014, + "visualStartMs": 20.3096 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 20.3113, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3113 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 20.3129, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3129 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 20.3145, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3145 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 20.316, + "visualDurationMs": 0.0012, + "visualStartMs": 20.316 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 20.3175, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3175 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 20.3192, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3192 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 20.3207, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3207 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 20.3223, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3223 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 20.3239, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3239 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 20.3254, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3254 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 20.327, + "visualDurationMs": 0.0012, + "visualStartMs": 20.327 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 20.3286, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3286 + }, + { + "durationMs": 0.0015, + "name": "L87", + "startMs": 20.3302, + "visualDurationMs": 0.0015, + "visualStartMs": 20.3302 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 20.332, + "visualDurationMs": 0.0012, + "visualStartMs": 20.332 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 20.3336, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3336 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 20.3352, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3352 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 20.3367, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3367 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 20.3383, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3383 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 20.3399, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3399 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 20.3415, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3415 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 20.3431, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3431 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 20.3447, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3447 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 20.3463, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3463 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 20.3479, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3479 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 20.3495, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3495 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 20.3508, + "visualDurationMs": 0.0005, + "visualStartMs": 20.3508 + } + ], + "durationMs": 0.1847, + "name": "Lighting", + "startMs": 20.1671, + "visualDurationMs": 0.1847, + "visualStartMs": 20.1671 + }, + { + "children": [ + { + "durationMs": 0.0003, + "name": "VAO Bind", + "startMs": 20.3523, + "visualDurationMs": 0.0003, + "visualStartMs": 20.3523 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 20.3528, + "visualDurationMs": 0.0004, + "visualStartMs": 20.3528 + } + ], + "durationMs": 0.0014, + "name": "Draw", + "startMs": 20.3519, + "visualDurationMs": 0.0014, + "visualStartMs": 20.3519 + } + ], + "durationMs": 0.192, + "name": "DrawSprite", + "startMs": 20.1614, + "visualDurationMs": 0.192, + "visualStartMs": 20.1614 + } + ], + "durationMs": 0.1927, + "name": "Draw Sprite: Pebble_82", + "startMs": 20.1609, + "visualDurationMs": 0.1927, + "visualStartMs": 20.1609 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 20.3634, + "visualDurationMs": 0.0003, + "visualStartMs": 20.3634 + }, + { + "durationMs": 0.0007, + "name": "ShaderUse", + "startMs": 20.3638, + "visualDurationMs": 0.0007, + "visualStartMs": 20.3638 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 20.3652, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3652 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 20.3666, + "visualDurationMs": 0.0005, + "visualStartMs": 20.3666 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 20.3648, + "visualDurationMs": 0.0024, + "visualStartMs": 20.3648 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 20.3673, + "visualDurationMs": 0.0004, + "visualStartMs": 20.3673 + }, + { + "children": [ + { + "durationMs": 0.0066, + "name": "ColorCorrection", + "startMs": 20.3681, + "visualDurationMs": 0.0066, + "visualStartMs": 20.3681 + }, + { + "durationMs": 0.0018, + "name": "SetLightParams", + "startMs": 20.3749, + "visualDurationMs": 0.0018, + "visualStartMs": 20.3749 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 20.3774, + "visualDurationMs": 0.0015, + "visualStartMs": 20.3774 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 20.3792, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3792 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 20.3809, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3809 + }, + { + "durationMs": 0.0018, + "name": "L3", + "startMs": 20.3826, + "visualDurationMs": 0.0018, + "visualStartMs": 20.3826 + }, + { + "durationMs": 0.0015, + "name": "L4", + "startMs": 20.3847, + "visualDurationMs": 0.0015, + "visualStartMs": 20.3847 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 20.3865, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3865 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 20.3882, + "visualDurationMs": 0.0026, + "visualStartMs": 20.3882 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 20.3911, + "visualDurationMs": 0.0013, + "visualStartMs": 20.3911 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 20.3928, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3928 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 20.3944, + "visualDurationMs": 0.0012, + "visualStartMs": 20.3944 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 20.396, + "visualDurationMs": 0.0013, + "visualStartMs": 20.396 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 20.3977, + "visualDurationMs": 0.0015, + "visualStartMs": 20.3977 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 20.3996, + "visualDurationMs": 0.0014, + "visualStartMs": 20.3996 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 20.4013, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4013 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 20.403, + "visualDurationMs": 0.0034, + "visualStartMs": 20.403 + }, + { + "durationMs": 0.0017, + "name": "L15", + "startMs": 20.4068, + "visualDurationMs": 0.0017, + "visualStartMs": 20.4068 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 20.4089, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4089 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 20.4106, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4106 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 20.4124, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4124 + }, + { + "durationMs": 0.0017, + "name": "L19", + "startMs": 20.4141, + "visualDurationMs": 0.0017, + "visualStartMs": 20.4141 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 20.4161, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4161 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 20.4177, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4177 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 20.4195, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4195 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 20.4212, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4212 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 20.4229, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4229 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 20.4246, + "visualDurationMs": 0.0012, + "visualStartMs": 20.4246 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 20.4262, + "visualDurationMs": 0.0012, + "visualStartMs": 20.4262 + }, + { + "durationMs": 0.0014, + "name": "L27", + "startMs": 20.4277, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4277 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 20.4294, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4294 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 20.4311, + "visualDurationMs": 0.0012, + "visualStartMs": 20.4311 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 20.4327, + "visualDurationMs": 0.0051, + "visualStartMs": 20.4327 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 20.4381, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4381 + }, + { + "durationMs": 0.0014, + "name": "L32", + "startMs": 20.4399, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4399 + }, + { + "durationMs": 0.0016, + "name": "L33", + "startMs": 20.4416, + "visualDurationMs": 0.0016, + "visualStartMs": 20.4416 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 20.4435, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4435 + }, + { + "durationMs": 0.0015, + "name": "L35", + "startMs": 20.4452, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4452 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 20.447, + "visualDurationMs": 0.0013, + "visualStartMs": 20.447 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 20.4487, + "visualDurationMs": 0.0012, + "visualStartMs": 20.4487 + }, + { + "durationMs": 0.0015, + "name": "L38", + "startMs": 20.4503, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4503 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 20.4521, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4521 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 20.4537, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4537 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 20.4555, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4555 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 20.4573, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4573 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 20.4589, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4589 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 20.4607, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4607 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 20.4625, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4625 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 20.4641, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4641 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 20.4659, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4659 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 20.4676, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4676 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 20.4694, + "visualDurationMs": 0.0016, + "visualStartMs": 20.4694 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 20.4713, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4713 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 20.4731, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4731 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 20.4748, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4748 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 20.4764, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4764 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 20.478, + "visualDurationMs": 0.0014, + "visualStartMs": 20.478 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 20.4797, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4797 + }, + { + "durationMs": 0.0016, + "name": "L56", + "startMs": 20.4814, + "visualDurationMs": 0.0016, + "visualStartMs": 20.4814 + }, + { + "durationMs": 0.0015, + "name": "L57", + "startMs": 20.4833, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4833 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 20.4851, + "visualDurationMs": 0.0016, + "visualStartMs": 20.4851 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 20.4871, + "visualDurationMs": 0.0015, + "visualStartMs": 20.4871 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 20.4889, + "visualDurationMs": 0.0013, + "visualStartMs": 20.4889 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 20.4906, + "visualDurationMs": 0.0014, + "visualStartMs": 20.4906 + }, + { + "durationMs": 0.0088, + "name": "L62", + "startMs": 20.4923, + "visualDurationMs": 0.0088, + "visualStartMs": 20.4923 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 20.5014, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5014 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 20.5031, + "visualDurationMs": 0.0014, + "visualStartMs": 20.5031 + }, + { + "durationMs": 0.0015, + "name": "L65", + "startMs": 20.5048, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5048 + }, + { + "durationMs": 0.0015, + "name": "L66", + "startMs": 20.5066, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5066 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 20.5084, + "visualDurationMs": 0.0014, + "visualStartMs": 20.5084 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 20.5101, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5101 + }, + { + "durationMs": 0.0015, + "name": "L69", + "startMs": 20.5117, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5117 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 20.5136, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5136 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 20.5152, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5152 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 20.5169, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5169 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 20.5185, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5185 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 20.5201, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5201 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 20.5216, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5216 + }, + { + "durationMs": 0.0016, + "name": "L76", + "startMs": 20.5232, + "visualDurationMs": 0.0016, + "visualStartMs": 20.5232 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 20.5252, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5252 + }, + { + "durationMs": 0.0015, + "name": "L78", + "startMs": 20.5269, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5269 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 20.5287, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5287 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 20.5305, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5305 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 20.5322, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5322 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 20.5337, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5337 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 20.5353, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5353 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 20.5368, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5368 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 20.5384, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5384 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 20.5401, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5401 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 20.5417, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5417 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 20.5434, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5434 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 20.545, + "visualDurationMs": 0.0013, + "visualStartMs": 20.545 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 20.5467, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5467 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 20.5484, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5484 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 20.55, + "visualDurationMs": 0.0012, + "visualStartMs": 20.55 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 20.5515, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5515 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 20.553, + "visualDurationMs": 0.0012, + "visualStartMs": 20.553 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 20.5546, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5546 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 20.5562, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5562 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 20.5578, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5578 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 20.5594, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5594 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 20.561, + "visualDurationMs": 0.0012, + "visualStartMs": 20.561 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 20.5623, + "visualDurationMs": 0.0006, + "visualStartMs": 20.5623 + } + ], + "durationMs": 0.1954, + "name": "Lighting", + "startMs": 20.3678, + "visualDurationMs": 0.1954, + "visualStartMs": 20.3678 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 20.5637, + "visualDurationMs": 0.0004, + "visualStartMs": 20.5637 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 20.5642, + "visualDurationMs": 0.0004, + "visualStartMs": 20.5642 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 20.5634, + "visualDurationMs": 0.0015, + "visualStartMs": 20.5634 + } + ], + "durationMs": 0.202, + "name": "DrawSprite", + "startMs": 20.363, + "visualDurationMs": 0.202, + "visualStartMs": 20.363 + } + ], + "durationMs": 0.2026, + "name": "Draw Sprite: Pebble_99", + "startMs": 20.3625, + "visualDurationMs": 0.2026, + "visualStartMs": 20.3625 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 20.5673, + "visualDurationMs": 0.0003, + "visualStartMs": 20.5673 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 20.5678, + "visualDurationMs": 0.0004, + "visualStartMs": 20.5678 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 20.5688, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5688 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 20.5703, + "visualDurationMs": 0.0006, + "visualStartMs": 20.5703 + } + ], + "durationMs": 0.0026, + "name": "SetUniforms", + "startMs": 20.5684, + "visualDurationMs": 0.0026, + "visualStartMs": 20.5684 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 20.5711, + "visualDurationMs": 0.0004, + "visualStartMs": 20.5711 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 20.5719, + "visualDurationMs": 0.0009, + "visualStartMs": 20.5719 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 20.5729, + "visualDurationMs": 0.0014, + "visualStartMs": 20.5729 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 20.5746, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5746 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 20.5763, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5763 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 20.5779, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5779 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 20.5795, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5795 + }, + { + "durationMs": 0.0013, + "name": "L4", + "startMs": 20.5812, + "visualDurationMs": 0.0013, + "visualStartMs": 20.5812 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 20.5828, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5828 + }, + { + "durationMs": 0.0023, + "name": "L6", + "startMs": 20.5844, + "visualDurationMs": 0.0023, + "visualStartMs": 20.5844 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 20.5871, + "visualDurationMs": 0.0014, + "visualStartMs": 20.5871 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 20.5889, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5889 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 20.5904, + "visualDurationMs": 0.0012, + "visualStartMs": 20.5904 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 20.592, + "visualDurationMs": 0.0012, + "visualStartMs": 20.592 + }, + { + "durationMs": 0.015, + "name": "L11", + "startMs": 20.5936, + "visualDurationMs": 0.015, + "visualStartMs": 20.5936 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 20.6089, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6089 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 20.6106, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6106 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 20.6122, + "visualDurationMs": 0.0036, + "visualStartMs": 20.6122 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 20.6162, + "visualDurationMs": 0.0015, + "visualStartMs": 20.6162 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 20.618, + "visualDurationMs": 0.0014, + "visualStartMs": 20.618 + }, + { + "durationMs": 0.005, + "name": "L17", + "startMs": 20.6197, + "visualDurationMs": 0.005, + "visualStartMs": 20.6197 + }, + { + "durationMs": 0.0016, + "name": "L18", + "startMs": 20.6251, + "visualDurationMs": 0.0016, + "visualStartMs": 20.6251 + }, + { + "durationMs": 0.0016, + "name": "L19", + "startMs": 20.6271, + "visualDurationMs": 0.0016, + "visualStartMs": 20.6271 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 20.629, + "visualDurationMs": 0.0014, + "visualStartMs": 20.629 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 20.6308, + "visualDurationMs": 0.0015, + "visualStartMs": 20.6308 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 20.6327, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6327 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 20.6344, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6344 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 20.6361, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6361 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 20.6377, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6377 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 20.6393, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6393 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 20.6408, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6408 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 20.6424, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6424 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 20.644, + "visualDurationMs": 0.0013, + "visualStartMs": 20.644 + }, + { + "durationMs": 0.0053, + "name": "L30", + "startMs": 20.6457, + "visualDurationMs": 0.0053, + "visualStartMs": 20.6457 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 20.6514, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6514 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 20.6532, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6532 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 20.6547, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6547 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 20.6564, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6564 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 20.6581, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6581 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 20.6598, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6598 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 20.6614, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6614 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 20.663, + "visualDurationMs": 0.0012, + "visualStartMs": 20.663 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 20.6645, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6645 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 20.6661, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6661 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 20.6679, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6679 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 20.6695, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6695 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 20.6711, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6711 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 20.6729, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6729 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 20.6747, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6747 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 20.6764, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6764 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 20.6782, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6782 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 20.6798, + "visualDurationMs": 0.0016, + "visualStartMs": 20.6798 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 20.6819, + "visualDurationMs": 0.0015, + "visualStartMs": 20.6819 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 20.6838, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6838 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 20.6855, + "visualDurationMs": 0.0014, + "visualStartMs": 20.6855 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 20.6872, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6872 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 20.6889, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6889 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 20.6906, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6906 + }, + { + "durationMs": 0.0012, + "name": "L55", + "startMs": 20.6923, + "visualDurationMs": 0.0012, + "visualStartMs": 20.6923 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 20.6939, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6939 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 20.6956, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6956 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 20.6972, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6972 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 20.6989, + "visualDurationMs": 0.0013, + "visualStartMs": 20.6989 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 20.7005, + "visualDurationMs": 0.0014, + "visualStartMs": 20.7005 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 20.7022, + "visualDurationMs": 0.0013, + "visualStartMs": 20.7022 + }, + { + "durationMs": 0.1147, + "name": "L62", + "startMs": 20.7039, + "visualDurationMs": 0.1147, + "visualStartMs": 20.7039 + }, + { + "durationMs": 0.0055, + "name": "L63", + "startMs": 20.8212, + "visualDurationMs": 0.0055, + "visualStartMs": 20.8212 + }, + { + "durationMs": 0.0041, + "name": "L64", + "startMs": 20.8276, + "visualDurationMs": 0.0041, + "visualStartMs": 20.8276 + }, + { + "durationMs": 0.0034, + "name": "L65", + "startMs": 20.8326, + "visualDurationMs": 0.0034, + "visualStartMs": 20.8326 + }, + { + "durationMs": 0.0036, + "name": "L66", + "startMs": 20.8367, + "visualDurationMs": 0.0036, + "visualStartMs": 20.8367 + }, + { + "durationMs": 0.0033, + "name": "L67", + "startMs": 20.8412, + "visualDurationMs": 0.0033, + "visualStartMs": 20.8412 + }, + { + "durationMs": 0.0288, + "name": "L68", + "startMs": 20.8453, + "visualDurationMs": 0.0288, + "visualStartMs": 20.8453 + }, + { + "durationMs": 0.0033, + "name": "L69", + "startMs": 20.8752, + "visualDurationMs": 0.0033, + "visualStartMs": 20.8752 + }, + { + "durationMs": 0.0014, + "name": "L70", + "startMs": 20.8789, + "visualDurationMs": 0.0014, + "visualStartMs": 20.8789 + }, + { + "durationMs": 0.0015, + "name": "L71", + "startMs": 20.8807, + "visualDurationMs": 0.0015, + "visualStartMs": 20.8807 + }, + { + "durationMs": 0.0014, + "name": "L72", + "startMs": 20.8826, + "visualDurationMs": 0.0014, + "visualStartMs": 20.8826 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 20.8843, + "visualDurationMs": 0.0013, + "visualStartMs": 20.8843 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 20.886, + "visualDurationMs": 0.0013, + "visualStartMs": 20.886 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 20.8877, + "visualDurationMs": 0.0013, + "visualStartMs": 20.8877 + }, + { + "durationMs": 0.0016, + "name": "L76", + "startMs": 20.8894, + "visualDurationMs": 0.0016, + "visualStartMs": 20.8894 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 20.8914, + "visualDurationMs": 0.0013, + "visualStartMs": 20.8914 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 20.893, + "visualDurationMs": 0.0013, + "visualStartMs": 20.893 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 20.8946, + "visualDurationMs": 0.0013, + "visualStartMs": 20.8946 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 20.8963, + "visualDurationMs": 0.0013, + "visualStartMs": 20.8963 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 20.8979, + "visualDurationMs": 0.0014, + "visualStartMs": 20.8979 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 20.8996, + "visualDurationMs": 0.0014, + "visualStartMs": 20.8996 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 20.9014, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9014 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 20.903, + "visualDurationMs": 0.0013, + "visualStartMs": 20.903 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 20.9047, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9047 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 20.9063, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9063 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 20.9079, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9079 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 20.9095, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9095 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 20.9111, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9111 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 20.9129, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9129 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 20.9144, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9144 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 20.916, + "visualDurationMs": 0.0013, + "visualStartMs": 20.916 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 20.9176, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9176 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 20.9192, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9192 + }, + { + "durationMs": 0.0014, + "name": "L95", + "startMs": 20.9209, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9209 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 20.9226, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9226 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 20.9242, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9242 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 20.9258, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9258 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 20.9275, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9275 + }, + { + "durationMs": 0.0014, + "name": "BindNorm", + "startMs": 20.9289, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9289 + } + ], + "durationMs": 0.3596, + "name": "Lighting", + "startMs": 20.5716, + "visualDurationMs": 0.3596, + "visualStartMs": 20.5716 + }, + { + "children": [ + { + "durationMs": 0.0006, + "name": "VAO Bind", + "startMs": 20.9317, + "visualDurationMs": 0.0006, + "visualStartMs": 20.9317 + }, + { + "durationMs": 0.0006, + "name": "GL Draw", + "startMs": 20.9325, + "visualDurationMs": 0.0006, + "visualStartMs": 20.9325 + } + ], + "durationMs": 0.0019, + "name": "Draw", + "startMs": 20.9314, + "visualDurationMs": 0.0019, + "visualStartMs": 20.9314 + } + ], + "durationMs": 0.3665, + "name": "DrawSprite", + "startMs": 20.567, + "visualDurationMs": 0.3665, + "visualStartMs": 20.567 + } + ], + "durationMs": 0.3672, + "name": "Draw Sprite: Pebble_98", + "startMs": 20.5666, + "visualDurationMs": 0.3672, + "visualStartMs": 20.5666 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 20.9364, + "visualDurationMs": 0.0004, + "visualStartMs": 20.9364 + }, + { + "durationMs": 0.0008, + "name": "ShaderUse", + "startMs": 20.9369, + "visualDurationMs": 0.0008, + "visualStartMs": 20.9369 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 20.9383, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9383 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 20.9397, + "visualDurationMs": 0.0006, + "visualStartMs": 20.9397 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 20.9379, + "visualDurationMs": 0.0025, + "visualStartMs": 20.9379 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 20.9406, + "visualDurationMs": 0.0004, + "visualStartMs": 20.9406 + }, + { + "children": [ + { + "durationMs": 0.0011, + "name": "ColorCorrection", + "startMs": 20.9415, + "visualDurationMs": 0.0011, + "visualStartMs": 20.9415 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 20.9427, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9427 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 20.9445, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9445 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 20.9462, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9462 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 20.9477, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9477 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 20.9494, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9494 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 20.9511, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9511 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 20.9526, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9526 + }, + { + "durationMs": 0.003, + "name": "L6", + "startMs": 20.9542, + "visualDurationMs": 0.003, + "visualStartMs": 20.9542 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 20.9576, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9576 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 20.9592, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9592 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 20.9608, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9608 + }, + { + "durationMs": 0.0012, + "name": "L10", + "startMs": 20.9625, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9625 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 20.964, + "visualDurationMs": 0.0015, + "visualStartMs": 20.964 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 20.9658, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9658 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 20.9675, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9675 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 20.9693, + "visualDurationMs": 0.0034, + "visualStartMs": 20.9693 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 20.973, + "visualDurationMs": 0.0015, + "visualStartMs": 20.973 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 20.9748, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9748 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 20.9765, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9765 + }, + { + "durationMs": 0.0015, + "name": "L18", + "startMs": 20.9782, + "visualDurationMs": 0.0015, + "visualStartMs": 20.9782 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 20.98, + "visualDurationMs": 0.0013, + "visualStartMs": 20.98 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 20.9817, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9817 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 20.9833, + "visualDurationMs": 0.0014, + "visualStartMs": 20.9833 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 20.985, + "visualDurationMs": 0.0014, + "visualStartMs": 20.985 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 20.9868, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9868 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 20.9884, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9884 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 20.9901, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9901 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 20.9918, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9918 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 20.9933, + "visualDurationMs": 0.0012, + "visualStartMs": 20.9933 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 20.9949, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9949 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 20.9965, + "visualDurationMs": 0.0013, + "visualStartMs": 20.9965 + }, + { + "durationMs": 0.0054, + "name": "L30", + "startMs": 20.9982, + "visualDurationMs": 0.0054, + "visualStartMs": 20.9982 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 21.0041, + "visualDurationMs": 0.0015, + "visualStartMs": 21.0041 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 21.0059, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0059 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 21.0075, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0075 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 21.0093, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0093 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 21.011, + "visualDurationMs": 0.0013, + "visualStartMs": 21.011 + }, + { + "durationMs": 0.0056, + "name": "L36", + "startMs": 21.0126, + "visualDurationMs": 0.0056, + "visualStartMs": 21.0126 + }, + { + "durationMs": 0.0017, + "name": "L37", + "startMs": 21.0187, + "visualDurationMs": 0.0017, + "visualStartMs": 21.0187 + }, + { + "durationMs": 0.0014, + "name": "L38", + "startMs": 21.0208, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0208 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 21.0226, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0226 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 21.0243, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0243 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 21.0261, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0261 + }, + { + "durationMs": 0.0014, + "name": "L42", + "startMs": 21.0277, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0277 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 21.0294, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0294 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 21.0312, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0312 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 21.033, + "visualDurationMs": 0.0013, + "visualStartMs": 21.033 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 21.0347, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0347 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 21.0365, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0365 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 21.0382, + "visualDurationMs": 0.0016, + "visualStartMs": 21.0382 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 21.0402, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0402 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 21.042, + "visualDurationMs": 0.0015, + "visualStartMs": 21.042 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 21.0438, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0438 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 21.0456, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0456 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 21.0472, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0472 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 21.0489, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0489 + }, + { + "durationMs": 0.0014, + "name": "L55", + "startMs": 21.0506, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0506 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 21.0523, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0523 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 21.054, + "visualDurationMs": 0.0013, + "visualStartMs": 21.054 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 21.0556, + "visualDurationMs": 0.0015, + "visualStartMs": 21.0556 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 21.0575, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0575 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 21.0592, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0592 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 21.061, + "visualDurationMs": 0.0015, + "visualStartMs": 21.061 + }, + { + "durationMs": 0.0093, + "name": "L62", + "startMs": 21.0629, + "visualDurationMs": 0.0093, + "visualStartMs": 21.0629 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 21.0726, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0726 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 21.0744, + "visualDurationMs": 0.0015, + "visualStartMs": 21.0744 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 21.0763, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0763 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 21.0781, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0781 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 21.0799, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0799 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 21.0816, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0816 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 21.0832, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0832 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 21.0849, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0849 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 21.0865, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0865 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 21.0882, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0882 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 21.0898, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0898 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 21.0914, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0914 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 21.0929, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0929 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 21.0945, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0945 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 21.0961, + "visualDurationMs": 0.0012, + "visualStartMs": 21.0961 + }, + { + "durationMs": 0.0014, + "name": "L78", + "startMs": 21.0976, + "visualDurationMs": 0.0014, + "visualStartMs": 21.0976 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 21.0994, + "visualDurationMs": 0.0013, + "visualStartMs": 21.0994 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 21.101, + "visualDurationMs": 0.0013, + "visualStartMs": 21.101 + }, + { + "durationMs": 0.0015, + "name": "L81", + "startMs": 21.1026, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1026 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 21.1045, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1045 + }, + { + "durationMs": 0.0015, + "name": "L83", + "startMs": 21.1061, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1061 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 21.108, + "visualDurationMs": 0.0013, + "visualStartMs": 21.108 + }, + { + "durationMs": 0.0016, + "name": "L85", + "startMs": 21.1096, + "visualDurationMs": 0.0016, + "visualStartMs": 21.1096 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 21.1115, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1115 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 21.1132, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1132 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 21.1148, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1148 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 21.1164, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1164 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 21.1182, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1182 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 21.1198, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1198 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 21.1215, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1215 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 21.1231, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1231 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 21.1247, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1247 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 21.1263, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1263 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 21.1279, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1279 + }, + { + "durationMs": 0.0016, + "name": "L97", + "startMs": 21.1296, + "visualDurationMs": 0.0016, + "visualStartMs": 21.1296 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 21.1316, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1316 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 21.1334, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1334 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 21.1348, + "visualDurationMs": 0.0007, + "visualStartMs": 21.1348 + } + ], + "durationMs": 0.1947, + "name": "Lighting", + "startMs": 20.9412, + "visualDurationMs": 0.1947, + "visualStartMs": 20.9412 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 21.1365, + "visualDurationMs": 0.0005, + "visualStartMs": 21.1365 + }, + { + "durationMs": 0.0003, + "name": "GL Draw", + "startMs": 21.1372, + "visualDurationMs": 0.0003, + "visualStartMs": 21.1372 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 21.1361, + "visualDurationMs": 0.0016, + "visualStartMs": 21.1361 + } + ], + "durationMs": 0.2017, + "name": "DrawSprite", + "startMs": 20.9361, + "visualDurationMs": 0.2017, + "visualStartMs": 20.9361 + } + ], + "durationMs": 0.2024, + "name": "Draw Sprite: Pebble_90", + "startMs": 20.9355, + "visualDurationMs": 0.2024, + "visualStartMs": 20.9355 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 21.1401, + "visualDurationMs": 0.0003, + "visualStartMs": 21.1401 + }, + { + "durationMs": 0.0005, + "name": "ShaderUse", + "startMs": 21.1405, + "visualDurationMs": 0.0005, + "visualStartMs": 21.1405 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 21.1416, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1416 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 21.143, + "visualDurationMs": 0.0006, + "visualStartMs": 21.143 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 21.1412, + "visualDurationMs": 0.0025, + "visualStartMs": 21.1412 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 21.1438, + "visualDurationMs": 0.0004, + "visualStartMs": 21.1438 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 21.1447, + "visualDurationMs": 0.0009, + "visualStartMs": 21.1447 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 21.1458, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1458 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 21.1476, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1476 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 21.1493, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1493 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 21.1511, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1511 + }, + { + "durationMs": 0.0015, + "name": "L3", + "startMs": 21.1527, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1527 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 21.1546, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1546 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 21.1562, + "visualDurationMs": 0.0012, + "visualStartMs": 21.1562 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 21.1577, + "visualDurationMs": 0.0025, + "visualStartMs": 21.1577 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 21.1606, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1606 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 21.1622, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1622 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 21.1638, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1638 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 21.1655, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1655 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 21.1671, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1671 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 21.1689, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1689 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 21.1707, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1707 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 21.1725, + "visualDurationMs": 0.0034, + "visualStartMs": 21.1725 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 21.1763, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1763 + }, + { + "durationMs": 0.0017, + "name": "L16", + "startMs": 21.1781, + "visualDurationMs": 0.0017, + "visualStartMs": 21.1781 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 21.1801, + "visualDurationMs": 0.0016, + "visualStartMs": 21.1801 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 21.182, + "visualDurationMs": 0.0014, + "visualStartMs": 21.182 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 21.1838, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1838 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 21.1855, + "visualDurationMs": 0.0014, + "visualStartMs": 21.1855 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 21.1872, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1872 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 21.1891, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1891 + }, + { + "durationMs": 0.0014, + "name": "L23", + "startMs": 21.191, + "visualDurationMs": 0.0014, + "visualStartMs": 21.191 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 21.1927, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1927 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 21.1944, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1944 + }, + { + "durationMs": 0.0015, + "name": "L26", + "startMs": 21.1961, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1961 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 21.1979, + "visualDurationMs": 0.0013, + "visualStartMs": 21.1979 + }, + { + "durationMs": 0.0015, + "name": "L28", + "startMs": 21.1995, + "visualDurationMs": 0.0015, + "visualStartMs": 21.1995 + }, + { + "durationMs": 0.0015, + "name": "L29", + "startMs": 21.2013, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2013 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 21.2031, + "visualDurationMs": 0.0051, + "visualStartMs": 21.2031 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 21.2087, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2087 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 21.2106, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2106 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 21.2122, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2122 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 21.2141, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2141 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 21.2158, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2158 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 21.2175, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2175 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 21.2192, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2192 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 21.2208, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2208 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 21.2224, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2224 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 21.2241, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2241 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 21.2257, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2257 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 21.2275, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2275 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 21.2292, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2292 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 21.231, + "visualDurationMs": 0.0016, + "visualStartMs": 21.231 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 21.2329, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2329 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 21.2347, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2347 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 21.2365, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2365 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 21.2382, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2382 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 21.24, + "visualDurationMs": 0.0014, + "visualStartMs": 21.24 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 21.2417, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2417 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 21.2434, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2434 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 21.2451, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2451 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 21.2468, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2468 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 21.2485, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2485 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 21.2503, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2503 + }, + { + "durationMs": 0.0057, + "name": "L56", + "startMs": 21.2519, + "visualDurationMs": 0.0057, + "visualStartMs": 21.2519 + }, + { + "durationMs": 0.0015, + "name": "L57", + "startMs": 21.258, + "visualDurationMs": 0.0015, + "visualStartMs": 21.258 + }, + { + "durationMs": 0.0017, + "name": "L58", + "startMs": 21.2598, + "visualDurationMs": 0.0017, + "visualStartMs": 21.2598 + }, + { + "durationMs": 0.0013, + "name": "L59", + "startMs": 21.2618, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2618 + }, + { + "durationMs": 0.0015, + "name": "L60", + "startMs": 21.2634, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2634 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 21.2653, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2653 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 21.267, + "visualDurationMs": 0.009, + "visualStartMs": 21.267 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 21.2764, + "visualDurationMs": 0.0014, + "visualStartMs": 21.2764 + }, + { + "durationMs": 0.0015, + "name": "L64", + "startMs": 21.2782, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2782 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 21.28, + "visualDurationMs": 0.0014, + "visualStartMs": 21.28 + }, + { + "durationMs": 0.0016, + "name": "L66", + "startMs": 21.2817, + "visualDurationMs": 0.0016, + "visualStartMs": 21.2817 + }, + { + "durationMs": 0.0015, + "name": "L67", + "startMs": 21.2837, + "visualDurationMs": 0.0015, + "visualStartMs": 21.2837 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 21.2855, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2855 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 21.2871, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2871 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 21.2888, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2888 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 21.2904, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2904 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 21.292, + "visualDurationMs": 0.0013, + "visualStartMs": 21.292 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 21.2936, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2936 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 21.2952, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2952 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 21.2967, + "visualDurationMs": 0.0013, + "visualStartMs": 21.2967 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 21.2983, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2983 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 21.2999, + "visualDurationMs": 0.0012, + "visualStartMs": 21.2999 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 21.3014, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3014 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 21.303, + "visualDurationMs": 0.0013, + "visualStartMs": 21.303 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 21.3047, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3047 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 21.3064, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3064 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 21.3081, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3081 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 21.3096, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3096 + }, + { + "durationMs": 0.0012, + "name": "L84", + "startMs": 21.3113, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3113 + }, + { + "durationMs": 0.0012, + "name": "L85", + "startMs": 21.3129, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3129 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 21.3144, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3144 + }, + { + "durationMs": 0.0012, + "name": "L87", + "startMs": 21.3161, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3161 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 21.3177, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3177 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 21.3192, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3192 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 21.3209, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3209 + }, + { + "durationMs": 0.0012, + "name": "L91", + "startMs": 21.3225, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3225 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 21.3241, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3241 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 21.3256, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3256 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 21.3272, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3272 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 21.3288, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3288 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 21.3304, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3304 + }, + { + "durationMs": 0.0012, + "name": "L97", + "startMs": 21.332, + "visualDurationMs": 0.0012, + "visualStartMs": 21.332 + }, + { + "durationMs": 0.0014, + "name": "L98", + "startMs": 21.3336, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3336 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 21.3353, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3353 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 21.3367, + "visualDurationMs": 0.0008, + "visualStartMs": 21.3367 + } + ], + "durationMs": 0.1934, + "name": "Lighting", + "startMs": 21.1444, + "visualDurationMs": 0.1934, + "visualStartMs": 21.1444 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 21.3383, + "visualDurationMs": 0.0005, + "visualStartMs": 21.3383 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 21.3389, + "visualDurationMs": 0.0004, + "visualStartMs": 21.3389 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 21.3379, + "visualDurationMs": 0.0016, + "visualStartMs": 21.3379 + } + ], + "durationMs": 0.1998, + "name": "DrawSprite", + "startMs": 21.1398, + "visualDurationMs": 0.1998, + "visualStartMs": 21.1398 + } + ], + "durationMs": 0.2004, + "name": "Draw Sprite: Pebble_97", + "startMs": 21.1393, + "visualDurationMs": 0.2004, + "visualStartMs": 21.1393 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 21.3417, + "visualDurationMs": 0.0003, + "visualStartMs": 21.3417 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 21.3422, + "visualDurationMs": 0.0004, + "visualStartMs": 21.3422 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 21.3432, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3432 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 21.3446, + "visualDurationMs": 0.0005, + "visualStartMs": 21.3446 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 21.3428, + "visualDurationMs": 0.0024, + "visualStartMs": 21.3428 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 21.3453, + "visualDurationMs": 0.0004, + "visualStartMs": 21.3453 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 21.3462, + "visualDurationMs": 0.0009, + "visualStartMs": 21.3462 + }, + { + "durationMs": 0.0015, + "name": "SetLightParams", + "startMs": 21.3472, + "visualDurationMs": 0.0015, + "visualStartMs": 21.3472 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 21.3491, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3491 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 21.3507, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3507 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 21.3523, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3523 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 21.3539, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3539 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 21.3556, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3556 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 21.3571, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3571 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 21.3586, + "visualDurationMs": 0.0026, + "visualStartMs": 21.3586 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 21.3616, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3616 + }, + { + "durationMs": 0.0012, + "name": "L8", + "startMs": 21.3631, + "visualDurationMs": 0.0012, + "visualStartMs": 21.3631 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 21.3647, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3647 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 21.3664, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3664 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 21.368, + "visualDurationMs": 0.0015, + "visualStartMs": 21.368 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 21.3699, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3699 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 21.3717, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3717 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 21.3733, + "visualDurationMs": 0.0035, + "visualStartMs": 21.3733 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 21.3772, + "visualDurationMs": 0.0016, + "visualStartMs": 21.3772 + }, + { + "durationMs": 0.0015, + "name": "L16", + "startMs": 21.3791, + "visualDurationMs": 0.0015, + "visualStartMs": 21.3791 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 21.381, + "visualDurationMs": 0.0015, + "visualStartMs": 21.381 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 21.3828, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3828 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 21.3845, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3845 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 21.3863, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3863 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 21.3879, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3879 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 21.3897, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3897 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 21.3914, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3914 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 21.393, + "visualDurationMs": 0.0013, + "visualStartMs": 21.393 + }, + { + "durationMs": 0.0014, + "name": "L25", + "startMs": 21.3947, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3947 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 21.3965, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3965 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 21.3982, + "visualDurationMs": 0.0013, + "visualStartMs": 21.3982 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 21.3998, + "visualDurationMs": 0.0014, + "visualStartMs": 21.3998 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 21.4016, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4016 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 21.4032, + "visualDurationMs": 0.005, + "visualStartMs": 21.4032 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 21.4086, + "visualDurationMs": 0.0015, + "visualStartMs": 21.4086 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 21.4104, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4104 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 21.412, + "visualDurationMs": 0.0015, + "visualStartMs": 21.412 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 21.4138, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4138 + }, + { + "durationMs": 0.0016, + "name": "L35", + "startMs": 21.4155, + "visualDurationMs": 0.0016, + "visualStartMs": 21.4155 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 21.4174, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4174 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 21.4191, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4191 + }, + { + "durationMs": 0.0081, + "name": "L38", + "startMs": 21.4207, + "visualDurationMs": 0.0081, + "visualStartMs": 21.4207 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 21.4292, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4292 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 21.4308, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4308 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 21.4325, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4325 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 21.4342, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4342 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 21.4358, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4358 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 21.4375, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4375 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 21.4393, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4393 + }, + { + "durationMs": 0.0013, + "name": "L46", + "startMs": 21.441, + "visualDurationMs": 0.0013, + "visualStartMs": 21.441 + }, + { + "durationMs": 0.0013, + "name": "L47", + "startMs": 21.4427, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4427 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 21.4444, + "visualDurationMs": 0.0015, + "visualStartMs": 21.4444 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 21.4462, + "visualDurationMs": 0.0015, + "visualStartMs": 21.4462 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 21.4481, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4481 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 21.4498, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4498 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 21.4516, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4516 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 21.4531, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4531 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 21.4548, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4548 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 21.4564, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4564 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 21.458, + "visualDurationMs": 0.0015, + "visualStartMs": 21.458 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 21.4598, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4598 + }, + { + "durationMs": 0.0013, + "name": "L58", + "startMs": 21.4614, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4614 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 21.4631, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4631 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 21.4646, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4646 + }, + { + "durationMs": 0.0016, + "name": "L61", + "startMs": 21.4663, + "visualDurationMs": 0.0016, + "visualStartMs": 21.4663 + }, + { + "durationMs": 0.0089, + "name": "L62", + "startMs": 21.4682, + "visualDurationMs": 0.0089, + "visualStartMs": 21.4682 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 21.4774, + "visualDurationMs": 0.0015, + "visualStartMs": 21.4774 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 21.4793, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4793 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 21.4811, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4811 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 21.4827, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4827 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 21.4845, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4845 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 21.4861, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4861 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 21.4877, + "visualDurationMs": 0.0014, + "visualStartMs": 21.4877 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 21.4895, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4895 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 21.491, + "visualDurationMs": 0.0012, + "visualStartMs": 21.491 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 21.4926, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4926 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 21.4941, + "visualDurationMs": 0.0012, + "visualStartMs": 21.4941 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 21.4957, + "visualDurationMs": 0.0013, + "visualStartMs": 21.4957 + }, + { + "durationMs": 0.0047, + "name": "L75", + "startMs": 21.4973, + "visualDurationMs": 0.0047, + "visualStartMs": 21.4973 + }, + { + "durationMs": 0.0016, + "name": "L76", + "startMs": 21.5025, + "visualDurationMs": 0.0016, + "visualStartMs": 21.5025 + }, + { + "durationMs": 0.0014, + "name": "L77", + "startMs": 21.5044, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5044 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 21.5061, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5061 + }, + { + "durationMs": 0.0016, + "name": "L79", + "startMs": 21.5077, + "visualDurationMs": 0.0016, + "visualStartMs": 21.5077 + }, + { + "durationMs": 0.0015, + "name": "L80", + "startMs": 21.5096, + "visualDurationMs": 0.0015, + "visualStartMs": 21.5096 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 21.5114, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5114 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 21.513, + "visualDurationMs": 0.0012, + "visualStartMs": 21.513 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 21.5146, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5146 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 21.5163, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5163 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 21.518, + "visualDurationMs": 0.0013, + "visualStartMs": 21.518 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 21.5197, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5197 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 21.5214, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5214 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 21.5231, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5231 + }, + { + "durationMs": 0.0015, + "name": "L89", + "startMs": 21.5246, + "visualDurationMs": 0.0015, + "visualStartMs": 21.5246 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 21.5264, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5264 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 21.5281, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5281 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 21.5298, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5298 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 21.5314, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5314 + }, + { + "durationMs": 0.0013, + "name": "L94", + "startMs": 21.533, + "visualDurationMs": 0.0013, + "visualStartMs": 21.533 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 21.5346, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5346 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 21.5362, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5362 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 21.5377, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5377 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 21.5394, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5394 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 21.5409, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5409 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 21.5423, + "visualDurationMs": 0.0006, + "visualStartMs": 21.5423 + } + ], + "durationMs": 0.1975, + "name": "Lighting", + "startMs": 21.3458, + "visualDurationMs": 0.1975, + "visualStartMs": 21.3458 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 21.5438, + "visualDurationMs": 0.0004, + "visualStartMs": 21.5438 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 21.5443, + "visualDurationMs": 0.0005, + "visualStartMs": 21.5443 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 21.5434, + "visualDurationMs": 0.0015, + "visualStartMs": 21.5434 + } + ], + "durationMs": 0.2037, + "name": "DrawSprite", + "startMs": 21.3413, + "visualDurationMs": 0.2037, + "visualStartMs": 21.3413 + } + ], + "durationMs": 0.2044, + "name": "Draw Sprite: Pebble_91", + "startMs": 21.3407, + "visualDurationMs": 0.2044, + "visualStartMs": 21.3407 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 21.547, + "visualDurationMs": 0.0004, + "visualStartMs": 21.547 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 21.5476, + "visualDurationMs": 0.0004, + "visualStartMs": 21.5476 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 21.5486, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5486 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 21.5499, + "visualDurationMs": 0.0005, + "visualStartMs": 21.5499 + } + ], + "durationMs": 0.0022, + "name": "SetUniforms", + "startMs": 21.5483, + "visualDurationMs": 0.0022, + "visualStartMs": 21.5483 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 21.5507, + "visualDurationMs": 0.0003, + "visualStartMs": 21.5507 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 21.5515, + "visualDurationMs": 0.0009, + "visualStartMs": 21.5515 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 21.5525, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5525 + }, + { + "durationMs": 0.0013, + "name": "L0", + "startMs": 21.5542, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5542 + }, + { + "durationMs": 0.0012, + "name": "L1", + "startMs": 21.5558, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5558 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 21.5574, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5574 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 21.559, + "visualDurationMs": 0.0014, + "visualStartMs": 21.559 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 21.5607, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5607 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 21.5622, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5622 + }, + { + "durationMs": 0.0025, + "name": "L6", + "startMs": 21.5637, + "visualDurationMs": 0.0025, + "visualStartMs": 21.5637 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 21.5665, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5665 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 21.5681, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5681 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 21.5697, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5697 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 21.5713, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5713 + }, + { + "durationMs": 0.0013, + "name": "L11", + "startMs": 21.5729, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5729 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 21.5746, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5746 + }, + { + "durationMs": 0.0014, + "name": "L13", + "startMs": 21.5763, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5763 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 21.578, + "visualDurationMs": 0.0034, + "visualStartMs": 21.578 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 21.5817, + "visualDurationMs": 0.0015, + "visualStartMs": 21.5817 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 21.5835, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5835 + }, + { + "durationMs": 0.0016, + "name": "L17", + "startMs": 21.5852, + "visualDurationMs": 0.0016, + "visualStartMs": 21.5852 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 21.5871, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5871 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 21.5888, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5888 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 21.5906, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5906 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 21.5923, + "visualDurationMs": 0.0014, + "visualStartMs": 21.5923 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 21.594, + "visualDurationMs": 0.0014, + "visualStartMs": 21.594 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 21.5958, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5958 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 21.5974, + "visualDurationMs": 0.0013, + "visualStartMs": 21.5974 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 21.5991, + "visualDurationMs": 0.0012, + "visualStartMs": 21.5991 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 21.6007, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6007 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 21.6022, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6022 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 21.6038, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6038 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 21.6054, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6054 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 21.6071, + "visualDurationMs": 0.005, + "visualStartMs": 21.6071 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 21.6125, + "visualDurationMs": 0.0016, + "visualStartMs": 21.6125 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 21.6145, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6145 + }, + { + "durationMs": 0.0013, + "name": "L33", + "startMs": 21.6162, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6162 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 21.6178, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6178 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 21.6196, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6196 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 21.6213, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6213 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 21.6229, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6229 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 21.6245, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6245 + }, + { + "durationMs": 0.0015, + "name": "L39", + "startMs": 21.6261, + "visualDurationMs": 0.0015, + "visualStartMs": 21.6261 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 21.628, + "visualDurationMs": 0.0013, + "visualStartMs": 21.628 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 21.6297, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6297 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 21.6315, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6315 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 21.6332, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6332 + }, + { + "durationMs": 0.0016, + "name": "L44", + "startMs": 21.6349, + "visualDurationMs": 0.0016, + "visualStartMs": 21.6349 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 21.6369, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6369 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 21.6386, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6386 + }, + { + "durationMs": 0.0015, + "name": "L47", + "startMs": 21.6404, + "visualDurationMs": 0.0015, + "visualStartMs": 21.6404 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 21.6422, + "visualDurationMs": 0.0015, + "visualStartMs": 21.6422 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 21.644, + "visualDurationMs": 0.0016, + "visualStartMs": 21.644 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 21.6459, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6459 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 21.6476, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6476 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 21.6494, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6494 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 21.6511, + "visualDurationMs": 0.0015, + "visualStartMs": 21.6511 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 21.653, + "visualDurationMs": 0.0013, + "visualStartMs": 21.653 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 21.6547, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6547 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 21.6564, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6564 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 21.6581, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6581 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 21.6598, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6598 + }, + { + "durationMs": 0.0015, + "name": "L59", + "startMs": 21.6615, + "visualDurationMs": 0.0015, + "visualStartMs": 21.6615 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 21.6633, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6633 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 21.665, + "visualDurationMs": 0.0014, + "visualStartMs": 21.665 + }, + { + "durationMs": 0.0085, + "name": "L62", + "startMs": 21.6667, + "visualDurationMs": 0.0085, + "visualStartMs": 21.6667 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 21.6755, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6755 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 21.6772, + "visualDurationMs": 0.0014, + "visualStartMs": 21.6772 + }, + { + "durationMs": 0.0014, + "name": "L65", + "startMs": 21.679, + "visualDurationMs": 0.0014, + "visualStartMs": 21.679 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 21.6808, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6808 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 21.6824, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6824 + }, + { + "durationMs": 0.0012, + "name": "L68", + "startMs": 21.6841, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6841 + }, + { + "durationMs": 0.0012, + "name": "L69", + "startMs": 21.6857, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6857 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 21.6873, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6873 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 21.6889, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6889 + }, + { + "durationMs": 0.0013, + "name": "L72", + "startMs": 21.6904, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6904 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 21.692, + "visualDurationMs": 0.0012, + "visualStartMs": 21.692 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 21.6935, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6935 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 21.6951, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6951 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 21.6967, + "visualDurationMs": 0.0013, + "visualStartMs": 21.6967 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 21.6984, + "visualDurationMs": 0.0012, + "visualStartMs": 21.6984 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 21.7, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 21.7015, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7015 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 21.7031, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7031 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 21.7048, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7048 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 21.7064, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7064 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 21.708, + "visualDurationMs": 0.0012, + "visualStartMs": 21.708 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 21.7095, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7095 + }, + { + "durationMs": 0.0014, + "name": "L85", + "startMs": 21.7112, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7112 + }, + { + "durationMs": 0.0012, + "name": "L86", + "startMs": 21.7129, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7129 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 21.7145, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7145 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 21.7161, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7161 + }, + { + "durationMs": 0.0013, + "name": "L89", + "startMs": 21.7177, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7177 + }, + { + "durationMs": 0.0013, + "name": "L90", + "startMs": 21.7193, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7193 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 21.7209, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7209 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 21.7225, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7225 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 21.7241, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7241 + }, + { + "durationMs": 0.0047, + "name": "L94", + "startMs": 21.7257, + "visualDurationMs": 0.0047, + "visualStartMs": 21.7257 + }, + { + "durationMs": 0.0015, + "name": "L95", + "startMs": 21.7309, + "visualDurationMs": 0.0015, + "visualStartMs": 21.7309 + }, + { + "durationMs": 0.0014, + "name": "L96", + "startMs": 21.7328, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7328 + }, + { + "durationMs": 0.0014, + "name": "L97", + "startMs": 21.7345, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7345 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 21.7362, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7362 + }, + { + "durationMs": 0.0014, + "name": "L99", + "startMs": 21.7378, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7378 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 21.7393, + "visualDurationMs": 0.0008, + "visualStartMs": 21.7393 + } + ], + "durationMs": 0.1893, + "name": "Lighting", + "startMs": 21.5511, + "visualDurationMs": 0.1893, + "visualStartMs": 21.5511 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 21.7411, + "visualDurationMs": 0.0005, + "visualStartMs": 21.7411 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 21.7417, + "visualDurationMs": 0.0005, + "visualStartMs": 21.7417 + } + ], + "durationMs": 0.0017, + "name": "Draw", + "startMs": 21.7406, + "visualDurationMs": 0.0017, + "visualStartMs": 21.7406 + } + ], + "durationMs": 0.1958, + "name": "DrawSprite", + "startMs": 21.5466, + "visualDurationMs": 0.1958, + "visualStartMs": 21.5466 + } + ], + "durationMs": 0.1964, + "name": "Draw Sprite: Pebble_96", + "startMs": 21.5462, + "visualDurationMs": 0.1964, + "visualStartMs": 21.5462 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 21.7439, + "visualDurationMs": 0.0003, + "visualStartMs": 21.7439 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 21.7444, + "visualDurationMs": 0.0004, + "visualStartMs": 21.7444 + }, + { + "children": [ + { + "durationMs": 0.0012, + "name": "Transform", + "startMs": 21.7454, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7454 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 21.7468, + "visualDurationMs": 0.0005, + "visualStartMs": 21.7468 + } + ], + "durationMs": 0.0023, + "name": "SetUniforms", + "startMs": 21.7451, + "visualDurationMs": 0.0023, + "visualStartMs": 21.7451 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 21.7475, + "visualDurationMs": 0.0004, + "visualStartMs": 21.7475 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 21.7483, + "visualDurationMs": 0.0009, + "visualStartMs": 21.7483 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 21.7494, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7494 + }, + { + "durationMs": 0.0015, + "name": "L0", + "startMs": 21.7511, + "visualDurationMs": 0.0015, + "visualStartMs": 21.7511 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 21.7529, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7529 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 21.7545, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7545 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 21.7561, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7561 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 21.7578, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7578 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 21.7593, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7593 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 21.7609, + "visualDurationMs": 0.0026, + "visualStartMs": 21.7609 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 21.7639, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7639 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 21.7654, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7654 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 21.7671, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7671 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 21.7686, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7686 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 21.7703, + "visualDurationMs": 0.0015, + "visualStartMs": 21.7703 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 21.7721, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7721 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 21.7739, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7739 + }, + { + "durationMs": 0.0034, + "name": "L14", + "startMs": 21.7756, + "visualDurationMs": 0.0034, + "visualStartMs": 21.7756 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 21.7794, + "visualDurationMs": 0.0015, + "visualStartMs": 21.7794 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 21.7812, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7812 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 21.783, + "visualDurationMs": 0.0014, + "visualStartMs": 21.783 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 21.7848, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7848 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 21.7865, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7865 + }, + { + "durationMs": 0.0012, + "name": "L20", + "startMs": 21.7882, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7882 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 21.7898, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7898 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 21.7915, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7915 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 21.7932, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7932 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 21.7948, + "visualDurationMs": 0.0014, + "visualStartMs": 21.7948 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 21.7966, + "visualDurationMs": 0.0013, + "visualStartMs": 21.7966 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 21.7983, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7983 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 21.7998, + "visualDurationMs": 0.0012, + "visualStartMs": 21.7998 + }, + { + "durationMs": 0.0013, + "name": "L28", + "startMs": 21.8014, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8014 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 21.8031, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8031 + }, + { + "durationMs": 0.005, + "name": "L30", + "startMs": 21.8047, + "visualDurationMs": 0.005, + "visualStartMs": 21.8047 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 21.8101, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8101 + }, + { + "durationMs": 0.0013, + "name": "L32", + "startMs": 21.8118, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8118 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 21.8134, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8134 + }, + { + "durationMs": 0.0015, + "name": "L34", + "startMs": 21.8152, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8152 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 21.817, + "visualDurationMs": 0.0014, + "visualStartMs": 21.817 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 21.8188, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8188 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 21.8204, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8204 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 21.8221, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8221 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 21.8237, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8237 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 21.8253, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8253 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 21.8271, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8271 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 21.8288, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8288 + }, + { + "durationMs": 0.0015, + "name": "L43", + "startMs": 21.8304, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8304 + }, + { + "durationMs": 0.0014, + "name": "L44", + "startMs": 21.8323, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8323 + }, + { + "durationMs": 0.0014, + "name": "L45", + "startMs": 21.834, + "visualDurationMs": 0.0014, + "visualStartMs": 21.834 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 21.8358, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8358 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 21.8375, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8375 + }, + { + "durationMs": 0.0019, + "name": "L48", + "startMs": 21.8392, + "visualDurationMs": 0.0019, + "visualStartMs": 21.8392 + }, + { + "durationMs": 0.0016, + "name": "L49", + "startMs": 21.8415, + "visualDurationMs": 0.0016, + "visualStartMs": 21.8415 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 21.8435, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8435 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 21.8454, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8454 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 21.8472, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8472 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 21.8488, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8488 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 21.8505, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8505 + }, + { + "durationMs": 0.0015, + "name": "L55", + "startMs": 21.8522, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8522 + }, + { + "durationMs": 0.0015, + "name": "L56", + "startMs": 21.854, + "visualDurationMs": 0.0015, + "visualStartMs": 21.854 + }, + { + "durationMs": 0.0012, + "name": "L57", + "startMs": 21.8558, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8558 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 21.8574, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8574 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 21.8592, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8592 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 21.8607, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8607 + }, + { + "durationMs": 0.0014, + "name": "L61", + "startMs": 21.8625, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8625 + }, + { + "durationMs": 0.0086, + "name": "L62", + "startMs": 21.8642, + "visualDurationMs": 0.0086, + "visualStartMs": 21.8642 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 21.8732, + "visualDurationMs": 0.0015, + "visualStartMs": 21.8732 + }, + { + "durationMs": 0.0016, + "name": "L64", + "startMs": 21.8751, + "visualDurationMs": 0.0016, + "visualStartMs": 21.8751 + }, + { + "durationMs": 0.0016, + "name": "L65", + "startMs": 21.877, + "visualDurationMs": 0.0016, + "visualStartMs": 21.877 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 21.879, + "visualDurationMs": 0.0013, + "visualStartMs": 21.879 + }, + { + "durationMs": 0.0014, + "name": "L67", + "startMs": 21.8807, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8807 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 21.8824, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8824 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 21.8841, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8841 + }, + { + "durationMs": 0.0012, + "name": "L70", + "startMs": 21.8858, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8858 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 21.8873, + "visualDurationMs": 0.0014, + "visualStartMs": 21.8873 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 21.889, + "visualDurationMs": 0.0012, + "visualStartMs": 21.889 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 21.8906, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8906 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 21.8922, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8922 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 21.894, + "visualDurationMs": 0.0013, + "visualStartMs": 21.894 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 21.8956, + "visualDurationMs": 0.0013, + "visualStartMs": 21.8956 + }, + { + "durationMs": 0.0012, + "name": "L77", + "startMs": 21.8973, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8973 + }, + { + "durationMs": 0.0012, + "name": "L78", + "startMs": 21.8989, + "visualDurationMs": 0.0012, + "visualStartMs": 21.8989 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 21.9005, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9005 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 21.9021, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9021 + }, + { + "durationMs": 0.0012, + "name": "L81", + "startMs": 21.9038, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9038 + }, + { + "durationMs": 0.0012, + "name": "L82", + "startMs": 21.9053, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9053 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 21.9069, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9069 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 21.9085, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9085 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 21.9102, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9102 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 21.9118, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9118 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 21.9135, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9135 + }, + { + "durationMs": 0.0014, + "name": "L88", + "startMs": 21.9152, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9152 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 21.9169, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9169 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 21.9185, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9185 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 21.9201, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9201 + }, + { + "durationMs": 0.0012, + "name": "L92", + "startMs": 21.9218, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9218 + }, + { + "durationMs": 0.0013, + "name": "L93", + "startMs": 21.9233, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9233 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 21.925, + "visualDurationMs": 0.0012, + "visualStartMs": 21.925 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 21.9265, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9265 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 21.9281, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9281 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 21.9296, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9296 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 21.9313, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9313 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 21.9329, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9329 + }, + { + "durationMs": 0.0005, + "name": "BindNorm", + "startMs": 21.9343, + "visualDurationMs": 0.0005, + "visualStartMs": 21.9343 + } + ], + "durationMs": 0.1871, + "name": "Lighting", + "startMs": 21.748, + "visualDurationMs": 0.1871, + "visualStartMs": 21.748 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 21.9356, + "visualDurationMs": 0.0004, + "visualStartMs": 21.9356 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 21.9362, + "visualDurationMs": 0.0004, + "visualStartMs": 21.9362 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 21.9352, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9352 + } + ], + "durationMs": 0.1933, + "name": "DrawSprite", + "startMs": 21.7435, + "visualDurationMs": 0.1933, + "visualStartMs": 21.7435 + } + ], + "durationMs": 0.1938, + "name": "Draw Sprite: Pebble_92", + "startMs": 21.7431, + "visualDurationMs": 0.1938, + "visualStartMs": 21.7431 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0003, + "name": "ShaderSelect", + "startMs": 21.9385, + "visualDurationMs": 0.0003, + "visualStartMs": 21.9385 + }, + { + "durationMs": 0.0003, + "name": "ShaderUse", + "startMs": 21.9389, + "visualDurationMs": 0.0003, + "visualStartMs": 21.9389 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 21.9398, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9398 + }, + { + "durationMs": 0.0005, + "name": "TexSlot", + "startMs": 21.9413, + "visualDurationMs": 0.0005, + "visualStartMs": 21.9413 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 21.9395, + "visualDurationMs": 0.0025, + "visualStartMs": 21.9395 + }, + { + "durationMs": 0.0004, + "name": "BindTex", + "startMs": 21.9421, + "visualDurationMs": 0.0004, + "visualStartMs": 21.9421 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 21.9429, + "visualDurationMs": 0.0009, + "visualStartMs": 21.9429 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 21.9439, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9439 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 21.9456, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9456 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 21.9472, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9472 + }, + { + "durationMs": 0.0012, + "name": "L2", + "startMs": 21.9488, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9488 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 21.9504, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9504 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 21.9521, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9521 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 21.9536, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9536 + }, + { + "durationMs": 0.0026, + "name": "L6", + "startMs": 21.9551, + "visualDurationMs": 0.0026, + "visualStartMs": 21.9551 + }, + { + "durationMs": 0.0012, + "name": "L7", + "startMs": 21.958, + "visualDurationMs": 0.0012, + "visualStartMs": 21.958 + }, + { + "durationMs": 0.0048, + "name": "L8", + "startMs": 21.9596, + "visualDurationMs": 0.0048, + "visualStartMs": 21.9596 + }, + { + "durationMs": 0.0016, + "name": "L9", + "startMs": 21.9648, + "visualDurationMs": 0.0016, + "visualStartMs": 21.9648 + }, + { + "durationMs": 0.0015, + "name": "L10", + "startMs": 21.9667, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9667 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 21.9685, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9685 + }, + { + "durationMs": 0.0015, + "name": "L12", + "startMs": 21.9704, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9704 + }, + { + "durationMs": 0.0015, + "name": "L13", + "startMs": 21.9722, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9722 + }, + { + "durationMs": 0.0036, + "name": "L14", + "startMs": 21.974, + "visualDurationMs": 0.0036, + "visualStartMs": 21.974 + }, + { + "durationMs": 0.0015, + "name": "L15", + "startMs": 21.9779, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9779 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 21.9798, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9798 + }, + { + "durationMs": 0.0015, + "name": "L17", + "startMs": 21.9816, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9816 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 21.9834, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9834 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 21.9852, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9852 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 21.9869, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9869 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 21.9885, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9885 + }, + { + "durationMs": 0.0015, + "name": "L22", + "startMs": 21.9902, + "visualDurationMs": 0.0015, + "visualStartMs": 21.9902 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 21.992, + "visualDurationMs": 0.0013, + "visualStartMs": 21.992 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 21.9936, + "visualDurationMs": 0.0014, + "visualStartMs": 21.9936 + }, + { + "durationMs": 0.0012, + "name": "L25", + "startMs": 21.9953, + "visualDurationMs": 0.0012, + "visualStartMs": 21.9953 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 21.9969, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9969 + }, + { + "durationMs": 0.0013, + "name": "L27", + "startMs": 21.9985, + "visualDurationMs": 0.0013, + "visualStartMs": 21.9985 + }, + { + "durationMs": 0.0014, + "name": "L28", + "startMs": 22.0001, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0001 + }, + { + "durationMs": 0.0012, + "name": "L29", + "startMs": 22.0019, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0019 + }, + { + "durationMs": 0.0051, + "name": "L30", + "startMs": 22.0035, + "visualDurationMs": 0.0051, + "visualStartMs": 22.0035 + }, + { + "durationMs": 0.0015, + "name": "L31", + "startMs": 22.009, + "visualDurationMs": 0.0015, + "visualStartMs": 22.009 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 22.0108, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0108 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 22.0124, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0124 + }, + { + "durationMs": 0.0013, + "name": "L34", + "startMs": 22.0142, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0142 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 22.0158, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0158 + }, + { + "durationMs": 0.0012, + "name": "L36", + "startMs": 22.0175, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0175 + }, + { + "durationMs": 0.0013, + "name": "L37", + "startMs": 22.0191, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0191 + }, + { + "durationMs": 0.0012, + "name": "L38", + "startMs": 22.0207, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0207 + }, + { + "durationMs": 0.0012, + "name": "L39", + "startMs": 22.0223, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0223 + }, + { + "durationMs": 0.0013, + "name": "L40", + "startMs": 22.0239, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0239 + }, + { + "durationMs": 0.0014, + "name": "L41", + "startMs": 22.0255, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0255 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 22.0272, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0272 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 22.0288, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0288 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 22.0306, + "visualDurationMs": 0.0015, + "visualStartMs": 22.0306 + }, + { + "durationMs": 0.0012, + "name": "L45", + "startMs": 22.0325, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0325 + }, + { + "durationMs": 0.0014, + "name": "L46", + "startMs": 22.0341, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0341 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 22.0358, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0358 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 22.0375, + "visualDurationMs": 0.0015, + "visualStartMs": 22.0375 + }, + { + "durationMs": 0.0014, + "name": "L49", + "startMs": 22.0394, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0394 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 22.0411, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0411 + }, + { + "durationMs": 0.0015, + "name": "L51", + "startMs": 22.0429, + "visualDurationMs": 0.0015, + "visualStartMs": 22.0429 + }, + { + "durationMs": 0.0014, + "name": "L52", + "startMs": 22.0447, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0447 + }, + { + "durationMs": 0.0013, + "name": "L53", + "startMs": 22.0465, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0465 + }, + { + "durationMs": 0.0014, + "name": "L54", + "startMs": 22.0482, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0482 + }, + { + "durationMs": 0.0016, + "name": "L55", + "startMs": 22.0499, + "visualDurationMs": 0.0016, + "visualStartMs": 22.0499 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 22.0519, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0519 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 22.0536, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0536 + }, + { + "durationMs": 0.0015, + "name": "L58", + "startMs": 22.0552, + "visualDurationMs": 0.0015, + "visualStartMs": 22.0552 + }, + { + "durationMs": 0.0012, + "name": "L59", + "startMs": 22.0571, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0571 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 22.0586, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0586 + }, + { + "durationMs": 0.0016, + "name": "L61", + "startMs": 22.0603, + "visualDurationMs": 0.0016, + "visualStartMs": 22.0603 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 22.0623, + "visualDurationMs": 0.009, + "visualStartMs": 22.0623 + }, + { + "durationMs": 0.0013, + "name": "L63", + "startMs": 22.0717, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0717 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 22.0734, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0734 + }, + { + "durationMs": 0.0075, + "name": "L65", + "startMs": 22.0751, + "visualDurationMs": 0.0075, + "visualStartMs": 22.0751 + }, + { + "durationMs": 0.0014, + "name": "L66", + "startMs": 22.0829, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0829 + }, + { + "durationMs": 0.0016, + "name": "L67", + "startMs": 22.0847, + "visualDurationMs": 0.0016, + "visualStartMs": 22.0847 + }, + { + "durationMs": 0.0014, + "name": "L68", + "startMs": 22.0866, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0866 + }, + { + "durationMs": 0.0014, + "name": "L69", + "startMs": 22.0884, + "visualDurationMs": 0.0014, + "visualStartMs": 22.0884 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 22.0901, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0901 + }, + { + "durationMs": 0.0012, + "name": "L71", + "startMs": 22.0917, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0917 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 22.0933, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0933 + }, + { + "durationMs": 0.0013, + "name": "L73", + "startMs": 22.0949, + "visualDurationMs": 0.0013, + "visualStartMs": 22.0949 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 22.0966, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0966 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 22.0981, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0981 + }, + { + "durationMs": 0.0012, + "name": "L76", + "startMs": 22.0997, + "visualDurationMs": 0.0012, + "visualStartMs": 22.0997 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 22.1012, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1012 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 22.1028, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1028 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 22.1044, + "visualDurationMs": 0.0015, + "visualStartMs": 22.1044 + }, + { + "durationMs": 0.0012, + "name": "L80", + "startMs": 22.1063, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1063 + }, + { + "durationMs": 0.0013, + "name": "L81", + "startMs": 22.1079, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1079 + }, + { + "durationMs": 0.0013, + "name": "L82", + "startMs": 22.1095, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1095 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 22.1111, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1111 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 22.1127, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1127 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 22.1144, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1144 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 22.116, + "visualDurationMs": 0.0013, + "visualStartMs": 22.116 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 22.1177, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1177 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 22.1194, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1194 + }, + { + "durationMs": 0.0012, + "name": "L89", + "startMs": 22.1211, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1211 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 22.1227, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1227 + }, + { + "durationMs": 0.0014, + "name": "L91", + "startMs": 22.1242, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1242 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 22.1259, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1259 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 22.1275, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1275 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 22.1291, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1291 + }, + { + "durationMs": 0.0012, + "name": "L95", + "startMs": 22.1306, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1306 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 22.1322, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1322 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 22.1337, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1337 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 22.1354, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1354 + }, + { + "durationMs": 0.0012, + "name": "L99", + "startMs": 22.1369, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1369 + }, + { + "durationMs": 0.0006, + "name": "BindNorm", + "startMs": 22.1383, + "visualDurationMs": 0.0006, + "visualStartMs": 22.1383 + } + ], + "durationMs": 0.1967, + "name": "Lighting", + "startMs": 21.9426, + "visualDurationMs": 0.1967, + "visualStartMs": 21.9426 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 22.1398, + "visualDurationMs": 0.0004, + "visualStartMs": 22.1398 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 22.1404, + "visualDurationMs": 0.0004, + "visualStartMs": 22.1404 + } + ], + "durationMs": 0.0015, + "name": "Draw", + "startMs": 22.1394, + "visualDurationMs": 0.0015, + "visualStartMs": 22.1394 + } + ], + "durationMs": 0.2028, + "name": "DrawSprite", + "startMs": 21.9382, + "visualDurationMs": 0.2028, + "visualStartMs": 21.9382 + } + ], + "durationMs": 0.2035, + "name": "Draw Sprite: Pebble_95", + "startMs": 21.9377, + "visualDurationMs": 0.2035, + "visualStartMs": 21.9377 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 22.1427, + "visualDurationMs": 0.0004, + "visualStartMs": 22.1427 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 22.1433, + "visualDurationMs": 0.0004, + "visualStartMs": 22.1433 + }, + { + "children": [ + { + "durationMs": 0.0015, + "name": "Transform", + "startMs": 22.1442, + "visualDurationMs": 0.0015, + "visualStartMs": 22.1442 + }, + { + "durationMs": 0.0004, + "name": "TexSlot", + "startMs": 22.1459, + "visualDurationMs": 0.0004, + "visualStartMs": 22.1459 + } + ], + "durationMs": 0.0025, + "name": "SetUniforms", + "startMs": 22.1439, + "visualDurationMs": 0.0025, + "visualStartMs": 22.1439 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 22.1466, + "visualDurationMs": 0.0003, + "visualStartMs": 22.1466 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 22.1474, + "visualDurationMs": 0.0009, + "visualStartMs": 22.1474 + }, + { + "durationMs": 0.0013, + "name": "SetLightParams", + "startMs": 22.1484, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1484 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 22.1501, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1501 + }, + { + "durationMs": 0.0013, + "name": "L1", + "startMs": 22.1516, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1516 + }, + { + "durationMs": 0.0013, + "name": "L2", + "startMs": 22.1533, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1533 + }, + { + "durationMs": 0.0013, + "name": "L3", + "startMs": 22.1549, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1549 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 22.1565, + "visualDurationMs": 0.0012, + "visualStartMs": 22.1565 + }, + { + "durationMs": 0.0012, + "name": "L5", + "startMs": 22.158, + "visualDurationMs": 0.0012, + "visualStartMs": 22.158 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 22.1595, + "visualDurationMs": 0.0024, + "visualStartMs": 22.1595 + }, + { + "durationMs": 0.0013, + "name": "L7", + "startMs": 22.1623, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1623 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 22.1639, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1639 + }, + { + "durationMs": 0.0013, + "name": "L9", + "startMs": 22.1655, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1655 + }, + { + "durationMs": 0.0013, + "name": "L10", + "startMs": 22.1671, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1671 + }, + { + "durationMs": 0.0015, + "name": "L11", + "startMs": 22.1688, + "visualDurationMs": 0.0015, + "visualStartMs": 22.1688 + }, + { + "durationMs": 0.0013, + "name": "L12", + "startMs": 22.1707, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1707 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 22.1723, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1723 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 22.174, + "visualDurationMs": 0.0035, + "visualStartMs": 22.174 + }, + { + "durationMs": 0.0016, + "name": "L15", + "startMs": 22.1779, + "visualDurationMs": 0.0016, + "visualStartMs": 22.1779 + }, + { + "durationMs": 0.0014, + "name": "L16", + "startMs": 22.1799, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1799 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 22.1816, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1816 + }, + { + "durationMs": 0.0014, + "name": "L18", + "startMs": 22.1833, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1833 + }, + { + "durationMs": 0.0014, + "name": "L19", + "startMs": 22.185, + "visualDurationMs": 0.0014, + "visualStartMs": 22.185 + }, + { + "durationMs": 0.0014, + "name": "L20", + "startMs": 22.1868, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1868 + }, + { + "durationMs": 0.0015, + "name": "L21", + "startMs": 22.1886, + "visualDurationMs": 0.0015, + "visualStartMs": 22.1886 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 22.1904, + "visualDurationMs": 0.0014, + "visualStartMs": 22.1904 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 22.1922, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1922 + }, + { + "durationMs": 0.0013, + "name": "L24", + "startMs": 22.1938, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1938 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 22.1954, + "visualDurationMs": 0.0013, + "visualStartMs": 22.1954 + }, + { + "durationMs": 0.0013, + "name": "L26", + "startMs": 22.197, + "visualDurationMs": 0.0013, + "visualStartMs": 22.197 + }, + { + "durationMs": 0.0048, + "name": "L27", + "startMs": 22.1986, + "visualDurationMs": 0.0048, + "visualStartMs": 22.1986 + }, + { + "durationMs": 0.0016, + "name": "L28", + "startMs": 22.2039, + "visualDurationMs": 0.0016, + "visualStartMs": 22.2039 + }, + { + "durationMs": 0.0014, + "name": "L29", + "startMs": 22.2059, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2059 + }, + { + "durationMs": 0.0055, + "name": "L30", + "startMs": 22.2076, + "visualDurationMs": 0.0055, + "visualStartMs": 22.2076 + }, + { + "durationMs": 0.0014, + "name": "L31", + "startMs": 22.2135, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2135 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 22.2153, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2153 + }, + { + "durationMs": 0.0015, + "name": "L33", + "startMs": 22.2168, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2168 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 22.2187, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2187 + }, + { + "durationMs": 0.0014, + "name": "L35", + "startMs": 22.2205, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2205 + }, + { + "durationMs": 0.0014, + "name": "L36", + "startMs": 22.2222, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2222 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 22.224, + "visualDurationMs": 0.0012, + "visualStartMs": 22.224 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 22.2255, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2255 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 22.2271, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2271 + }, + { + "durationMs": 0.0015, + "name": "L40", + "startMs": 22.2288, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2288 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 22.2306, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2306 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 22.2322, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2322 + }, + { + "durationMs": 0.0014, + "name": "L43", + "startMs": 22.2339, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2339 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 22.2356, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2356 + }, + { + "durationMs": 0.0012, + "name": "L45", + "startMs": 22.2375, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2375 + }, + { + "durationMs": 0.0016, + "name": "L46", + "startMs": 22.2391, + "visualDurationMs": 0.0016, + "visualStartMs": 22.2391 + }, + { + "durationMs": 0.0014, + "name": "L47", + "startMs": 22.241, + "visualDurationMs": 0.0014, + "visualStartMs": 22.241 + }, + { + "durationMs": 0.0015, + "name": "L48", + "startMs": 22.2428, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2428 + }, + { + "durationMs": 0.0013, + "name": "L49", + "startMs": 22.2447, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2447 + }, + { + "durationMs": 0.0014, + "name": "L50", + "startMs": 22.2464, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2464 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 22.2481, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2481 + }, + { + "durationMs": 0.0012, + "name": "L52", + "startMs": 22.2499, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2499 + }, + { + "durationMs": 0.0015, + "name": "L53", + "startMs": 22.2515, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2515 + }, + { + "durationMs": 0.0013, + "name": "L54", + "startMs": 22.2534, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2534 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 22.255, + "visualDurationMs": 0.0013, + "visualStartMs": 22.255 + }, + { + "durationMs": 0.0013, + "name": "L56", + "startMs": 22.2567, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2567 + }, + { + "durationMs": 0.0013, + "name": "L57", + "startMs": 22.2584, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2584 + }, + { + "durationMs": 0.0014, + "name": "L58", + "startMs": 22.26, + "visualDurationMs": 0.0014, + "visualStartMs": 22.26 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 22.2617, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2617 + }, + { + "durationMs": 0.0013, + "name": "L60", + "startMs": 22.2635, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2635 + }, + { + "durationMs": 0.0015, + "name": "L61", + "startMs": 22.2651, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2651 + }, + { + "durationMs": 0.009, + "name": "L62", + "startMs": 22.267, + "visualDurationMs": 0.009, + "visualStartMs": 22.267 + }, + { + "durationMs": 0.0014, + "name": "L63", + "startMs": 22.2764, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2764 + }, + { + "durationMs": 0.0014, + "name": "L64", + "startMs": 22.2782, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2782 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 22.28, + "visualDurationMs": 0.0013, + "visualStartMs": 22.28 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 22.2817, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2817 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 22.2834, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2834 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 22.2851, + "visualDurationMs": 0.0013, + "visualStartMs": 22.2851 + }, + { + "durationMs": 0.0016, + "name": "L69", + "startMs": 22.2868, + "visualDurationMs": 0.0016, + "visualStartMs": 22.2868 + }, + { + "durationMs": 0.0015, + "name": "L70", + "startMs": 22.2888, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2888 + }, + { + "durationMs": 0.0014, + "name": "L71", + "startMs": 22.2906, + "visualDurationMs": 0.0014, + "visualStartMs": 22.2906 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 22.2924, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2924 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 22.294, + "visualDurationMs": 0.0012, + "visualStartMs": 22.294 + }, + { + "durationMs": 0.0012, + "name": "L74", + "startMs": 22.2956, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2956 + }, + { + "durationMs": 0.0012, + "name": "L75", + "startMs": 22.2972, + "visualDurationMs": 0.0012, + "visualStartMs": 22.2972 + }, + { + "durationMs": 0.0015, + "name": "L76", + "startMs": 22.2987, + "visualDurationMs": 0.0015, + "visualStartMs": 22.2987 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 22.3005, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3005 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 22.3021, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3021 + }, + { + "durationMs": 0.0013, + "name": "L79", + "startMs": 22.3037, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3037 + }, + { + "durationMs": 0.0014, + "name": "L80", + "startMs": 22.3054, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3054 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 22.3071, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3071 + }, + { + "durationMs": 0.0014, + "name": "L82", + "startMs": 22.3088, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3088 + }, + { + "durationMs": 0.0012, + "name": "L83", + "startMs": 22.3105, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3105 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 22.312, + "visualDurationMs": 0.0013, + "visualStartMs": 22.312 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 22.3136, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3136 + }, + { + "durationMs": 0.0014, + "name": "L86", + "startMs": 22.3153, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3153 + }, + { + "durationMs": 0.0014, + "name": "L87", + "startMs": 22.3171, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3171 + }, + { + "durationMs": 0.0012, + "name": "L88", + "startMs": 22.3189, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3189 + }, + { + "durationMs": 0.0015, + "name": "L89", + "startMs": 22.3205, + "visualDurationMs": 0.0015, + "visualStartMs": 22.3205 + }, + { + "durationMs": 0.0012, + "name": "L90", + "startMs": 22.3223, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3223 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 22.3239, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3239 + }, + { + "durationMs": 0.0014, + "name": "L92", + "startMs": 22.3255, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3255 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 22.3273, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3273 + }, + { + "durationMs": 0.0014, + "name": "L94", + "startMs": 22.3289, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3289 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 22.3307, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3307 + }, + { + "durationMs": 0.0013, + "name": "L96", + "startMs": 22.3324, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3324 + }, + { + "durationMs": 0.0018, + "name": "L97", + "startMs": 22.334, + "visualDurationMs": 0.0018, + "visualStartMs": 22.334 + }, + { + "durationMs": 0.0013, + "name": "L98", + "startMs": 22.3361, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3361 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 22.3377, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3377 + }, + { + "durationMs": 0.0007, + "name": "BindNorm", + "startMs": 22.3391, + "visualDurationMs": 0.0007, + "visualStartMs": 22.3391 + } + ], + "durationMs": 0.1931, + "name": "Lighting", + "startMs": 22.1471, + "visualDurationMs": 0.1931, + "visualStartMs": 22.1471 + }, + { + "children": [ + { + "durationMs": 0.0004, + "name": "VAO Bind", + "startMs": 22.3407, + "visualDurationMs": 0.0004, + "visualStartMs": 22.3407 + }, + { + "durationMs": 0.0005, + "name": "GL Draw", + "startMs": 22.3412, + "visualDurationMs": 0.0005, + "visualStartMs": 22.3412 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 22.3403, + "visualDurationMs": 0.0016, + "visualStartMs": 22.3403 + } + ], + "durationMs": 0.1997, + "name": "DrawSprite", + "startMs": 22.1423, + "visualDurationMs": 0.1997, + "visualStartMs": 22.1423 + } + ], + "durationMs": 0.2002, + "name": "Draw Sprite: Pebble_93", + "startMs": 22.1419, + "visualDurationMs": 0.2002, + "visualStartMs": 22.1419 + }, + { + "children": [ + { + "children": [ + { + "durationMs": 0.0004, + "name": "ShaderSelect", + "startMs": 22.3437, + "visualDurationMs": 0.0004, + "visualStartMs": 22.3437 + }, + { + "durationMs": 0.0004, + "name": "ShaderUse", + "startMs": 22.3443, + "visualDurationMs": 0.0004, + "visualStartMs": 22.3443 + }, + { + "children": [ + { + "durationMs": 0.0013, + "name": "Transform", + "startMs": 22.3452, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3452 + }, + { + "durationMs": 0.0006, + "name": "TexSlot", + "startMs": 22.3466, + "visualDurationMs": 0.0006, + "visualStartMs": 22.3466 + } + ], + "durationMs": 0.0024, + "name": "SetUniforms", + "startMs": 22.3449, + "visualDurationMs": 0.0024, + "visualStartMs": 22.3449 + }, + { + "durationMs": 0.0003, + "name": "BindTex", + "startMs": 22.3475, + "visualDurationMs": 0.0003, + "visualStartMs": 22.3475 + }, + { + "children": [ + { + "durationMs": 0.0009, + "name": "ColorCorrection", + "startMs": 22.3484, + "visualDurationMs": 0.0009, + "visualStartMs": 22.3484 + }, + { + "durationMs": 0.0014, + "name": "SetLightParams", + "startMs": 22.3494, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3494 + }, + { + "durationMs": 0.0012, + "name": "L0", + "startMs": 22.3513, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3513 + }, + { + "durationMs": 0.0014, + "name": "L1", + "startMs": 22.3528, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3528 + }, + { + "durationMs": 0.0014, + "name": "L2", + "startMs": 22.3546, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3546 + }, + { + "durationMs": 0.0014, + "name": "L3", + "startMs": 22.3563, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3563 + }, + { + "durationMs": 0.0012, + "name": "L4", + "startMs": 22.358, + "visualDurationMs": 0.0012, + "visualStartMs": 22.358 + }, + { + "durationMs": 0.0013, + "name": "L5", + "startMs": 22.3595, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3595 + }, + { + "durationMs": 0.0024, + "name": "L6", + "startMs": 22.3611, + "visualDurationMs": 0.0024, + "visualStartMs": 22.3611 + }, + { + "durationMs": 0.0014, + "name": "L7", + "startMs": 22.3638, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3638 + }, + { + "durationMs": 0.0013, + "name": "L8", + "startMs": 22.3656, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3656 + }, + { + "durationMs": 0.0012, + "name": "L9", + "startMs": 22.3672, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3672 + }, + { + "durationMs": 0.0014, + "name": "L10", + "startMs": 22.3688, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3688 + }, + { + "durationMs": 0.0014, + "name": "L11", + "startMs": 22.3705, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3705 + }, + { + "durationMs": 0.0014, + "name": "L12", + "startMs": 22.3722, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3722 + }, + { + "durationMs": 0.0013, + "name": "L13", + "startMs": 22.3739, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3739 + }, + { + "durationMs": 0.0035, + "name": "L14", + "startMs": 22.3756, + "visualDurationMs": 0.0035, + "visualStartMs": 22.3756 + }, + { + "durationMs": 0.0014, + "name": "L15", + "startMs": 22.3795, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3795 + }, + { + "durationMs": 0.0013, + "name": "L16", + "startMs": 22.3813, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3813 + }, + { + "durationMs": 0.0014, + "name": "L17", + "startMs": 22.383, + "visualDurationMs": 0.0014, + "visualStartMs": 22.383 + }, + { + "durationMs": 0.0013, + "name": "L18", + "startMs": 22.3848, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3848 + }, + { + "durationMs": 0.0013, + "name": "L19", + "startMs": 22.3865, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3865 + }, + { + "durationMs": 0.0013, + "name": "L20", + "startMs": 22.3882, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3882 + }, + { + "durationMs": 0.0014, + "name": "L21", + "startMs": 22.3898, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3898 + }, + { + "durationMs": 0.0014, + "name": "L22", + "startMs": 22.3915, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3915 + }, + { + "durationMs": 0.0013, + "name": "L23", + "startMs": 22.3933, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3933 + }, + { + "durationMs": 0.0014, + "name": "L24", + "startMs": 22.3949, + "visualDurationMs": 0.0014, + "visualStartMs": 22.3949 + }, + { + "durationMs": 0.0013, + "name": "L25", + "startMs": 22.3966, + "visualDurationMs": 0.0013, + "visualStartMs": 22.3966 + }, + { + "durationMs": 0.0012, + "name": "L26", + "startMs": 22.3982, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3982 + }, + { + "durationMs": 0.0012, + "name": "L27", + "startMs": 22.3998, + "visualDurationMs": 0.0012, + "visualStartMs": 22.3998 + }, + { + "durationMs": 0.0012, + "name": "L28", + "startMs": 22.4014, + "visualDurationMs": 0.0012, + "visualStartMs": 22.4014 + }, + { + "durationMs": 0.0013, + "name": "L29", + "startMs": 22.403, + "visualDurationMs": 0.0013, + "visualStartMs": 22.403 + }, + { + "durationMs": 0.0052, + "name": "L30", + "startMs": 22.4046, + "visualDurationMs": 0.0052, + "visualStartMs": 22.4046 + }, + { + "durationMs": 0.0016, + "name": "L31", + "startMs": 22.4101, + "visualDurationMs": 0.0016, + "visualStartMs": 22.4101 + }, + { + "durationMs": 0.0012, + "name": "L32", + "startMs": 22.4121, + "visualDurationMs": 0.0012, + "visualStartMs": 22.4121 + }, + { + "durationMs": 0.0014, + "name": "L33", + "startMs": 22.4137, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4137 + }, + { + "durationMs": 0.0014, + "name": "L34", + "startMs": 22.4154, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4154 + }, + { + "durationMs": 0.0013, + "name": "L35", + "startMs": 22.4173, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4173 + }, + { + "durationMs": 0.0013, + "name": "L36", + "startMs": 22.419, + "visualDurationMs": 0.0013, + "visualStartMs": 22.419 + }, + { + "durationMs": 0.0012, + "name": "L37", + "startMs": 22.4206, + "visualDurationMs": 0.0012, + "visualStartMs": 22.4206 + }, + { + "durationMs": 0.0013, + "name": "L38", + "startMs": 22.4221, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4221 + }, + { + "durationMs": 0.0013, + "name": "L39", + "startMs": 22.4237, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4237 + }, + { + "durationMs": 0.0014, + "name": "L40", + "startMs": 22.4253, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4253 + }, + { + "durationMs": 0.0013, + "name": "L41", + "startMs": 22.427, + "visualDurationMs": 0.0013, + "visualStartMs": 22.427 + }, + { + "durationMs": 0.0013, + "name": "L42", + "startMs": 22.4287, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4287 + }, + { + "durationMs": 0.0016, + "name": "L43", + "startMs": 22.4303, + "visualDurationMs": 0.0016, + "visualStartMs": 22.4303 + }, + { + "durationMs": 0.0015, + "name": "L44", + "startMs": 22.4322, + "visualDurationMs": 0.0015, + "visualStartMs": 22.4322 + }, + { + "durationMs": 0.0013, + "name": "L45", + "startMs": 22.4341, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4341 + }, + { + "durationMs": 0.0051, + "name": "L46", + "startMs": 22.4357, + "visualDurationMs": 0.0051, + "visualStartMs": 22.4357 + }, + { + "durationMs": 0.0018, + "name": "L47", + "startMs": 22.4412, + "visualDurationMs": 0.0018, + "visualStartMs": 22.4412 + }, + { + "durationMs": 0.0016, + "name": "L48", + "startMs": 22.4433, + "visualDurationMs": 0.0016, + "visualStartMs": 22.4433 + }, + { + "durationMs": 0.0015, + "name": "L49", + "startMs": 22.4453, + "visualDurationMs": 0.0015, + "visualStartMs": 22.4453 + }, + { + "durationMs": 0.0015, + "name": "L50", + "startMs": 22.4471, + "visualDurationMs": 0.0015, + "visualStartMs": 22.4471 + }, + { + "durationMs": 0.0014, + "name": "L51", + "startMs": 22.4489, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4489 + }, + { + "durationMs": 0.0013, + "name": "L52", + "startMs": 22.4507, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4507 + }, + { + "durationMs": 0.0014, + "name": "L53", + "startMs": 22.4524, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4524 + }, + { + "durationMs": 0.0015, + "name": "L54", + "startMs": 22.4541, + "visualDurationMs": 0.0015, + "visualStartMs": 22.4541 + }, + { + "durationMs": 0.0013, + "name": "L55", + "startMs": 22.4559, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4559 + }, + { + "durationMs": 0.0014, + "name": "L56", + "startMs": 22.4575, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4575 + }, + { + "durationMs": 0.0014, + "name": "L57", + "startMs": 22.4592, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4592 + }, + { + "durationMs": 0.0016, + "name": "L58", + "startMs": 22.4609, + "visualDurationMs": 0.0016, + "visualStartMs": 22.4609 + }, + { + "durationMs": 0.0014, + "name": "L59", + "startMs": 22.4629, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4629 + }, + { + "durationMs": 0.0014, + "name": "L60", + "startMs": 22.4647, + "visualDurationMs": 0.0014, + "visualStartMs": 22.4647 + }, + { + "durationMs": 0.0013, + "name": "L61", + "startMs": 22.4665, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4665 + }, + { + "durationMs": 0.0087, + "name": "L62", + "startMs": 22.4681, + "visualDurationMs": 0.0087, + "visualStartMs": 22.4681 + }, + { + "durationMs": 0.0015, + "name": "L63", + "startMs": 22.4772, + "visualDurationMs": 0.0015, + "visualStartMs": 22.4772 + }, + { + "durationMs": 0.0013, + "name": "L64", + "startMs": 22.4792, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4792 + }, + { + "durationMs": 0.0013, + "name": "L65", + "startMs": 22.4809, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4809 + }, + { + "durationMs": 0.0013, + "name": "L66", + "startMs": 22.4826, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4826 + }, + { + "durationMs": 0.0013, + "name": "L67", + "startMs": 22.4843, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4843 + }, + { + "durationMs": 0.0013, + "name": "L68", + "startMs": 22.4859, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4859 + }, + { + "durationMs": 0.0013, + "name": "L69", + "startMs": 22.4876, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4876 + }, + { + "durationMs": 0.0013, + "name": "L70", + "startMs": 22.4892, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4892 + }, + { + "durationMs": 0.0013, + "name": "L71", + "startMs": 22.4909, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4909 + }, + { + "durationMs": 0.0012, + "name": "L72", + "startMs": 22.4925, + "visualDurationMs": 0.0012, + "visualStartMs": 22.4925 + }, + { + "durationMs": 0.0012, + "name": "L73", + "startMs": 22.4941, + "visualDurationMs": 0.0012, + "visualStartMs": 22.4941 + }, + { + "durationMs": 0.0013, + "name": "L74", + "startMs": 22.4957, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4957 + }, + { + "durationMs": 0.0013, + "name": "L75", + "startMs": 22.4974, + "visualDurationMs": 0.0013, + "visualStartMs": 22.4974 + }, + { + "durationMs": 0.0013, + "name": "L76", + "startMs": 22.499, + "visualDurationMs": 0.0013, + "visualStartMs": 22.499 + }, + { + "durationMs": 0.0013, + "name": "L77", + "startMs": 22.5006, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5006 + }, + { + "durationMs": 0.0013, + "name": "L78", + "startMs": 22.5023, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5023 + }, + { + "durationMs": 0.0015, + "name": "L79", + "startMs": 22.5039, + "visualDurationMs": 0.0015, + "visualStartMs": 22.5039 + }, + { + "durationMs": 0.0013, + "name": "L80", + "startMs": 22.5058, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5058 + }, + { + "durationMs": 0.0014, + "name": "L81", + "startMs": 22.5075, + "visualDurationMs": 0.0014, + "visualStartMs": 22.5075 + }, + { + "durationMs": 0.0015, + "name": "L82", + "startMs": 22.5092, + "visualDurationMs": 0.0015, + "visualStartMs": 22.5092 + }, + { + "durationMs": 0.0013, + "name": "L83", + "startMs": 22.511, + "visualDurationMs": 0.0013, + "visualStartMs": 22.511 + }, + { + "durationMs": 0.0013, + "name": "L84", + "startMs": 22.5127, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5127 + }, + { + "durationMs": 0.0013, + "name": "L85", + "startMs": 22.5144, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5144 + }, + { + "durationMs": 0.0013, + "name": "L86", + "startMs": 22.516, + "visualDurationMs": 0.0013, + "visualStartMs": 22.516 + }, + { + "durationMs": 0.0013, + "name": "L87", + "startMs": 22.5177, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5177 + }, + { + "durationMs": 0.0013, + "name": "L88", + "startMs": 22.5194, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5194 + }, + { + "durationMs": 0.0014, + "name": "L89", + "startMs": 22.5211, + "visualDurationMs": 0.0014, + "visualStartMs": 22.5211 + }, + { + "durationMs": 0.0014, + "name": "L90", + "startMs": 22.5228, + "visualDurationMs": 0.0014, + "visualStartMs": 22.5228 + }, + { + "durationMs": 0.0013, + "name": "L91", + "startMs": 22.5245, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5245 + }, + { + "durationMs": 0.0013, + "name": "L92", + "startMs": 22.5261, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5261 + }, + { + "durationMs": 0.0012, + "name": "L93", + "startMs": 22.5277, + "visualDurationMs": 0.0012, + "visualStartMs": 22.5277 + }, + { + "durationMs": 0.0012, + "name": "L94", + "startMs": 22.5293, + "visualDurationMs": 0.0012, + "visualStartMs": 22.5293 + }, + { + "durationMs": 0.0013, + "name": "L95", + "startMs": 22.5308, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5308 + }, + { + "durationMs": 0.0012, + "name": "L96", + "startMs": 22.5324, + "visualDurationMs": 0.0012, + "visualStartMs": 22.5324 + }, + { + "durationMs": 0.0013, + "name": "L97", + "startMs": 22.534, + "visualDurationMs": 0.0013, + "visualStartMs": 22.534 + }, + { + "durationMs": 0.0012, + "name": "L98", + "startMs": 22.5356, + "visualDurationMs": 0.0012, + "visualStartMs": 22.5356 + }, + { + "durationMs": 0.0013, + "name": "L99", + "startMs": 22.5371, + "visualDurationMs": 0.0013, + "visualStartMs": 22.5371 + }, + { + "durationMs": 0.0008, + "name": "BindNorm", + "startMs": 22.5386, + "visualDurationMs": 0.0008, + "visualStartMs": 22.5386 + } + ], + "durationMs": 0.1918, + "name": "Lighting", + "startMs": 22.348, + "visualDurationMs": 0.1918, + "visualStartMs": 22.348 + }, + { + "children": [ + { + "durationMs": 0.0005, + "name": "VAO Bind", + "startMs": 22.5403, + "visualDurationMs": 0.0005, + "visualStartMs": 22.5403 + }, + { + "durationMs": 0.0004, + "name": "GL Draw", + "startMs": 22.5409, + "visualDurationMs": 0.0004, + "visualStartMs": 22.5409 + } + ], + "durationMs": 0.0016, + "name": "Draw", + "startMs": 22.5399, + "visualDurationMs": 0.0016, + "visualStartMs": 22.5399 + } + ], + "durationMs": 0.1983, + "name": "DrawSprite", + "startMs": 22.3433, + "visualDurationMs": 0.1983, + "visualStartMs": 22.3433 + } + ], + "durationMs": 0.1989, + "name": "Draw Sprite: Pebble_94", + "startMs": 22.3428, + "visualDurationMs": 0.1989, + "visualStartMs": 22.3428 + } + ], + "durationMs": 22.5332, + "name": "Render", + "startMs": 0.0129, + "visualDurationMs": 22.5332, + "visualStartMs": 0.0129 + } + ], + "durationMs": 22.5463, + "name": "Frame", + "startMs": 0.0, + "visualDurationMs": 22.5463, + "visualStartMs": 0.0 +} \ No newline at end of file diff --git a/remake/build.log b/remake/build.log index fca714e..9f0df58 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,3 +1,5 @@ -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Renderer.cpp -o src\build\Renderer.o +[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Profiler.cpp -o src\build\utils\Profiler.o +[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o [LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\Entitys\Object.o src\build\utils\EngineConfig.o src\build\utils\ExceptionHandler.o src\build\utils\FileDialog.o src\build\utils\GameObjectsList.o src\build\utils\Logging.o src\build\utils\Profiler.o src\build\utils\Shader.o src\build\utils\UID.o src\build\utils\utils.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -[RUN] Executed app.exe successfully. +[ERROR] Runtime crash +Command 'src\build\app.exe' returned non-zero exit status 3221225477. diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index 397b2c2..e664e6c 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -39,6 +39,9 @@ #include <windows.h> #include <commdlg.h> #include <openssl/sha.h> +#include <fstream> +#include <json.hpp> +using json = nlohmann::json; static std::shared_ptr<Object> selected = nullptr; static bool playing = false; @@ -182,7 +185,6 @@ static ProfileNode GetAveragedFrameCopy(const ProfileNode &src) void ShowProfilerTimeline() { - static ProfileNode cachedAveragedFrame; static double lastUpdateTime = 0.0; static double updateInterval = 0.25; @@ -196,7 +198,6 @@ void ShowProfilerTimeline() // --- Controls --- if (g_engineConfig.settings.profile_enabled) { - ImGui::Checkbox("Freeze View", &freezeView); ImGui::SameLine(); ImGui::SetNextItemWidth(100); @@ -206,6 +207,24 @@ void ShowProfilerTimeline() updateInterval = std::clamp(updateInterval, 0.05, 5.0); + // Export JSON button + ImGui::SameLine(); + if (ImGui::Button("Export")) + { + json root = SerializeProfileNode(cachedAveragedFrame); + std::ofstream out("profile_export.json"); + if (out.is_open()) + { + out << root.dump(4); + out.close(); + Logger::LogInfo("Profiler exported to profile_export.json"); + } + else + { + Logger::LogError("Failed to write profiler export."); + } + } + if (!freezeView && latest && (now - lastUpdateTime) >= updateInterval) { cachedAveragedFrame = GetAveragedFrameCopy(*latest); @@ -238,6 +257,7 @@ void ShowProfilerTimeline() { ImGui::Text("Profiling Disabled."); } + ImGui::End(); } @@ -309,7 +329,6 @@ void ShowColorCorrectionWindow() ImGui::SeparatorText("Bloom"); - changed |= ImGui::Checkbox("Enable Bloom", &cc->bloom); changed |= ImGui::SliderFloat("Threshold", &cc->threshold, 0.0f, 2.0f, "%.2f"); changed |= ImGui::SliderFloat("Intensity", &cc->intensity, 0.0f, 4.0f, "%.2f"); @@ -323,7 +342,6 @@ void ShowColorCorrectionWindow() ImGui::End(); } - void Engine::Init() { diff --git a/src/src/Renderer.cpp b/src/src/Renderer.cpp index 0c869b8..ae1dafd 100644 --- a/src/src/Renderer.cpp +++ b/src/src/Renderer.cpp @@ -50,6 +50,31 @@ int Renderer::s_ClusterRows = 0; GLuint Renderer::bloomFBO = 0; GLuint Renderer::bloomTexture = 0; +struct CachedLightUniforms { + std::string posName; + std::string colorName; + std::string intensityName; + std::string radiusName; +}; + +std::vector<CachedLightUniforms> s_LightUniforms; + +void InitLightUniforms(int maxLights) { + s_LightUniforms.clear(); + s_LightUniforms.reserve(maxLights); + for (int i = 0; i < maxLights; ++i) { + s_LightUniforms.push_back({ + "uLightPos[" + std::to_string(i) + "]", + "uLightColor[" + std::to_string(i) + "]", + "uLightIntensity[" + std::to_string(i) + "]", + "uLightRadius[" + std::to_string(i) + "]" + }); + } +} + + + + void Renderer::InitQuad() { float vertices[] = { @@ -112,6 +137,11 @@ void Renderer::Init() SetColorCorrection(std::make_unique<ColorCorrection>()); + { + Logger::LogVerbose("Renderer::InitLightUniforms(%d)", g_engineConfig.gl_maxLight); + InitLightUniforms(g_engineConfig.gl_maxLight); + } + glGenBuffers(1, &s_ClusterSSBO); // Bloom textures and framebuffers @@ -405,22 +435,27 @@ void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float z PROFILE_DEEP_SCOPE("ColorCorrection"); s_ColorCorrection->Upload(*shader); } - - shader->SetInt("uLightCount", static_cast<int>(s_Lights.size())); - shader->SetInt("uClusterWidth", CLUSTER_SIZE); - shader->SetInt("uClusterHeight", CLUSTER_SIZE); - shader->SetInt("uClusterCols", s_ClusterCols); - shader->SetInt("uMaxLightsPerCluster", MAX_LIGHTS_PER_CLUSTER); - - for (size_t i = 0; i < s_Lights.size(); ++i) { + PROFILE_DEEP_SCOPE("SetLightParams"); + + shader->SetInt("uLightCount", static_cast<int>(s_Lights.size())); + shader->SetInt("uClusterWidth", CLUSTER_SIZE); + shader->SetInt("uClusterHeight", CLUSTER_SIZE); + shader->SetInt("uClusterCols", s_ClusterCols); + shader->SetInt("uMaxLightsPerCluster", MAX_LIGHTS_PER_CLUSTER); + } + + + for (int i = 0; i < s_Lights.size(); ++i) { PROFILE_DEEP_SCOPE(("L" + std::to_string(i)).c_str()); - shader->SetVec2(("uLightPos[" + std::to_string(i) + "]").c_str(), s_Lights[i].screenPos); - shader->SetVec3(("uLightColor[" + std::to_string(i) + "]").c_str(), s_Lights[i].color); - shader->SetFloat(("uLightIntensity[" + std::to_string(i) + "]").c_str(), s_Lights[i].intensity); - shader->SetFloat(("uLightRadius[" + std::to_string(i) + "]").c_str(), s_Lights[i].radius); + const auto& u = s_LightUniforms[i]; + shader->SetVec2(u.posName.c_str(), s_Lights[i].screenPos); + shader->SetVec3(u.colorName.c_str(), s_Lights[i].color); + shader->SetFloat(u.intensityName.c_str(), s_Lights[i].intensity); + shader->SetFloat(u.radiusName.c_str(), s_Lights[i].radius); } + { PROFILE_DEEP_SCOPE("BindNorm"); @@ -563,12 +598,9 @@ void Renderer::DrawGizmoCircle( glEnd(); } - - - GLuint Renderer::GetFinalTexture() { - PROFILE_SCOPE("Renderer::GetFinalTexture"); + PROFILE_ENGINE_SCOPE("Renderer::GetFinalTexture"); GLuint sceneTex = GetRenderTexture(); @@ -630,8 +662,6 @@ GLuint Renderer::GetFinalTexture() return bloomTexture; } - - GLuint Renderer::GetRenderTexture() { return textureColorBuffer; diff --git a/src/src/utils/Profiler.cpp b/src/src/utils/Profiler.cpp index c5f1131..d80252c 100644 --- a/src/src/utils/Profiler.cpp +++ b/src/src/utils/Profiler.cpp @@ -1,6 +1,12 @@ #include "Profiler.h" #include <cmath> +#include <fstream> +#include <json.hpp> +using json = nlohmann::json; + + + extern float g_fps; extern EngineConfig g_engineConfig; @@ -115,4 +121,21 @@ const ProfileNode* HierarchicalProfiler::GetLatestFrame() const { return frameHistory.empty() ? nullptr : &frameHistory.back(); } +json SerializeProfileNode(const ProfileNode& node) { + json j; + j["name"] = node.name; + j["startMs"] = node.startMs; + j["durationMs"] = node.durationMs; + j["visualStartMs"] = node.visualStartMs; + j["visualDurationMs"] = node.visualDurationMs; + + for (const auto& child : node.children) { + j["children"].push_back(SerializeProfileNode(child)); + } + return j; +} + + + + HierarchicalProfiler profiler; diff --git a/src/src/utils/Profiler.h b/src/src/utils/Profiler.h index 89aeafb..0f93104 100644 --- a/src/src/utils/Profiler.h +++ b/src/src/utils/Profiler.h @@ -4,6 +4,11 @@ #include <chrono> #include "EngineConfig.h" + +#include <json.hpp> +using json = nlohmann::json; + + struct ProfileNode { std::string name; double startMs = 0.0; @@ -48,6 +53,8 @@ private: size_t ProfilesLastFrame = 128; }; +json SerializeProfileNode(const ProfileNode& node); + extern HierarchicalProfiler profiler; struct ScopedProfile { diff --git a/src/vendor/json.hpp b/src/vendor/json.hpp new file mode 100644 index 0000000..13b07c0 --- /dev/null +++ b/src/vendor/json.hpp @@ -0,0 +1,25530 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include <algorithm> // all_of, find, for_each +#include <cstddef> // nullptr_t, ptrdiff_t, size_t +#include <functional> // hash, less +#include <initializer_list> // initializer_list +#ifndef JSON_NO_IO + #include <iosfwd> // istream, ostream +#endif // JSON_NO_IO +#include <iterator> // random_access_iterator_tag +#include <memory> // unique_ptr +#include <string> // string, stoi, to_string +#include <utility> // declval, forward, move, pair, swap +#include <vector> // vector + +// #include <nlohmann/adl_serializer.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <utility> + +// #include <nlohmann/detail/abi_macros.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include <nlohmann/detail/conversions/from_json.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // transform +#include <array> // array +#include <forward_list> // forward_list +#include <iterator> // inserter, front_inserter, end +#include <map> // map +#include <string> // string +#include <tuple> // tuple, make_tuple +#include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include <unordered_map> // unordered_map +#include <utility> // pair, declval +#include <valarray> // valarray + +// #include <nlohmann/detail/exceptions.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // nullptr_t +#include <exception> // exception +#if JSON_DIAGNOSTICS + #include <numeric> // accumulate +#endif +#include <stdexcept> // runtime_error +#include <string> // to_string +#include <vector> // vector + +// #include <nlohmann/detail/value_t.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <array> // array +#include <cstddef> // size_t +#include <cstdint> // uint8_t +#include <string> // string + +// #include <nlohmann/detail/macro_scope.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <utility> // declval, pair +// #include <nlohmann/detail/meta/detected.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <type_traits> + +// #include <nlohmann/detail/meta/void_t.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename ...Ts> struct make_void +{ + using type = void; +}; +template<typename ...Ts> using void_t = typename make_void<Ts...>::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template<class Default, + class AlwaysVoid, + template<class...> class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template<class Default, template<class...> class Op, class... Args> +struct detector<Default, void_t<Op<Args...>>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op<Args...>; +}; + +template<template<class...> class Op, class... Args> +using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t; + +template<template<class...> class Op, class... Args> +struct is_detected_lazy : is_detected<Op, Args...> { }; + +template<template<class...> class Op, class... Args> +using detected_t = typename detector<nonesuch, void, Op, Args...>::type; + +template<class Default, template<class...> class Op, class... Args> +using detected_or = detector<Default, void, Op, Args...>; + +template<class Default, template<class...> class Op, class... Args> +using detected_or_t = typename detected_or<Default, Op, Args...>::type; + +template<class Expected, template<class...> class Op, class... Args> +using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>; + +template<class To, template<class...> class Op, class... Args> +using is_detected_convertible = + std::is_convertible<detected_t<Op, Args...>, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/thirdparty/hedley/hedley.hpp> + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson <evan@nemerson.com> +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson <evan@nemerson.com> + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include <stdint.h> + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include <stdint.h> + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include <nlohmann/detail/abi_macros.hpp> + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include(<version>) + #include <version> + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include(<filesystem>) + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include(<experimental/filesystem>) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include <cstdlib> + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include <cassert> // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template<typename BasicJsonType> \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on <array> */ \ + static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template<typename BasicJsonType> \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on <array> */ \ + static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template<template<typename, typename, typename...> class ObjectType, \ + template<typename, typename...> class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template<typename> class AllocatorType, \ + template<typename, typename = void> class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json<ObjectType, ArrayType, StringType, BooleanType, \ + NumberIntegerType, NumberUnsignedType, NumberFloatType, \ + AllocatorType, JSONSerializer, BinaryType, CustomBaseClass> + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template<typename... T> \ + using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template<typename... T> \ + std_name##_tag std_name(T&&...); \ + \ + template<typename... T> \ + using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \ + \ + template<typename... T> \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template<typename... T> \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include <compare> // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array<std::uint8_t, 9> order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast<std::size_t>(lhs); + const auto r_index = static_cast<std::size_t>(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/string_escape.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template<typename StringType> +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template<typename StringType> +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template<typename StringType> +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/input/position_t.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // size_t + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include <array> // array +#include <cstddef> // size_t +#include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include <utility> // index_sequence, make_index_sequence, index_sequence_for + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename T> +using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template<bool B, typename T = void> +using enable_if_t = typename std::enable_if<B, T>::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence<T, Ints...>` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence<T, Ints...>); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence<int, 5>()); +// } +template <typename T, T... Ints> +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template <size_t... Ints> +using index_sequence = integer_sequence<size_t, Ints...>; + +namespace utility_internal +{ + +template <typename Seq, size_t SeqSize, size_t Rem> +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template <typename T, T... Ints, size_t SeqSize> +struct Extend<integer_sequence<T, Ints...>, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template <typename T, T... Ints, size_t SeqSize> +struct Extend<integer_sequence<T, Ints...>, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence<T, N>'. +// 'Gen<T, N>::type' is an alias for 'integer_sequence<T, 0, 1, ... N-1>'. +template <typename T, size_t N> +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template <typename T> +struct Gen<T, 0> +{ + using type = integer_sequence<T>; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence<int, 0, 1, ..., N-1>`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template <typename T, T N> +using make_integer_sequence = typename utility_internal::Gen<T, N>::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template <size_t N> +using make_index_sequence = make_integer_sequence<size_t, N>; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template <typename... Ts> +using index_sequence_for = make_index_sequence<sizeof...(Ts)>; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template<unsigned N> struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template<typename T> +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template<typename T> + constexpr T static_const<T>::value; +#endif + +template<typename T, typename... Args> +constexpr std::array<T, sizeof...(Args)> make_array(Args&& ... args) +{ + return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/type_traits.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <limits> // numeric_limits +#include <string> // char_traits +#include <tuple> // tuple +#include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type +#include <utility> // declval + +// #include <nlohmann/detail/iterators/iterator_traits.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <iterator> // random_access_iterator_tag + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/meta/void_t.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename It, typename = void> +struct iterator_types {}; + +template<typename It> +struct iterator_types < + It, + void_t<typename It::difference_type, typename It::value_type, typename It::pointer, + typename It::reference, typename It::iterator_category >> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template<typename T, typename = void> +struct iterator_traits +{ +}; + +template<typename T> +struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> + : iterator_types<T> +{ +}; + +template<typename T> +struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/call_std/begin.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/call_std/end.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/detected.hpp> + +// #include <nlohmann/json_fwd.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include <cstdint> // int64_t, uint64_t + #include <map> // map + #include <memory> // allocator + #include <string> // string + #include <vector> // vector + + // #include <nlohmann/detail/abi_macros.hpp> + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template<typename T = void, typename SFINAE = void> + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template<template<typename U, typename V, typename... Args> class ObjectType = + std::map, + template<typename U, typename... Args> class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template<typename U> class AllocatorType = std::allocator, + template<typename T, typename SFINAE = void> class JSONSerializer = + adl_serializer, + class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template<typename RefStringType> + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template<class Key, class T, class IgnoredLess, class Allocator> + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json<nlohmann::ordered_map>; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval<T>()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template<typename> struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json<NLOHMANN_BASIC_JSON_TPL> : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template<typename BasicJsonContext> +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value + || std::is_same<BasicJsonContext, std::nullptr_t>::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template<typename> +class json_ref; + +template<typename> +struct is_json_ref : std::false_type {}; + +template<typename T> +struct is_json_ref<json_ref<T>> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template<typename T> +using mapped_type_t = typename T::mapped_type; + +template<typename T> +using key_type_t = typename T::key_type; + +template<typename T> +using value_type_t = typename T::value_type; + +template<typename T> +using difference_type_t = typename T::difference_type; + +template<typename T> +using pointer_t = typename T::pointer; + +template<typename T> +using reference_t = typename T::reference; + +template<typename T> +using iterator_category_t = typename T::iterator_category; + +template<typename T, typename... Args> +using to_json_function = decltype(T::to_json(std::declval<Args>()...)); + +template<typename T, typename... Args> +using from_json_function = decltype(T::from_json(std::declval<Args>()...)); + +template<typename T, typename U> +using get_template_function = decltype(std::declval<T>().template get<U>()); + +// trait checking if JSONSerializer<T>::from_json(json const&, udt&) exists +template<typename BasicJsonType, typename T, typename = void> +struct has_from_json : std::false_type {}; + +// trait checking if j.get<T> is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template <typename BasicJsonType, typename T> +struct is_getable +{ + static constexpr bool value = is_detected<get_template_function, const BasicJsonType&, T>::value; +}; + +template<typename BasicJsonType, typename T> +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> +{ + using serializer = typename BasicJsonType::template json_serializer<T, void>; + + static constexpr bool value = + is_detected_exact<void, from_json_function, serializer, + const BasicJsonType&, T&>::value; +}; + +// This trait checks if JSONSerializer<T>::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template<typename BasicJsonType, typename T, typename = void> +struct has_non_default_from_json : std::false_type {}; + +template<typename BasicJsonType, typename T> +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> +{ + using serializer = typename BasicJsonType::template json_serializer<T, void>; + + static constexpr bool value = + is_detected_exact<T, from_json_function, serializer, + const BasicJsonType&>::value; +}; + +// This trait checks if BasicJsonType::json_serializer<T>::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template<typename BasicJsonType, typename T, typename = void> +struct has_to_json : std::false_type {}; + +template<typename BasicJsonType, typename T> +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> +{ + using serializer = typename BasicJsonType::template json_serializer<T, void>; + + static constexpr bool value = + is_detected_exact<void, to_json_function, serializer, BasicJsonType&, + T>::value; +}; + +template<typename T> +using detect_key_compare = typename T::key_compare; + +template<typename T> +struct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {}; + +// obtains the actual object key comparator +template<typename BasicJsonType> +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare<object_t>::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template<typename BasicJsonType> +using actual_object_comparator_t = typename actual_object_comparator<BasicJsonType>::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template<typename T> +struct char_traits : std::char_traits<T> +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits<unsigned char> : std::char_traits<char> +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast<int_type>(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast<char_type>(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast<int_type>(std::char_traits<char>::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits<signed char> : std::char_traits<char> +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast<int_type>(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast<char_type>(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast<int_type>(std::char_traits<char>::eof()); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template<class...> struct conjunction : std::true_type { }; +template<class B> struct conjunction<B> : B { }; +template<class B, class... Bn> +struct conjunction<B, Bn...> +: std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template<class B> struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template <typename T> +struct is_default_constructible : std::is_default_constructible<T> {}; + +template <typename T1, typename T2> +struct is_default_constructible<std::pair<T1, T2>> + : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {}; + +template <typename T1, typename T2> +struct is_default_constructible<const std::pair<T1, T2>> + : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {}; + +template <typename... Ts> +struct is_default_constructible<std::tuple<Ts...>> + : conjunction<is_default_constructible<Ts>...> {}; + +template <typename... Ts> +struct is_default_constructible<const std::tuple<Ts...>> + : conjunction<is_default_constructible<Ts>...> {}; + +template <typename T, typename... Args> +struct is_constructible : std::is_constructible<T, Args...> {}; + +template <typename T1, typename T2> +struct is_constructible<std::pair<T1, T2>> : is_default_constructible<std::pair<T1, T2>> {}; + +template <typename T1, typename T2> +struct is_constructible<const std::pair<T1, T2>> : is_default_constructible<const std::pair<T1, T2>> {}; + +template <typename... Ts> +struct is_constructible<std::tuple<Ts...>> : is_default_constructible<std::tuple<Ts...>> {}; + +template <typename... Ts> +struct is_constructible<const std::tuple<Ts...>> : is_default_constructible<const std::tuple<Ts...>> {}; + +template<typename T, typename = void> +struct is_iterator_traits : std::false_type {}; + +template<typename T> +struct is_iterator_traits<iterator_traits<T>> +{ + private: + using traits = iterator_traits<T>; + + public: + static constexpr auto value = + is_detected<value_type_t, traits>::value && + is_detected<difference_type_t, traits>::value && + is_detected<pointer_t, traits>::value && + is_detected<iterator_category_t, traits>::value && + is_detected<reference_t, traits>::value; +}; + +template<typename T> +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference<T>::type; + + using iterator = detected_t<result_of_begin, t_ref>; + using sentinel = detected_t<result_of_end, t_ref>; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits<iterator_traits<iterator>>::value; + + public: + static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin; +}; + +template<typename R> +using iterator_t = enable_if_t<is_range<R>::value, result_of_begin<decltype(std::declval<R&>())>>; + +template<typename T> +using range_value_t = value_type_t<iterator_traits<iterator_t<T>>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template<typename T, typename = void> +struct is_complete_type : std::false_type {}; + +template<typename T> +struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {}; + +template<typename BasicJsonType, typename CompatibleObjectType, + typename = void> +struct is_compatible_object_type_impl : std::false_type {}; + +template<typename BasicJsonType, typename CompatibleObjectType> +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&& + is_detected<key_type_t, CompatibleObjectType>::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible<typename object_t::key_type, + typename CompatibleObjectType::key_type>::value && + is_constructible<typename object_t::mapped_type, + typename CompatibleObjectType::mapped_type>::value; +}; + +template<typename BasicJsonType, typename CompatibleObjectType> +struct is_compatible_object_type + : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {}; + +template<typename BasicJsonType, typename ConstructibleObjectType, + typename = void> +struct is_constructible_object_type_impl : std::false_type {}; + +template<typename BasicJsonType, typename ConstructibleObjectType> +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&& + is_detected<key_type_t, ConstructibleObjectType>::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible<ConstructibleObjectType>::value && + (std::is_move_assignable<ConstructibleObjectType>::value || + std::is_copy_assignable<ConstructibleObjectType>::value) && + (is_constructible<typename ConstructibleObjectType::key_type, + typename object_t::key_type>::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json<BasicJsonType, + typename ConstructibleObjectType::mapped_type>::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template<typename BasicJsonType, typename ConstructibleObjectType> +struct is_constructible_object_type + : is_constructible_object_type_impl<BasicJsonType, + ConstructibleObjectType> {}; + +template<typename BasicJsonType, typename CompatibleStringType> +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value; +}; + +template<typename BasicJsonType, typename ConstructibleStringType> +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval<ConstructibleStringType>()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible<laundered_type, typename BasicJsonType::string_t>, + is_detected_exact<typename BasicJsonType::string_t::value_type, + value_type_t, laundered_type >>::value; +}; + +template<typename BasicJsonType, typename CompatibleArrayType, typename = void> +struct is_compatible_array_type_impl : std::false_type {}; + +template<typename BasicJsonType, typename CompatibleArrayType> +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected<iterator_t, CompatibleArrayType>::value&& + is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value >> +{ + static constexpr bool value = + is_constructible<BasicJsonType, + range_value_t<CompatibleArrayType>>::value; +}; + +template<typename BasicJsonType, typename CompatibleArrayType> +struct is_compatible_array_type + : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType> {}; + +template<typename BasicJsonType, typename ConstructibleArrayType, typename = void> +struct is_constructible_array_type_impl : std::false_type {}; + +template<typename BasicJsonType, typename ConstructibleArrayType> +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t<std::is_same<ConstructibleArrayType, + typename BasicJsonType::value_type>::value >> + : std::true_type {}; + +template<typename BasicJsonType, typename ConstructibleArrayType> +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same<ConstructibleArrayType, + typename BasicJsonType::value_type>::value&& + !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value&& + is_default_constructible<ConstructibleArrayType>::value&& +(std::is_move_assignable<ConstructibleArrayType>::value || + std::is_copy_assignable<ConstructibleArrayType>::value)&& +is_detected<iterator_t, ConstructibleArrayType>::value&& +is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value&& +is_detected<range_value_t, ConstructibleArrayType>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value&& +is_complete_type < +detected_t<range_value_t, ConstructibleArrayType >>::value >> +{ + using value_type = range_value_t<ConstructibleArrayType>; + + static constexpr bool value = + std::is_same<value_type, + typename BasicJsonType::array_t::value_type>::value || + has_from_json<BasicJsonType, + value_type>::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template<typename BasicJsonType, typename ConstructibleArrayType> +struct is_constructible_array_type + : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType> {}; + +template<typename RealIntegerType, typename CompatibleNumberIntegerType, + typename = void> +struct is_compatible_integer_type_impl : std::false_type {}; + +template<typename RealIntegerType, typename CompatibleNumberIntegerType> +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral<RealIntegerType>::value&& + std::is_integral<CompatibleNumberIntegerType>::value&& + !std::is_same<bool, CompatibleNumberIntegerType>::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits<RealIntegerType>; + using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>; + + static constexpr auto value = + is_constructible<RealIntegerType, + CompatibleNumberIntegerType>::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template<typename RealIntegerType, typename CompatibleNumberIntegerType> +struct is_compatible_integer_type + : is_compatible_integer_type_impl<RealIntegerType, + CompatibleNumberIntegerType> {}; + +template<typename BasicJsonType, typename CompatibleType, typename = void> +struct is_compatible_type_impl: std::false_type {}; + +template<typename BasicJsonType, typename CompatibleType> +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t<is_complete_type<CompatibleType>::value >> +{ + static constexpr bool value = + has_to_json<BasicJsonType, CompatibleType>::value; +}; + +template<typename BasicJsonType, typename CompatibleType> +struct is_compatible_type + : is_compatible_type_impl<BasicJsonType, CompatibleType> {}; + +template<typename T1, typename T2> +struct is_constructible_tuple : std::false_type {}; + +template<typename T1, typename... Args> +struct is_constructible_tuple<T1, std::tuple<Args...>> : conjunction<is_constructible<T1, Args>...> {}; + +template<typename BasicJsonType, typename T> +struct is_json_iterator_of : std::false_type {}; + +template<typename BasicJsonType> +struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::iterator> : std::true_type {}; + +template<typename BasicJsonType> +struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::const_iterator> : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template<template <typename...> class Primary, typename T> +struct is_specialization_of : std::false_type {}; + +template<template <typename...> class Primary, typename... Args> +struct is_specialization_of<Primary, Primary<Args...>> : std::true_type {}; + +template<typename T> +using is_json_pointer = is_specialization_of<::nlohmann::json_pointer, uncvref_t<T>>; + +// checks if A and B are comparable using Compare functor +template<typename Compare, typename A, typename B, typename = void> +struct is_comparable : std::false_type {}; + +template<typename Compare, typename A, typename B> +struct is_comparable<Compare, A, B, void_t< +decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())), +decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>())) +>> : std::true_type {}; + +template<typename T> +using detect_is_transparent = typename T::is_transparent; + +// type trait to check if KeyType can be used as object key (without a BasicJsonType) +// see is_usable_as_basic_json_key_type below +template<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, + bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>> +using is_usable_as_key_type = typename std::conditional < + is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value + && !(ExcludeObjectKeyType && std::is_same<KeyType, + ObjectKeyType>::value) + && (!RequireTransparentComparator + || is_detected <detect_is_transparent, Comparator>::value) + && !is_json_pointer<KeyType>::value, + std::true_type, + std::false_type >::type; + +// type trait to check if KeyType can be used as object key +// true if: +// - KeyType is comparable with BasicJsonType::object_t::key_type +// - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type +// - the comparator is transparent or RequireTransparentComparator is false +// - KeyType is not a JSON iterator or json_pointer +template<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, + bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>> +using is_usable_as_basic_json_key_type = typename std::conditional < + is_usable_as_key_type<typename BasicJsonType::object_comparator_t, + typename BasicJsonType::object_t::key_type, KeyTypeCVRef, + RequireTransparentComparator, ExcludeObjectKeyType>::value + && !is_json_iterator_of<BasicJsonType, KeyType>::value, + std::true_type, + std::false_type >::type; + +template<typename ObjectType, typename KeyType> +using detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>())); + +// type trait to check if object_t has an erase() member functions accepting KeyType +template<typename BasicJsonType, typename KeyType> +using has_erase_with_key_type = typename std::conditional < + is_detected < + detect_erase_with_key_type, + typename BasicJsonType::object_t, KeyType >::value, + std::true_type, + std::false_type >::type; + +// a naive helper to check if a type is an ordered_map (exploits the fact that +// ordered_map inherits capacity() from std::vector) +template <typename T> +struct is_ordered_map +{ + using one = char; + + struct two + { + char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + }; + + template <typename C> static one test( decltype(&C::capacity) ) ; + template <typename C> static two test(...); + + enum { value = sizeof(test<T>(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) +}; + +// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324) +template < typename T, typename U, enable_if_t < !std::is_same<T, U>::value, int > = 0 > +T conditional_static_cast(U value) +{ + return static_cast<T>(value); +} + +template<typename T, typename U, enable_if_t<std::is_same<T, U>::value, int> = 0> +T conditional_static_cast(U value) +{ + return value; +} + +template<typename... Types> +using all_integral = conjunction<std::is_integral<Types>...>; + +template<typename... Types> +using all_signed = conjunction<std::is_signed<Types>...>; + +template<typename... Types> +using all_unsigned = conjunction<std::is_unsigned<Types>...>; + +// there's a disjunction trait in another PR; replace when merged +template<typename... Types> +using same_sign = std::integral_constant < bool, + all_signed<Types...>::value || all_unsigned<Types...>::value >; + +template<typename OfType, typename T> +using never_out_of_range = std::integral_constant < bool, + (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType))) + || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T)) >; + +template<typename OfType, typename T, + bool OfTypeSigned = std::is_signed<OfType>::value, + bool TSigned = std::is_signed<T>::value> +struct value_in_range_of_impl2; + +template<typename OfType, typename T> +struct value_in_range_of_impl2<OfType, T, false, false> +{ + static constexpr bool test(T val) + { + using CommonType = typename std::common_type<OfType, T>::type; + return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)()); + } +}; + +template<typename OfType, typename T> +struct value_in_range_of_impl2<OfType, T, true, false> +{ + static constexpr bool test(T val) + { + using CommonType = typename std::common_type<OfType, T>::type; + return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)()); + } +}; + +template<typename OfType, typename T> +struct value_in_range_of_impl2<OfType, T, false, true> +{ + static constexpr bool test(T val) + { + using CommonType = typename std::common_type<OfType, T>::type; + return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)()); + } +}; + +template<typename OfType, typename T> +struct value_in_range_of_impl2<OfType, T, true, true> +{ + static constexpr bool test(T val) + { + using CommonType = typename std::common_type<OfType, T>::type; + return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)()) + && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)()); + } +}; + +template<typename OfType, typename T, + bool NeverOutOfRange = never_out_of_range<OfType, T>::value, + typename = detail::enable_if_t<all_integral<OfType, T>::value>> +struct value_in_range_of_impl1; + +template<typename OfType, typename T> +struct value_in_range_of_impl1<OfType, T, false> +{ + static constexpr bool test(T val) + { + return value_in_range_of_impl2<OfType, T>::test(val); + } +}; + +template<typename OfType, typename T> +struct value_in_range_of_impl1<OfType, T, true> +{ + static constexpr bool test(T /*val*/) + { + return true; + } +}; + +template<typename OfType, typename T> +constexpr bool value_in_range_of(T val) +{ + return value_in_range_of_impl1<OfType, T>::test(val); +} + +template<bool Value> +using bool_constant = std::integral_constant<bool, Value>; + +/////////////////////////////////////////////////////////////////////////////// +// is_c_string +/////////////////////////////////////////////////////////////////////////////// + +namespace impl +{ + +template<typename T> +constexpr bool is_c_string() +{ + using TUnExt = typename std::remove_extent<T>::type; + using TUnCVExt = typename std::remove_cv<TUnExt>::type; + using TUnPtr = typename std::remove_pointer<T>::type; + using TUnCVPtr = typename std::remove_cv<TUnPtr>::type; + return + (std::is_array<T>::value && std::is_same<TUnCVExt, char>::value) + || (std::is_pointer<T>::value && std::is_same<TUnCVPtr, char>::value); +} + +} // namespace impl + +// checks whether T is a [cv] char */[cv] char[] C string +template<typename T> +struct is_c_string : bool_constant<impl::is_c_string<T>()> {}; + +template<typename T> +using is_c_string_uncvref = is_c_string<uncvref_t<T>>; + +/////////////////////////////////////////////////////////////////////////////// +// is_transparent +/////////////////////////////////////////////////////////////////////////////// + +namespace impl +{ + +template<typename T> +constexpr bool is_transparent() +{ + return is_detected<detect_is_transparent, T>::value; +} + +} // namespace impl + +// checks whether T has a member named is_transparent +template<typename T> +struct is_transparent : bool_constant<impl::is_transparent<T>()> {}; + +/////////////////////////////////////////////////////////////////////////////// + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/string_concat.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstring> // strlen +#include <string> // string +#include <utility> // forward + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/detected.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +inline std::size_t concat_length() +{ + return 0; +} + +template<typename... Args> +inline std::size_t concat_length(const char* cstr, const Args& ... rest); + +template<typename StringType, typename... Args> +inline std::size_t concat_length(const StringType& str, const Args& ... rest); + +template<typename... Args> +inline std::size_t concat_length(const char /*c*/, const Args& ... rest) +{ + return 1 + concat_length(rest...); +} + +template<typename... Args> +inline std::size_t concat_length(const char* cstr, const Args& ... rest) +{ + // cppcheck-suppress ignoredReturnValue + return ::strlen(cstr) + concat_length(rest...); +} + +template<typename StringType, typename... Args> +inline std::size_t concat_length(const StringType& str, const Args& ... rest) +{ + return str.size() + concat_length(rest...); +} + +template<typename OutStringType> +inline void concat_into(OutStringType& /*out*/) +{} + +template<typename StringType, typename Arg> +using string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ())); + +template<typename StringType, typename Arg> +using detect_string_can_append = is_detected<string_can_append, StringType, Arg>; + +template<typename StringType, typename Arg> +using string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ()); + +template<typename StringType, typename Arg> +using detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>; + +template<typename StringType, typename Arg> +using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end())); + +template<typename StringType, typename Arg> +using detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>; + +template<typename StringType, typename Arg> +using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size())); + +template<typename StringType, typename Arg> +using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>; + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 > +inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest); + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && !detect_string_can_append_op<OutStringType, Arg>::value + && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 > +inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest); + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && !detect_string_can_append_op<OutStringType, Arg>::value + && !detect_string_can_append_iter<OutStringType, Arg>::value + && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 > +inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest); + +template<typename OutStringType, typename Arg, typename... Args, + enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0> +inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest) +{ + out.append(std::forward<Arg>(arg)); + concat_into(out, std::forward<Args>(rest)...); +} + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && detect_string_can_append_op<OutStringType, Arg>::value, int > > +inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest) +{ + out += std::forward<Arg>(arg); + concat_into(out, std::forward<Args>(rest)...); +} + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && !detect_string_can_append_op<OutStringType, Arg>::value + && detect_string_can_append_iter<OutStringType, Arg>::value, int > > +inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest) +{ + out.append(arg.begin(), arg.end()); + concat_into(out, std::forward<Args>(rest)...); +} + +template < typename OutStringType, typename Arg, typename... Args, + enable_if_t < !detect_string_can_append<OutStringType, Arg>::value + && !detect_string_can_append_op<OutStringType, Arg>::value + && !detect_string_can_append_iter<OutStringType, Arg>::value + && detect_string_can_append_data<OutStringType, Arg>::value, int > > +inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest) +{ + out.append(arg.data(), arg.size()); + concat_into(out, std::forward<Args>(rest)...); +} + +template<typename OutStringType = std::string, typename... Args> +inline OutStringType concat(Args && ... args) +{ + OutStringType str; + str.reserve(concat_length(args...)); + concat_into(str, std::forward<Args>(args)...); + return str; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +// With -Wweak-vtables, Clang will complain about the exception classes as they +// have no out-of-line virtual method definitions and their vtable will be +// emitted in every translation unit. This issue cannot be fixed with a +// header-only library as there is no implementation file to move these +// functions to. As a result, we suppress this warning here to avoid client +// code to stumble over this. See https://github.com/nlohmann/json/issues/4087 +// for a discussion. +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +//////////////// +// exceptions // +//////////////// + +/// @brief general exception of the @ref basic_json class +/// @sa https://json.nlohmann.me/api/basic_json/exception/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) + + static std::string name(const std::string& ename, int id_) + { + return concat("[json.exception.", ename, '.', std::to_string(id_), "] "); + } + + static std::string diagnostics(std::nullptr_t /*leaf_element*/) + { + return ""; + } + + template<typename BasicJsonType> + static std::string diagnostics(const BasicJsonType* leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector<std::string> tokens; + for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i) + { + if (¤t->m_parent->m_data.m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } + + case value_t::object: + { + for (const auto& element : *current->m_parent->m_data.m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } + + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } + + if (tokens.empty()) + { + return ""; + } + + auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return concat(a, '/', detail::escape(b)); + }); + + return concat('(', str, ") ", get_byte_positions(leaf_element)); +#else + return get_byte_positions(leaf_element); +#endif + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +#if JSON_DIAGNOSTIC_POSITIONS + template<typename BasicJsonType> + static std::string get_byte_positions(const BasicJsonType* leaf_element) + { + if ((leaf_element->start_pos() != std::string::npos) && (leaf_element->end_pos() != std::string::npos)) + { + return concat("(bytes ", std::to_string(leaf_element->start_pos()), "-", std::to_string(leaf_element->end_pos()), ") "); + } + return ""; + } +#else + template<typename BasicJsonType> + static std::string get_byte_positions(const BasicJsonType* leaf_element) + { + static_cast<void>(leaf_element); + return ""; + } +#endif +}; + +/// @brief exception indicating a parse error +/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("parse_error", id_), "parse error", + position_string(pos), ": ", exception::diagnostics(context), what_arg); + return {id_, pos.chars_read_total, w.c_str()}; + } + + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("parse_error", id_), "parse error", + (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), + ": ", exception::diagnostics(context), what_arg); + return {id_, byte_, w.c_str()}; + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return concat(" at line ", std::to_string(pos.lines_read + 1), + ", column ", std::to_string(pos.chars_read_current_line)); + } +}; + +/// @brief exception indicating errors with iterators +/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ +class invalid_iterator : public exception +{ + public: + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/// @brief exception indicating executing a member function with a wrong type +/// @sa https://json.nlohmann.me/api/basic_json/type_error/ +class type_error : public exception +{ + public: + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static type_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating access out of the defined range +/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ +class out_of_range : public exception +{ + public: + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating other library errors +/// @sa https://json.nlohmann.me/api/basic_json/other_error/ +class other_error : public exception +{ + public: + template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0> + static other_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/identity_tag.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// dispatching helper struct +template <class T> struct identity_tag {}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/std_fs.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/macro_scope.hpp> + + +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include <experimental/filesystem> +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::experimental::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#elif JSON_HAS_FILESYSTEM +#include <filesystem> // NOLINT(build/c++17) +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#endif + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +// include after macro_scope.hpp +#ifdef JSON_HAS_CPP_17 + #include <optional> // optional +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j)); + } + n = nullptr; +} + +#ifdef JSON_HAS_CPP_17 +template<typename BasicJsonType, typename T> +void from_json(const BasicJsonType& j, std::optional<T>& opt) +{ + if (j.is_null()) + { + opt = std::nullopt; + } + else + { + opt.emplace(j.template get<T>()); + } +} +#endif // JSON_HAS_CPP_17 + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic<ArithmeticType>::value&& + !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast<value_t>(j)) + { + case value_t::number_unsigned: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>()); + break; + } + case value_t::number_integer: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>()); + break; + } + case value_t::number_float: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j)); + } + b = *j.template get_ptr<const typename BasicJsonType::boolean_t*>(); +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + s = *j.template get_ptr<const typename BasicJsonType::string_t*>(); +} + +template < + typename BasicJsonType, typename StringType, + enable_if_t < + std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value + && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value + && !std::is_same<typename BasicJsonType::string_t, StringType>::value + && !is_json_ref<StringType>::value, int > = 0 > +inline void from_json(const BasicJsonType& j, StringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + + s = *j.template get_ptr<const typename BasicJsonType::string_t*>(); +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template<typename BasicJsonType, typename EnumType, + enable_if_t<std::is_enum<EnumType>::value, int> = 0> +inline void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type<EnumType>::type val; + get_arithmetic_value(j, val); + e = static_cast<EnumType>(val); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +// forward_list doesn't have an insert method +template<typename BasicJsonType, typename T, typename Allocator, + enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get<T>(); + }); +} + +// valarray doesn't have an insert method +template<typename BasicJsonType, typename T, + enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::valarray<T>& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get<T>(); + }); +} + +template<typename BasicJsonType, typename T, std::size_t N> +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get<T>(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get<T>(); + } +} + +template<typename BasicJsonType, typename T, std::size_t N1, std::size_t N2> +auto from_json(const BasicJsonType& j, T (&arr)[N1][N2]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get<T>(), void()) +{ + for (std::size_t i1 = 0; i1 < N1; ++i1) + { + for (std::size_t i2 = 0; i2 < N2; ++i2) + { + arr[i1][i2] = j.at(i1).at(i2).template get<T>(); + } + } +} + +template<typename BasicJsonType, typename T, std::size_t N1, std::size_t N2, std::size_t N3> +auto from_json(const BasicJsonType& j, T (&arr)[N1][N2][N3]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get<T>(), void()) +{ + for (std::size_t i1 = 0; i1 < N1; ++i1) + { + for (std::size_t i2 = 0; i2 < N2; ++i2) + { + for (std::size_t i3 = 0; i3 < N3; ++i3) + { + arr[i1][i2][i3] = j.at(i1).at(i2).at(i3).template get<T>(); + } + } + } +} + +template<typename BasicJsonType, typename T, std::size_t N1, std::size_t N2, std::size_t N3, std::size_t N4> +auto from_json(const BasicJsonType& j, T (&arr)[N1][N2][N3][N4]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get<T>(), void()) +{ + for (std::size_t i1 = 0; i1 < N1; ++i1) + { + for (std::size_t i2 = 0; i2 < N2; ++i2) + { + for (std::size_t i3 = 0; i3 < N3; ++i3) + { + for (std::size_t i4 = 0; i4 < N4; ++i4) + { + arr[i1][i2][i3][i4] = j.at(i1).at(i2).at(i3).at(i4).template get<T>(); + } + } + } + } +} + +template<typename BasicJsonType> +inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr<const typename BasicJsonType::array_t*>(); +} + +template<typename BasicJsonType, typename T, std::size_t N> +auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get<T>(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get<T>(); + } +} + +template<typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t< + std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()), + j.template get<typename ConstructibleArrayType::value_type>(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get<BasicJsonType>() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get<typename ConstructibleArrayType::value_type>(); + }); + arr = std::move(ret); +} + +template<typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t< + std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, + int> = 0> +inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get<BasicJsonType>() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get<typename ConstructibleArrayType::value_type>(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value&& + !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value&& + !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value&& + !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value&& + !is_basic_json<ConstructibleArrayType>::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get<typename ConstructibleArrayType::value_type>(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/) +{ + return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } }; +} + +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag<std::array<T, N>> tag) +-> decltype(from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {}); +} + +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j)); + } + + bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>(); +} + +template<typename BasicJsonType, typename ConstructibleObjectType, + enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0> +inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j)); + } + + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic<ArithmeticType>::value&& + !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value&& + !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value&& + !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value&& + !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, + int > = 0 > +inline void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast<value_t>(j)) + { + case value_t::number_unsigned: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>()); + break; + } + case value_t::number_integer: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>()); + break; + } + case value_t::number_float: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>()); + break; + } + case value_t::boolean: + { + val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::boolean_t*>()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template<typename BasicJsonType, typename... Args, std::size_t... Idx> +std::tuple<Args...> from_json_tuple_impl_base(BasicJsonType&& j, index_sequence<Idx...> /*unused*/) +{ + return std::make_tuple(std::forward<BasicJsonType>(j).at(Idx).template get<Args>()...); +} + +template<typename BasicJsonType> +std::tuple<> from_json_tuple_impl_base(BasicJsonType& /*unused*/, index_sequence<> /*unused*/) +{ + return {}; +} + +template < typename BasicJsonType, class A1, class A2 > +std::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward<BasicJsonType>(j).at(0).template get<A1>(), + std::forward<BasicJsonType>(j).at(1).template get<A2>()}; +} + +template<typename BasicJsonType, typename A1, typename A2> +inline void from_json_tuple_impl(BasicJsonType&& j, std::pair<A1, A2>& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward<BasicJsonType>(j), identity_tag<std::pair<A1, A2>> {}, priority_tag<0> {}); +} + +template<typename BasicJsonType, typename... Args> +std::tuple<Args...> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::tuple<Args...>> /*unused*/, priority_tag<2> /*unused*/) +{ + return from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {}); +} + +template<typename BasicJsonType, typename... Args> +inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple<Args...>& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {}); +} + +template<typename BasicJsonType, typename TupleRelated> +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>()); + } +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template<typename BasicJsonType> +inline void from_json(const BasicJsonType& j, std_fs::path& p) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + const auto& s = *j.template get_ptr<const typename BasicJsonType::string_t*>(); +#ifdef JSON_HAS_CPP_20 + p = std_fs::path(std::u8string_view(reinterpret_cast<const char8_t*>(s.data()), s.size())); +#else + p = std_fs::u8path(s); // accepts UTF-8 encoded std::string in C++17, deprecated in C++20 +#endif +} +#endif + +struct from_json_fn +{ + template<typename BasicJsonType, typename T> + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward<T>(val)))) + -> decltype(from_json(j, std::forward<T>(val))) + { + return from_json(j, std::forward<T>(val)); + } +}; + +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers) + detail::static_const<detail::from_json_fn>::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/conversions/to_json.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/macro_scope.hpp> +// JSON_HAS_CPP_17 +#ifdef JSON_HAS_CPP_17 + #include <optional> // optional +#endif + +#include <algorithm> // copy +#include <iterator> // begin, end +#include <string> // string +#include <tuple> // tuple, get +#include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include <utility> // move, forward, declval, pair +#include <valarray> // valarray +#include <vector> // vector + +// #include <nlohmann/detail/iterators/iteration_proxy.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // size_t +#include <iterator> // forward_iterator_tag +#include <tuple> // tuple_size, get, tuple_element +#include <utility> // move + +#if JSON_HAS_RANGES + #include <ranges> // enable_borrowed_range +#endif + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/string_utils.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // size_t +#include <string> // string, to_string + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename StringType> +void int_to_string(StringType& target, std::size_t value) +{ + // For ADL + using std::to_string; + target = to_string(value); +} + +template<typename StringType> +StringType to_string(std::size_t value) +{ + StringType result; + int_to_string(result, value); + return result; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename IteratorType> class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type *; + using reference = value_type &; + using iterator_category = std::forward_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference<decltype( std::declval<IteratorType>().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor{}; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + string_type empty_str{}; + + public: + explicit iteration_proxy_value() = default; + explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) + noexcept(std::is_nothrow_move_constructible<IteratorType>::value + && std::is_nothrow_default_constructible<string_type>::value) + : anchor(std::move(it)) + , array_index(array_index_) + {} + + iteration_proxy_value(iteration_proxy_value const&) = default; + iteration_proxy_value& operator=(iteration_proxy_value const&) = default; + // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions + iteration_proxy_value(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_constructible<IteratorType>::value + && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations) + iteration_proxy_value& operator=(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_assignable<IteratorType>::value + && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations) + ~iteration_proxy_value() = default; + + /// dereference operator (needed for range-based for) + const iteration_proxy_value& operator*() const + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto tmp = iteration_proxy_value(anchor, array_index); + ++anchor; + ++array_index; + return tmp; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template<typename IteratorType> class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::pointer container = nullptr; + + public: + explicit iteration_proxy() = default; + + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(&cont) {} + + iteration_proxy(iteration_proxy const&) = default; + iteration_proxy& operator=(iteration_proxy const&) = default; + iteration_proxy(iteration_proxy&&) noexcept = default; + iteration_proxy& operator=(iteration_proxy&&) noexcept = default; + ~iteration_proxy() = default; + + /// return iterator begin (needed for range-based for) + iteration_proxy_value<IteratorType> begin() const noexcept + { + return iteration_proxy_value<IteratorType>(container->begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value<IteratorType> end() const noexcept + { + return iteration_proxy_value<IteratorType>(container->end()); + } +}; + +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template<std::size_t N, typename IteratorType, enable_if_t<N == 0, int> = 0> +auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template<std::size_t N, typename IteratorType, enable_if_t<N == 1, int> = 0> +auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.value()) +{ + return i.value(); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ + +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template<typename IteratorType> +class tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp) + : public std::integral_constant<std::size_t, 2> {}; + +template<std::size_t N, typename IteratorType> +class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >> // NOLINT(cert-dcl58-cpp) +{ + public: + using type = decltype( + get<N>(std::declval < + ::nlohmann::detail::iteration_proxy_value<IteratorType >> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +} // namespace std + +#if JSON_HAS_RANGES + template <typename IteratorType> + inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy<IteratorType>> = true; +#endif + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/std_fs.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template<value_t> struct external_constructor; + +template<> +struct external_constructor<value_t::boolean> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::boolean; + j.m_data.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::string> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value = s; + j.assert_invariant(); + } + + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::binary> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::binary; + j.m_data.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); + } + + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::binary; + j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::number_float> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_float; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::number_unsigned> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_unsigned; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::number_integer> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_integer; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::array> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } + + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } + + template<typename BasicJsonType> + static void construct(BasicJsonType& j, const std::vector<bool>& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = value_t::array; + j.m_data.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_data.m_value.array->push_back(x); + j.set_parent(j.m_data.m_value.array->back()); + } + j.assert_invariant(); + } + + template<typename BasicJsonType, typename T, + enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray<T>& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = value_t::array; + j.m_data.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor<value_t::object> +{ + template<typename BasicJsonType> + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value = obj; + j.set_parents(); + j.assert_invariant(); + } + + template<typename BasicJsonType> + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +#ifdef JSON_HAS_CPP_17 +template<typename BasicJsonType, typename T, + enable_if_t<std::is_constructible<BasicJsonType, T>::value, int> = 0> +void to_json(BasicJsonType& j, const std::optional<T>& opt) noexcept +{ + if (opt.has_value()) + { + j = *opt; + } + else + { + j = nullptr; + } +} +#endif + +template<typename BasicJsonType, typename T, + enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value, int> = 0> +inline void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor<value_t::boolean>::construct(j, b); +} + +template < typename BasicJsonType, typename BoolRef, + enable_if_t < + ((std::is_same<std::vector<bool>::reference, BoolRef>::value + && !std::is_same <std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value) + || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value + && !std::is_same <detail::uncvref_t<std::vector<bool>::const_reference>, + typename BasicJsonType::boolean_t >::value)) + && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int > = 0 > +inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept +{ + external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b)); +} + +template<typename BasicJsonType, typename CompatibleString, + enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0> +inline void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor<value_t::string>::construct(j, s); +} + +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor<value_t::string>::construct(j, std::move(s)); +} + +template<typename BasicJsonType, typename FloatType, + enable_if_t<std::is_floating_point<FloatType>::value, int> = 0> +inline void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val)); +} + +template<typename BasicJsonType, typename CompatibleNumberUnsignedType, + enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val)); +} + +template<typename BasicJsonType, typename CompatibleNumberIntegerType, + enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val)); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template<typename BasicJsonType, typename EnumType, + enable_if_t<std::is_enum<EnumType>::value, int> = 0> +inline void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type<EnumType>::type; + static constexpr value_t integral_value_t = std::is_unsigned<underlying_type>::value ? value_t::number_unsigned : value_t::number_integer; + external_constructor<integral_value_t>::construct(j, static_cast<underlying_type>(e)); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, const std::vector<bool>& e) +{ + external_constructor<value_t::array>::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type<BasicJsonType, + CompatibleArrayType>::value&& + !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&& + !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value&& + !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&& + !is_basic_json<CompatibleArrayType>::value, + int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor<value_t::array>::construct(j, arr); +} + +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor<value_t::binary>::construct(j, bin); +} + +template<typename BasicJsonType, typename T, + enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0> +inline void to_json(BasicJsonType& j, const std::valarray<T>& arr) +{ + external_constructor<value_t::array>::construct(j, std::move(arr)); +} + +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor<value_t::array>::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value, int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor<value_t::object>::construct(j, obj); +} + +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor<value_t::object>::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible<typename BasicJsonType::string_t, + const T(&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor<value_t::array>::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 > +inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template<typename BasicJsonType, typename T, + enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value, int> = 0> +inline void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template<typename BasicJsonType, typename Tuple, std::size_t... Idx> +inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...> /*unused*/) +{ + j = { std::get<Idx>(t)... }; +} + +template<typename BasicJsonType, typename Tuple> +inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& /*unused*/, index_sequence<> /*unused*/) +{ + using array_t = typename BasicJsonType::array_t; + j = array_t(); +} + +template<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value, int > = 0> +inline void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence<std::tuple_size<T>::value> {}); +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template<typename BasicJsonType> +inline void to_json(BasicJsonType& j, const std_fs::path& p) +{ +#ifdef JSON_HAS_CPP_20 + const std::u8string s = p.u8string(); + j = std::string(s.begin(), s.end()); +#else + j = p.u8string(); // returns std::string in C++17 +#endif +} +#endif + +struct to_json_fn +{ + template<typename BasicJsonType, typename T> + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val)))) + -> decltype(to_json(j, std::forward<T>(val)), void()) + { + return to_json(j, std::forward<T>(val)); + } +}; +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers) + detail::static_const<detail::to_json_fn>::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/identity_tag.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @sa https://json.nlohmann.me/api/adl_serializer/ +template<typename ValueType, typename> +struct adl_serializer +{ + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template<typename BasicJsonType, typename TargetType = ValueType> + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val))) + -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void()) + { + ::nlohmann::from_json(std::forward<BasicJsonType>(j), val); + } + + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template<typename BasicJsonType, typename TargetType = ValueType> + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))) + -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})) + { + return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}); + } + + /// @brief convert any value type to a JSON value + /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ + template<typename BasicJsonType, typename TargetType = ValueType> + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val)))) + -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void()) + { + ::nlohmann::to_json(j, std::forward<TargetType>(val)); + } +}; + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/byte_container_with_subtype.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstdint> // uint8_t, uint64_t +#include <tuple> // tie +#include <utility> // move + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief an internal type for a backed binary type +/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ +template<typename BinaryType> +class byte_container_with_subtype : public BinaryType +{ + public: + using container_type = BinaryType; + using subtype_type = std::uint64_t; + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) == + std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /// @brief sets the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ + void set_subtype(subtype_type subtype_) noexcept + { + m_subtype = subtype_; + m_has_subtype = true; + } + + /// @brief return the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ + constexpr subtype_type subtype() const noexcept + { + return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1); + } + + /// @brief return whether the value has a subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /// @brief clears the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/conversions/from_json.hpp> + +// #include <nlohmann/detail/conversions/to_json.hpp> + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/hash.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstdint> // uint8_t +#include <cstddef> // size_t +#include <functional> // hash + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template<typename BasicJsonType> +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast<std::size_t>(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash<string_t> {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash<bool> {}(j.template get<bool>()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash<number_unsigned_t> {}(j.template get<number_unsigned_t>()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_float: + { + const auto h = std::hash<number_float_t> {}(j.template get<number_float_t>()); + return combine(type, h); + } + + case BasicJsonType::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash<bool> {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast<std::size_t>(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash<std::uint8_t> {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE + } +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/input/binary_reader.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // generate_n +#include <array> // array +#include <cmath> // ldexp +#include <cstddef> // size_t +#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t +#include <cstdio> // snprintf +#include <cstring> // memcpy +#include <iterator> // back_inserter +#include <limits> // numeric_limits +#include <string> // char_traits, string +#include <utility> // make_pair, move +#include <vector> // vector +#ifdef __cpp_lib_byteswap + #include <bit> //byteswap +#endif + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/input/input_adapters.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <array> // array +#include <cstddef> // size_t +#include <cstring> // strlen +#include <iterator> // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include <memory> // shared_ptr, make_shared, addressof +#include <numeric> // accumulate +#include <string> // string, char_traits +#include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include <utility> // pair, declval + +#ifndef JSON_NO_IO + #include <cstdio> // FILE * + #include <istream> // istream +#endif // JSON_NO_IO + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/iterators/iterator_traits.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata }; + +//////////////////// +// input adapters // +//////////////////// + +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + { + JSON_ASSERT(m_file != nullptr); + } + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; + + std::char_traits<char>::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + // returns the number of characters successfully read + template<class T> + std::size_t get_elements(T* dest, std::size_t count = 1) + { + return fread(dest, 1, sizeof(T) * count, m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits<char>::to_int_type, to + // ensure that std::char_traits<char>::eof() and the character 0xFF do not + // end up as the same value, e.g. 0xFFFFFFFF. + std::char_traits<char>::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + template<class T> + std::size_t get_elements(T* dest, std::size_t count = 1) + { + auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T)))); + if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T))) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; +#endif // JSON_NO_IO + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template<typename IteratorType> +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits<IteratorType>::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) + {} + + typename char_traits<char_type>::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = char_traits<char_type>::to_int_type(*current); + std::advance(current, 1); + return result; + } + + return char_traits<char_type>::eof(); + } + + // for general iterators, we cannot really do something better than falling back to processing the range one-by-one + template<class T> + std::size_t get_elements(T* dest, std::size_t count = 1) + { + auto* ptr = reinterpret_cast<char*>(dest); + for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index) + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + ptr[read_index] = static_cast<char>(*current); + std::advance(current, 1); + } + else + { + return read_index; + } + } + return count * sizeof(T); + } + + private: + IteratorType current; + IteratorType end; + + template<typename BaseInputAdapter, size_t T> + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } +}; + +template<typename BaseInputAdapter, size_t T> +struct wide_string_input_helper; + +template<typename BaseInputAdapter> +struct wide_string_input_helper<BaseInputAdapter, 4> +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits<char>::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | ((static_cast<unsigned int>(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template<typename BaseInputAdapter> +struct wide_string_input_helper<BaseInputAdapter, 2> +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits<char>::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u))); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u))); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast<unsigned int>(input.get_character()); + const auto charcode = 0x10000u + (((static_cast<unsigned int>(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input adapter to convert wide character types into individual bytes. +template<typename BaseInputAdapter, typename WideCharType> +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits<char>::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer<sizeof(WideCharType)>(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + // parsing binary with wchar doesn't make sense, but since the parsing mode can be runtime, we need something here + template<class T> + std::size_t get_elements(T* /*dest*/, std::size_t /*count*/ = 1) + { + JSON_THROW(parse_error::create(112, 1, "wide string type cannot be interpreted as binary data", nullptr)); + } + + private: + BaseInputAdapter base_adapter; + + template<size_t T> + void fill_buffer() + { + wide_string_input_helper<BaseInputAdapter, T>::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array<std::char_traits<char>::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + +template<typename IteratorType, typename Enable = void> +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits<iterator_type>::value_type; + using adapter_type = iterator_input_adapter<iterator_type>; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template<typename T> +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits<T>::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template<typename IteratorType> +struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits<iterator_type>::value_type; + using base_adapter_type = iterator_input_adapter<iterator_type>; + using adapter_type = wide_string_input_adapter<base_adapter_type, char_type>; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template<typename IteratorType> +typename iterator_input_adapter_factory<IteratorType>::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory<IteratorType>; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope + +namespace container_input_adapter_factory_impl +{ + +using std::begin; +using std::end; + +template<typename ContainerType, typename Enable = void> +struct container_input_adapter_factory {}; + +template<typename ContainerType> +struct container_input_adapter_factory< ContainerType, + void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))); + + static adapter_type create(const ContainerType& container) +{ + return input_adapter(begin(container), end(container)); +} + }; + +} // namespace container_input_adapter_factory_impl + +template<typename ContainerType> +typename container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::create(container); +} + +// specialization for std::string +using string_input_adapter_type = decltype(input_adapter(std::declval<std::string>())); + +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + if (file == nullptr) + { + JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); + } + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} +#endif // JSON_NO_IO + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer<CharT>::value&& + !std::is_array<CharT>::value&& + std::is_integral<typename std::remove_pointer<CharT>::type>::value&& + sizeof(typename std::remove_pointer<CharT>::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + if (b == nullptr) + { + JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); + } + auto length = std::strlen(reinterpret_cast<const char*>(b)); + const auto* ptr = reinterpret_cast<const char*>(b); + return input_adapter(ptr, ptr + length); // cppcheck-suppress[nullPointerArithmeticRedundantCheck] +} + +template<typename T, std::size_t N> +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitly cast +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer<CharT>::value&& + std::is_integral<typename std::remove_pointer<CharT>::type>::value&& + sizeof(typename std::remove_pointer<CharT>::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l) {} + + template<class IteratorType, + typename std::enable_if< + std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + } + + private: + contiguous_bytes_input_adapter ia; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/input/json_sax.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> +#include <string> // string +#include <type_traits> // enable_if_t +#include <utility> // move +#include <vector> // vector + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/input/lexer.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <array> // array +#include <clocale> // localeconv +#include <cstddef> // size_t +#include <cstdio> // snprintf +#include <cstdlib> // strtof, strtod, strtold, strtoll, strtoull +#include <initializer_list> // initializer_list +#include <string> // char_traits, string +#include <utility> // move +#include <vector> // vector + +// #include <nlohmann/detail/input/input_adapters.hpp> + +// #include <nlohmann/detail/input/position_t.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////// +// lexer // +/////////// + +template<typename BasicJsonType> +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return "<uninitialized>"; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return "<parse error>"; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template<typename BasicJsonType, typename InputAdapterType> +class lexer : public lexer_base<BasicJsonType> +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename char_traits<char_type>::int_type; + + public: + using token_type = typename lexer_base<BasicJsonType>::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast<char_int_type>(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list<char_int_type> ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 8259. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case char_traits<char_type>::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast<int>( + // high surrogate occupies the most significant 22 bits + (static_cast<unsigned int>(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast<unsigned int>(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result, so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast<char_int_type>(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast<char_int_type>(0xC0u | (static_cast<unsigned int>(codepoint) >> 6u))); + add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast<char_int_type>(0xE0u | (static_cast<unsigned int>(codepoint) >> 12u))); + add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu))); + add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast<char_int_type>(0xF0u | (static_cast<unsigned int>(codepoint) >> 18u))); + add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 12u) & 0x3Fu))); + add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu))); + add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case char_traits<char_type>::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case char_traits<char_type>::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 8259. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 8259. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] `goto` is used in this function to implement the number-parsing state machine described above. By design, any finite input will eventually reach the "done" state or return token_type::parse_error. In each intermediate state, 1 byte of the input is appended to the token_buffer vector, and only the already initialized variables token_buffer, number_type, and error_message are manipulated. + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + decimal_point_position = token_buffer.size() - 1; + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + decimal_point_position = token_buffer.size() - 1; + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; // NOLINT(misc-const-correctness,cppcoreguidelines-pro-type-vararg,hicpp-vararg) + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno != ERANGE) + { + value_unsigned = static_cast<number_unsigned_t>(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno != ERANGE) + { + value_integer = static_cast<number_integer_t>(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(char_traits<char_type>::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + decimal_point_position = std::string::npos; + token_string.push_back(char_traits<char_type>::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `char_traits<char>::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof())) + { + token_string.push_back(char_traits<char_type>::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast<typename string_t::value_type>(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + // translate decimal points from locale back to '.' (#4084) + if (decimal_point_char != '.' && decimal_point_position != std::string::npos) + { + token_buffer[decimal_point_position] = '.'; + } + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast<unsigned char>(c) <= '\x1F') + { + // escape control characters + std::array<char, 9> cs{{}}; + static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast<std::string::value_type>(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case char_traits<char_type>::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = char_traits<char_type>::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector<char_type> token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; + /// the position of the decimal point in the input + std::size_t decimal_point_position = std::string::npos; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template<typename BasicJsonType> +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief a floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string value was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string value. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary value was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary value. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; +}; + +namespace detail +{ +constexpr std::size_t unknown_size() +{ + return (std::numeric_limits<std::size_t>::max)(); +} + +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template<typename BasicJsonType, typename InputAdapterType> +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using lexer_t = lexer<BasicJsonType, InputAdapterType>; + + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true, lexer_t* lexer_ = nullptr) + : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + +#if JSON_DIAGNOSTIC_POSITIONS + // Manually set the start position of the object here. + // Ensure this is after the call to handle_value to ensure correct start position. + if (m_lexer_ref) + { + // Lexer has read the first character of the object, so + // subtract 1 from the position to get the correct start position. + ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; + } +#endif + + if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + +#if JSON_DIAGNOSTIC_POSITIONS + if (m_lexer_ref) + { + // Lexer's position is past the closing brace, so set that as the end position. + ref_stack.back()->end_position = m_lexer_ref->get_position(); + } +#endif + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + +#if JSON_DIAGNOSTIC_POSITIONS + // Manually set the start position of the array here. + // Ensure this is after the call to handle_value to ensure correct start position. + if (m_lexer_ref) + { + ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; + } +#endif + + if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool end_array() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_array()); + +#if JSON_DIAGNOSTIC_POSITIONS + if (m_lexer_ref) + { + // Lexer's position is past the closing bracket, so set that as the end position. + ref_stack.back()->end_position = m_lexer_ref->get_position(); + } +#endif + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + template<class Exception> + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast<void>(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + +#if JSON_DIAGNOSTIC_POSITIONS + void handle_diagnostic_positions_for_json_value(BasicJsonType& v) + { + if (m_lexer_ref) + { + // Lexer has read past the current field value, so set the end position to the current position. + // The start position will be set below based on the length of the string representation + // of the value. + v.end_position = m_lexer_ref->get_position(); + + switch (v.type()) + { + case value_t::boolean: + { + // 4 and 5 are the string length of "true" and "false" + v.start_position = v.end_position - (v.m_data.m_value.boolean ? 4 : 5); + break; + } + + case value_t::null: + { + // 4 is the string length of "null" + v.start_position = v.end_position - 4; + break; + } + + case value_t::string: + { + // include the length of the quotes, which is 2 + v.start_position = v.end_position - v.m_data.m_value.string->size() - 2; + break; + } + + // As we handle the start and end positions for values created during parsing, + // we do not expect the following value type to be called. Regardless, set the positions + // in case this is created manually or through a different constructor. Exclude from lcov + // since the exact condition of this switch is esoteric. + // LCOV_EXCL_START + case value_t::discarded: + { + v.end_position = std::string::npos; + v.start_position = v.end_position; + break; + } + // LCOV_EXCL_STOP + case value_t::binary: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + { + v.start_position = v.end_position - m_lexer_ref->get_string().size(); + break; + } + case value_t::object: + case value_t::array: + { + // object and array are handled in start_object() and start_array() handlers + // skip setting the values here. + break; + } + default: // LCOV_EXCL_LINE + // Handle all possible types discretely, default handler should never be reached. + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert,-warnings-as-errors) LCOV_EXCL_LINE + } + } + } +#endif + + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template<typename Value> + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward<Value>(v)); + +#if JSON_DIAGNOSTIC_POSITIONS + handle_diagnostic_positions_for_json_value(root); +#endif + + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v)); + +#if JSON_DIAGNOSTIC_POSITIONS + handle_diagnostic_positions_for_json_value(ref_stack.back()->m_data.m_value.array->back()); +#endif + + return &(ref_stack.back()->m_data.m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward<Value>(v)); + +#if JSON_DIAGNOSTIC_POSITIONS + handle_diagnostic_positions_for_json_value(*object_element); +#endif + + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector<BasicJsonType*> ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// the lexer reference to obtain the current position + lexer_t* m_lexer_ref = nullptr; +}; + +template<typename BasicJsonType, typename InputAdapterType> +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + using lexer_t = lexer<BasicJsonType, InputAdapterType>; + + json_sax_dom_callback_parser(BasicJsonType& r, + parser_callback_t cb, + const bool allow_exceptions_ = true, + lexer_t* lexer_ = nullptr) + : root(r), callback(std::move(cb)), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + if (ref_stack.back()) + { + +#if JSON_DIAGNOSTIC_POSITIONS + // Manually set the start position of the object here. + // Ensure this is after the call to handle_value to ensure correct start position. + if (m_lexer_ref) + { + // Lexer has read the first character of the object, so + // subtract 1 from the position to get the correct start position. + ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; + } +#endif + + // check object limit + if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + } + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back()) + { + if (!callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + +#if JSON_DIAGNOSTIC_POSITIONS + // Set start/end positions for discarded object. + handle_diagnostic_positions_for_json_value(*ref_stack.back()); +#endif + } + else + { + +#if JSON_DIAGNOSTIC_POSITIONS + if (m_lexer_ref) + { + // Lexer's position is past the closing brace, so set that as the end position. + ref_stack.back()->end_position = m_lexer_ref->get_position(); + } +#endif + + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + if (ref_stack.back()) + { + +#if JSON_DIAGNOSTIC_POSITIONS + // Manually set the start position of the array here. + // Ensure this is after the call to handle_value to ensure correct start position. + if (m_lexer_ref) + { + // Lexer has read the first character of the array, so + // subtract 1 from the position to get the correct start position. + ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; + } +#endif + + // check array limit + if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (keep) + { + +#if JSON_DIAGNOSTIC_POSITIONS + if (m_lexer_ref) + { + // Lexer's position is past the closing bracket, so set that as the end position. + ref_stack.back()->end_position = m_lexer_ref->get_position(); + } +#endif + + ref_stack.back()->set_parents(); + } + else + { + // discard array + *ref_stack.back() = discarded; + +#if JSON_DIAGNOSTIC_POSITIONS + // Set start/end positions for discarded array. + handle_diagnostic_positions_for_json_value(*ref_stack.back()); +#endif + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->pop_back(); + } + + return true; + } + + template<class Exception> + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast<void>(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + +#if JSON_DIAGNOSTIC_POSITIONS + void handle_diagnostic_positions_for_json_value(BasicJsonType& v) + { + if (m_lexer_ref) + { + // Lexer has read past the current field value, so set the end position to the current position. + // The start position will be set below based on the length of the string representation + // of the value. + v.end_position = m_lexer_ref->get_position(); + + switch (v.type()) + { + case value_t::boolean: + { + // 4 and 5 are the string length of "true" and "false" + v.start_position = v.end_position - (v.m_data.m_value.boolean ? 4 : 5); + break; + } + + case value_t::null: + { + // 4 is the string length of "null" + v.start_position = v.end_position - 4; + break; + } + + case value_t::string: + { + // include the length of the quotes, which is 2 + v.start_position = v.end_position - v.m_data.m_value.string->size() - 2; + break; + } + + case value_t::discarded: + { + v.end_position = std::string::npos; + v.start_position = v.end_position; + break; + } + + case value_t::binary: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + { + v.start_position = v.end_position - m_lexer_ref->get_string().size(); + break; + } + + case value_t::object: + case value_t::array: + { + // object and array are handled in start_object() and start_array() handlers + // skip setting the values here. + break; + } + default: // LCOV_EXCL_LINE + // Handle all possible types discretely, default handler should never be reached. + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert,-warnings-as-errors) LCOV_EXCL_LINE + } + } + } +#endif + + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template<typename Value> + std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward<Value>(v)); + +#if JSON_DIAGNOSTIC_POSITIONS + handle_diagnostic_positions_for_json_value(value); +#endif + + // check callback + const bool keep = skip_callback || callback(static_cast<int>(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, & root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value)); + return {true, & (ref_stack.back()->m_data.m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector<BasicJsonType*> ref_stack {}; + /// stack to manage which values to keep + std::vector<bool> keep_stack {}; // NOLINT(readability-redundant-member-init) + /// stack to manage which object keys to keep + std::vector<bool> key_keep_stack {}; // NOLINT(readability-redundant-member-init) + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; + /// the lexer reference to obtain the current position + lexer_t* m_lexer_ref = nullptr; +}; + +template<typename BasicJsonType> +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = detail::unknown_size()) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = detail::unknown_size()) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/input/lexer.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/is_sax.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstdint> // size_t +#include <utility> // declval +#include <string> // string + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/meta/detected.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename T> +using null_function_t = decltype(std::declval<T&>().null()); + +template<typename T> +using boolean_function_t = + decltype(std::declval<T&>().boolean(std::declval<bool>())); + +template<typename T, typename Integer> +using number_integer_function_t = + decltype(std::declval<T&>().number_integer(std::declval<Integer>())); + +template<typename T, typename Unsigned> +using number_unsigned_function_t = + decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>())); + +template<typename T, typename Float, typename String> +using number_float_function_t = decltype(std::declval<T&>().number_float( + std::declval<Float>(), std::declval<const String&>())); + +template<typename T, typename String> +using string_function_t = + decltype(std::declval<T&>().string(std::declval<String&>())); + +template<typename T, typename Binary> +using binary_function_t = + decltype(std::declval<T&>().binary(std::declval<Binary&>())); + +template<typename T> +using start_object_function_t = + decltype(std::declval<T&>().start_object(std::declval<std::size_t>())); + +template<typename T, typename String> +using key_function_t = + decltype(std::declval<T&>().key(std::declval<String&>())); + +template<typename T> +using end_object_function_t = decltype(std::declval<T&>().end_object()); + +template<typename T> +using start_array_function_t = + decltype(std::declval<T&>().start_array(std::declval<std::size_t>())); + +template<typename T> +using end_array_function_t = decltype(std::declval<T&>().end_array()); + +template<typename T, typename Exception> +using parse_error_function_t = decltype(std::declval<T&>().parse_error( + std::declval<std::size_t>(), std::declval<const std::string&>(), + std::declval<const Exception&>())); + +template<typename SAX, typename BasicJsonType> +struct is_sax +{ + private: + static_assert(is_basic_json<BasicJsonType>::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact<bool, null_function_t, SAX>::value && + is_detected_exact<bool, boolean_function_t, SAX>::value && + is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value && + is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value && + is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value && + is_detected_exact<bool, string_function_t, SAX, string_t>::value && + is_detected_exact<bool, binary_function_t, SAX, binary_t>::value && + is_detected_exact<bool, start_object_function_t, SAX>::value && + is_detected_exact<bool, key_function_t, SAX, string_t>::value && + is_detected_exact<bool, end_object_function_t, SAX>::value && + is_detected_exact<bool, start_array_function_t, SAX>::value && + is_detected_exact<bool, end_array_function_t, SAX>::value && + is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value; +}; + +template<typename SAX, typename BasicJsonType> +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json<BasicJsonType>::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact<bool, null_function_t, SAX>::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact<bool, number_integer_function_t, SAX, + number_integer_t>::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact<bool, number_unsigned_function_t, SAX, + number_unsigned_t>::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact<bool, number_float_function_t, SAX, + number_float_t, string_t>::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact<bool, string_function_t, SAX, string_t>::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact<bool, binary_function_t, SAX, binary_t>::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore, ///< ignore tags + store ///< store tags as binary type +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianness(int num = 1) noexcept +{ + return *reinterpret_cast<char*>(&num) == 1; +} + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template<typename BasicJsonType, typename InputAdapterType, typename SAX = json_sax_dom_parser<BasicJsonType, InputAdapterType>> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename char_traits<char_type>::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format) + { + (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return whether parsing was successful + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + case input_format_t::bjdata: + result = parse_ubjson_internal(); + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof())) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, + exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr)); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number<std::int32_t, true>(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast<typename string_t::value_type>(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template<typename NumberType> + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr)); + } + + return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in,out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template<typename NumberType> + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr)); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number<std::uint8_t>(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number<double, true>(input_format_t::bson, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number<std::int32_t, true>(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number<std::int64_t, true>(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x11: // uint64 + { + std::uint64_t value{}; + return get_number<std::uint64_t, true>(input_format_t::bson, value) && sax->number_unsigned(value); + } + + default: // anything else not supported (yet) + { + std::array<char, 3> cr{{}}; + static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + const std::string cr_str{cr.data()}; + return sax->parse_error(element_type_parse_position, cr_str, + parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr)); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number<std::int32_t, true>(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case char_traits<char_type>::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast<number_unsigned_t>(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast<std::int8_t>(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) + - static_cast<number_integer_t>(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array( + conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(detail::unknown_size(), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(detail::unknown_size(), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + + case cbor_tag_handler_t::ignore: + { + // ignore binary subtype + switch (current) + { + case 0xD8: + { + std::uint8_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xD9: + { + std::uint16_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDA: + { + std::uint32_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDB: + { + std::uint64_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + case cbor_tag_handler_t::store: + { + binary_t b; + // use binary subtype and store in binary container + switch (current) + { + case 0xD8: + { + std::uint8_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype)); + break; + } + case 0xD9: + { + std::uint16_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype)); + break; + } + case 0xDA: + { + std::uint32_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype)); + break; + } + case 0xDB: + { + std::uint64_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype)); + break; + } + default: + return parse_cbor_internal(true, tag_handler); + } + get(); + return get_cbor_binary(b) && sax->binary(b); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast<unsigned char>(byte1_raw); + const auto byte2 = static_cast<unsigned char>(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast<unsigned int>((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits<double>::infinity() + : std::numeric_limits<double>::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast<number_float_t>(-val) + : static_cast<number_float_t>(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr)); + } + } + } + + /*! + @param[in] len the length of the array or detail::unknown_size() for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != detail::unknown_size()) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or detail::unknown_size() for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + if (len != 0) + { + string_t key; + if (len != detail::unknown_size()) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case char_traits<char_type>::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast<number_unsigned_t>(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast<std::size_t>(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast<std::size_t>(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast<std::size_t>(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast<std::size_t>(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast<std::int8_t>(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast<unsigned int>(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast<std::uint8_t>(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "string"), nullptr)); + } + + /*! + @param[out] dim an integer vector storing the ND array dimensions + @return whether reading ND array size vector is successful + */ + bool get_ubjson_ndarray_size(std::vector<size_t>& dim) + { + std::pair<std::size_t, char_int_type> size_and_type; + size_t dimlen = 0; + bool no_ndarray = true; + + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray))) + { + return false; + } + + if (size_and_type.first != npos) + { + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current))) + { + return false; + } + dim.push_back(dimlen); + get_ignore_noop(); + } + } + return true; + } + + /*! + @param[out] result determined size + @param[in,out] is_ndarray for input, `true` means already inside an ndarray vector + or ndarray dimension is not allowed; `false` means ndarray + is allowed; for output, `true` means an ndarray is found; + is_ndarray can only return `true` when its initial value + is `false` + @param[in] prefix type marker if already read, otherwise set to 0 + + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0) + { + if (prefix == 0) + { + prefix = get_ignore_noop(); + } + + switch (prefix) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast<std::size_t>(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast<std::size_t>(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast<std::size_t>(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + if (!value_in_range_of<std::size_t>(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = static_cast<std::size_t>(number); + return true; + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast<std::size_t>(number); + return true; + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = conditional_static_cast<std::size_t>(number); + return true; + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (!value_in_range_of<std::size_t>(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = detail::conditional_static_cast<std::size_t>(number); + return true; + } + + case '[': + { + if (input_format != input_format_t::bjdata) + { + break; + } + if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr)); + } + std::vector<size_t> dim; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim))) + { + return false; + } + if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector + { + result = dim.at(dim.size() - 1); + return true; + } + if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format + { + for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container + { + if ( i == 0 ) + { + result = 0; + return true; + } + } + + string_t key = "_ArraySize_"; + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size()))) + { + return false; + } + result = 1; + for (auto i : dim) + { + result *= i; + if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type() + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(i)))) + { + return false; + } + } + is_ndarray = true; + return sax->end_array(); + } + result = 0; + return true; + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "size"), nullptr)); + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + @param[in] inside_ndarray whether the parser is parsing an ND array dimensional vector + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& result, bool inside_ndarray = false) + { + result.first = npos; // size + result.second = 0; // type + bool is_ndarray = false; + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (input_format == input_format_t::bjdata + && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second))) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr)); + } + + const bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + if (inside_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray can not be recursive", "size"), nullptr)); + } + result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters + } + return is_error; + } + + if (current == '#') + { + const bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray requires both type and size", "size"), nullptr)); + } + return is_error; + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case char_traits<char_type>::eof(): // EOF + return unexpect_eof(input_format, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'B': // byte + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint8_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'h': + { + if (input_format != input_format_t::bjdata) + { + break; + } + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + + const auto byte1 = static_cast<unsigned char>(byte1_raw); + const auto byte2 = static_cast<unsigned char>(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast<unsigned int>((byte2 << 8u) + byte1); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits<double>::infinity() + : std::numeric_limits<double>::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast<number_float_t>(-val) + : static_cast<number_float_t>(val), ""); + } + + case 'd': + { + float number{}; + return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr)); + } + string_t s(1, static_cast<typename string_t::value_type>(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + break; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr)); + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair<std::size_t, char_int_type> size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata): + // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]} + + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + size_and_type.second &= ~(static_cast<char_int_type>(1) << 8); // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker + auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t) + { + return p.first < t; + }); + string_t key = "_ArrayType_"; + if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr)); + } + + string_t type = it->second; // sax->string() takes a reference + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type))) + { + return false; + } + + if (size_and_type.second == 'C' || size_and_type.second == 'B') + { + size_and_type.second = 'U'; + } + + key = "_ArrayData_"; + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) )) + { + return false; + } + + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + + return (sax->end_array() && sax->end_object()); + } + + // If BJData type marker is 'B' decode as binary + if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B') + { + binary_t result; + return get_binary(input_format, size_and_type.first, result) && sax->binary(result); + } + + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair<std::size_t, char_int_type> size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // do not accept ND-array size in objects in BJData + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr)); + } + + string_t key; + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + bool no_ndarray = true; + auto res = get_ubjson_size_value(size, no_ndarray); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector<char> number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + number_vector.push_back(static_cast<char>(current)); + } + + // parse number string + using ia_type = decltype(detail::input_adapter(number_vector)); + auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base<BasicJsonType>::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + case token_type::uninitialized: + case token_type::literal_true: + case token_type::literal_false: + case token_type::literal_null: + case token_type::value_string: + case token_type::begin_array: + case token_type::begin_object: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::parse_error: + case token_type::end_of_input: + case token_type::literal_or_value: + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `char_traits<char_type>::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @brief get_to read into a primitive type + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns false instead + + @return bool, whether the read was successful + */ + template<class T> + bool get_to(T& dest, const input_format_t format, const char* context) + { + auto new_chars_read = ia.get_elements(&dest); + chars_read += new_chars_read; + if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T))) + { + // in case of failure, advance position by 1 to report failing location + ++chars_read; + sax->parse_error(chars_read, "<end of file>", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); + return false; + } + return true; + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + template<class NumberType> + static void byte_swap(NumberType& number) + { + constexpr std::size_t sz = sizeof(number); +#ifdef __cpp_lib_byteswap + if constexpr (sz == 1) + { + return; + } + else if constexpr(std::is_integral_v<NumberType>) + { + number = std::byteswap(number); + return; + } + else + { +#endif + auto* ptr = reinterpret_cast<std::uint8_t*>(&number); + for (std::size_t i = 0; i < sz / 2; ++i) + { + std::swap(ptr[i], ptr[sz - i - 1]); + } +#ifdef __cpp_lib_byteswap + } +#endif + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianness, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + On the other hand, BSON and BJData use little endian and should reorder + on big endian systems. + */ + template<typename NumberType, bool InputIsLittleEndian = false> + bool get_number(const input_format_t format, NumberType& result) + { + // read in the original format + + if (JSON_HEDLEY_UNLIKELY(!get_to(result, format, "number"))) + { + return false; + } + if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata)) + { + byte_swap(result); + } + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template<typename NumberType> + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast<typename string_t::value_type>(current)); + } + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template<typename NumberType> + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast<std::uint8_t>(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof())) + { + return sax->parse_error(chars_read, "<end of file>", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array<char, 3> cr{{}}; + static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + case input_format_t::bjdata: + error_msg += "BJData"; + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + return concat(error_msg, ' ', context, ": ", detail); + } + + private: + static JSON_INLINE_VARIABLE constexpr std::size_t npos = detail::unknown_size(); + + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = char_traits<char_type>::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// input format + const input_format_t input_format = input_format_t::json; + + /// the SAX parser + json_sax_t* sax = nullptr; + + // excluded markers in bjdata optimized type +#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \ + make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{') + +#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \ + make_array<bjd_type>( \ + bjd_type{'B', "byte"}, \ + bjd_type{'C', "char"}, \ + bjd_type{'D', "double"}, \ + bjd_type{'I', "int16"}, \ + bjd_type{'L', "int64"}, \ + bjd_type{'M', "uint64"}, \ + bjd_type{'U', "uint8"}, \ + bjd_type{'d', "single"}, \ + bjd_type{'i', "int8"}, \ + bjd_type{'l', "int32"}, \ + bjd_type{'m', "uint32"}, \ + bjd_type{'u', "uint16"}) + + JSON_PRIVATE_UNLESS_TESTED: + // lookup tables + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = + JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_; + + using bjd_type = std::pair<char_int_type, string_t>; + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = + JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_; + +#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ +#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ +}; + +#ifndef JSON_HAS_CPP_17 + template<typename BasicJsonType, typename InputAdapterType, typename SAX> + constexpr std::size_t binary_reader<BasicJsonType, InputAdapterType, SAX>::npos; +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/input/input_adapters.hpp> + +// #include <nlohmann/detail/input/lexer.hpp> + +// #include <nlohmann/detail/input/parser.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cmath> // isfinite +#include <cstdint> // uint8_t +#include <functional> // function +#include <string> // string +#include <utility> // move +#include <vector> // vector + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/input/input_adapters.hpp> + +// #include <nlohmann/detail/input/json_sax.hpp> + +// #include <nlohmann/detail/input/lexer.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/is_sax.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : std::uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template<typename BasicJsonType> +using parser_callback_t = + std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template<typename BasicJsonType, typename InputAdapterType> +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer<BasicJsonType, InputAdapterType>; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + parser_callback_t<BasicJsonType> cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(std::move(cb)) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser<BasicJsonType, InputAdapterType> sdp(result, callback, allow_exceptions, &m_lexer); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser<BasicJsonType, InputAdapterType> sdp(result, allow_exceptions, &m_lexer); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + + result.assert_invariant(); + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor<BasicJsonType> sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template<typename SAX> + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + return result; + } + + private: + template<typename SAX> + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector<bool> states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, concat("number overflow parsing '", m_lexer.get_token_string(), '\''), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr)); + } + case token_type::end_of_input: + { + if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); + } + case token_type::uninitialized: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::literal_or_value: + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), nullptr)); + } + + // states.back() is false -> object + + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), nullptr)); + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += concat("while parsing ", context, ' '); + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += concat(m_lexer.get_error_message(), "; last read: '", + m_lexer.get_token_string(), '\''); + } + else + { + error_msg += concat("unexpected ", lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += concat("; expected ", lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t<BasicJsonType> callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/iterators/internal_iterator.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/iterators/primitive_iterator.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // ptrdiff_t +#include <limits> // numeric_limits + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + JSON_PRIVATE_UNLESS_TESTED: + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template<typename BasicJsonType> struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/iterators/iter_impl.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <iterator> // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include <type_traits> // conditional, is_const, remove_const + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/iterators/internal_iterator.hpp> + +// #include <nlohmann/detail/iterators/primitive_iterator.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// forward declare, to be able to friend it later on +template<typename IteratorType> class iteration_proxy; +template<typename IteratorType> class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template<typename BasicJsonType> +class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + /// the iterator with BasicJsonType of different const-ness + using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>; + /// allow basic_json to access private members + friend other_iter_impl; + friend BasicJsonType; + friend iteration_proxy<iter_impl>; + friend iteration_proxy_value<iter_impl>; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value, + "iter_impl only accepts (const) basic_json"); + // superficial check for the LegacyBidirectionalIterator named requirement + static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value + && std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value, + "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement."); + + public: + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional<std::is_const<BasicJsonType>::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional<std::is_const<BasicJsonType>::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + iter_impl() = default; + ~iter_impl() = default; + iter_impl(iter_impl&&) noexcept = default; + iter_impl& operator=(iter_impl&&) noexcept = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl<const BasicJsonType>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl<const BasicJsonType>& other) noexcept + { + if (&other != this) + { + m_object = other.m_object; + m_it = other.m_it; + } + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept // NOLINT(cert-oop54-cpp) + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_data.m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_data.m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_data.m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_data.m_value.array->end(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); + return &*m_it.array_iterator; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr > + bool operator==(const IterImpl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493 + if (m_object == nullptr) + { + return true; + } + + switch (m_object->m_data.m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr > + bool operator!=(const IterImpl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493 + if (m_object == nullptr) + { + // the iterators are both value-initialized and are to be considered equal, but this function checks for smaller, so we return false + return false; + } + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object)); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre (1) The iterator is initialized; i.e. `m_object != nullptr`, or (2) both iterators are value-initialized. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object)); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object)); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + JSON_PRIVATE_UNLESS_TESTED: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/iterators/iteration_proxy.hpp> + +// #include <nlohmann/detail/iterators/json_reverse_iterator.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <cstddef> // ptrdiff_t +#include <iterator> // reverse_iterator +#include <utility> // declval + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template<typename Base> +class json_reverse_iterator : public std::reverse_iterator<Base> +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator<Base>; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast<json_reverse_iterator>(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast<json_reverse_iterator&>(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast<json_reverse_iterator>(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast<json_reverse_iterator&>(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast<json_reverse_iterator&>(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast<json_reverse_iterator>(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast<json_reverse_iterator>(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval<Base>().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/iterators/primitive_iterator.hpp> + +// #include <nlohmann/detail/json_custom_base_class.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <type_traits> // conditional, is_same + +// #include <nlohmann/detail/abi_macros.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief Default base class of the @ref basic_json class. + +So that the correct implementations of the copy / move ctors / assign operators +of @ref basic_json do not require complex case distinctions +(no base class / custom base class used as customization point), +@ref basic_json always has a base class. +By default, this class is used because it is empty and thus has no effect +on the behavior of @ref basic_json. +*/ +struct json_default_base {}; + +template<class T> +using json_base_class = typename std::conditional < + std::is_same<T, void>::value, + json_default_base, + T + >::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/json_pointer.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // all_of +#include <cctype> // isdigit +#include <cerrno> // errno, ERANGE +#include <cstdlib> // strtoull +#ifndef JSON_NO_IO + #include <iosfwd> // ostream +#endif // JSON_NO_IO +#include <limits> // max +#include <numeric> // accumulate +#include <string> // string +#include <utility> // move +#include <vector> // vector + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/string_escape.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document +/// @sa https://json.nlohmann.me/api/json_pointer/ +template<typename RefStringType> +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + template<typename> + friend class json_pointer; + + template<typename T> + struct string_t_helper + { + using type = T; + }; + + NLOHMANN_BASIC_JSON_TPL_DECLARATION + struct string_t_helper<NLOHMANN_BASIC_JSON_TPL> + { + using type = StringType; + }; + + public: + // for backwards compatibility accept BasicJsonType + using string_t = typename string_t_helper<RefStringType>::type; + + /// @brief create JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/ + explicit json_pointer(const string_t& s = "") + : reference_tokens(split(s)) + {} + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/to_string/ + string_t to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + string_t{}, + [](const string_t& a, const string_t& b) + { + return detail::concat(a, '/', detail::escape(b)); + }); + } + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string()) + operator string_t() const + { + return to_string(); + } + +#ifndef JSON_NO_IO + /// @brief write string representation of the JSON pointer to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr) + { + o << ptr.to_string(); + return o; + } +#endif + + /// @brief append another JSON pointer at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /// @brief append an unescaped reference token at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(string_t token) + { + push_back(std::move(token)); + return *this; + } + + /// @brief append an array index at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param) + { + return json_pointer(lhs) /= std::move(token); + } + + /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx) + { + return json_pointer(lhs) /= array_idx; + } + + /// @brief returns the parent of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /// @brief remove last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + reference_tokens.pop_back(); + } + + /// @brief return last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/back/ + const string_t& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + return reference_tokens.back(); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(const string_t& token) + { + reference_tokens.push_back(token); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(string_t&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /// @brief return whether pointer points to the root document + /// @sa https://json.nlohmann.me/api/json_pointer/empty/ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + template<typename BasicJsonType> + static typename BasicJsonType::size_type array_index(const string_t& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, detail::concat("array index '", s, "' must not begin with '0'"), nullptr)); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, detail::concat("array index '", s, "' is not a number"), nullptr)); + } + + const char* p = s.c_str(); + char* p_end = nullptr; // NOLINT(misc-const-correctness) + errno = 0; // strtoull doesn't reset errno + const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int) + if (p == p_end // invalid input or empty string + || errno == ERANGE // out of range + || JSON_HEDLEY_UNLIKELY(static_cast<std::size_t>(p_end - p) != s.size())) // incomplete read + { + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", s, "'"), nullptr)); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast<unsigned long long>((std::numeric_limits<size_type>::max)())) // NOLINT(runtime/int) + { + JSON_THROW(detail::out_of_range::create(410, detail::concat("array index ", s, " exceeds size_type"), nullptr)); // LCOV_EXCL_LINE + } + + return static_cast<size_type>(res); + } + + JSON_PRIVATE_UNLESS_TESTED: + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + private: + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + template<typename BasicJsonType> + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto* result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index<BasicJsonType>(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", &j)); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template<typename BasicJsonType> + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_data.m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token)); + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template<typename BasicJsonType> + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index<BasicJsonType>(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template<typename BasicJsonType> + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr)); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template<typename BasicJsonType> + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index<BasicJsonType>(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + template<typename BasicJsonType> + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index<BasicJsonType>(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector<string_t> split(const string_t& reference_string) + { + std::vector<string_t> result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr)); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == string_t::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == string_t::npos) + start = (slash == string_t::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != string_t::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr)); + } + } + + // finally, store the reference token + detail::unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + private: + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + template<typename BasicJsonType> + static void flatten(const string_t& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_data.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i) + { + flatten(detail::concat<string_t>(reference_string, '/', std::to_string(i)), + value.m_data.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_data.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_data.m_value.object) + { + flatten(detail::concat<string_t>(reference_string, '/', detail::escape(element.first)), element.second, result); + } + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + template<typename BasicJsonType> + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", &value)); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_data.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second)); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + // can't use conversion operator because of ambiguity + json_pointer<string_t> convert() const& + { + json_pointer<string_t> result; + result.reference_tokens = reference_tokens; + return result; + } + + json_pointer<string_t> convert()&& + { + json_pointer<string_t> result; + result.reference_tokens = std::move(reference_tokens); + return result; + } + + public: +#if JSON_HAS_THREE_WAY_COMPARISON + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template<typename RefStringTypeRhs> + bool operator==(const json_pointer<RefStringTypeRhs>& rhs) const noexcept + { + return reference_tokens == rhs.reference_tokens; + } + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer)) + bool operator==(const string_t& rhs) const + { + return *this == json_pointer(rhs); + } + + /// @brief 3-way compares two JSON pointers + template<typename RefStringTypeRhs> + std::strong_ordering operator<=>(const json_pointer<RefStringTypeRhs>& rhs) const noexcept // *NOPAD* + { + return reference_tokens <=> rhs.reference_tokens; // *NOPAD* + } +#else + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template<typename RefStringTypeLhs, typename RefStringTypeRhs> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept; + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template<typename RefStringTypeLhs, typename StringType> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template<typename RefStringTypeRhs, typename StringType> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const StringType& lhs, + const json_pointer<RefStringTypeRhs>& rhs); + + /// @brief compares two JSON pointers for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template<typename RefStringTypeLhs, typename RefStringTypeRhs> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept; + + /// @brief compares JSON pointer and string for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template<typename RefStringTypeLhs, typename StringType> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template<typename RefStringTypeRhs, typename StringType> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const StringType& lhs, + const json_pointer<RefStringTypeRhs>& rhs); + + /// @brief compares two JSON pointer for less-than + template<typename RefStringTypeLhs, typename RefStringTypeRhs> + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept; +#endif + + private: + /// the reference tokens + std::vector<string_t> reference_tokens; +}; + +#if !JSON_HAS_THREE_WAY_COMPARISON +// functions cannot be defined inside class due to ODR violations +template<typename RefStringTypeLhs, typename RefStringTypeRhs> +inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept +{ + return lhs.reference_tokens == rhs.reference_tokens; +} + +template<typename RefStringTypeLhs, + typename StringType = typename json_pointer<RefStringTypeLhs>::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, + const StringType& rhs) +{ + return lhs == json_pointer<RefStringTypeLhs>(rhs); +} + +template<typename RefStringTypeRhs, + typename StringType = typename json_pointer<RefStringTypeRhs>::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const StringType& lhs, + const json_pointer<RefStringTypeRhs>& rhs) +{ + return json_pointer<RefStringTypeRhs>(lhs) == rhs; +} + +template<typename RefStringTypeLhs, typename RefStringTypeRhs> +inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept +{ + return !(lhs == rhs); +} + +template<typename RefStringTypeLhs, + typename StringType = typename json_pointer<RefStringTypeLhs>::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, + const StringType& rhs) +{ + return !(lhs == rhs); +} + +template<typename RefStringTypeRhs, + typename StringType = typename json_pointer<RefStringTypeRhs>::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const StringType& lhs, + const json_pointer<RefStringTypeRhs>& rhs) +{ + return !(lhs == rhs); +} + +template<typename RefStringTypeLhs, typename RefStringTypeRhs> +inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs, + const json_pointer<RefStringTypeRhs>& rhs) noexcept +{ + return lhs.reference_tokens < rhs.reference_tokens; +} +#endif + +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/json_ref.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <initializer_list> +#include <utility> + +// #include <nlohmann/detail/abi_macros.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template<typename BasicJsonType> +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + {} + + json_ref(const value_type& value) + : value_ref(&value) + {} + + json_ref(std::initializer_list<json_ref> init) + : owned_value(init) + {} + + template < + class... Args, + enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward<Args>(args)...) + {} + + // class should be movable only + json_ref(json_ref&&) noexcept = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (value_ref == nullptr) + { + return std::move(owned_value); + } + return *value_ref; + } + + value_type const& operator*() const + { + return value_ref ? *value_ref : owned_value; + } + + value_type const* operator->() const + { + return &** this; + } + + private: + mutable value_type owned_value = nullptr; + value_type const* value_ref = nullptr; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/string_escape.hpp> + +// #include <nlohmann/detail/string_utils.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + +// #include <nlohmann/detail/output/binary_writer.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // reverse +#include <array> // array +#include <map> // map +#include <cmath> // isnan, isinf +#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t +#include <cstring> // memcpy +#include <limits> // numeric_limits +#include <string> // string +#include <utility> // move +#include <vector> // vector + +// #include <nlohmann/detail/input/binary_reader.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/output/output_adapters.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // copy +#include <cstddef> // size_t +#include <iterator> // back_inserter +#include <memory> // shared_ptr, make_shared +#include <string> // basic_string +#include <vector> // vector + +#ifndef JSON_NO_IO + #include <ios> // streamsize + #include <ostream> // basic_ostream +#endif // JSON_NO_IO + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// abstract output adapter interface +template<typename CharType> struct output_adapter_protocol +{ + virtual void write_character(CharType c) = 0; + virtual void write_characters(const CharType* s, std::size_t length) = 0; + virtual ~output_adapter_protocol() = default; + + output_adapter_protocol() = default; + output_adapter_protocol(const output_adapter_protocol&) = default; + output_adapter_protocol(output_adapter_protocol&&) noexcept = default; + output_adapter_protocol& operator=(const output_adapter_protocol&) = default; + output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default; +}; + +/// a type to simplify interfaces +template<typename CharType> +using output_adapter_t = std::shared_ptr<output_adapter_protocol<CharType>>; + +/// output adapter for byte vectors +template<typename CharType, typename AllocatorType = std::allocator<CharType>> +class output_vector_adapter : public output_adapter_protocol<CharType> +{ + public: + explicit output_vector_adapter(std::vector<CharType, AllocatorType>& vec) noexcept + : v(vec) + {} + + void write_character(CharType c) override + { + v.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + v.insert(v.end(), s, s + length); + } + + private: + std::vector<CharType, AllocatorType>& v; +}; + +#ifndef JSON_NO_IO +/// output adapter for output streams +template<typename CharType> +class output_stream_adapter : public output_adapter_protocol<CharType> +{ + public: + explicit output_stream_adapter(std::basic_ostream<CharType>& s) noexcept + : stream(s) + {} + + void write_character(CharType c) override + { + stream.put(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + stream.write(s, static_cast<std::streamsize>(length)); + } + + private: + std::basic_ostream<CharType>& stream; +}; +#endif // JSON_NO_IO + +/// output adapter for basic_string +template<typename CharType, typename StringType = std::basic_string<CharType>> +class output_string_adapter : public output_adapter_protocol<CharType> +{ + public: + explicit output_string_adapter(StringType& s) noexcept + : str(s) + {} + + void write_character(CharType c) override + { + str.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + str.append(s, length); + } + + private: + StringType& str; +}; + +template<typename CharType, typename StringType = std::basic_string<CharType>> +class output_adapter +{ + public: + template<typename AllocatorType = std::allocator<CharType>> + output_adapter(std::vector<CharType, AllocatorType>& vec) + : oa(std::make_shared<output_vector_adapter<CharType, AllocatorType>>(vec)) {} + +#ifndef JSON_NO_IO + output_adapter(std::basic_ostream<CharType>& s) + : oa(std::make_shared<output_stream_adapter<CharType>>(s)) {} +#endif // JSON_NO_IO + + output_adapter(StringType& s) + : oa(std::make_shared<output_string_adapter<CharType, StringType>>(s)) {} + + operator output_adapter_t<CharType>() + { + return oa; + } + + private: + output_adapter_t<CharType> oa = nullptr; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/string_concat.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// how to encode BJData +enum class bjdata_version_t +{ + draft2, + draft3, +}; + +/////////////////// +// binary writer // +/////////////////// + +/*! +@brief serialization to CBOR and MessagePack values +*/ +template<typename BasicJsonType, typename CharType> +class binary_writer +{ + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using number_float_t = typename BasicJsonType::number_float_t; + + public: + /*! + @brief create a binary writer + + @param[in] adapter output adapter to write to + */ + explicit binary_writer(output_adapter_t<CharType> adapter) : oa(std::move(adapter)) + { + JSON_ASSERT(oa); + } + + /*! + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + void write_bson(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + { + write_bson_object(*j.m_data.m_value.object); + break; + } + + case value_t::null: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + JSON_THROW(type_error::create(317, concat("to serialize to BSON, top-level type must be object, but is ", j.type_name()), &j)); + } + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_cbor(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: + { + oa->write_character(to_char_type(0xF6)); + break; + } + + case value_t::boolean: + { + oa->write_character(j.m_data.m_value.boolean + ? to_char_type(0xF5) + : to_char_type(0xF4)); + break; + } + + case value_t::number_integer: + { + if (j.m_data.m_value.number_integer >= 0) + { + // CBOR does not differentiate between positive signed + // integers and unsigned integers. Therefore, we used the + // code from the value_t::number_unsigned case here. + if (j.m_data.m_value.number_integer <= 0x17) + { + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer)); + } + } + else + { + // The conversions below encode the sign in the first + // byte, and the value is converted to a positive number. + const auto positive_number = -1 - j.m_data.m_value.number_integer; + if (j.m_data.m_value.number_integer >= -24) + { + write_number(static_cast<std::uint8_t>(0x20 + positive_number)); + } + else if (positive_number <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x38)); + write_number(static_cast<std::uint8_t>(positive_number)); + } + else if (positive_number <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x39)); + write_number(static_cast<std::uint16_t>(positive_number)); + } + else if (positive_number <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x3A)); + write_number(static_cast<std::uint32_t>(positive_number)); + } + else + { + oa->write_character(to_char_type(0x3B)); + write_number(static_cast<std::uint64_t>(positive_number)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_data.m_value.number_unsigned <= 0x17) + { + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_unsigned)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_unsigned)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned)); + } + break; + } + + case value_t::number_float: + { + if (std::isnan(j.m_data.m_value.number_float)) + { + // NaN is 0xf97e00 in CBOR + oa->write_character(to_char_type(0xF9)); + oa->write_character(to_char_type(0x7E)); + oa->write_character(to_char_type(0x00)); + } + else if (std::isinf(j.m_data.m_value.number_float)) + { + // Infinity is 0xf97c00, -Infinity is 0xf9fc00 + oa->write_character(to_char_type(0xf9)); + oa->write_character(j.m_data.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); + oa->write_character(to_char_type(0x00)); + } + else + { + write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::cbor); + } + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_data.m_value.string->size(); + if (N <= 0x17) + { + write_number(static_cast<std::uint8_t>(0x60 + N)); + } + else if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x78)); + write_number(static_cast<std::uint8_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x79)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x7A)); + write_number(static_cast<std::uint32_t>(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits<std::uint64_t>::max)()) + { + oa->write_character(to_char_type(0x7B)); + write_number(static_cast<std::uint64_t>(N)); + } + // LCOV_EXCL_STOP + + // step 2: write the string + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), + j.m_data.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_data.m_value.array->size(); + if (N <= 0x17) + { + write_number(static_cast<std::uint8_t>(0x80 + N)); + } + else if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x98)); + write_number(static_cast<std::uint8_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x99)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x9A)); + write_number(static_cast<std::uint32_t>(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits<std::uint64_t>::max)()) + { + oa->write_character(to_char_type(0x9B)); + write_number(static_cast<std::uint64_t>(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_data.m_value.array) + { + write_cbor(el); + } + break; + } + + case value_t::binary: + { + if (j.m_data.m_value.binary->has_subtype()) + { + if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)()) + { + write_number(static_cast<std::uint8_t>(0xd8)); + write_number(static_cast<std::uint8_t>(j.m_data.m_value.binary->subtype())); + } + else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)()) + { + write_number(static_cast<std::uint8_t>(0xd9)); + write_number(static_cast<std::uint16_t>(j.m_data.m_value.binary->subtype())); + } + else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)()) + { + write_number(static_cast<std::uint8_t>(0xda)); + write_number(static_cast<std::uint32_t>(j.m_data.m_value.binary->subtype())); + } + else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)()) + { + write_number(static_cast<std::uint8_t>(0xdb)); + write_number(static_cast<std::uint64_t>(j.m_data.m_value.binary->subtype())); + } + } + + // step 1: write control byte and the binary array size + const auto N = j.m_data.m_value.binary->size(); + if (N <= 0x17) + { + write_number(static_cast<std::uint8_t>(0x40 + N)); + } + else if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0x58)); + write_number(static_cast<std::uint8_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0x59)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0x5A)); + write_number(static_cast<std::uint32_t>(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits<std::uint64_t>::max)()) + { + oa->write_character(to_char_type(0x5B)); + write_number(static_cast<std::uint64_t>(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_data.m_value.object->size(); + if (N <= 0x17) + { + write_number(static_cast<std::uint8_t>(0xA0 + N)); + } + else if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + oa->write_character(to_char_type(0xB8)); + write_number(static_cast<std::uint8_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + oa->write_character(to_char_type(0xB9)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + oa->write_character(to_char_type(0xBA)); + write_number(static_cast<std::uint32_t>(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits<std::uint64_t>::max)()) + { + oa->write_character(to_char_type(0xBB)); + write_number(static_cast<std::uint64_t>(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_data.m_value.object) + { + write_cbor(el.first); + write_cbor(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_msgpack(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: // nil + { + oa->write_character(to_char_type(0xC0)); + break; + } + + case value_t::boolean: // true and false + { + oa->write_character(j.m_data.m_value.boolean + ? to_char_type(0xC3) + : to_char_type(0xC2)); + break; + } + + case value_t::number_integer: + { + if (j.m_data.m_value.number_integer >= 0) + { + // MessagePack does not differentiate between positive + // signed integers and unsigned integers. Therefore, we used + // the code from the value_t::number_unsigned case here. + if (j.m_data.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer)); + } + } + else + { + if (j.m_data.m_value.number_integer >= -32) + { + // negative fixnum + write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() && + j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)()) + { + // int 8 + oa->write_character(to_char_type(0xD0)); + write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() && + j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)()) + { + // int 16 + oa->write_character(to_char_type(0xD1)); + write_number(static_cast<std::int16_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() && + j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)()) + { + // int 32 + oa->write_character(to_char_type(0xD2)); + write_number(static_cast<std::int32_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() && + j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)()) + { + // int 64 + oa->write_character(to_char_type(0xD3)); + write_number(static_cast<std::int64_t>(j.m_data.m_value.number_integer)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_data.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer)); + } + else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer)); + } + break; + } + + case value_t::number_float: + { + write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::msgpack); + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_data.m_value.string->size(); + if (N <= 31) + { + // fixstr + write_number(static_cast<std::uint8_t>(0xA0 | N)); + } + else if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + // str 8 + oa->write_character(to_char_type(0xD9)); + write_number(static_cast<std::uint8_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + // str 16 + oa->write_character(to_char_type(0xDA)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + // str 32 + oa->write_character(to_char_type(0xDB)); + write_number(static_cast<std::uint32_t>(N)); + } + + // step 2: write the string + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), + j.m_data.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_data.m_value.array->size(); + if (N <= 15) + { + // fixarray + write_number(static_cast<std::uint8_t>(0x90 | N)); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + // array 16 + oa->write_character(to_char_type(0xDC)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + // array 32 + oa->write_character(to_char_type(0xDD)); + write_number(static_cast<std::uint32_t>(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_data.m_value.array) + { + write_msgpack(el); + } + break; + } + + case value_t::binary: + { + // step 0: determine if the binary type has a set subtype to + // determine whether to use the ext or fixext types + const bool use_ext = j.m_data.m_value.binary->has_subtype(); + + // step 1: write control byte and the byte string length + const auto N = j.m_data.m_value.binary->size(); + if (N <= (std::numeric_limits<std::uint8_t>::max)()) + { + std::uint8_t output_type{}; + bool fixed = true; + if (use_ext) + { + switch (N) + { + case 1: + output_type = 0xD4; // fixext 1 + break; + case 2: + output_type = 0xD5; // fixext 2 + break; + case 4: + output_type = 0xD6; // fixext 4 + break; + case 8: + output_type = 0xD7; // fixext 8 + break; + case 16: + output_type = 0xD8; // fixext 16 + break; + default: + output_type = 0xC7; // ext 8 + fixed = false; + break; + } + + } + else + { + output_type = 0xC4; // bin 8 + fixed = false; + } + + oa->write_character(to_char_type(output_type)); + if (!fixed) + { + write_number(static_cast<std::uint8_t>(N)); + } + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + const std::uint8_t output_type = use_ext + ? 0xC8 // ext 16 + : 0xC5; // bin 16 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + const std::uint8_t output_type = use_ext + ? 0xC9 // ext 32 + : 0xC6; // bin 32 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast<std::uint32_t>(N)); + } + + // step 1.5: if this is an ext type, write the subtype + if (use_ext) + { + write_number(static_cast<std::int8_t>(j.m_data.m_value.binary->subtype())); + } + + // step 2: write the byte string + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_data.m_value.object->size(); + if (N <= 15) + { + // fixmap + write_number(static_cast<std::uint8_t>(0x80 | (N & 0xF))); + } + else if (N <= (std::numeric_limits<std::uint16_t>::max)()) + { + // map 16 + oa->write_character(to_char_type(0xDE)); + write_number(static_cast<std::uint16_t>(N)); + } + else if (N <= (std::numeric_limits<std::uint32_t>::max)()) + { + // map 32 + oa->write_character(to_char_type(0xDF)); + write_number(static_cast<std::uint32_t>(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_data.m_value.object) + { + write_msgpack(el.first); + write_msgpack(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + @param[in] use_count whether to use '#' prefixes (optimized format) + @param[in] use_type whether to use '$' prefixes (optimized format) + @param[in] add_prefix whether prefixes need to be used for this value + @param[in] use_bjdata whether write in BJData format, default is false + @param[in] bjdata_version which BJData version to use, default is draft2 + */ + void write_ubjson(const BasicJsonType& j, const bool use_count, + const bool use_type, const bool add_prefix = true, + const bool use_bjdata = false, const bjdata_version_t bjdata_version = bjdata_version_t::draft2) + { + const bool bjdata_draft3 = use_bjdata && bjdata_version == bjdata_version_t::draft3; + + switch (j.type()) + { + case value_t::null: + { + if (add_prefix) + { + oa->write_character(to_char_type('Z')); + } + break; + } + + case value_t::boolean: + { + if (add_prefix) + { + oa->write_character(j.m_data.m_value.boolean + ? to_char_type('T') + : to_char_type('F')); + } + break; + } + + case value_t::number_integer: + { + write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata); + break; + } + + case value_t::number_unsigned: + { + write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata); + break; + } + + case value_t::number_float: + { + write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata); + break; + } + + case value_t::string: + { + if (add_prefix) + { + oa->write_character(to_char_type('S')); + } + write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata); + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), + j.m_data.m_value.string->size()); + break; + } + + case value_t::array: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + bool prefix_required = true; + if (use_type && !j.m_data.m_value.array->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata); + const bool same_prefix = std::all_of(j.begin() + 1, j.end(), + [this, first_prefix, use_bjdata](const BasicJsonType & v) + { + return ubjson_prefix(v, use_bjdata) == first_prefix; + }); + + std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type + + if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end())) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata); + } + + for (const auto& el : *j.m_data.m_value.array) + { + write_ubjson(el, use_count, use_type, prefix_required, use_bjdata, bjdata_version); + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::binary: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + if (use_type && (bjdata_draft3 || !j.m_data.m_value.binary->empty())) + { + JSON_ASSERT(use_count); + oa->write_character(to_char_type('$')); + oa->write_character(bjdata_draft3 ? 'B' : 'U'); + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata); + } + + if (use_type) + { + oa->write_characters( + reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), + j.m_data.m_value.binary->size()); + } + else + { + for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i) + { + oa->write_character(to_char_type(bjdata_draft3 ? 'B' : 'U')); + oa->write_character(j.m_data.m_value.binary->data()[i]); + } + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::object: + { + if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end()) + { + if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type, bjdata_version)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata) + { + break; + } + } + + if (add_prefix) + { + oa->write_character(to_char_type('{')); + } + + bool prefix_required = true; + if (use_type && !j.m_data.m_value.object->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata); + const bool same_prefix = std::all_of(j.begin(), j.end(), + [this, first_prefix, use_bjdata](const BasicJsonType & v) + { + return ubjson_prefix(v, use_bjdata) == first_prefix; + }); + + std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type + + if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end())) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata); + } + + for (const auto& el : *j.m_data.m_value.object) + { + write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata); + oa->write_characters( + reinterpret_cast<const CharType*>(el.first.c_str()), + el.first.size()); + write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata, bjdata_version); + } + + if (!use_count) + { + oa->write_character(to_char_type('}')); + } + + break; + } + + case value_t::discarded: + default: + break; + } + } + + private: + ////////// + // BSON // + ////////// + + /*! + @return The size of a BSON document entry header, including the id marker + and the entry name size (and its null-terminator). + */ + static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j) + { + const auto it = name.find(static_cast<typename string_t::value_type>(0)); + if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) + { + JSON_THROW(out_of_range::create(409, concat("BSON key cannot contain code point U+0000 (at byte ", std::to_string(it), ")"), &j)); + } + + static_cast<void>(j); + return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; + } + + /*! + @brief Writes the given @a element_type and @a name to the output adapter + */ + void write_bson_entry_header(const string_t& name, + const std::uint8_t element_type) + { + oa->write_character(to_char_type(element_type)); // boolean + oa->write_characters( + reinterpret_cast<const CharType*>(name.c_str()), + name.size() + 1u); + } + + /*! + @brief Writes a BSON element with key @a name and boolean value @a value + */ + void write_bson_boolean(const string_t& name, + const bool value) + { + write_bson_entry_header(name, 0x08); + oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and double value @a value + */ + void write_bson_double(const string_t& name, + const double value) + { + write_bson_entry_header(name, 0x01); + write_number<double>(value, true); + } + + /*! + @return The size of the BSON-encoded string in @a value + */ + static std::size_t calc_bson_string_size(const string_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and string value @a value + */ + void write_bson_string(const string_t& name, + const string_t& value) + { + write_bson_entry_header(name, 0x02); + + write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true); + oa->write_characters( + reinterpret_cast<const CharType*>(value.c_str()), + value.size() + 1); + } + + /*! + @brief Writes a BSON element with key @a name and null value + */ + void write_bson_null(const string_t& name) + { + write_bson_entry_header(name, 0x0A); + } + + /*! + @return The size of the BSON-encoded integer @a value + */ + static std::size_t calc_bson_integer_size(const std::int64_t value) + { + return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)() + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and integer @a value + */ + void write_bson_integer(const string_t& name, + const std::int64_t value) + { + if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()) + { + write_bson_entry_header(name, 0x10); // int32 + write_number<std::int32_t>(static_cast<std::int32_t>(value), true); + } + else + { + write_bson_entry_header(name, 0x12); // int64 + write_number<std::int64_t>(static_cast<std::int64_t>(value), true); + } + } + + /*! + @return The size of the BSON-encoded unsigned integer in @a j + */ + static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept + { + return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and unsigned @a value + */ + void write_bson_unsigned(const string_t& name, + const BasicJsonType& j) + { + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) + { + write_bson_entry_header(name, 0x10 /* int32 */); + write_number<std::int32_t>(static_cast<std::int32_t>(j.m_data.m_value.number_unsigned), true); + } + else if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)())) + { + write_bson_entry_header(name, 0x12 /* int64 */); + write_number<std::int64_t>(static_cast<std::int64_t>(j.m_data.m_value.number_unsigned), true); + } + else + { + write_bson_entry_header(name, 0x11 /* uint64 */); + write_number<std::uint64_t>(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned), true); + } + } + + /*! + @brief Writes a BSON element with key @a name and object @a value + */ + void write_bson_object_entry(const string_t& name, + const typename BasicJsonType::object_t& value) + { + write_bson_entry_header(name, 0x03); // object + write_bson_object(value); + } + + /*! + @return The size of the BSON-encoded array @a value + */ + static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) + { + std::size_t array_index = 0ul; + + const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) + { + return result + calc_bson_element_size(std::to_string(array_index++), el); + }); + + return sizeof(std::int32_t) + embedded_document_size + 1ul; + } + + /*! + @return The size of the BSON-encoded binary array @a value + */ + static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and array @a value + */ + void write_bson_array(const string_t& name, + const typename BasicJsonType::array_t& value) + { + write_bson_entry_header(name, 0x04); // array + write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true); + + std::size_t array_index = 0ul; + + for (const auto& el : value) + { + write_bson_element(std::to_string(array_index++), el); + } + + oa->write_character(to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and binary value @a value + */ + void write_bson_binary(const string_t& name, + const binary_t& value) + { + write_bson_entry_header(name, 0x05); + + write_number<std::int32_t>(static_cast<std::int32_t>(value.size()), true); + write_number(value.has_subtype() ? static_cast<std::uint8_t>(value.subtype()) : static_cast<std::uint8_t>(0x00)); + + oa->write_characters(reinterpret_cast<const CharType*>(value.data()), value.size()); + } + + /*! + @brief Calculates the size necessary to serialize the JSON value @a j with its @a name + @return The calculated size for the BSON document entry for @a j with the given @a name. + */ + static std::size_t calc_bson_element_size(const string_t& name, + const BasicJsonType& j) + { + const auto header_size = calc_bson_entry_header_size(name, j); + switch (j.type()) + { + case value_t::object: + return header_size + calc_bson_object_size(*j.m_data.m_value.object); + + case value_t::array: + return header_size + calc_bson_array_size(*j.m_data.m_value.array); + + case value_t::binary: + return header_size + calc_bson_binary_size(*j.m_data.m_value.binary); + + case value_t::boolean: + return header_size + 1ul; + + case value_t::number_float: + return header_size + 8ul; + + case value_t::number_integer: + return header_size + calc_bson_integer_size(j.m_data.m_value.number_integer); + + case value_t::number_unsigned: + return header_size + calc_bson_unsigned_size(j.m_data.m_value.number_unsigned); + + case value_t::string: + return header_size + calc_bson_string_size(*j.m_data.m_value.string); + + case value_t::null: + return header_size + 0ul; + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return 0ul; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Serializes the JSON value @a j to BSON and associates it with the + key @a name. + @param name The name to associate with the JSON entity @a j within the + current BSON document + */ + void write_bson_element(const string_t& name, + const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + return write_bson_object_entry(name, *j.m_data.m_value.object); + + case value_t::array: + return write_bson_array(name, *j.m_data.m_value.array); + + case value_t::binary: + return write_bson_binary(name, *j.m_data.m_value.binary); + + case value_t::boolean: + return write_bson_boolean(name, j.m_data.m_value.boolean); + + case value_t::number_float: + return write_bson_double(name, j.m_data.m_value.number_float); + + case value_t::number_integer: + return write_bson_integer(name, j.m_data.m_value.number_integer); + + case value_t::number_unsigned: + return write_bson_unsigned(name, j); + + case value_t::string: + return write_bson_string(name, *j.m_data.m_value.string); + + case value_t::null: + return write_bson_null(name); + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Calculates the size of the BSON serialization of the given + JSON-object @a j. + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) + { + const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0), + [](size_t result, const typename BasicJsonType::object_t::value_type & el) + { + return result += calc_bson_element_size(el.first, el.second); + }); + + return sizeof(std::int32_t) + document_size + 1ul; + } + + /*! + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + void write_bson_object(const typename BasicJsonType::object_t& value) + { + write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_object_size(value)), true); + + for (const auto& el : value) + { + write_bson_element(el.first, el.second); + } + + oa->write_character(to_char_type(0x00)); + } + + ////////// + // CBOR // + ////////// + + static constexpr CharType get_cbor_float_prefix(float /*unused*/) + { + return to_char_type(0xFA); // Single-Precision Float + } + + static constexpr CharType get_cbor_float_prefix(double /*unused*/) + { + return to_char_type(0xFB); // Double-Precision Float + } + + ///////////// + // MsgPack // + ///////////// + + static constexpr CharType get_msgpack_float_prefix(float /*unused*/) + { + return to_char_type(0xCA); // float 32 + } + + static constexpr CharType get_msgpack_float_prefix(double /*unused*/) + { + return to_char_type(0xCB); // float 64 + } + + //////////// + // UBJSON // + //////////// + + // UBJSON: write number (floating point) + template<typename NumberType, typename std::enable_if< + std::is_floating_point<NumberType>::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix, + const bool use_bjdata) + { + if (add_prefix) + { + oa->write_character(get_ubjson_float_prefix(n)); + } + write_number(n, use_bjdata); + } + + // UBJSON: write number (unsigned integer) + template<typename NumberType, typename std::enable_if< + std::is_unsigned<NumberType>::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix, + const bool use_bjdata) + { + if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast<std::uint8_t>(n), use_bjdata); + } + else if (n <= (std::numeric_limits<std::uint8_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast<std::uint8_t>(n), use_bjdata); + } + else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast<std::int16_t>(n), use_bjdata); + } + else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint16_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('u')); // uint16 - bjdata only + } + write_number(static_cast<std::uint16_t>(n), use_bjdata); + } + else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast<std::int32_t>(n), use_bjdata); + } + else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint32_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('m')); // uint32 - bjdata only + } + write_number(static_cast<std::uint32_t>(n), use_bjdata); + } + else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast<std::int64_t>(n), use_bjdata); + } + else if (use_bjdata && n <= (std::numeric_limits<uint64_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('M')); // uint64 - bjdata only + } + write_number(static_cast<std::uint64_t>(n), use_bjdata); + } + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true, use_bjdata); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i]))); + } + } + } + + // UBJSON: write number (signed integer) + template < typename NumberType, typename std::enable_if < + std::is_signed<NumberType>::value&& + !std::is_floating_point<NumberType>::value, int >::type = 0 > + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix, + const bool use_bjdata) + { + if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast<std::int8_t>(n), use_bjdata); + } + else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast<std::uint8_t>(n), use_bjdata); + } + else if ((std::numeric_limits<std::int16_t>::min)() <= n && n <= (std::numeric_limits<std::int16_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast<std::int16_t>(n), use_bjdata); + } + else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)()))) + { + if (add_prefix) + { + oa->write_character(to_char_type('u')); // uint16 - bjdata only + } + write_number(static_cast<uint16_t>(n), use_bjdata); + } + else if ((std::numeric_limits<std::int32_t>::min)() <= n && n <= (std::numeric_limits<std::int32_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast<std::int32_t>(n), use_bjdata); + } + else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)()))) + { + if (add_prefix) + { + oa->write_character(to_char_type('m')); // uint32 - bjdata only + } + write_number(static_cast<uint32_t>(n), use_bjdata); + } + else if ((std::numeric_limits<std::int64_t>::min)() <= n && n <= (std::numeric_limits<std::int64_t>::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast<std::int64_t>(n), use_bjdata); + } + // LCOV_EXCL_START + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true, use_bjdata); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i]))); + } + } + // LCOV_EXCL_STOP + } + + /*! + @brief determine the type prefix of container values + */ + CharType ubjson_prefix(const BasicJsonType& j, const bool use_bjdata) const noexcept + { + switch (j.type()) + { + case value_t::null: + return 'Z'; + + case value_t::boolean: + return j.m_data.m_value.boolean ? 'T' : 'F'; + + case value_t::number_integer: + { + if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)()) + { + return 'i'; + } + if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)()) + { + return 'U'; + } + if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)()) + { + return 'I'; + } + if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())) + { + return 'u'; + } + if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)()) + { + return 'l'; + } + if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())) + { + return 'm'; + } + if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)()) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_unsigned: + { + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)())) + { + return 'i'; + } + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)())) + { + return 'U'; + } + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)())) + { + return 'I'; + } + if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)())) + { + return 'u'; + } + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) + { + return 'l'; + } + if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)())) + { + return 'm'; + } + if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)())) + { + return 'L'; + } + if (use_bjdata && j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) + { + return 'M'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_float: + return get_ubjson_float_prefix(j.m_data.m_value.number_float); + + case value_t::string: + return 'S'; + + case value_t::array: // fallthrough + case value_t::binary: + return '['; + + case value_t::object: + return '{'; + + case value_t::discarded: + default: // discarded values + return 'N'; + } + } + + static constexpr CharType get_ubjson_float_prefix(float /*unused*/) + { + return 'd'; // float 32 + } + + static constexpr CharType get_ubjson_float_prefix(double /*unused*/) + { + return 'D'; // float 64 + } + + /*! + @return false if the object is successfully converted to a bjdata ndarray, true if the type or size is invalid + */ + bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type, const bjdata_version_t bjdata_version) + { + std::map<string_t, CharType> bjdtype = {{"uint8", 'U'}, {"int8", 'i'}, {"uint16", 'u'}, {"int16", 'I'}, + {"uint32", 'm'}, {"int32", 'l'}, {"uint64", 'M'}, {"int64", 'L'}, {"single", 'd'}, {"double", 'D'}, + {"char", 'C'}, {"byte", 'B'} + }; + + string_t key = "_ArrayType_"; + auto it = bjdtype.find(static_cast<string_t>(value.at(key))); + if (it == bjdtype.end()) + { + return true; + } + CharType dtype = it->second; + + key = "_ArraySize_"; + std::size_t len = (value.at(key).empty() ? 0 : 1); + for (const auto& el : value.at(key)) + { + len *= static_cast<std::size_t>(el.m_data.m_value.number_unsigned); + } + + key = "_ArrayData_"; + if (value.at(key).size() != len) + { + return true; + } + + oa->write_character('['); + oa->write_character('$'); + oa->write_character(dtype); + oa->write_character('#'); + + key = "_ArraySize_"; + write_ubjson(value.at(key), use_count, use_type, true, true, bjdata_version); + + key = "_ArrayData_"; + if (dtype == 'U' || dtype == 'C' || dtype == 'B') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::uint8_t>(el.m_data.m_value.number_unsigned), true); + } + } + else if (dtype == 'i') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::int8_t>(el.m_data.m_value.number_integer), true); + } + } + else if (dtype == 'u') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::uint16_t>(el.m_data.m_value.number_unsigned), true); + } + } + else if (dtype == 'I') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::int16_t>(el.m_data.m_value.number_integer), true); + } + } + else if (dtype == 'm') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::uint32_t>(el.m_data.m_value.number_unsigned), true); + } + } + else if (dtype == 'l') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::int32_t>(el.m_data.m_value.number_integer), true); + } + } + else if (dtype == 'M') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned), true); + } + } + else if (dtype == 'L') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<std::int64_t>(el.m_data.m_value.number_integer), true); + } + } + else if (dtype == 'd') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<float>(el.m_data.m_value.number_float), true); + } + } + else if (dtype == 'D') + { + for (const auto& el : value.at(key)) + { + write_number(static_cast<double>(el.m_data.m_value.number_float), true); + } + } + return false; + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /* + @brief write a number to output input + @param[in] n number of type @a NumberType + @param[in] OutputIsLittleEndian Set to true if output data is + required to be little endian + @tparam NumberType the type of the number + + @note This function needs to respect the system's endianness, because bytes + in CBOR, MessagePack, and UBJSON are stored in network order (big + endian) and therefore need reordering on little endian systems. + On the other hand, BSON and BJData use little endian and should reorder + on big endian systems. + */ + template<typename NumberType> + void write_number(const NumberType n, const bool OutputIsLittleEndian = false) + { + // step 1: write number to array of length NumberType + std::array<CharType, sizeof(NumberType)> vec{}; + std::memcpy(vec.data(), &n, sizeof(NumberType)); + + // step 2: write array to output (with possible reordering) + if (is_little_endian != OutputIsLittleEndian) + { + // reverse byte order prior to conversion if necessary + std::reverse(vec.begin(), vec.end()); + } + + oa->write_characters(vec.data(), sizeof(NumberType)); + } + + void write_compact_float(const number_float_t n, detail::input_format_t format) + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (static_cast<double>(n) >= static_cast<double>(std::numeric_limits<float>::lowest()) && + static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) && + static_cast<double>(static_cast<float>(n)) == static_cast<double>(n)) + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(static_cast<float>(n)) + : get_msgpack_float_prefix(static_cast<float>(n))); + write_number(static_cast<float>(n)); + } + else + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(n) + : get_msgpack_float_prefix(n)); + write_number(n); + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + public: + // The following to_char_type functions are implement the conversion + // between uint8_t and CharType. In case CharType is not unsigned, + // such a conversion is required to allow values greater than 128. + // See <https://github.com/nlohmann/json/issues/1286> for a discussion. + template < typename C = CharType, + enable_if_t < std::is_signed<C>::value && std::is_signed<char>::value > * = nullptr > + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return *reinterpret_cast<char*>(&x); + } + + template < typename C = CharType, + enable_if_t < std::is_signed<C>::value && std::is_unsigned<char>::value > * = nullptr > + static CharType to_char_type(std::uint8_t x) noexcept + { + static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); + static_assert(std::is_trivial<CharType>::value, "CharType must be trivial"); + CharType result; + std::memcpy(&result, &x, sizeof(x)); + return result; + } + + template<typename C = CharType, + enable_if_t<std::is_unsigned<C>::value>* = nullptr> + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return x; + } + + template < typename InputCharType, typename C = CharType, + enable_if_t < + std::is_signed<C>::value && + std::is_signed<char>::value && + std::is_same<char, typename std::remove_cv<InputCharType>::type>::value + > * = nullptr > + static constexpr CharType to_char_type(InputCharType x) noexcept + { + return x; + } + + private: + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// the output + output_adapter_t<CharType> oa = nullptr; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/output/output_adapters.hpp> + +// #include <nlohmann/detail/output/serializer.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2008 - 2009 Björn Hoehrmann <bjoern@hoehrmann.de> +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <algorithm> // reverse, remove, fill, find, none_of +#include <array> // array +#include <clocale> // localeconv, lconv +#include <cmath> // labs, isfinite, isnan, signbit +#include <cstddef> // size_t, ptrdiff_t +#include <cstdint> // uint8_t +#include <cstdio> // snprintf +#include <limits> // numeric_limits +#include <string> // string, char_traits +#include <iomanip> // setfill, setw +#include <type_traits> // is_same +#include <utility> // move + +// #include <nlohmann/detail/conversions/to_chars.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2009 Florian Loitsch <https://florian.loitsch.com/> +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <array> // array +#include <cmath> // signbit, isfinite +#include <cstdint> // intN_t, uintN_t +#include <cstring> // memcpy, memmove +#include <limits> // numeric_limits +#include <type_traits> // conditional + +// #include <nlohmann/detail/macro_scope.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template<typename Target, typename Source> +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template<typename FloatType> +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits<FloatType>::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional<kPrecision == 24, std::uint32_t, std::uint64_t >::type; + + const auto bits = static_cast<std::uint64_t>(reinterpret_bits<bits_type>(value)); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp((2 * v.f) + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp((4 * v.f) - 1, v.e - 2) // (B) + : diyfp((2 * v.f) - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array<cached_power, 79> kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = ((f * 78913) / (1 << 18)) + static_cast<int>(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast<std::size_t>(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast<std::size_t>(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + if (n >= 100000) + { + pow10 = 100000; + return 6; + } + if (n >= 10000) + { + pow10 = 10000; + return 5; + } + if (n >= 1000) + { + pow10 = 1000; + return 4; + } + if (n >= 100) + { + pow10 = 100; + return 3; + } + if (n >= 10) + { + pow10 = 10; + return 2; + } + + pow10 = 1; + return 1; +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast<std::uint32_t>(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10{}; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits<std::uint64_t>::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template<typename FloatType> +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if) + const boundaries w = compute_boundaries(static_cast<double>(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast<std::uint32_t>(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast<char>('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast<char>('0' + (k / 10)); + k %= 10; + *buf++ = static_cast<char>('0' + k); + } + else + { + *buf++ = static_cast<char>('0' + (k / 100)); + k %= 100; + *buf++ = static_cast<char>('0' + (k / 10)); + k %= 10; + *buf++ = static_cast<char>('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast<size_t>(n) - static_cast<size_t>(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast<size_t>(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast<size_t>(n) + 1), buf + n, static_cast<size_t>(k) - static_cast<size_t>(n)); + buf[n] = '.'; + return buf + (static_cast<size_t>(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast<size_t>(-n)), buf, static_cast<size_t>(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast<size_t>(-n)); + return buf + (2U + static_cast<size_t>(-n) + static_cast<size_t>(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast<size_t>(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast<size_t>(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template<typename FloatType> +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast<void>(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + + JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits<FloatType>::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits<FloatType>::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits<FloatType>::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/exceptions.hpp> + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/cpp_future.hpp> + +// #include <nlohmann/detail/output/binary_writer.hpp> + +// #include <nlohmann/detail/output/output_adapters.hpp> + +// #include <nlohmann/detail/string_concat.hpp> + +// #include <nlohmann/detail/value_t.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////// +// serialization // +/////////////////// + +/// how to treat decoding errors +enum class error_handler_t +{ + strict, ///< throw a type_error exception in case of invalid UTF-8 + replace, ///< replace invalid UTF-8 sequences with U+FFFD + ignore ///< ignore invalid UTF-8 sequences +}; + +template<typename BasicJsonType> +class serializer +{ + using string_t = typename BasicJsonType::string_t; + using number_float_t = typename BasicJsonType::number_float_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using binary_char_t = typename BasicJsonType::binary_t::value_type; + static constexpr std::uint8_t UTF8_ACCEPT = 0; + static constexpr std::uint8_t UTF8_REJECT = 1; + + public: + /*! + @param[in] s output stream to serialize to + @param[in] ichar indentation character to use + @param[in] error_handler_ how to react on decoding errors + */ + serializer(output_adapter_t<char> s, const char ichar, + error_handler_t error_handler_ = error_handler_t::strict) + : o(std::move(s)) + , loc(std::localeconv()) + , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->thousands_sep))) + , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->decimal_point))) + , indent_char(ichar) + , indent_string(512, indent_char) + , error_handler(error_handler_) + {} + + // delete because of pointer members + serializer(const serializer&) = delete; + serializer& operator=(const serializer&) = delete; + serializer(serializer&&) = delete; + serializer& operator=(serializer&&) = delete; + ~serializer() = default; + + /*! + @brief internal implementation of the serialization function + + This function is called by the public member function dump and organizes + the serialization internally. The indentation level is propagated as + additional parameter. In case of arrays and objects, the function is + called recursively. + + - strings and object keys are escaped using `escape_string()` + - integer numbers are converted implicitly via `operator<<` + - floating-point numbers are converted to a string using `"%g"` format + - binary values are serialized as objects containing the subtype and the + byte array + + @param[in] val value to serialize + @param[in] pretty_print whether the output shall be pretty-printed + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] indent_step the indent level + @param[in] current_indent the current indent level (only used internally) + */ + void dump(const BasicJsonType& val, + const bool pretty_print, + const bool ensure_ascii, + const unsigned int indent_step, + const unsigned int current_indent = 0) + { + switch (val.m_data.m_type) + { + case value_t::object: + { + if (val.m_data.m_value.object->empty()) + { + o->write_characters("{}", 2); + return; + } + + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + auto i = val.m_data.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(i != val.m_data.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend()); + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_character('{'); + + // first n-1 elements + auto i = val.m_data.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(i != val.m_data.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend()); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + + o->write_character('}'); + } + + return; + } + + case value_t::array: + { + if (val.m_data.m_value.array->empty()) + { + o->write_characters("[]", 2); + return; + } + + if (pretty_print) + { + o->write_characters("[\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + for (auto i = val.m_data.m_value.array->cbegin(); + i != val.m_data.m_value.array->cend() - 1; ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + dump(*i, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(!val.m_data.m_value.array->empty()); + o->write_characters(indent_string.c_str(), new_indent); + dump(val.m_data.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character(']'); + } + else + { + o->write_character('['); + + // first n-1 elements + for (auto i = val.m_data.m_value.array->cbegin(); + i != val.m_data.m_value.array->cend() - 1; ++i) + { + dump(*i, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(!val.m_data.m_value.array->empty()); + dump(val.m_data.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); + + o->write_character(']'); + } + + return; + } + + case value_t::string: + { + o->write_character('\"'); + dump_escaped(*val.m_data.m_value.string, ensure_ascii); + o->write_character('\"'); + return; + } + + case value_t::binary: + { + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"bytes\": [", 10); + + if (!val.m_data.m_value.binary->empty()) + { + for (auto i = val.m_data.m_value.binary->cbegin(); + i != val.m_data.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_characters(", ", 2); + } + dump_integer(val.m_data.m_value.binary->back()); + } + + o->write_characters("],\n", 3); + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"subtype\": ", 11); + if (val.m_data.m_value.binary->has_subtype()) + { + dump_integer(val.m_data.m_value.binary->subtype()); + } + else + { + o->write_characters("null", 4); + } + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_characters("{\"bytes\":[", 10); + + if (!val.m_data.m_value.binary->empty()) + { + for (auto i = val.m_data.m_value.binary->cbegin(); + i != val.m_data.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_character(','); + } + dump_integer(val.m_data.m_value.binary->back()); + } + + o->write_characters("],\"subtype\":", 12); + if (val.m_data.m_value.binary->has_subtype()) + { + dump_integer(val.m_data.m_value.binary->subtype()); + o->write_character('}'); + } + else + { + o->write_characters("null}", 5); + } + } + return; + } + + case value_t::boolean: + { + if (val.m_data.m_value.boolean) + { + o->write_characters("true", 4); + } + else + { + o->write_characters("false", 5); + } + return; + } + + case value_t::number_integer: + { + dump_integer(val.m_data.m_value.number_integer); + return; + } + + case value_t::number_unsigned: + { + dump_integer(val.m_data.m_value.number_unsigned); + return; + } + + case value_t::number_float: + { + dump_float(val.m_data.m_value.number_float); + return; + } + + case value_t::discarded: + { + o->write_characters("<discarded>", 11); + return; + } + + case value_t::null: + { + o->write_characters("null", 4); + return; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief dump escaped string + + Escape a string by replacing certain special characters by a sequence of an + escape character (backslash) and another character and other control + characters by a sequence of "\u" followed by a four-digit hex + representation. The escaped string is written to output stream @a o. + + @param[in] s the string to escape + @param[in] ensure_ascii whether to escape non-ASCII characters with + \uXXXX sequences + + @complexity Linear in the length of string @a s. + */ + void dump_escaped(const string_t& s, const bool ensure_ascii) + { + std::uint32_t codepoint{}; + std::uint8_t state = UTF8_ACCEPT; + std::size_t bytes = 0; // number of bytes written to string_buffer + + // number of bytes written at the point of the last valid byte + std::size_t bytes_after_last_accept = 0; + std::size_t undumped_chars = 0; + + for (std::size_t i = 0; i < s.size(); ++i) + { + const auto byte = static_cast<std::uint8_t>(s[i]); + + switch (decode(state, codepoint, byte)) + { + case UTF8_ACCEPT: // decode found a new code point + { + switch (codepoint) + { + case 0x08: // backspace + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'b'; + break; + } + + case 0x09: // horizontal tab + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 't'; + break; + } + + case 0x0A: // newline + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'n'; + break; + } + + case 0x0C: // formfeed + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'f'; + break; + } + + case 0x0D: // carriage return + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'r'; + break; + } + + case 0x22: // quotation mark + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\"'; + break; + } + + case 0x5C: // reverse solidus + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\\'; + break; + } + + default: + { + // escape control characters (0x00..0x1F) or, if + // ensure_ascii parameter is used, non-ASCII characters + if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) + { + if (codepoint <= 0xFFFF) + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast<std::uint16_t>(codepoint))); + bytes += 6; + } + else + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", + static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)), + static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu)))); + bytes += 12; + } + } + else + { + // copy byte to buffer (all previous bytes + // been copied have in default case above) + string_buffer[bytes++] = s[i]; + } + break; + } + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + // remember the byte position of this accept + bytes_after_last_accept = bytes; + undumped_chars = 0; + break; + } + + case UTF8_REJECT: // decode found invalid UTF-8 byte + { + switch (error_handler) + { + case error_handler_t::strict: + { + JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr)); + } + + case error_handler_t::ignore: + case error_handler_t::replace: + { + // in case we saw this character the first time, we + // would like to read it again, because the byte + // may be OK for itself, but just not OK for the + // previous sequence + if (undumped_chars > 0) + { + --i; + } + + // reset length buffer to the last accepted index; + // thus removing/ignoring the invalid characters + bytes = bytes_after_last_accept; + + if (error_handler == error_handler_t::replace) + { + // add a replacement character + if (ensure_ascii) + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'u'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'd'; + } + else + { + string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xEF'); + string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBF'); + string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBD'); + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + bytes_after_last_accept = bytes; + } + + undumped_chars = 0; + + // continue processing the string + state = UTF8_ACCEPT; + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + break; + } + + default: // decode found yet incomplete multi-byte code point + { + if (!ensure_ascii) + { + // code point will not be escaped - copy byte to buffer + string_buffer[bytes++] = s[i]; + } + ++undumped_chars; + break; + } + } + } + + // we finished processing the string + if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) + { + // write buffer + if (bytes > 0) + { + o->write_characters(string_buffer.data(), bytes); + } + } + else + { + // we finish reading, but do not accept: string was incomplete + switch (error_handler) + { + case error_handler_t::strict: + { + JSON_THROW(type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr)); + } + + case error_handler_t::ignore: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + break; + } + + case error_handler_t::replace: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + // add a replacement character + if (ensure_ascii) + { + o->write_characters("\\ufffd", 6); + } + else + { + o->write_characters("\xEF\xBF\xBD", 3); + } + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + } + + private: + /*! + @brief count digits + + Count the number of decimal (base 10) digits for an input unsigned integer. + + @param[in] x unsigned integer number to count its digits + @return number of decimal digits + */ + unsigned int count_digits(number_unsigned_t x) noexcept + { + unsigned int n_digits = 1; + for (;;) + { + if (x < 10) + { + return n_digits; + } + if (x < 100) + { + return n_digits + 1; + } + if (x < 1000) + { + return n_digits + 2; + } + if (x < 10000) + { + return n_digits + 3; + } + x = x / 10000u; + n_digits += 4; + } + } + + /*! + * @brief convert a byte to a uppercase hex representation + * @param[in] byte byte to represent + * @return representation ("00".."FF") + */ + static std::string hex_bytes(std::uint8_t byte) + { + std::string result = "FF"; + constexpr const char* nibble_to_hex = "0123456789ABCDEF"; + result[0] = nibble_to_hex[byte / 16]; + result[1] = nibble_to_hex[byte % 16]; + return result; + } + + // templates to avoid warnings about useless casts + template <typename NumberType, enable_if_t<std::is_signed<NumberType>::value, int> = 0> + bool is_negative_number(NumberType x) + { + return x < 0; + } + + template < typename NumberType, enable_if_t <std::is_unsigned<NumberType>::value, int > = 0 > + bool is_negative_number(NumberType /*unused*/) + { + return false; + } + + /*! + @brief dump an integer + + Dump a given integer to output stream @a o. Works internally with + @a number_buffer. + + @param[in] x integer number (signed or unsigned) to dump + @tparam NumberType either @a number_integer_t or @a number_unsigned_t + */ + template < typename NumberType, detail::enable_if_t < + std::is_integral<NumberType>::value || + std::is_same<NumberType, number_unsigned_t>::value || + std::is_same<NumberType, number_integer_t>::value || + std::is_same<NumberType, binary_char_t>::value, + int > = 0 > + void dump_integer(NumberType x) + { + static constexpr std::array<std::array<char, 2>, 100> digits_to_99 + { + { + {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, + {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, + {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, + {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, + {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, + {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, + {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, + {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, + {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, + {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, + } + }; + + // special case for "0" + if (x == 0) + { + o->write_character('0'); + return; + } + + // use a pointer to fill the buffer + auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg) + + number_unsigned_t abs_value; + + unsigned int n_chars{}; + + if (is_negative_number(x)) + { + *buffer_ptr = '-'; + abs_value = remove_sign(static_cast<number_integer_t>(x)); + + // account one more byte for the minus sign + n_chars = 1 + count_digits(abs_value); + } + else + { + abs_value = static_cast<number_unsigned_t>(x); + n_chars = count_digits(abs_value); + } + + // spare 1 byte for '\0' + JSON_ASSERT(n_chars < number_buffer.size() - 1); + + // jump to the end to generate the string from backward, + // so we later avoid reversing the result + buffer_ptr += static_cast<typename decltype(number_buffer)::difference_type>(n_chars); + + // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu + // See: https://www.youtube.com/watch?v=o4-CwDo2zpg + while (abs_value >= 100) + { + const auto digits_index = static_cast<unsigned>((abs_value % 100)); + abs_value /= 100; + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + + if (abs_value >= 10) + { + const auto digits_index = static_cast<unsigned>(abs_value); + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + else + { + *(--buffer_ptr) = static_cast<char>('0' + abs_value); + } + + o->write_characters(number_buffer.data(), n_chars); + } + + /*! + @brief dump a floating-point number + + Dump a given floating-point number to output stream @a o. Works internally + with @a number_buffer. + + @param[in] x floating-point number to dump + */ + void dump_float(number_float_t x) + { + // NaN / inf + if (!std::isfinite(x)) + { + o->write_characters("null", 4); + return; + } + + // If number_float_t is an IEEE-754 single or double precision number, + // use the Grisu2 algorithm to produce short numbers which are + // guaranteed to round-trip, using strtof and strtod, resp. + // + // NB: The test below works if <long double> == <double>. + static constexpr bool is_ieee_single_or_double + = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) || + (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024); + + dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>()); + } + + void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) + { + auto* begin = number_buffer.data(); + auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); + + o->write_characters(begin, static_cast<size_t>(end - begin)); + } + + void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) + { + // get number of digits for a float -> text -> float round-trip + static constexpr auto d = std::numeric_limits<number_float_t>::max_digits10; + + // the actual conversion + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); + + // negative value indicates an error + JSON_ASSERT(len > 0); + // check if buffer was large enough + JSON_ASSERT(static_cast<std::size_t>(len) < number_buffer.size()); + + // erase thousands separator + if (thousands_sep != '\0') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep); + std::fill(end, number_buffer.end(), '\0'); + JSON_ASSERT((end - number_buffer.begin()) <= len); + len = (end - number_buffer.begin()); + } + + // convert decimal point to '.' + if (decimal_point != '\0' && decimal_point != '.') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); + if (dec_pos != number_buffer.end()) + { + *dec_pos = '.'; + } + } + + o->write_characters(number_buffer.data(), static_cast<std::size_t>(len)); + + // determine if we need to append ".0" + const bool value_is_int_like = + std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, + [](char c) + { + return c == '.' || c == 'e'; + }); + + if (value_is_int_like) + { + o->write_characters(".0", 2); + } + } + + /*! + @brief check whether a string is UTF-8 encoded + + The function checks each byte of a string whether it is UTF-8 encoded. The + result of the check is stored in the @a state parameter. The function must + be called initially with state 0 (accept). State 1 means the string must + be rejected, because the current byte is not allowed. If the string is + completely processed, but the state is non-zero, the string ended + prematurely; that is, the last byte indicated more bytes should have + followed. + + @param[in,out] state the state of the decoding + @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) + @param[in] byte next byte to decode + @return new state + + @note The function has been edited: a std::array is used. + + @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de> + @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + */ + static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept + { + static const std::array<std::uint8_t, 400> utf8d = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF + 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF + 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF + 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF + 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 + 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 + 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 + } + }; + + JSON_ASSERT(byte < utf8d.size()); + const std::uint8_t type = utf8d[byte]; + + codep = (state != UTF8_ACCEPT) + ? (byte & 0x3fu) | (codep << 6u) + : (0xFFu >> type) & (byte); + + const std::size_t index = 256u + (static_cast<size_t>(state) * 16u) + static_cast<size_t>(type); + JSON_ASSERT(index < utf8d.size()); + state = utf8d[index]; + return state; + } + + /* + * Overload to make the compiler happy while it is instantiating + * dump_integer for number_unsigned_t. + * Must never be called. + */ + number_unsigned_t remove_sign(number_unsigned_t x) + { + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return x; // LCOV_EXCL_LINE + } + + /* + * Helper function for dump_integer + * + * This function takes a negative signed integer and returns its absolute + * value as unsigned integer. The plus/minus shuffling is necessary as we can + * not directly remove the sign of an arbitrary signed integer as the + * absolute values of INT_MIN and INT_MAX are usually not the same. See + * #1708 for details. + */ + number_unsigned_t remove_sign(number_integer_t x) noexcept + { + JSON_ASSERT(x < 0 && x < (std::numeric_limits<number_integer_t>::max)()); // NOLINT(misc-redundant-expression) + return static_cast<number_unsigned_t>(-(x + 1)) + 1; + } + + private: + /// the output of the serializer + output_adapter_t<char> o = nullptr; + + /// a (hopefully) large enough character buffer + std::array<char, 64> number_buffer{{}}; + + /// the locale + const std::lconv* loc = nullptr; + /// the locale's thousand separator character + const char thousands_sep = '\0'; + /// the locale's decimal point character + const char decimal_point = '\0'; + + /// string buffer + std::array<char, 512> string_buffer{{}}; + + /// the indentation character + const char indent_char; + /// the indentation string + string_t indent_string; + + /// error_handler how to react on decoding errors + const error_handler_t error_handler; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include <nlohmann/detail/value_t.hpp> + +// #include <nlohmann/json_fwd.hpp> + +// #include <nlohmann/ordered_map.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#include <functional> // equal_to, less +#include <initializer_list> // initializer_list +#include <iterator> // input_iterator_tag, iterator_traits +#include <memory> // allocator +#include <stdexcept> // for out_of_range +#include <type_traits> // enable_if, is_convertible +#include <utility> // pair +#include <vector> // vector + +// #include <nlohmann/detail/macro_scope.hpp> + +// #include <nlohmann/detail/meta/type_traits.hpp> + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// ordered_map: a minimal map-like container that preserves insertion order +/// for use within nlohmann::basic_json<ordered_map> +template <class Key, class T, class IgnoredLess = std::less<Key>, + class Allocator = std::allocator<std::pair<const Key, T>>> + struct ordered_map : std::vector<std::pair<const Key, T>, Allocator> +{ + using key_type = Key; + using mapped_type = T; + using Container = std::vector<std::pair<const Key, T>, Allocator>; + using iterator = typename Container::iterator; + using const_iterator = typename Container::const_iterator; + using size_type = typename Container::size_type; + using value_type = typename Container::value_type; +#ifdef JSON_HAS_CPP_14 + using key_compare = std::equal_to<>; +#else + using key_compare = std::equal_to<Key>; +#endif + + // Explicit constructors instead of `using Container::Container` + // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) + ordered_map() noexcept(noexcept(Container())) : Container{} {} + explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container(alloc))) : Container{alloc} {} + template <class It> + ordered_map(It first, It last, const Allocator& alloc = Allocator()) + : Container{first, last, alloc} {} + ordered_map(std::initializer_list<value_type> init, const Allocator& alloc = Allocator() ) + : Container{init, alloc} {} + + std::pair<iterator, bool> emplace(const key_type& key, T&& t) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return {it, false}; + } + } + Container::emplace_back(key, std::forward<T>(t)); + return {std::prev(this->end()), true}; + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + std::pair<iterator, bool> emplace(KeyType && key, T && t) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return {it, false}; + } + } + Container::emplace_back(std::forward<KeyType>(key), std::forward<T>(t)); + return {std::prev(this->end()), true}; + } + + T& operator[](const key_type& key) + { + return emplace(key, T{}).first->second; + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + T & operator[](KeyType && key) + { + return emplace(std::forward<KeyType>(key), T{}).first->second; + } + + const T& operator[](const key_type& key) const + { + return at(key); + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + const T & operator[](KeyType && key) const + { + return at(std::forward<KeyType>(key)); + } + + T& at(const key_type& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + const T& at(const key_type& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + size_type erase(const key_type& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return 1; + } + } + return 0; + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return 1; + } + } + return 0; + } + + iterator erase(iterator pos) + { + return erase(pos, std::next(pos)); + } + + iterator erase(iterator first, iterator last) + { + if (first == last) + { + return first; + } + + const auto elements_affected = std::distance(first, last); + const auto offset = std::distance(Container::begin(), first); + + // This is the start situation. We need to delete elements_affected + // elements (3 in this example: e, f, g), and need to return an + // iterator past the last deleted element (h in this example). + // Note that offset is the distance from the start of the vector + // to first. We will need this later. + + // [ a, b, c, d, e, f, g, h, i, j ] + // ^ ^ + // first last + + // Since we cannot move const Keys, we re-construct them in place. + // We start at first and re-construct (viz. copy) the elements from + // the back of the vector. Example for first iteration: + + // ,--------. + // v | destroy e and re-construct with h + // [ a, b, c, d, e, f, g, h, i, j ] + // ^ ^ + // it it + elements_affected + + for (auto it = first; std::next(it, elements_affected) != Container::end(); ++it) + { + it->~value_type(); // destroy but keep allocation + new (&*it) value_type{std::move(*std::next(it, elements_affected))}; // "move" next element to it + } + + // [ a, b, c, d, h, i, j, h, i, j ] + // ^ ^ + // first last + + // remove the unneeded elements at the end of the vector + Container::resize(this->size() - static_cast<size_type>(elements_affected)); + + // [ a, b, c, d, h, i, j ] + // ^ ^ + // first last + + // first is now pointing past the last deleted element, but we cannot + // use this iterator, because it may have been invalidated by the + // resize call. Instead, we can return begin() + offset. + return Container::begin() + offset; + } + + size_type count(const key_type& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return 1; + } + } + return 0; + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return 1; + } + } + return 0; + } + + iterator find(const key_type& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it; + } + } + return Container::end(); + } + + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0> + iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it; + } + } + return Container::end(); + } + + const_iterator find(const key_type& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, key)) + { + return it; + } + } + return Container::end(); + } + + std::pair<iterator, bool> insert( value_type&& value ) + { + return emplace(value.first, std::move(value.second)); + } + + std::pair<iterator, bool> insert( const value_type& value ) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (m_compare(it->first, value.first)) + { + return {it, false}; + } + } + Container::push_back(value); + return {--this->end(), true}; + } + + template<typename InputIt> + using require_input_iter = typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category, + std::input_iterator_tag>::value>::type; + + template<typename InputIt, typename = require_input_iter<InputIt>> + void insert(InputIt first, InputIt last) + { + for (auto it = first; it != last; ++it) + { + insert(*it); + } + } + +private: + JSON_NO_UNIQUE_ADDRESS key_compare m_compare = key_compare(); +}; + +NLOHMANN_JSON_NAMESPACE_END + + +#if defined(JSON_HAS_CPP_17) + #if JSON_HAS_STATIC_RTTI + #include <any> + #endif + #include <string_view> +#endif + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +NLOHMANN_JSON_NAMESPACE_BEGIN + +/*! +@brief a class to store JSON values + +@internal +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + +@note ObjectType trick from https://stackoverflow.com/a/9860911 +@endinternal + +@since version 1.0.0 + +@nosubgrouping +*/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) + : public ::nlohmann::detail::json_base_class<CustomBaseClass> +{ + private: + template<detail::value_t> friend struct detail::external_constructor; + + template<typename> + friend class ::nlohmann::json_pointer; + // can be restored when json_pointer backwards compatibility is removed + // friend ::nlohmann::json_pointer<StringType>; + + template<typename BasicJsonType, typename InputType> + friend class ::nlohmann::detail::parser; + friend ::nlohmann::detail::serializer<basic_json>; + template<typename BasicJsonType> + friend class ::nlohmann::detail::iter_impl; + template<typename BasicJsonType, typename CharType> + friend class ::nlohmann::detail::binary_writer; + template<typename BasicJsonType, typename InputType, typename SAX> + friend class ::nlohmann::detail::binary_reader; + template<typename BasicJsonType, typename InputAdapterType> + friend class ::nlohmann::detail::json_sax_dom_parser; + template<typename BasicJsonType, typename InputAdapterType> + friend class ::nlohmann::detail::json_sax_dom_callback_parser; + friend class ::nlohmann::detail::exception; + + /// workaround type for MSVC + using basic_json_t = NLOHMANN_BASIC_JSON_TPL; + using json_base_class_t = ::nlohmann::detail::json_base_class<CustomBaseClass>; + + JSON_PRIVATE_UNLESS_TESTED: + // convenience aliases for types residing in namespace detail; + using lexer = ::nlohmann::detail::lexer_base<basic_json>; + + template<typename InputAdapterType> + static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser( + InputAdapterType adapter, + detail::parser_callback_t<basic_json>cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false + ) + { + return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter), + std::move(cb), allow_exceptions, ignore_comments); + } + + private: + using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; + template<typename BasicJsonType> + using internal_iterator = ::nlohmann::detail::internal_iterator<BasicJsonType>; + template<typename BasicJsonType> + using iter_impl = ::nlohmann::detail::iter_impl<BasicJsonType>; + template<typename Iterator> + using iteration_proxy = ::nlohmann::detail::iteration_proxy<Iterator>; + template<typename Base> using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator<Base>; + + template<typename CharType> + using output_adapter_t = ::nlohmann::detail::output_adapter_t<CharType>; + + template<typename InputType> + using binary_reader = ::nlohmann::detail::binary_reader<basic_json, InputType>; + template<typename CharType> using binary_writer = ::nlohmann::detail::binary_writer<basic_json, CharType>; + + JSON_PRIVATE_UNLESS_TESTED: + using serializer = ::nlohmann::detail::serializer<basic_json>; + + public: + using value_t = detail::value_t; + /// JSON Pointer, see @ref nlohmann::json_pointer + using json_pointer = ::nlohmann::json_pointer<StringType>; + template<typename T, typename SFINAE> + using json_serializer = JSONSerializer<T, SFINAE>; + /// how to treat decoding errors + using error_handler_t = detail::error_handler_t; + /// how to treat CBOR tags + using cbor_tag_handler_t = detail::cbor_tag_handler_t; + /// how to encode BJData + using bjdata_version_t = detail::bjdata_version_t; + /// helper type for initializer lists of basic_json values + using initializer_list_t = std::initializer_list<detail::json_ref<basic_json>>; + + using input_format_t = detail::input_format_t; + /// SAX interface type, see @ref nlohmann::json_sax + using json_sax_t = json_sax<basic_json>; + + //////////////// + // exceptions // + //////////////// + + /// @name exceptions + /// Classes to implement user-defined exceptions. + /// @{ + + using exception = detail::exception; + using parse_error = detail::parse_error; + using invalid_iterator = detail::invalid_iterator; + using type_error = detail::type_error; + using out_of_range = detail::out_of_range; + using other_error = detail::other_error; + + /// @} + + ///////////////////// + // container types // + ///////////////////// + + /// @name container types + /// The canonic container types to use @ref basic_json like any other STL + /// container. + /// @{ + + /// the type of elements in a basic_json container + using value_type = basic_json; + + /// the type of an element reference + using reference = value_type&; + /// the type of an element const reference + using const_reference = const value_type&; + + /// a type to represent differences between iterators + using difference_type = std::ptrdiff_t; + /// a type to represent container sizes + using size_type = std::size_t; + + /// the allocator type + using allocator_type = AllocatorType<basic_json>; + + /// the type of an element pointer + using pointer = typename std::allocator_traits<allocator_type>::pointer; + /// the type of an element const pointer + using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer; + + /// an iterator for a basic_json container + using iterator = iter_impl<basic_json>; + /// a const iterator for a basic_json container + using const_iterator = iter_impl<const basic_json>; + /// a reverse iterator for a basic_json container + using reverse_iterator = json_reverse_iterator<typename basic_json::iterator>; + /// a const reverse iterator for a basic_json container + using const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator>; + + /// @} + + /// @brief returns the allocator associated with the container + /// @sa https://json.nlohmann.me/api/basic_json/get_allocator/ + static allocator_type get_allocator() + { + return allocator_type(); + } + + /// @brief returns version information on the library + /// @sa https://json.nlohmann.me/api/basic_json/meta/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json meta() + { + basic_json result; + + result["copyright"] = "(C) 2013-2025 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"]["string"] = + detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.', + std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.', + std::to_string(NLOHMANN_JSON_VERSION_PATCH)); + result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; + result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; + result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", detail::concat( + std::to_string(__GNUC__), '.', + std::to_string(__GNUC_MINOR__), '.', + std::to_string(__GNUC_PATCHLEVEL__)) + } + }; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#if defined(_MSVC_LANG) + result["compiler"]["c++"] = std::to_string(_MSVC_LANG); +#elif defined(__cplusplus) + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + + /////////////////////////// + // JSON value data types // + /////////////////////////// + + /// @name JSON value data types + /// The data types to store a JSON value. These types are derived from + /// the template arguments passed to class @ref basic_json. + /// @{ + + /// @brief default object key comparator type + /// The actual object key comparator type (@ref object_comparator_t) may be + /// different. + /// @sa https://json.nlohmann.me/api/basic_json/default_object_comparator_t/ +#if defined(JSON_HAS_CPP_14) + // use of transparent comparator avoids unnecessary repeated construction of temporaries + // in functions involving lookup by key with types other than object_t::key_type (aka. StringType) + using default_object_comparator_t = std::less<>; +#else + using default_object_comparator_t = std::less<StringType>; +#endif + + /// @brief a type for an object + /// @sa https://json.nlohmann.me/api/basic_json/object_t/ + using object_t = ObjectType<StringType, + basic_json, + default_object_comparator_t, + AllocatorType<std::pair<const StringType, + basic_json>>>; + + /// @brief a type for an array + /// @sa https://json.nlohmann.me/api/basic_json/array_t/ + using array_t = ArrayType<basic_json, AllocatorType<basic_json>>; + + /// @brief a type for a string + /// @sa https://json.nlohmann.me/api/basic_json/string_t/ + using string_t = StringType; + + /// @brief a type for a boolean + /// @sa https://json.nlohmann.me/api/basic_json/boolean_t/ + using boolean_t = BooleanType; + + /// @brief a type for a number (integer) + /// @sa https://json.nlohmann.me/api/basic_json/number_integer_t/ + using number_integer_t = NumberIntegerType; + + /// @brief a type for a number (unsigned) + /// @sa https://json.nlohmann.me/api/basic_json/number_unsigned_t/ + using number_unsigned_t = NumberUnsignedType; + + /// @brief a type for a number (floating-point) + /// @sa https://json.nlohmann.me/api/basic_json/number_float_t/ + using number_float_t = NumberFloatType; + + /// @brief a type for a packed binary type + /// @sa https://json.nlohmann.me/api/basic_json/binary_t/ + using binary_t = nlohmann::byte_container_with_subtype<BinaryType>; + + /// @brief object key comparator type + /// @sa https://json.nlohmann.me/api/basic_json/object_comparator_t/ + using object_comparator_t = detail::actual_object_comparator_t<basic_json>; + + /// @} + + private: + + /// helper for exception-safe object creation + template<typename T, typename... Args> + JSON_HEDLEY_RETURNS_NON_NULL + static T* create(Args&& ... args) + { + AllocatorType<T> alloc; + using AllocatorTraits = std::allocator_traits<AllocatorType<T>>; + + auto deleter = [&](T * obj) + { + AllocatorTraits::deallocate(alloc, obj, 1); + }; + std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter); + AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...); + JSON_ASSERT(obj != nullptr); + return obj.release(); + } + + //////////////////////// + // JSON value storage // + //////////////////////// + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief a JSON value + + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + binary | binary | pointer to @ref binary_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. + + @since version 1.0.0 + */ + union json_value + { + /// object (stored with pointer to save storage) + object_t* object; + /// array (stored with pointer to save storage) + array_t* array; + /// string (stored with pointer to save storage) + string_t* string; + /// binary (stored with pointer to save storage) + binary_t* binary; + /// boolean + boolean_t boolean; + /// number (integer) + number_integer_t number_integer; + /// number (unsigned integer) + number_unsigned_t number_unsigned; + /// number (floating-point) + number_float_t number_float; + + /// default constructor (for null values) + json_value() = default; + /// constructor for booleans + json_value(boolean_t v) noexcept : boolean(v) {} + /// constructor for numbers (integer) + json_value(number_integer_t v) noexcept : number_integer(v) {} + /// constructor for numbers (unsigned) + json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} + /// constructor for numbers (floating-point) + json_value(number_float_t v) noexcept : number_float(v) {} + /// constructor for empty values of a given type + json_value(value_t t) + { + switch (t) + { + case value_t::object: + { + object = create<object_t>(); + break; + } + + case value_t::array: + { + array = create<array_t>(); + break; + } + + case value_t::string: + { + string = create<string_t>(""); + break; + } + + case value_t::binary: + { + binary = create<binary_t>(); + break; + } + + case value_t::boolean: + { + boolean = static_cast<boolean_t>(false); + break; + } + + case value_t::number_integer: + { + number_integer = static_cast<number_integer_t>(0); + break; + } + + case value_t::number_unsigned: + { + number_unsigned = static_cast<number_unsigned_t>(0); + break; + } + + case value_t::number_float: + { + number_float = static_cast<number_float_t>(0.0); + break; + } + + case value_t::null: + { + object = nullptr; // silence warning, see #821 + break; + } + + case value_t::discarded: + default: + { + object = nullptr; // silence warning, see #821 + if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) + { + JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.12.0", nullptr)); // LCOV_EXCL_LINE + } + break; + } + } + } + + /// constructor for strings + json_value(const string_t& value) : string(create<string_t>(value)) {} + + /// constructor for rvalue strings + json_value(string_t&& value) : string(create<string_t>(std::move(value))) {} + + /// constructor for objects + json_value(const object_t& value) : object(create<object_t>(value)) {} + + /// constructor for rvalue objects + json_value(object_t&& value) : object(create<object_t>(std::move(value))) {} + + /// constructor for arrays + json_value(const array_t& value) : array(create<array_t>(value)) {} + + /// constructor for rvalue arrays + json_value(array_t&& value) : array(create<array_t>(std::move(value))) {} + + /// constructor for binary arrays + json_value(const typename binary_t::container_type& value) : binary(create<binary_t>(value)) {} + + /// constructor for rvalue binary arrays + json_value(typename binary_t::container_type&& value) : binary(create<binary_t>(std::move(value))) {} + + /// constructor for binary arrays (internal type) + json_value(const binary_t& value) : binary(create<binary_t>(value)) {} + + /// constructor for rvalue binary arrays (internal type) + json_value(binary_t&& value) : binary(create<binary_t>(std::move(value))) {} + + void destroy(value_t t) + { + if ( + (t == value_t::object && object == nullptr) || + (t == value_t::array && array == nullptr) || + (t == value_t::string && string == nullptr) || + (t == value_t::binary && binary == nullptr) + ) + { + //not initialized (e.g. due to exception in the ctor) + return; + } + if (t == value_t::array || t == value_t::object) + { + // flatten the current json_value to a heap-allocated stack + std::vector<basic_json> stack; + + // move the top-level items to stack + if (t == value_t::array) + { + stack.reserve(array->size()); + std::move(array->begin(), array->end(), std::back_inserter(stack)); + } + else + { + stack.reserve(object->size()); + for (auto&& it : *object) + { + stack.push_back(std::move(it.second)); + } + } + + while (!stack.empty()) + { + // move the last item to local variable to be processed + basic_json current_item(std::move(stack.back())); + stack.pop_back(); + + // if current_item is array/object, move + // its children to the stack to be processed later + if (current_item.is_array()) + { + std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack)); + + current_item.m_data.m_value.array->clear(); + } + else if (current_item.is_object()) + { + for (auto&& it : *current_item.m_data.m_value.object) + { + stack.push_back(std::move(it.second)); + } + + current_item.m_data.m_value.object->clear(); + } + + // it's now safe that current_item get destructed + // since it doesn't have any children + } + } + + switch (t) + { + case value_t::object: + { + AllocatorType<object_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, object); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, object, 1); + break; + } + + case value_t::array: + { + AllocatorType<array_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, array); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, array, 1); + break; + } + + case value_t::string: + { + AllocatorType<string_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, string); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1); + break; + } + + case value_t::binary: + { + AllocatorType<binary_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, binary); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1); + break; + } + + case value_t::null: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::discarded: + default: + { + break; + } + } + } + }; + + private: + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + + Furthermore, the parent relation is checked for arrays and objects: If + @a check_parents true and the value is an array or object, then the + container's elements must have the current value as parent. + + @param[in] check_parents whether the parent relation should be checked. + The value is true by default and should only be set to false + during destruction of objects when the invariant does not + need to hold. + */ + void assert_invariant(bool check_parents = true) const noexcept + { + JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr); + JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr); + JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr); + JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr); + +#if JSON_DIAGNOSTICS + JSON_TRY + { + // cppcheck-suppress assertWithSideEffect + JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j) + { + return j.m_parent == this; + })); + } + JSON_CATCH(...) {} // LCOV_EXCL_LINE +#endif + static_cast<void>(check_parents); + } + + void set_parents() + { +#if JSON_DIAGNOSTICS + switch (m_data.m_type) + { + case value_t::array: + { + for (auto& element : *m_data.m_value.array) + { + element.m_parent = this; + } + break; + } + + case value_t::object: + { + for (auto& element : *m_data.m_value.object) + { + element.second.m_parent = this; + } + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + break; + } +#endif + } + + iterator set_parents(iterator it, typename iterator::difference_type count_set_parents) + { +#if JSON_DIAGNOSTICS + for (typename iterator::difference_type i = 0; i < count_set_parents; ++i) + { + (it + i)->m_parent = this; + } +#else + static_cast<void>(count_set_parents); +#endif + return it; + } + + reference set_parent(reference j, std::size_t old_capacity = detail::unknown_size()) + { +#if JSON_DIAGNOSTICS + if (old_capacity != detail::unknown_size()) + { + // see https://github.com/nlohmann/json/issues/2838 + JSON_ASSERT(type() == value_t::array); + if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + return j; + } + } + + // ordered_json uses a vector internally, so pointers could have + // been invalidated; see https://github.com/nlohmann/json/issues/2962 +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning(push ) +#pragma warning(disable : 4127) // ignore warning to replace if with if constexpr +#endif + if (detail::is_ordered_map<object_t>::value) + { + set_parents(); + return j; + } +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning( pop ) +#endif + + j.m_parent = this; +#else + static_cast<void>(j); + static_cast<void>(old_capacity); +#endif + return j; + } + + public: + ////////////////////////// + // JSON parser callback // + ////////////////////////// + + /// @brief parser event types + /// @sa https://json.nlohmann.me/api/basic_json/parse_event_t/ + using parse_event_t = detail::parse_event_t; + + /// @brief per-element parser callback type + /// @sa https://json.nlohmann.me/api/basic_json/parser_callback_t/ + using parser_callback_t = detail::parser_callback_t<basic_json>; + + ////////////////// + // constructors // + ////////////////// + + /// @name constructors and destructors + /// Constructors of class @ref basic_json, copy/move constructor, copy + /// assignment, static functions creating objects, and the destructor. + /// @{ + + /// @brief create an empty value with a given type + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(const value_t v) + : m_data(v) + { + assert_invariant(); + } + + /// @brief create a null object + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-exception-escape) + : basic_json(value_t::null) + { + assert_invariant(); + } + + /// @brief create a JSON value from compatible types + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < typename CompatibleType, + typename U = detail::uncvref_t<CompatibleType>, + detail::enable_if_t < + !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value, int > = 0 > + basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape) + JSONSerializer<U>::to_json(std::declval<basic_json_t&>(), + std::forward<CompatibleType>(val)))) + { + JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val)); + set_parents(); + assert_invariant(); + } + + /// @brief create a JSON value from an existing one + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json<BasicJsonType>::value&& !std::is_same<basic_json, BasicJsonType>::value, int > = 0 > + basic_json(const BasicJsonType& val) +#if JSON_DIAGNOSTIC_POSITIONS + : start_position(val.start_pos()), + end_position(val.end_pos()) +#endif + { + using other_boolean_t = typename BasicJsonType::boolean_t; + using other_number_float_t = typename BasicJsonType::number_float_t; + using other_number_integer_t = typename BasicJsonType::number_integer_t; + using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using other_string_t = typename BasicJsonType::string_t; + using other_object_t = typename BasicJsonType::object_t; + using other_array_t = typename BasicJsonType::array_t; + using other_binary_t = typename BasicJsonType::binary_t; + + switch (val.type()) + { + case value_t::boolean: + JSONSerializer<other_boolean_t>::to_json(*this, val.template get<other_boolean_t>()); + break; + case value_t::number_float: + JSONSerializer<other_number_float_t>::to_json(*this, val.template get<other_number_float_t>()); + break; + case value_t::number_integer: + JSONSerializer<other_number_integer_t>::to_json(*this, val.template get<other_number_integer_t>()); + break; + case value_t::number_unsigned: + JSONSerializer<other_number_unsigned_t>::to_json(*this, val.template get<other_number_unsigned_t>()); + break; + case value_t::string: + JSONSerializer<other_string_t>::to_json(*this, val.template get_ref<const other_string_t&>()); + break; + case value_t::object: + JSONSerializer<other_object_t>::to_json(*this, val.template get_ref<const other_object_t&>()); + break; + case value_t::array: + JSONSerializer<other_array_t>::to_json(*this, val.template get_ref<const other_array_t&>()); + break; + case value_t::binary: + JSONSerializer<other_binary_t>::to_json(*this, val.template get_ref<const other_binary_t&>()); + break; + case value_t::null: + *this = nullptr; + break; + case value_t::discarded: + m_data.m_type = value_t::discarded; + break; + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + JSON_ASSERT(m_data.m_type == val.type()); + + set_parents(); + assert_invariant(); + } + + /// @brief create a container (array or object) from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(initializer_list_t init, + bool type_deduction = true, + value_t manual_type = value_t::array) + { + // check if each element is an array with two elements whose first + // element is a string + bool is_an_object = std::all_of(init.begin(), init.end(), + [](const detail::json_ref<basic_json>& element_ref) + { + // The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int; + // (many string types can be constructed from 0 via its null-pointer guise, so we get a + // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows) + return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast<size_type>(0)].is_string(); + }); + + // adjust type if type deduction is not wanted + if (!type_deduction) + { + // if array is wanted, do not create an object though possible + if (manual_type == value_t::array) + { + is_an_object = false; + } + + // if object is wanted but impossible, throw an exception + if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) + { + JSON_THROW(type_error::create(301, "cannot create object from initializer list", nullptr)); + } + } + + if (is_an_object) + { + // the initializer list is a list of pairs -> create object + m_data.m_type = value_t::object; + m_data.m_value = value_t::object; + + for (auto& element_ref : init) + { + auto element = element_ref.moved_or_copied(); + m_data.m_value.object->emplace( + std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)), + std::move((*element.m_data.m_value.array)[1])); + } + } + else + { + // the initializer list describes an array -> create array + m_data.m_type = value_t::array; + m_data.m_value.array = create<array_t>(init.begin(), init.end()); + } + + set_parents(); + assert_invariant(); + } + + /// @brief explicitly create a binary array (without subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init) + { + auto res = basic_json(); + res.m_data.m_type = value_t::binary; + res.m_data.m_value = init; + return res; + } + + /// @brief explicitly create a binary array (with subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_data.m_type = value_t::binary; + res.m_data.m_value = binary_t(init, subtype); + return res; + } + + /// @brief explicitly create a binary array + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init) + { + auto res = basic_json(); + res.m_data.m_type = value_t::binary; + res.m_data.m_value = std::move(init); + return res; + } + + /// @brief explicitly create a binary array (with subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_data.m_type = value_t::binary; + res.m_data.m_value = binary_t(std::move(init), subtype); + return res; + } + + /// @brief explicitly create an array from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/array/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json array(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::array); + } + + /// @brief explicitly create an object from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/object/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json object(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::object); + } + + /// @brief construct an array with count copies of given value + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(size_type cnt, const basic_json& val): + m_data{cnt, val} + { + set_parents(); + assert_invariant(); + } + + /// @brief construct a JSON container given an iterator range + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < class InputIT, typename std::enable_if < + std::is_same<InputIT, typename basic_json_t::iterator>::value || + std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int >::type = 0 > + basic_json(InputIT first, InputIT last) // NOLINT(performance-unnecessary-value-param) + { + JSON_ASSERT(first.m_object != nullptr); + JSON_ASSERT(last.m_object != nullptr); + + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", nullptr)); + } + + // copy type from first iterator + m_data.m_type = first.m_object->m_data.m_type; + + // check if iterator range is complete for primitive values + switch (m_data.m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + { + if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", first.m_object)); + } + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::binary: + case value_t::discarded: + default: + break; + } + + switch (m_data.m_type) + { + case value_t::number_integer: + { + m_data.m_value.number_integer = first.m_object->m_data.m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_data.m_value.number_unsigned = first.m_object->m_data.m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_data.m_value.number_float = first.m_object->m_data.m_value.number_float; + break; + } + + case value_t::boolean: + { + m_data.m_value.boolean = first.m_object->m_data.m_value.boolean; + break; + } + + case value_t::string: + { + m_data.m_value = *first.m_object->m_data.m_value.string; + break; + } + + case value_t::object: + { + m_data.m_value.object = create<object_t>(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + m_data.m_value.array = create<array_t>(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::binary: + { + m_data.m_value = *first.m_object->m_data.m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(invalid_iterator::create(206, detail::concat("cannot construct with iterators from ", first.m_object->type_name()), first.m_object)); + } + + set_parents(); + assert_invariant(); + } + + /////////////////////////////////////// + // other constructors and destructor // + /////////////////////////////////////// + + template<typename JsonRef, + detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>, + std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0 > + basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} + + /// @brief copy constructor + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(const basic_json& other) + : json_base_class_t(other) +#if JSON_DIAGNOSTIC_POSITIONS + , start_position(other.start_position) + , end_position(other.end_position) +#endif + { + m_data.m_type = other.m_data.m_type; + // check of passed value is valid + other.assert_invariant(); + + switch (m_data.m_type) + { + case value_t::object: + { + m_data.m_value = *other.m_data.m_value.object; + break; + } + + case value_t::array: + { + m_data.m_value = *other.m_data.m_value.array; + break; + } + + case value_t::string: + { + m_data.m_value = *other.m_data.m_value.string; + break; + } + + case value_t::boolean: + { + m_data.m_value = other.m_data.m_value.boolean; + break; + } + + case value_t::number_integer: + { + m_data.m_value = other.m_data.m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_data.m_value = other.m_data.m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_data.m_value = other.m_data.m_value.number_float; + break; + } + + case value_t::binary: + { + m_data.m_value = *other.m_data.m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + + set_parents(); + assert_invariant(); + } + + /// @brief move constructor + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(basic_json&& other) noexcept + : json_base_class_t(std::forward<json_base_class_t>(other)), + m_data(std::move(other.m_data)) // cppcheck-suppress[accessForwarded] TODO check +#if JSON_DIAGNOSTIC_POSITIONS + , start_position(other.start_position) // cppcheck-suppress[accessForwarded] TODO check + , end_position(other.end_position) // cppcheck-suppress[accessForwarded] TODO check +#endif + { + // check that passed value is valid + other.assert_invariant(false); // cppcheck-suppress[accessForwarded] + + // invalidate payload + other.m_data.m_type = value_t::null; + other.m_data.m_value = {}; + +#if JSON_DIAGNOSTIC_POSITIONS + other.start_position = std::string::npos; + other.end_position = std::string::npos; +#endif + + set_parents(); + assert_invariant(); + } + + /// @brief copy assignment + /// @sa https://json.nlohmann.me/api/basic_json/operator=/ + basic_json& operator=(basic_json other) noexcept ( + std::is_nothrow_move_constructible<value_t>::value&& + std::is_nothrow_move_assignable<value_t>::value&& + std::is_nothrow_move_constructible<json_value>::value&& + std::is_nothrow_move_assignable<json_value>::value&& + std::is_nothrow_move_assignable<json_base_class_t>::value + ) + { + // check that passed value is valid + other.assert_invariant(); + + using std::swap; + swap(m_data.m_type, other.m_data.m_type); + swap(m_data.m_value, other.m_data.m_value); + +#if JSON_DIAGNOSTIC_POSITIONS + swap(start_position, other.start_position); + swap(end_position, other.end_position); +#endif + + json_base_class_t::operator=(std::move(other)); + + set_parents(); + assert_invariant(); + return *this; + } + + /// @brief destructor + /// @sa https://json.nlohmann.me/api/basic_json/~basic_json/ + ~basic_json() noexcept + { + assert_invariant(false); + } + + /// @} + + public: + /////////////////////// + // object inspection // + /////////////////////// + + /// @name object inspection + /// Functions to inspect the type of a JSON value. + /// @{ + + /// @brief serialization + /// @sa https://json.nlohmann.me/api/basic_json/dump/ + string_t dump(const int indent = -1, + const char indent_char = ' ', + const bool ensure_ascii = false, + const error_handler_t error_handler = error_handler_t::strict) const + { + string_t result; + serializer s(detail::output_adapter<char, string_t>(result), indent_char, error_handler); + + if (indent >= 0) + { + s.dump(*this, true, ensure_ascii, static_cast<unsigned int>(indent)); + } + else + { + s.dump(*this, false, ensure_ascii, 0); + } + + return result; + } + + /// @brief return the type of the JSON value (explicit) + /// @sa https://json.nlohmann.me/api/basic_json/type/ + constexpr value_t type() const noexcept + { + return m_data.m_type; + } + + /// @brief return whether type is primitive + /// @sa https://json.nlohmann.me/api/basic_json/is_primitive/ + constexpr bool is_primitive() const noexcept + { + return is_null() || is_string() || is_boolean() || is_number() || is_binary(); + } + + /// @brief return whether type is structured + /// @sa https://json.nlohmann.me/api/basic_json/is_structured/ + constexpr bool is_structured() const noexcept + { + return is_array() || is_object(); + } + + /// @brief return whether value is null + /// @sa https://json.nlohmann.me/api/basic_json/is_null/ + constexpr bool is_null() const noexcept + { + return m_data.m_type == value_t::null; + } + + /// @brief return whether value is a boolean + /// @sa https://json.nlohmann.me/api/basic_json/is_boolean/ + constexpr bool is_boolean() const noexcept + { + return m_data.m_type == value_t::boolean; + } + + /// @brief return whether value is a number + /// @sa https://json.nlohmann.me/api/basic_json/is_number/ + constexpr bool is_number() const noexcept + { + return is_number_integer() || is_number_float(); + } + + /// @brief return whether value is an integer number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/ + constexpr bool is_number_integer() const noexcept + { + return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned; + } + + /// @brief return whether value is an unsigned integer number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/ + constexpr bool is_number_unsigned() const noexcept + { + return m_data.m_type == value_t::number_unsigned; + } + + /// @brief return whether value is a floating-point number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_float/ + constexpr bool is_number_float() const noexcept + { + return m_data.m_type == value_t::number_float; + } + + /// @brief return whether value is an object + /// @sa https://json.nlohmann.me/api/basic_json/is_object/ + constexpr bool is_object() const noexcept + { + return m_data.m_type == value_t::object; + } + + /// @brief return whether value is an array + /// @sa https://json.nlohmann.me/api/basic_json/is_array/ + constexpr bool is_array() const noexcept + { + return m_data.m_type == value_t::array; + } + + /// @brief return whether value is a string + /// @sa https://json.nlohmann.me/api/basic_json/is_string/ + constexpr bool is_string() const noexcept + { + return m_data.m_type == value_t::string; + } + + /// @brief return whether value is a binary array + /// @sa https://json.nlohmann.me/api/basic_json/is_binary/ + constexpr bool is_binary() const noexcept + { + return m_data.m_type == value_t::binary; + } + + /// @brief return whether value is discarded + /// @sa https://json.nlohmann.me/api/basic_json/is_discarded/ + constexpr bool is_discarded() const noexcept + { + return m_data.m_type == value_t::discarded; + } + + /// @brief return the type of the JSON value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/ + constexpr operator value_t() const noexcept + { + return m_data.m_type; + } + + /// @} + + private: + ////////////////// + // value access // + ////////////////// + + /// get a boolean (explicit) + boolean_t get_impl(boolean_t* /*unused*/) const + { + if (JSON_HEDLEY_LIKELY(is_boolean())) + { + return m_data.m_value.boolean; + } + + JSON_THROW(type_error::create(302, detail::concat("type must be boolean, but is ", type_name()), this)); + } + + /// get a pointer to the value (object) + object_t* get_impl_ptr(object_t* /*unused*/) noexcept + { + return is_object() ? m_data.m_value.object : nullptr; + } + + /// get a pointer to the value (object) + constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept + { + return is_object() ? m_data.m_value.object : nullptr; + } + + /// get a pointer to the value (array) + array_t* get_impl_ptr(array_t* /*unused*/) noexcept + { + return is_array() ? m_data.m_value.array : nullptr; + } + + /// get a pointer to the value (array) + constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept + { + return is_array() ? m_data.m_value.array : nullptr; + } + + /// get a pointer to the value (string) + string_t* get_impl_ptr(string_t* /*unused*/) noexcept + { + return is_string() ? m_data.m_value.string : nullptr; + } + + /// get a pointer to the value (string) + constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept + { + return is_string() ? m_data.m_value.string : nullptr; + } + + /// get a pointer to the value (boolean) + boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept + { + return is_boolean() ? &m_data.m_value.boolean : nullptr; + } + + /// get a pointer to the value (boolean) + constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept + { + return is_boolean() ? &m_data.m_value.boolean : nullptr; + } + + /// get a pointer to the value (integer number) + number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept + { + return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr; + } + + /// get a pointer to the value (integer number) + constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept + { + return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr; + } + + /// get a pointer to the value (unsigned number) + number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept + { + return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (unsigned number) + constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept + { + return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (floating-point number) + number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept + { + return is_number_float() ? &m_data.m_value.number_float : nullptr; + } + + /// get a pointer to the value (floating-point number) + constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept + { + return is_number_float() ? &m_data.m_value.number_float : nullptr; + } + + /// get a pointer to the value (binary) + binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept + { + return is_binary() ? m_data.m_value.binary : nullptr; + } + + /// get a pointer to the value (binary) + constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept + { + return is_binary() ? m_data.m_value.binary : nullptr; + } + + /*! + @brief helper function to implement get_ref() + + This function helps to implement get_ref() without code duplication for + const and non-const overloads + + @tparam ThisType will be deduced as `basic_json` or `const basic_json` + + @throw type_error.303 if ReferenceType does not match underlying value + type of the current JSON + */ + template<typename ReferenceType, typename ThisType> + static ReferenceType get_ref_impl(ThisType& obj) + { + // delegate the call to get_ptr<>() + auto* ptr = obj.template get_ptr<typename std::add_pointer<ReferenceType>::type>(); + + if (JSON_HEDLEY_LIKELY(ptr != nullptr)) + { + return *ptr; + } + + JSON_THROW(type_error::create(303, detail::concat("incompatible ReferenceType for get_ref, actual type is ", obj.type_name()), &obj)); + } + + public: + /// @name value access + /// Direct access to the stored value of a JSON value. + /// @{ + + /// @brief get a pointer value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/ + template<typename PointerType, typename std::enable_if< + std::is_pointer<PointerType>::value, int>::type = 0> + auto get_ptr() noexcept -> decltype(std::declval<basic_json_t&>().get_impl_ptr(std::declval<PointerType>())) + { + // delegate the call to get_impl_ptr<>() + return get_impl_ptr(static_cast<PointerType>(nullptr)); + } + + /// @brief get a pointer value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/ + template < typename PointerType, typename std::enable_if < + std::is_pointer<PointerType>::value&& + std::is_const<typename std::remove_pointer<PointerType>::type>::value, int >::type = 0 > + constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>())) + { + // delegate the call to get_impl_ptr<>() const + return get_impl_ptr(static_cast<PointerType>(nullptr)); + } + + private: + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value + which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer<ValueType> + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType ret; + JSONSerializer<ValueType>::from_json(*this, ret); + return ret; + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer<ValueType> has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + - @ref json_serializer<ValueType> does not have a `from_json()` method of + the form `ValueType from_json(const basic_json&)` + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer<ValueType> `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector<short>`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map<std::string\, + json>`.,get__ValueType_const} + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::is_default_constructible<ValueType>::value&& + detail::has_from_json<basic_json_t, ValueType>::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept( + JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>()))) + { + auto ret = ValueType(); + JSONSerializer<ValueType>::from_json(*this, ret); + return ret; + } + + /*! + @brief get a value (explicit); special case + + Explicit type conversion between the JSON value and a compatible value + which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer<ValueType> + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + return JSONSerializer<ValueType>::from_json(*this); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json and + - @ref json_serializer<ValueType> has a `from_json()` method of the form + `ValueType from_json(const basic_json&)` + + @note If @ref json_serializer<ValueType> has both overloads of + `from_json()`, this one is chosen. + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer<ValueType> `from_json()` method throws + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::has_non_default_from_json<basic_json_t, ValueType>::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept( + JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>()))) + { + return JSONSerializer<ValueType>::from_json(*this); + } + + /*! + @brief get special-case overload + + This overloads converts the current @ref basic_json in a different + @ref basic_json type + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this, converted into @a BasicJsonType + + @complexity Depending on the implementation of the called `from_json()` + method. + + @since version 3.2.0 + */ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json<BasicJsonType>::value, + int > = 0 > + BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const + { + return *this; + } + + /*! + @brief get special-case overload + + This overloads avoids a lot of template boilerplate, it can be seen as the + identity method + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this + + @complexity Constant. + + @since version 2.1.0 + */ + template<typename BasicJsonType, + detail::enable_if_t< + std::is_same<BasicJsonType, basic_json_t>::value, + int> = 0> + basic_json get_impl(detail::priority_tag<3> /*unused*/) const + { + return *this; + } + + /*! + @brief get a pointer value (explicit) + @copydoc get() + */ + template<typename PointerType, + detail::enable_if_t< + std::is_pointer<PointerType>::value, + int> = 0> + constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept + -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>()) + { + // delegate the call to get_ptr + return get_ptr<PointerType>(); + } + + public: + /*! + @brief get a (pointer) value (explicit) + + Performs explicit type conversion between the JSON value and a compatible value if required. + + - If the requested type is a pointer to the internally stored JSON value that pointer is returned. + No copies are made. + + - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible + from the current @ref basic_json. + + - Otherwise the value is converted by calling the @ref json_serializer<ValueType> `from_json()` + method. + + @tparam ValueTypeCV the provided value type + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @tparam ValueType if necessary + + @throw what @ref json_serializer<ValueType> `from_json()` method throws if conversion is required + + @since version 2.1.0 + */ + template < typename ValueTypeCV, typename ValueType = detail::uncvref_t<ValueTypeCV>> +#if defined(JSON_HAS_CPP_14) + constexpr +#endif + auto get() const noexcept( + noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))) + -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {})) + { + // we cannot static_assert on ValueTypeCV being non-const, because + // there is support for get<const basic_json_t>(), which is why we + // still need the uncvref + static_assert(!std::is_reference<ValueTypeCV>::value, + "get() cannot be used with reference types, you might want to use get_ref()"); + return get_impl<ValueType>(detail::priority_tag<4> {}); + } + + /*! + @brief get a pointer value (explicit) + + Explicit pointer access to the internally stored JSON value. No copies are + made. + + @warning The pointer becomes invalid if the underlying JSON object + changes. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get__PointerType} + + @sa see @ref get_ptr() for explicit pointer-member access + + @since version 1.0.0 + */ + template<typename PointerType, typename std::enable_if< + std::is_pointer<PointerType>::value, int>::type = 0> + auto get() noexcept -> decltype(std::declval<basic_json_t&>().template get_ptr<PointerType>()) + { + // delegate the call to get_ptr + return get_ptr<PointerType>(); + } + + /// @brief get a value (explicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_to/ + template < typename ValueType, + detail::enable_if_t < + !detail::is_basic_json<ValueType>::value&& + detail::has_from_json<basic_json_t, ValueType>::value, + int > = 0 > + ValueType & get_to(ValueType& v) const noexcept(noexcept( + JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v))) + { + JSONSerializer<ValueType>::from_json(*this, v); + return v; + } + + // specialization to allow calling get_to with a basic_json value + // see https://github.com/nlohmann/json/issues/2175 + template<typename ValueType, + detail::enable_if_t < + detail::is_basic_json<ValueType>::value, + int> = 0> + ValueType & get_to(ValueType& v) const + { + v = *this; + return v; + } + + template < + typename T, std::size_t N, + typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + detail::enable_if_t < + detail::has_from_json<basic_json_t, Array>::value, int > = 0 > + Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + noexcept(noexcept(JSONSerializer<Array>::from_json( + std::declval<const basic_json_t&>(), v))) + { + JSONSerializer<Array>::from_json(*this, v); + return v; + } + + /// @brief get a reference value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ref/ + template<typename ReferenceType, typename std::enable_if< + std::is_reference<ReferenceType>::value, int>::type = 0> + ReferenceType get_ref() + { + // delegate call to get_ref_impl + return get_ref_impl<ReferenceType>(*this); + } + + /// @brief get a reference value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ref/ + template < typename ReferenceType, typename std::enable_if < + std::is_reference<ReferenceType>::value&& + std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int >::type = 0 > + ReferenceType get_ref() const + { + // delegate call to get_ref_impl + return get_ref_impl<ReferenceType>(*this); + } + + /*! + @brief get a value (implicit) + + Implicit type conversion between the JSON value and a compatible value. + The call is realized by calling @ref get() const. + + @tparam ValueType non-pointer type compatible to the JSON value, for + instance `int` for JSON integer numbers, `bool` for JSON booleans, or + `std::vector` types for JSON arrays. The character type of @ref string_t + as well as an initializer list of this type is excluded to avoid + ambiguities as these types implicitly convert to `std::string`. + + @return copy of the JSON value, converted to type @a ValueType + + @throw type_error.302 in case passed type @a ValueType is incompatible + to the JSON value type (e.g., the JSON value is of type boolean, but a + string is requested); see example below + + @complexity Linear in the size of the JSON value. + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector<short>`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map<std::string\, + json>`.,operator__ValueType} + + @since version 1.0.0 + */ + template < typename ValueType, typename std::enable_if < + detail::conjunction < + detail::negation<std::is_pointer<ValueType>>, + detail::negation<std::is_same<ValueType, std::nullptr_t>>, + detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>, + detail::negation<std::is_same<ValueType, typename string_t::value_type>>, + detail::negation<detail::is_basic_json<ValueType>>, + detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>, +#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) + detail::negation<std::is_same<ValueType, std::string_view>>, +#endif +#if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI + detail::negation<std::is_same<ValueType, std::any>>, +#endif + detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType> + >::value, int >::type = 0 > + JSON_EXPLICIT operator ValueType() const + { + // delegate the call to get<>() const + return get<ValueType>(); + } + + /// @brief get a binary value + /// @sa https://json.nlohmann.me/api/basic_json/get_binary/ + binary_t& get_binary() + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this)); + } + + return *get_ptr<binary_t*>(); + } + + /// @brief get a binary value + /// @sa https://json.nlohmann.me/api/basic_json/get_binary/ + const binary_t& get_binary() const + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this)); + } + + return *get_ptr<const binary_t*>(); + } + + /// @} + + //////////////////// + // element access // + //////////////////// + + /// @name element access + /// Access to the JSON value. + /// @{ + + /// @brief access specified array element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(size_type idx) + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return set_parent(m_data.m_value.array->at(idx)); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this)); + } // cppcheck-suppress[missingReturn] + } + else + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + } + + /// @brief access specified array element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(size_type idx) const + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return m_data.m_value.array->at(idx); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this)); + } // cppcheck-suppress[missingReturn] + } + else + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(const typename object_t::key_type& key) + { + // at only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + + auto it = m_data.m_value.object->find(key); + if (it == m_data.m_value.object->end()) + { + JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this)); + } + return set_parent(it->second); + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + reference at(KeyType && key) + { + // at only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + + auto it = m_data.m_value.object->find(std::forward<KeyType>(key)); + if (it == m_data.m_value.object->end()) + { + JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this)); + } + return set_parent(it->second); + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(const typename object_t::key_type& key) const + { + // at only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + + auto it = m_data.m_value.object->find(key); + if (it == m_data.m_value.object->end()) + { + JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this)); + } + return it->second; + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + const_reference at(KeyType && key) const + { + // at only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this)); + } + + auto it = m_data.m_value.object->find(std::forward<KeyType>(key)); + if (it == m_data.m_value.object->end()) + { + JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this)); + } + return it->second; + } + + /// @brief access specified array element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](size_type idx) + { + // implicitly convert null value to an empty array + if (is_null()) + { + m_data.m_type = value_t::array; + m_data.m_value.array = create<array_t>(); + assert_invariant(); + } + + // operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // fill up array with null values if given idx is outside range + if (idx >= m_data.m_value.array->size()) + { +#if JSON_DIAGNOSTICS + // remember array size & capacity before resizing + const auto old_size = m_data.m_value.array->size(); + const auto old_capacity = m_data.m_value.array->capacity(); +#endif + m_data.m_value.array->resize(idx + 1); + +#if JSON_DIAGNOSTICS + if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + } + else + { + // set parent for values added above + set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size)); + } +#endif + assert_invariant(); + } + + return m_data.m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this)); + } + + /// @brief access specified array element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](size_type idx) const + { + // const operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + return m_data.m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](typename object_t::key_type key) // NOLINT(performance-unnecessary-value-param) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_data.m_type = value_t::object; + m_data.m_value.object = create<object_t>(); + assert_invariant(); + } + + // operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + auto result = m_data.m_value.object->emplace(std::move(key), nullptr); + return set_parent(result.first->second); + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](const typename object_t::key_type& key) const + { + // const operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + auto it = m_data.m_value.object->find(key); + JSON_ASSERT(it != m_data.m_value.object->end()); + return it->second; + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this)); + } + + // these two functions resolve a (const) char * ambiguity affecting Clang and MSVC + // (they seemingly cannot be constrained to resolve the ambiguity) + template<typename T> + reference operator[](T* key) + { + return operator[](typename object_t::key_type(key)); + } + + template<typename T> + const_reference operator[](T* key) const + { + return operator[](typename object_t::key_type(key)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 > + reference operator[](KeyType && key) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_data.m_type = value_t::object; + m_data.m_value.object = create<object_t>(); + assert_invariant(); + } + + // operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + auto result = m_data.m_value.object->emplace(std::forward<KeyType>(key), nullptr); + return set_parent(result.first->second); + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 > + const_reference operator[](KeyType && key) const + { + // const operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + auto it = m_data.m_value.object->find(std::forward<KeyType>(key)); + JSON_ASSERT(it != m_data.m_value.object->end()); + return it->second; + } + + JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this)); + } + + private: + template<typename KeyType> + using is_comparable_with_object_key = detail::is_comparable < + object_comparator_t, const typename object_t::key_type&, KeyType >; + + template<typename ValueType> + using value_return_type = std::conditional < + detail::is_c_string_uncvref<ValueType>::value, + string_t, typename std::decay<ValueType>::type >; + + public: + /// @brief access specified object element with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, detail::enable_if_t < + !detail::is_transparent<object_comparator_t>::value + && detail::is_getable<basic_json_t, ValueType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(key); + if (it != end()) + { + return it->template get<ValueType>(); + } + + return default_value; + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + /// @brief access specified object element with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type, + detail::enable_if_t < + !detail::is_transparent<object_comparator_t>::value + && detail::is_getable<basic_json_t, ReturnType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ReturnType value(const typename object_t::key_type& key, ValueType && default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(key); + if (it != end()) + { + return it->template get<ReturnType>(); + } + + return std::forward<ValueType>(default_value); + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + /// @brief access specified object element with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, class KeyType, detail::enable_if_t < + detail::is_transparent<object_comparator_t>::value + && !detail::is_json_pointer<KeyType>::value + && is_comparable_with_object_key<KeyType>::value + && detail::is_getable<basic_json_t, ValueType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ValueType value(KeyType && key, const ValueType& default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(std::forward<KeyType>(key)); + if (it != end()) + { + return it->template get<ValueType>(); + } + + return default_value; + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + /// @brief access specified object element via JSON Pointer with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type, + detail::enable_if_t < + detail::is_transparent<object_comparator_t>::value + && !detail::is_json_pointer<KeyType>::value + && is_comparable_with_object_key<KeyType>::value + && detail::is_getable<basic_json_t, ReturnType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ReturnType value(KeyType && key, ValueType && default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(std::forward<KeyType>(key)); + if (it != end()) + { + return it->template get<ReturnType>(); + } + + return std::forward<ValueType>(default_value); + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + /// @brief access specified object element via JSON Pointer with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, detail::enable_if_t < + detail::is_getable<basic_json_t, ValueType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ValueType value(const json_pointer& ptr, const ValueType& default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if pointer resolves a value, return it or use default value + JSON_TRY + { + return ptr.get_checked(this).template get<ValueType>(); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + return default_value; + } + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + /// @brief access specified object element via JSON Pointer with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type, + detail::enable_if_t < + detail::is_getable<basic_json_t, ReturnType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + ReturnType value(const json_pointer& ptr, ValueType && default_value) const + { + // value only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if pointer resolves a value, return it or use default value + JSON_TRY + { + return ptr.get_checked(this).template get<ReturnType>(); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + return std::forward<ValueType>(default_value); + } + } + + JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this)); + } + + template < class ValueType, class BasicJsonType, detail::enable_if_t < + detail::is_basic_json<BasicJsonType>::value + && detail::is_getable<basic_json_t, ValueType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const + { + return value(ptr.convert(), default_value); + } + + template < class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type, + detail::enable_if_t < + detail::is_basic_json<BasicJsonType>::value + && detail::is_getable<basic_json_t, ReturnType>::value + && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 > + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType && default_value) const + { + return value(ptr.convert(), std::forward<ValueType>(default_value)); + } + + /// @brief access the first element + /// @sa https://json.nlohmann.me/api/basic_json/front/ + reference front() + { + return *begin(); + } + + /// @brief access the first element + /// @sa https://json.nlohmann.me/api/basic_json/front/ + const_reference front() const + { + return *cbegin(); + } + + /// @brief access the last element + /// @sa https://json.nlohmann.me/api/basic_json/back/ + reference back() + { + auto tmp = end(); + --tmp; + return *tmp; + } + + /// @brief access the last element + /// @sa https://json.nlohmann.me/api/basic_json/back/ + const_reference back() const + { + auto tmp = cend(); + --tmp; + return *tmp; + } + + /// @brief remove element given an iterator + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + template < class IteratorType, detail::enable_if_t < + std::is_same<IteratorType, typename basic_json_t::iterator>::value || + std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 > + IteratorType erase(IteratorType pos) // NOLINT(performance-unnecessary-value-param) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this)); + } + + IteratorType result = end(); + + switch (m_data.m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) + { + JSON_THROW(invalid_iterator::create(205, "iterator out of range", this)); + } + + if (is_string()) + { + AllocatorType<string_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1); + m_data.m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType<binary_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1); + m_data.m_value.binary = nullptr; + } + + m_data.m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_data.m_value.object->erase(pos.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_data.m_value.array->erase(pos.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this)); + } + + return result; + } + + /// @brief remove elements given an iterator range + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + template < class IteratorType, detail::enable_if_t < + std::is_same<IteratorType, typename basic_json_t::iterator>::value || + std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 > + IteratorType erase(IteratorType first, IteratorType last) // NOLINT(performance-unnecessary-value-param) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) + { + JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", this)); + } + + IteratorType result = end(); + + switch (m_data.m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", this)); + } + + if (is_string()) + { + AllocatorType<string_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1); + m_data.m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType<binary_t> alloc; + std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary); + std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1); + m_data.m_value.binary = nullptr; + } + + m_data.m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this)); + } + + return result; + } + + private: + template < typename KeyType, detail::enable_if_t < + detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 > + size_type erase_internal(KeyType && key) + { + // this erase only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this)); + } + + return m_data.m_value.object->erase(std::forward<KeyType>(key)); + } + + template < typename KeyType, detail::enable_if_t < + !detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 > + size_type erase_internal(KeyType && key) + { + // this erase only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this)); + } + + const auto it = m_data.m_value.object->find(std::forward<KeyType>(key)); + if (it != m_data.m_value.object->end()) + { + m_data.m_value.object->erase(it); + return 1; + } + return 0; + } + + public: + + /// @brief remove element from a JSON object given a key + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + size_type erase(const typename object_t::key_type& key) + { + // the indirection via erase_internal() is added to avoid making this + // function a template and thus de-rank it during overload resolution + return erase_internal(key); + } + + /// @brief remove element from a JSON object given a key + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + size_type erase(KeyType && key) + { + return erase_internal(std::forward<KeyType>(key)); + } + + /// @brief remove element from a JSON array given an index + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + void erase(const size_type idx) + { + // this erase only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + if (JSON_HEDLEY_UNLIKELY(idx >= size())) + { + JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this)); + } + + m_data.m_value.array->erase(m_data.m_value.array->begin() + static_cast<difference_type>(idx)); + } + else + { + JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this)); + } + } + + /// @} + + //////////// + // lookup // + //////////// + + /// @name lookup + /// @{ + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + iterator find(const typename object_t::key_type& key) + { + auto result = end(); + + if (is_object()) + { + result.m_it.object_iterator = m_data.m_value.object->find(key); + } + + return result; + } + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + const_iterator find(const typename object_t::key_type& key) const + { + auto result = cend(); + + if (is_object()) + { + result.m_it.object_iterator = m_data.m_value.object->find(key); + } + + return result; + } + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + iterator find(KeyType && key) + { + auto result = end(); + + if (is_object()) + { + result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key)); + } + + return result; + } + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + const_iterator find(KeyType && key) const + { + auto result = cend(); + + if (is_object()) + { + result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key)); + } + + return result; + } + + /// @brief returns the number of occurrences of a key in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/count/ + size_type count(const typename object_t::key_type& key) const + { + // return 0 for all nonobject types + return is_object() ? m_data.m_value.object->count(key) : 0; + } + + /// @brief returns the number of occurrences of a key in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/count/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + size_type count(KeyType && key) const + { + // return 0 for all nonobject types + return is_object() ? m_data.m_value.object->count(std::forward<KeyType>(key)) : 0; + } + + /// @brief check the existence of an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/contains/ + bool contains(const typename object_t::key_type& key) const + { + return is_object() && m_data.m_value.object->find(key) != m_data.m_value.object->end(); + } + + /// @brief check the existence of an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/contains/ + template<class KeyType, detail::enable_if_t< + detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0> + bool contains(KeyType && key) const + { + return is_object() && m_data.m_value.object->find(std::forward<KeyType>(key)) != m_data.m_value.object->end(); + } + + /// @brief check the existence of an element in a JSON object given a JSON pointer + /// @sa https://json.nlohmann.me/api/basic_json/contains/ + bool contains(const json_pointer& ptr) const + { + return ptr.contains(this); + } + + template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0> + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& ptr) const + { + return ptr.contains(this); + } + + /// @} + + /////////////// + // iterators // + /////////////// + + /// @name iterators + /// @{ + + /// @brief returns an iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/begin/ + iterator begin() noexcept + { + iterator result(this); + result.set_begin(); + return result; + } + + /// @brief returns an iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/begin/ + const_iterator begin() const noexcept + { + return cbegin(); + } + + /// @brief returns a const iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/cbegin/ + const_iterator cbegin() const noexcept + { + const_iterator result(this); + result.set_begin(); + return result; + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/end/ + iterator end() noexcept + { + iterator result(this); + result.set_end(); + return result; + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/end/ + const_iterator end() const noexcept + { + return cend(); + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/cend/ + const_iterator cend() const noexcept + { + const_iterator result(this); + result.set_end(); + return result; + } + + /// @brief returns an iterator to the reverse-beginning + /// @sa https://json.nlohmann.me/api/basic_json/rbegin/ + reverse_iterator rbegin() noexcept + { + return reverse_iterator(end()); + } + + /// @brief returns an iterator to the reverse-beginning + /// @sa https://json.nlohmann.me/api/basic_json/rbegin/ + const_reverse_iterator rbegin() const noexcept + { + return crbegin(); + } + + /// @brief returns an iterator to the reverse-end + /// @sa https://json.nlohmann.me/api/basic_json/rend/ + reverse_iterator rend() noexcept + { + return reverse_iterator(begin()); + } + + /// @brief returns an iterator to the reverse-end + /// @sa https://json.nlohmann.me/api/basic_json/rend/ + const_reverse_iterator rend() const noexcept + { + return crend(); + } + + /// @brief returns a const reverse iterator to the last element + /// @sa https://json.nlohmann.me/api/basic_json/crbegin/ + const_reverse_iterator crbegin() const noexcept + { + return const_reverse_iterator(cend()); + } + + /// @brief returns a const reverse iterator to one before the first + /// @sa https://json.nlohmann.me/api/basic_json/crend/ + const_reverse_iterator crend() const noexcept + { + return const_reverse_iterator(cbegin()); + } + + public: + /// @brief wrapper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + /// @deprecated This function is deprecated since 3.1.0 and will be removed in + /// version 4.0.0 of the library. Please use @ref items() instead; + /// that is, replace `json::iterator_wrapper(j)` with `j.items()`. + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept + { + return ref.items(); + } + + /// @brief wrapper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + /// @deprecated This function is deprecated since 3.1.0 and will be removed in + /// version 4.0.0 of the library. Please use @ref items() instead; + /// that is, replace `json::iterator_wrapper(j)` with `j.items()`. + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref) noexcept + { + return ref.items(); + } + + /// @brief helper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + iteration_proxy<iterator> items() noexcept + { + return iteration_proxy<iterator>(*this); + } + + /// @brief helper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + iteration_proxy<const_iterator> items() const noexcept + { + return iteration_proxy<const_iterator>(*this); + } + + /// @} + + ////////////// + // capacity // + ////////////// + + /// @name capacity + /// @{ + + /// @brief checks whether the container is empty. + /// @sa https://json.nlohmann.me/api/basic_json/empty/ + bool empty() const noexcept + { + switch (m_data.m_type) + { + case value_t::null: + { + // null values are empty + return true; + } + + case value_t::array: + { + // delegate call to array_t::empty() + return m_data.m_value.array->empty(); + } + + case value_t::object: + { + // delegate call to object_t::empty() + return m_data.m_value.object->empty(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types are nonempty + return false; + } + } + } + + /// @brief returns the number of elements + /// @sa https://json.nlohmann.me/api/basic_json/size/ + size_type size() const noexcept + { + switch (m_data.m_type) + { + case value_t::null: + { + // null values are empty + return 0; + } + + case value_t::array: + { + // delegate call to array_t::size() + return m_data.m_value.array->size(); + } + + case value_t::object: + { + // delegate call to object_t::size() + return m_data.m_value.object->size(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have size 1 + return 1; + } + } + } + + /// @brief returns the maximum possible number of elements + /// @sa https://json.nlohmann.me/api/basic_json/max_size/ + size_type max_size() const noexcept + { + switch (m_data.m_type) + { + case value_t::array: + { + // delegate call to array_t::max_size() + return m_data.m_value.array->max_size(); + } + + case value_t::object: + { + // delegate call to object_t::max_size() + return m_data.m_value.object->max_size(); + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have max_size() == size() + return size(); + } + } + } + + /// @} + + /////////////// + // modifiers // + /////////////// + + /// @name modifiers + /// @{ + + /// @brief clears the contents + /// @sa https://json.nlohmann.me/api/basic_json/clear/ + void clear() noexcept + { + switch (m_data.m_type) + { + case value_t::number_integer: + { + m_data.m_value.number_integer = 0; + break; + } + + case value_t::number_unsigned: + { + m_data.m_value.number_unsigned = 0; + break; + } + + case value_t::number_float: + { + m_data.m_value.number_float = 0.0; + break; + } + + case value_t::boolean: + { + m_data.m_value.boolean = false; + break; + } + + case value_t::string: + { + m_data.m_value.string->clear(); + break; + } + + case value_t::binary: + { + m_data.m_value.binary->clear(); + break; + } + + case value_t::array: + { + m_data.m_value.array->clear(); + break; + } + + case value_t::object: + { + m_data.m_value.object->clear(); + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(basic_json&& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this)); + } + + // transform null object into an array + if (is_null()) + { + m_data.m_type = value_t::array; + m_data.m_value = value_t::array; + assert_invariant(); + } + + // add element to array (move semantics) + const auto old_capacity = m_data.m_value.array->capacity(); + m_data.m_value.array->push_back(std::move(val)); + set_parent(m_data.m_value.array->back(), old_capacity); + // if val is moved from, basic_json move constructor marks it null, so we do not call the destructor + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(basic_json&& val) + { + push_back(std::move(val)); + return *this; + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(const basic_json& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this)); + } + + // transform null object into an array + if (is_null()) + { + m_data.m_type = value_t::array; + m_data.m_value = value_t::array; + assert_invariant(); + } + + // add element to array + const auto old_capacity = m_data.m_value.array->capacity(); + m_data.m_value.array->push_back(val); + set_parent(m_data.m_value.array->back(), old_capacity); + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(const basic_json& val) + { + push_back(val); + return *this; + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(const typename object_t::value_type& val) + { + // push_back only works for null objects or objects + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this)); + } + + // transform null object into an object + if (is_null()) + { + m_data.m_type = value_t::object; + m_data.m_value = value_t::object; + assert_invariant(); + } + + // add element to object + auto res = m_data.m_value.object->insert(val); + set_parent(res.first->second); + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(const typename object_t::value_type& val) + { + push_back(val); + return *this; + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(initializer_list_t init) + { + if (is_object() && init.size() == 2 && (*init.begin())->is_string()) + { + basic_json&& key = init.begin()->moved_or_copied(); + push_back(typename object_t::value_type( + std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied())); + } + else + { + push_back(basic_json(init)); + } + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(initializer_list_t init) + { + push_back(init); + return *this; + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/emplace_back/ + template<class... Args> + reference emplace_back(Args&& ... args) + { + // emplace_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(311, detail::concat("cannot use emplace_back() with ", type_name()), this)); + } + + // transform null object into an array + if (is_null()) + { + m_data.m_type = value_t::array; + m_data.m_value = value_t::array; + assert_invariant(); + } + + // add element to array (perfect forwarding) + const auto old_capacity = m_data.m_value.array->capacity(); + m_data.m_value.array->emplace_back(std::forward<Args>(args)...); + return set_parent(m_data.m_value.array->back(), old_capacity); + } + + /// @brief add an object to an object if key does not exist + /// @sa https://json.nlohmann.me/api/basic_json/emplace/ + template<class... Args> + std::pair<iterator, bool> emplace(Args&& ... args) + { + // emplace only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(311, detail::concat("cannot use emplace() with ", type_name()), this)); + } + + // transform null object into an object + if (is_null()) + { + m_data.m_type = value_t::object; + m_data.m_value = value_t::object; + assert_invariant(); + } + + // add element to array (perfect forwarding) + auto res = m_data.m_value.object->emplace(std::forward<Args>(args)...); + set_parent(res.first->second); + + // create result iterator and set iterator to the result of emplace + auto it = begin(); + it.m_it.object_iterator = res.first; + + // return pair of iterator and boolean + return {it, res.second}; + } + + /// Helper for insertion of an iterator + /// @note: This uses std::distance to support GCC 4.8, + /// see https://github.com/nlohmann/json/pull/1257 + template<typename... Args> + iterator insert_iterator(const_iterator pos, Args&& ... args) // NOLINT(performance-unnecessary-value-param) + { + iterator result(this); + JSON_ASSERT(m_data.m_value.array != nullptr); + + auto insert_pos = std::distance(m_data.m_value.array->begin(), pos.m_it.array_iterator); + m_data.m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...); + result.m_it.array_iterator = m_data.m_value.array->begin() + insert_pos; + + // This could have been written as: + // result.m_it.array_iterator = m_data.m_value.array->insert(pos.m_it.array_iterator, cnt, val); + // but the return value of insert is missing in GCC 4.8, so it is written this way instead. + + set_parents(); + return result; + } + + /// @brief inserts element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, const basic_json& val) // NOLINT(performance-unnecessary-value-param) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this)); + } + + // insert to array and return iterator + return insert_iterator(pos, val); + } + + JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this)); + } + + /// @brief inserts element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, basic_json&& val) // NOLINT(performance-unnecessary-value-param) + { + return insert(pos, val); + } + + /// @brief inserts copies of element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, size_type cnt, const basic_json& val) // NOLINT(performance-unnecessary-value-param) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this)); + } + + // insert to array and return iterator + return insert_iterator(pos, cnt, val); + } + + JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this)); + } + + /// @brief inserts range of elements into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, const_iterator first, const_iterator last) // NOLINT(performance-unnecessary-value-param) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this)); + } + + if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) + { + JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container", this)); + } + + // insert to array and return iterator + return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); + } + + /// @brief inserts elements from initializer list into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, initializer_list_t ilist) // NOLINT(performance-unnecessary-value-param) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this)); + } + + // insert to array and return iterator + return insert_iterator(pos, ilist.begin(), ilist.end()); + } + + /// @brief inserts range of elements into object + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + void insert(const_iterator first, const_iterator last) // NOLINT(performance-unnecessary-value-param) + { + // insert only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", this)); + } + + m_data.m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); + set_parents(); + } + + /// @brief updates a JSON object from another object, overwriting existing keys + /// @sa https://json.nlohmann.me/api/basic_json/update/ + void update(const_reference j, bool merge_objects = false) + { + update(j.begin(), j.end(), merge_objects); + } + + /// @brief updates a JSON object from another object, overwriting existing keys + /// @sa https://json.nlohmann.me/api/basic_json/update/ + void update(const_iterator first, const_iterator last, bool merge_objects = false) // NOLINT(performance-unnecessary-value-param) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_data.m_type = value_t::object; + m_data.m_value.object = create<object_t>(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", type_name()), this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", first.m_object->type_name()), first.m_object)); + } + + for (auto it = first; it != last; ++it) + { + if (merge_objects && it.value().is_object()) + { + auto it2 = m_data.m_value.object->find(it.key()); + if (it2 != m_data.m_value.object->end()) + { + it2->second.update(it.value(), true); + continue; + } + } + m_data.m_value.object->operator[](it.key()) = it.value(); +#if JSON_DIAGNOSTICS + m_data.m_value.object->operator[](it.key()).m_parent = this; +#endif + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(reference other) noexcept ( + std::is_nothrow_move_constructible<value_t>::value&& + std::is_nothrow_move_assignable<value_t>::value&& + std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + std::is_nothrow_move_assignable<json_value>::value + ) + { + std::swap(m_data.m_type, other.m_data.m_type); + std::swap(m_data.m_value, other.m_data.m_value); + + set_parents(); + other.set_parents(); + assert_invariant(); + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + friend void swap(reference left, reference right) noexcept ( + std::is_nothrow_move_constructible<value_t>::value&& + std::is_nothrow_move_assignable<value_t>::value&& + std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + std::is_nothrow_move_assignable<json_value>::value + ) + { + left.swap(right); + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + { + // swap only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + using std::swap; + swap(*(m_data.m_value.array), other); + } + else + { + JSON_THROW(type_error::create(310, detail::concat("cannot use swap(array_t&) with ", type_name()), this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + { + // swap only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + using std::swap; + swap(*(m_data.m_value.object), other); + } + else + { + JSON_THROW(type_error::create(310, detail::concat("cannot use swap(object_t&) with ", type_name()), this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_string())) + { + using std::swap; + swap(*(m_data.m_value.string), other); + } + else + { + JSON_THROW(type_error::create(310, detail::concat("cannot use swap(string_t&) with ", type_name()), this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + using std::swap; + swap(*(m_data.m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t&) with ", type_name()), this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + using std::swap; + swap(*(m_data.m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t::container_type&) with ", type_name()), this)); + } + } + + /// @} + + ////////////////////////////////////////// + // lexicographical comparison operators // + ////////////////////////////////////////// + + /// @name lexicographical comparison operators + /// @{ + + // note parentheses around operands are necessary; see + // https://github.com/nlohmann/json/issues/1530 +#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \ + const auto lhs_type = lhs.type(); \ + const auto rhs_type = rhs.type(); \ + \ + if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \ + { \ + switch (lhs_type) \ + { \ + case value_t::array: \ + return (*lhs.m_data.m_value.array) op (*rhs.m_data.m_value.array); \ + \ + case value_t::object: \ + return (*lhs.m_data.m_value.object) op (*rhs.m_data.m_value.object); \ + \ + case value_t::null: \ + return (null_result); \ + \ + case value_t::string: \ + return (*lhs.m_data.m_value.string) op (*rhs.m_data.m_value.string); \ + \ + case value_t::boolean: \ + return (lhs.m_data.m_value.boolean) op (rhs.m_data.m_value.boolean); \ + \ + case value_t::number_integer: \ + return (lhs.m_data.m_value.number_integer) op (rhs.m_data.m_value.number_integer); \ + \ + case value_t::number_unsigned: \ + return (lhs.m_data.m_value.number_unsigned) op (rhs.m_data.m_value.number_unsigned); \ + \ + case value_t::number_float: \ + return (lhs.m_data.m_value.number_float) op (rhs.m_data.m_value.number_float); \ + \ + case value_t::binary: \ + return (*lhs.m_data.m_value.binary) op (*rhs.m_data.m_value.binary); \ + \ + case value_t::discarded: \ + default: \ + return (unordered_result); \ + } \ + } \ + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \ + { \ + return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \ + } \ + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \ + { \ + return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \ + } \ + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \ + { \ + return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \ + } \ + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \ + { \ + return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \ + } \ + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \ + { \ + return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \ + } \ + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \ + { \ + return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \ + } \ + else if(compares_unordered(lhs, rhs))\ + {\ + return (unordered_result);\ + }\ + \ + return (default_result); + + JSON_PRIVATE_UNLESS_TESTED: + // returns true if: + // - any operand is NaN and the other operand is of number type + // - any operand is discarded + // in legacy mode, discarded values are considered ordered if + // an operation is computed as an odd number of inverses of others + static bool compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept + { + if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number()) + || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number())) + { + return true; + } +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + return (lhs.is_discarded() || rhs.is_discarded()) && !inverse; +#else + static_cast<void>(inverse); + return lhs.is_discarded() || rhs.is_discarded(); +#endif + } + + private: + bool compares_unordered(const_reference rhs, bool inverse = false) const noexcept + { + return compares_unordered(*this, rhs, inverse); + } + + public: +#if JSON_HAS_THREE_WAY_COMPARISON + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + bool operator==(const_reference rhs) const noexcept + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + const_reference lhs = *this; + JSON_IMPLEMENT_OPERATOR( ==, true, false, false) +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + template<typename ScalarType> + requires std::is_scalar_v<ScalarType> + bool operator==(ScalarType rhs) const noexcept + { + return *this == basic_json(rhs); + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + bool operator!=(const_reference rhs) const noexcept + { + if (compares_unordered(rhs, true)) + { + return false; + } + return !operator==(rhs); + } + + /// @brief comparison: 3-way + /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/ + std::partial_ordering operator<=>(const_reference rhs) const noexcept // *NOPAD* + { + const_reference lhs = *this; + // default_result is used if we cannot compare values. In that case, + // we compare types. + JSON_IMPLEMENT_OPERATOR(<=>, // *NOPAD* + std::partial_ordering::equivalent, + std::partial_ordering::unordered, + lhs_type <=> rhs_type) // *NOPAD* + } + + /// @brief comparison: 3-way + /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/ + template<typename ScalarType> + requires std::is_scalar_v<ScalarType> + std::partial_ordering operator<=>(ScalarType rhs) const noexcept // *NOPAD* + { + return *this <=> basic_json(rhs); // *NOPAD* + } + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + // all operators that are computed as an odd number of inverses of others + // need to be overloaded to emulate the legacy comparison behavior + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON) + bool operator<=(const_reference rhs) const noexcept + { + if (compares_unordered(rhs, true)) + { + return false; + } + return !(rhs < *this); + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + template<typename ScalarType> + requires std::is_scalar_v<ScalarType> + bool operator<=(ScalarType rhs) const noexcept + { + return *this <= basic_json(rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON) + bool operator>=(const_reference rhs) const noexcept + { + if (compares_unordered(rhs, true)) + { + return false; + } + return !(*this < rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + template<typename ScalarType> + requires std::is_scalar_v<ScalarType> + bool operator>=(ScalarType rhs) const noexcept + { + return *this >= basic_json(rhs); + } +#endif +#else + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + friend bool operator==(const_reference lhs, const_reference rhs) noexcept + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + JSON_IMPLEMENT_OPERATOR( ==, true, false, false) +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator==(const_reference lhs, ScalarType rhs) noexcept + { + return lhs == basic_json(rhs); + } + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator==(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) == rhs; + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + friend bool operator!=(const_reference lhs, const_reference rhs) noexcept + { + if (compares_unordered(lhs, rhs, true)) + { + return false; + } + return !(lhs == rhs); + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs != basic_json(rhs); + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) != rhs; + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + friend bool operator<(const_reference lhs, const_reference rhs) noexcept + { + // default_result is used if we cannot compare values. In that case, + // we compare types. Note we have to call the operator explicitly, + // because MSVC has problems otherwise. + JSON_IMPLEMENT_OPERATOR( <, false, false, operator<(lhs_type, rhs_type)) + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator<(const_reference lhs, ScalarType rhs) noexcept + { + return lhs < basic_json(rhs); + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator<(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) < rhs; + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + friend bool operator<=(const_reference lhs, const_reference rhs) noexcept + { + if (compares_unordered(lhs, rhs, true)) + { + return false; + } + return !(rhs < lhs); + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs <= basic_json(rhs); + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) <= rhs; + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + friend bool operator>(const_reference lhs, const_reference rhs) noexcept + { + // double inverse + if (compares_unordered(lhs, rhs)) + { + return false; + } + return !(lhs <= rhs); + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator>(const_reference lhs, ScalarType rhs) noexcept + { + return lhs > basic_json(rhs); + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator>(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) > rhs; + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + friend bool operator>=(const_reference lhs, const_reference rhs) noexcept + { + if (compares_unordered(lhs, rhs, true)) + { + return false; + } + return !(lhs < rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs >= basic_json(rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + template<typename ScalarType, typename std::enable_if< + std::is_scalar<ScalarType>::value, int>::type = 0> + friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) >= rhs; + } +#endif + +#undef JSON_IMPLEMENT_OPERATOR + + /// @} + + /////////////////// + // serialization // + /////////////////// + + /// @name serialization + /// @{ +#ifndef JSON_NO_IO + /// @brief serialize to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + friend std::ostream& operator<<(std::ostream& o, const basic_json& j) + { + // read width member and use it as indentation parameter if nonzero + const bool pretty_print = o.width() > 0; + const auto indentation = pretty_print ? o.width() : 0; + + // reset width to 0 for subsequent calls to this stream + o.width(0); + + // do the actual serialization + serializer s(detail::output_adapter<char>(o), o.fill()); + s.dump(j, pretty_print, false, static_cast<unsigned int>(indentation)); + return o; + } + + /// @brief serialize to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + /// @deprecated This function is deprecated since 3.0.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// operator<<(std::ostream&, const basic_json&) instead; that is, + /// replace calls like `j >> o;` with `o << j;`. + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) + friend std::ostream& operator>>(const basic_json& j, std::ostream& o) + { + return o << j; + } +#endif // JSON_NO_IO + /// @} + + ///////////////////// + // deserialization // + ///////////////////// + + /// @name deserialization + /// @{ + + /// @brief deserialize from a compatible input + /// @sa https://json.nlohmann.me/api/basic_json/parse/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(InputType&& i, + parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::forward<InputType>(i)), std::move(cb), allow_exceptions, ignore_comments).parse(true, result); // cppcheck-suppress[accessMoved,accessForwarded] + return result; + } + + /// @brief deserialize from a pair of character iterators + /// @sa https://json.nlohmann.me/api/basic_json/parse/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(IteratorType first, + IteratorType last, + parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::move(first), std::move(last)), std::move(cb), allow_exceptions, ignore_comments).parse(true, result); // cppcheck-suppress[accessMoved] + return result; + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) + static basic_json parse(detail::span_input_adapter&& i, + parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(i.get(), std::move(cb), allow_exceptions, ignore_comments).parse(true, result); // cppcheck-suppress[accessMoved] + return result; + } + + /// @brief check if the input is valid JSON + /// @sa https://json.nlohmann.me/api/basic_json/accept/ + template<typename InputType> + static bool accept(InputType&& i, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true); + } + + /// @brief check if the input is valid JSON + /// @sa https://json.nlohmann.me/api/basic_json/accept/ + template<typename IteratorType> + static bool accept(IteratorType first, IteratorType last, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) + static bool accept(detail::span_input_adapter&& i, + const bool ignore_comments = false) + { + return parser(i.get(), nullptr, false, ignore_comments).accept(true); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + template <typename InputType, typename SAX> + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(InputType&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::forward<InputType>(i)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + template<class IteratorType, class SAX> + JSON_HEDLEY_NON_NULL(3) + static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::move(first), std::move(last)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + /// @deprecated This function is deprecated since 3.8.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// sax_parse(ptr, ptr + len) instead. + template <typename SAX> + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = i.get(); + return format == input_format_t::json + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict); + } +#ifndef JSON_NO_IO + /// @brief deserialize from stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/ + /// @deprecated This stream operator is deprecated since 3.0.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// operator>>(std::istream&, basic_json&) instead; that is, + /// replace calls like `j << i;` with `i >> j;`. + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) + friend std::istream& operator<<(basic_json& j, std::istream& i) + { + return operator>>(i, j); + } + + /// @brief deserialize from stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/ + friend std::istream& operator>>(std::istream& i, basic_json& j) + { + parser(detail::input_adapter(i)).parse(false, j); + return i; + } +#endif // JSON_NO_IO + /// @} + + /////////////////////////// + // convenience functions // + /////////////////////////// + + /// @brief return the type as string + /// @sa https://json.nlohmann.me/api/basic_json/type_name/ + JSON_HEDLEY_RETURNS_NON_NULL + const char* type_name() const noexcept + { + switch (m_data.m_type) + { + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::binary: + return "binary"; + case value_t::discarded: + return "discarded"; + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + default: + return "number"; + } + } + + JSON_PRIVATE_UNLESS_TESTED: + ////////////////////// + // member variables // + ////////////////////// + + struct data + { + /// the type of the current element + value_t m_type = value_t::null; + + /// the value of the current element + json_value m_value = {}; + + data(const value_t v) + : m_type(v), m_value(v) + { + } + + data(size_type cnt, const basic_json& val) + : m_type(value_t::array) + { + m_value.array = create<array_t>(cnt, val); + } + + data() noexcept = default; + data(data&&) noexcept = default; + data(const data&) noexcept = delete; + data& operator=(data&&) noexcept = delete; + data& operator=(const data&) noexcept = delete; + + ~data() noexcept + { + m_value.destroy(m_type); + } + }; + + data m_data = {}; + +#if JSON_DIAGNOSTICS + /// a pointer to a parent value (for debugging purposes) + basic_json* m_parent = nullptr; +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + /// the start position of the value + std::size_t start_position = std::string::npos; + /// the end position of the value + std::size_t end_position = std::string::npos; + public: + constexpr std::size_t start_pos() const noexcept + { + return start_position; + } + + constexpr std::size_t end_pos() const noexcept + { + return end_position; + } +#endif + + ////////////////////////////////////////// + // binary serialization/deserialization // + ////////////////////////////////////////// + + /// @name binary serialization/deserialization support + /// @{ + + public: + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static std::vector<std::uint8_t> to_cbor(const basic_json& j) + { + std::vector<std::uint8_t> result; + to_cbor(j, result); + return result; + } + + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o) + { + binary_writer<std::uint8_t>(o).write_cbor(j); + } + + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static void to_cbor(const basic_json& j, detail::output_adapter<char> o) + { + binary_writer<char>(o).write_cbor(j); + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static std::vector<std::uint8_t> to_msgpack(const basic_json& j) + { + std::vector<std::uint8_t> result; + to_msgpack(j, result); + return result; + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o) + { + binary_writer<std::uint8_t>(o).write_msgpack(j); + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static void to_msgpack(const basic_json& j, detail::output_adapter<char> o) + { + binary_writer<char>(o).write_msgpack(j); + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static std::vector<std::uint8_t> to_ubjson(const basic_json& j, + const bool use_size = false, + const bool use_type = false) + { + std::vector<std::uint8_t> result; + to_ubjson(j, result, use_size, use_type); + return result; + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o, + const bool use_size = false, const bool use_type = false) + { + binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type); + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static void to_ubjson(const basic_json& j, detail::output_adapter<char> o, + const bool use_size = false, const bool use_type = false) + { + binary_writer<char>(o).write_ubjson(j, use_size, use_type); + } + + /// @brief create a BJData serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/ + static std::vector<std::uint8_t> to_bjdata(const basic_json& j, + const bool use_size = false, + const bool use_type = false, + const bjdata_version_t version = bjdata_version_t::draft2) + { + std::vector<std::uint8_t> result; + to_bjdata(j, result, use_size, use_type, version); + return result; + } + + /// @brief create a BJData serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/ + static void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o, + const bool use_size = false, const bool use_type = false, + const bjdata_version_t version = bjdata_version_t::draft2) + { + binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type, true, true, version); + } + + /// @brief create a BJData serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/ + static void to_bjdata(const basic_json& j, detail::output_adapter<char> o, + const bool use_size = false, const bool use_type = false, + const bjdata_version_t version = bjdata_version_t::draft2) + { + binary_writer<char>(o).write_ubjson(j, use_size, use_type, true, true, version); + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static std::vector<std::uint8_t> to_bson(const basic_json& j) + { + std::vector<std::uint8_t> result; + to_bson(j, result); + return result; + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o) + { + binary_writer<std::uint8_t>(o).write_bson(j); + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static void to_bson(const basic_json& j, detail::output_adapter<char> o) + { + binary_writer<char>(o).write_bson(j); + } + + /// @brief create a JSON value from an input in CBOR format + /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + auto ia = detail::input_adapter(std::forward<InputType>(i)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in CBOR format + /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + auto ia = detail::input_adapter(std::move(first), std::move(last)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + template<typename T> + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + auto ia = i.get(); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in MessagePack format + /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::forward<InputType>(i)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in MessagePack format + /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::move(first), std::move(last)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + template<typename T> + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_msgpack(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = i.get(); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in UBJSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::forward<InputType>(i)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in UBJSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::move(first), std::move(last)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + template<typename T> + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_ubjson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = i.get(); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BJData format + /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bjdata(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::forward<InputType>(i)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BJData format + /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bjdata(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::move(first), std::move(last)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_bson/ + template<typename InputType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::forward<InputType>(i)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_bson/ + template<typename IteratorType> + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = detail::input_adapter(std::move(first), std::move(last)); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + + template<typename T> + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_bson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + auto ia = i.get(); + detail::json_sax_dom_parser<basic_json, decltype(ia)> sdp(result, allow_exceptions); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict); // cppcheck-suppress[accessMoved] + return res ? result : basic_json(value_t::discarded); + } + /// @} + + ////////////////////////// + // JSON Pointer support // + ////////////////////////// + + /// @name JSON Pointer functions + /// @{ + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](const json_pointer& ptr) + { + return ptr.get_unchecked(this); + } + + template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0> + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr) + { + return ptr.get_unchecked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](const json_pointer& ptr) const + { + return ptr.get_unchecked(this); + } + + template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0> + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr) const + { + return ptr.get_unchecked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(const json_pointer& ptr) + { + return ptr.get_checked(this); + } + + template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0> + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) + { + return ptr.get_checked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(const json_pointer& ptr) const + { + return ptr.get_checked(this); + } + + template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0> + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens) + const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) const + { + return ptr.get_checked(this); + } + + /// @brief return flattened JSON value + /// @sa https://json.nlohmann.me/api/basic_json/flatten/ + basic_json flatten() const + { + basic_json result(value_t::object); + json_pointer::flatten("", *this, result); + return result; + } + + /// @brief unflatten a previously flattened JSON value + /// @sa https://json.nlohmann.me/api/basic_json/unflatten/ + basic_json unflatten() const + { + return json_pointer::unflatten(*this); + } + + /// @} + + ////////////////////////// + // JSON Patch functions // + ////////////////////////// + + /// @name JSON Patch functions + /// @{ + + /// @brief applies a JSON patch in-place without copying the object + /// @sa https://json.nlohmann.me/api/basic_json/patch/ + void patch_inplace(const basic_json& json_patch) + { + basic_json& result = *this; + // the valid JSON Patch operations + enum class patch_operations {add, remove, replace, move, copy, test, invalid}; + + const auto get_op = [](const string_t& op) + { + if (op == "add") + { + return patch_operations::add; + } + if (op == "remove") + { + return patch_operations::remove; + } + if (op == "replace") + { + return patch_operations::replace; + } + if (op == "move") + { + return patch_operations::move; + } + if (op == "copy") + { + return patch_operations::copy; + } + if (op == "test") + { + return patch_operations::test; + } + + return patch_operations::invalid; + }; + + // wrapper for "add" operation; add value at ptr + const auto operation_add = [&result](json_pointer & ptr, const basic_json & val) + { + // adding to the root of the target document means replacing it + if (ptr.empty()) + { + result = val; + return; + } + + // make sure the top element of the pointer exists + json_pointer const top_pointer = ptr.top(); + if (top_pointer != ptr) + { + result.at(top_pointer); + } + + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + // parent must exist when performing patch add per RFC6902 specs + basic_json& parent = result.at(ptr); + + switch (parent.m_data.m_type) + { + case value_t::null: + case value_t::object: + { + // use operator[] to add value + parent[last_path] = val; + break; + } + + case value_t::array: + { + if (last_path == "-") + { + // special case: append to back + parent.push_back(val); + } + else + { + const auto idx = json_pointer::template array_index<basic_json_t>(last_path); + if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) + { + // avoid undefined behavior + JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), &parent)); + } + + // default case: insert add offset + parent.insert(parent.begin() + static_cast<difference_type>(idx), val); + } + break; + } + + // if there exists a parent it cannot be primitive + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + }; + + // wrapper for "remove" operation; remove value at ptr + const auto operation_remove = [this, & result](json_pointer & ptr) + { + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result.at(ptr); + + // remove child + if (parent.is_object()) + { + // perform range check + auto it = parent.find(last_path); + if (JSON_HEDLEY_LIKELY(it != parent.end())) + { + parent.erase(it); + } + else + { + JSON_THROW(out_of_range::create(403, detail::concat("key '", last_path, "' not found"), this)); + } + } + else if (parent.is_array()) + { + // note erase performs range check + parent.erase(json_pointer::template array_index<basic_json_t>(last_path)); + } + }; + + // type check: top level value must be an array + if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &json_patch)); + } + + // iterate and apply the operations + for (const auto& val : json_patch) + { + // wrapper to get a value for an operation + const auto get_value = [&val](const string_t& op, + const string_t& member, + bool string_type) -> basic_json & + { + // find value + auto it = val.m_data.m_value.object->find(member); + + // context-sensitive error message + const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\''); // NOLINT(bugprone-unused-local-non-trivial-variable) + + // check if desired value is present + if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val)); + } + + // check if result is of type string + if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have string member '", member, "'"), &val)); + } + + // no error: return value + return it->second; + }; + + // type check: every element of the array must be an object + if (JSON_HEDLEY_UNLIKELY(!val.is_object())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &val)); + } + + // collect mandatory members + const auto op = get_value("op", "op", true).template get<string_t>(); + const auto path = get_value(op, "path", true).template get<string_t>(); + json_pointer ptr(path); + + switch (get_op(op)) + { + case patch_operations::add: + { + operation_add(ptr, get_value("add", "value", false)); + break; + } + + case patch_operations::remove: + { + operation_remove(ptr); + break; + } + + case patch_operations::replace: + { + // the "path" location must exist - use at() + result.at(ptr) = get_value("replace", "value", false); + break; + } + + case patch_operations::move: + { + const auto from_path = get_value("move", "from", true).template get<string_t>(); + json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json const v = result.at(from_ptr); + + // The move operation is functionally identical to a + // "remove" operation on the "from" location, followed + // immediately by an "add" operation at the target + // location with the value that was just removed. + operation_remove(from_ptr); + operation_add(ptr, v); + break; + } + + case patch_operations::copy: + { + const auto from_path = get_value("copy", "from", true).template get<string_t>(); + const json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json const v = result.at(from_ptr); + + // The copy is functionally identical to an "add" + // operation at the target location using the value + // specified in the "from" member. + operation_add(ptr, v); + break; + } + + case patch_operations::test: + { + bool success = false; + JSON_TRY + { + // check if "value" matches the one at "path" + // the "path" location must exist - use at() + success = (result.at(ptr) == get_value("test", "value", false)); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + // ignore out of range errors: success remains false + } + + // throw an exception if test fails + if (JSON_HEDLEY_UNLIKELY(!success)) + { + JSON_THROW(other_error::create(501, detail::concat("unsuccessful: ", val.dump()), &val)); + } + + break; + } + + case patch_operations::invalid: + default: + { + // op must be "add", "remove", "replace", "move", "copy", or + // "test" + JSON_THROW(parse_error::create(105, 0, detail::concat("operation value '", op, "' is invalid"), &val)); + } + } + } + } + + /// @brief applies a JSON patch to a copy of the current object + /// @sa https://json.nlohmann.me/api/basic_json/patch/ + basic_json patch(const basic_json& json_patch) const + { + basic_json result = *this; + result.patch_inplace(json_patch); + return result; + } + + /// @brief creates a diff as a JSON patch + /// @sa https://json.nlohmann.me/api/basic_json/diff/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json diff(const basic_json& source, const basic_json& target, + const string_t& path = "") + { + // the patch + basic_json result(value_t::array); + + // if the values are the same, return empty patch + if (source == target) + { + return result; + } + + if (source.type() != target.type()) + { + // different types: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + return result; + } + + switch (source.type()) + { + case value_t::array: + { + // first pass: traverse common elements + std::size_t i = 0; + while (i < source.size() && i < target.size()) + { + // recursive call to compare array values at index i + auto temp_diff = diff(source[i], target[i], detail::concat<string_t>(path, '/', detail::to_string<string_t>(i))); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + ++i; + } + + // We now reached the end of at least one array + // in a second pass, traverse the remaining elements + + // remove my remaining elements + const auto end_index = static_cast<difference_type>(result.size()); + while (i < source.size()) + { + // add operations in reverse order to avoid invalid + // indices + result.insert(result.begin() + end_index, object( + { + {"op", "remove"}, + {"path", detail::concat<string_t>(path, '/', detail::to_string<string_t>(i))} + })); + ++i; + } + + // add other remaining elements + while (i < target.size()) + { + result.push_back( + { + {"op", "add"}, + {"path", detail::concat<string_t>(path, "/-")}, + {"value", target[i]} + }); + ++i; + } + + break; + } + + case value_t::object: + { + // first pass: traverse this object's elements + for (auto it = source.cbegin(); it != source.cend(); ++it) + { + // escape the key name to be used in a JSON patch + const auto path_key = detail::concat<string_t>(path, '/', detail::escape(it.key())); + + if (target.find(it.key()) != target.end()) + { + // recursive call to compare object values at key it + auto temp_diff = diff(it.value(), target[it.key()], path_key); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + } + else + { + // found a key that is not in o -> remove it + result.push_back(object( + { + {"op", "remove"}, {"path", path_key} + })); + } + } + + // second pass: traverse other object's elements + for (auto it = target.cbegin(); it != target.cend(); ++it) + { + if (source.find(it.key()) == source.end()) + { + // found a key that is not in this -> add it + const auto path_key = detail::concat<string_t>(path, '/', detail::escape(it.key())); + result.push_back( + { + {"op", "add"}, {"path", path_key}, + {"value", it.value()} + }); + } + } + + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // both primitive type: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + break; + } + } + + return result; + } + /// @} + + //////////////////////////////// + // JSON Merge Patch functions // + //////////////////////////////// + + /// @name JSON Merge Patch functions + /// @{ + + /// @brief applies a JSON Merge Patch + /// @sa https://json.nlohmann.me/api/basic_json/merge_patch/ + void merge_patch(const basic_json& apply_patch) + { + if (apply_patch.is_object()) + { + if (!is_object()) + { + *this = object(); + } + for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) + { + if (it.value().is_null()) + { + erase(it.key()); + } + else + { + operator[](it.key()).merge_patch(it.value()); + } + } + } + else + { + *this = apply_patch; + } + } + + /// @} +}; + +/// @brief user-defined to_string function for JSON values +/// @sa https://json.nlohmann.me/api/basic_json/to_string/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) +{ + return j.dump(); +} + +inline namespace literals +{ +inline namespace json_literals +{ + +/// @brief user-defined string literal for JSON values +/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/ +JSON_HEDLEY_NON_NULL(1) +#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) + inline nlohmann::json operator ""_json(const char* s, std::size_t n) +#else + inline nlohmann::json operator "" _json(const char* s, std::size_t n) +#endif +{ + return nlohmann::json::parse(s, s + n); +} + +/// @brief user-defined string literal for JSON pointer +/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/ +JSON_HEDLEY_NON_NULL(1) +#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) + inline nlohmann::json::json_pointer operator ""_json_pointer(const char* s, std::size_t n) +#else + inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) +#endif +{ + return nlohmann::json::json_pointer(std::string(s, n)); +} + +} // namespace json_literals +} // namespace literals +NLOHMANN_JSON_NAMESPACE_END + +/////////////////////// +// nonmember support // +/////////////////////// + +namespace std // NOLINT(cert-dcl58-cpp) +{ + +/// @brief hash value for JSON objects +/// @sa https://json.nlohmann.me/api/basic_json/std_hash/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL> // NOLINT(cert-dcl58-cpp) +{ + std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const + { + return nlohmann::detail::hash(j); + } +}; + +// specialization for std::less<value_t> +template<> +struct less< ::nlohmann::detail::value_t> // do not remove the space after '<', see https://github.com/nlohmann/json/pull/679 +{ + /*! + @brief compare two value_t enum values + @since version 3.0.0 + */ + bool operator()(::nlohmann::detail::value_t lhs, + ::nlohmann::detail::value_t rhs) const noexcept + { +#if JSON_HAS_THREE_WAY_COMPARISON + return std::is_lt(lhs <=> rhs); // *NOPAD* +#else + return ::nlohmann::detail::operator<(lhs, rhs); +#endif + } +}; + +// C++20 prohibit function specialization in the std namespace. +#ifndef JSON_HAS_CPP_20 + +/// @brief exchanges the values of two JSON objects +/// @sa https://json.nlohmann.me/api/basic_json/std_swap/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp) + is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&& // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap) + is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value) +{ + j1.swap(j2); +} + +#endif + +} // namespace std + +#if JSON_USE_GLOBAL_UDLS + #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) + using nlohmann::literals::json_literals::operator ""_json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers) + using nlohmann::literals::json_literals::operator ""_json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers) + #else + using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers) + using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers) + #endif +#endif + +// #include <nlohmann/detail/macro_unscope.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +// restore clang diagnostic settings +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_THROW +#undef JSON_PRIVATE_UNLESS_TESTED +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT +#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL +#undef JSON_INLINE_VARIABLE +#undef JSON_NO_UNIQUE_ADDRESS +#undef JSON_DISABLE_ENUM_SERIALIZATION +#undef JSON_USE_GLOBAL_UDLS + +#ifndef JSON_TEST_KEEP_MACROS + #undef JSON_CATCH + #undef JSON_TRY + #undef JSON_HAS_CPP_11 + #undef JSON_HAS_CPP_14 + #undef JSON_HAS_CPP_17 + #undef JSON_HAS_CPP_20 + #undef JSON_HAS_CPP_23 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #undef JSON_HAS_THREE_WAY_COMPARISON + #undef JSON_HAS_RANGES + #undef JSON_HAS_STATIC_RTTI + #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +// #include <nlohmann/thirdparty/hedley/hedley_undef.hpp> +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me> +// SPDX-License-Identifier: MIT + + + +#undef JSON_HEDLEY_ALWAYS_INLINE +#undef JSON_HEDLEY_ARM_VERSION +#undef JSON_HEDLEY_ARM_VERSION_CHECK +#undef JSON_HEDLEY_ARRAY_PARAM +#undef JSON_HEDLEY_ASSUME +#undef JSON_HEDLEY_BEGIN_C_DECLS +#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#undef JSON_HEDLEY_CLANG_HAS_FEATURE +#undef JSON_HEDLEY_CLANG_HAS_WARNING +#undef JSON_HEDLEY_COMPCERT_VERSION +#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#undef JSON_HEDLEY_CONCAT +#undef JSON_HEDLEY_CONCAT3 +#undef JSON_HEDLEY_CONCAT3_EX +#undef JSON_HEDLEY_CONCAT_EX +#undef JSON_HEDLEY_CONST +#undef JSON_HEDLEY_CONSTEXPR +#undef JSON_HEDLEY_CONST_CAST +#undef JSON_HEDLEY_CPP_CAST +#undef JSON_HEDLEY_CRAY_VERSION +#undef JSON_HEDLEY_CRAY_VERSION_CHECK +#undef JSON_HEDLEY_C_DECL +#undef JSON_HEDLEY_DEPRECATED +#undef JSON_HEDLEY_DEPRECATED_FOR +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#undef JSON_HEDLEY_DIAGNOSTIC_POP +#undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#undef JSON_HEDLEY_DMC_VERSION +#undef JSON_HEDLEY_DMC_VERSION_CHECK +#undef JSON_HEDLEY_EMPTY_BASES +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#undef JSON_HEDLEY_END_C_DECLS +#undef JSON_HEDLEY_FLAGS +#undef JSON_HEDLEY_FLAGS_CAST +#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_BUILTIN +#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_EXTENSION +#undef JSON_HEDLEY_GCC_HAS_FEATURE +#undef JSON_HEDLEY_GCC_HAS_WARNING +#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#undef JSON_HEDLEY_GCC_VERSION +#undef JSON_HEDLEY_GCC_VERSION_CHECK +#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#undef JSON_HEDLEY_GNUC_HAS_FEATURE +#undef JSON_HEDLEY_GNUC_HAS_WARNING +#undef JSON_HEDLEY_GNUC_VERSION +#undef JSON_HEDLEY_GNUC_VERSION_CHECK +#undef JSON_HEDLEY_HAS_ATTRIBUTE +#undef JSON_HEDLEY_HAS_BUILTIN +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_HAS_EXTENSION +#undef JSON_HEDLEY_HAS_FEATURE +#undef JSON_HEDLEY_HAS_WARNING +#undef JSON_HEDLEY_IAR_VERSION +#undef JSON_HEDLEY_IAR_VERSION_CHECK +#undef JSON_HEDLEY_IBM_VERSION +#undef JSON_HEDLEY_IBM_VERSION_CHECK +#undef JSON_HEDLEY_IMPORT +#undef JSON_HEDLEY_INLINE +#undef JSON_HEDLEY_INTEL_CL_VERSION +#undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#undef JSON_HEDLEY_INTEL_VERSION +#undef JSON_HEDLEY_INTEL_VERSION_CHECK +#undef JSON_HEDLEY_IS_CONSTANT +#undef JSON_HEDLEY_IS_CONSTEXPR_ +#undef JSON_HEDLEY_LIKELY +#undef JSON_HEDLEY_MALLOC +#undef JSON_HEDLEY_MCST_LCC_VERSION +#undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#undef JSON_HEDLEY_MESSAGE +#undef JSON_HEDLEY_MSVC_VERSION +#undef JSON_HEDLEY_MSVC_VERSION_CHECK +#undef JSON_HEDLEY_NEVER_INLINE +#undef JSON_HEDLEY_NON_NULL +#undef JSON_HEDLEY_NO_ESCAPE +#undef JSON_HEDLEY_NO_RETURN +#undef JSON_HEDLEY_NO_THROW +#undef JSON_HEDLEY_NULL +#undef JSON_HEDLEY_PELLES_VERSION +#undef JSON_HEDLEY_PELLES_VERSION_CHECK +#undef JSON_HEDLEY_PGI_VERSION +#undef JSON_HEDLEY_PGI_VERSION_CHECK +#undef JSON_HEDLEY_PREDICT +#undef JSON_HEDLEY_PRINTF_FORMAT +#undef JSON_HEDLEY_PRIVATE +#undef JSON_HEDLEY_PUBLIC +#undef JSON_HEDLEY_PURE +#undef JSON_HEDLEY_REINTERPRET_CAST +#undef JSON_HEDLEY_REQUIRE +#undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#undef JSON_HEDLEY_REQUIRE_MSG +#undef JSON_HEDLEY_RESTRICT +#undef JSON_HEDLEY_RETURNS_NON_NULL +#undef JSON_HEDLEY_SENTINEL +#undef JSON_HEDLEY_STATIC_ASSERT +#undef JSON_HEDLEY_STATIC_CAST +#undef JSON_HEDLEY_STRINGIFY +#undef JSON_HEDLEY_STRINGIFY_EX +#undef JSON_HEDLEY_SUNPRO_VERSION +#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#undef JSON_HEDLEY_TINYC_VERSION +#undef JSON_HEDLEY_TINYC_VERSION_CHECK +#undef JSON_HEDLEY_TI_ARMCL_VERSION +#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL2000_VERSION +#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL430_VERSION +#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL6X_VERSION +#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL7X_VERSION +#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CLPRU_VERSION +#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#undef JSON_HEDLEY_TI_VERSION +#undef JSON_HEDLEY_TI_VERSION_CHECK +#undef JSON_HEDLEY_UNAVAILABLE +#undef JSON_HEDLEY_UNLIKELY +#undef JSON_HEDLEY_UNPREDICTABLE +#undef JSON_HEDLEY_UNREACHABLE +#undef JSON_HEDLEY_UNREACHABLE_RETURN +#undef JSON_HEDLEY_VERSION +#undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#undef JSON_HEDLEY_VERSION_DECODE_MINOR +#undef JSON_HEDLEY_VERSION_DECODE_REVISION +#undef JSON_HEDLEY_VERSION_ENCODE +#undef JSON_HEDLEY_WARNING +#undef JSON_HEDLEY_WARN_UNUSED_RESULT +#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#undef JSON_HEDLEY_FALL_THROUGH + + + +#endif // INCLUDE_NLOHMANN_JSON_HPP_