diff --git a/package-lock.json b/package-lock.json index 315fec0..7612ef7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@phosphor-icons/react": "^2.1.7", "d3": "^7.9.0", "electron-squirrel-startup": "^1.0.1", + "flag-icons": "^7.5.0", "js-yaml": "^4.1.0", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -36,7 +37,6 @@ "@electron-forge/publisher-github": "^7.8.0", "@electron/fuses": "^1.8.0", "@eslint/js": "^9.23.0", - "@iracing-data/sync-track-assets": "^0.0.2-alpha.2", "@storybook/addon-docs": "^9.0.12", "@storybook/react-vite": "^9.0.12", "@tailwindcss/postcss": "^4.0.0", @@ -927,6 +927,48 @@ "node": ">= 16.4.0" } }, + "node_modules/@electron-forge/publisher-github/node_modules/@electron-forge/publisher-base": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.8.2.tgz", + "integrity": "sha512-Ap9fN83pA4/09RJEGYY0Vk2mdmbvx7kuTS+hTS91Xz+330Ju3j+8g9/HcBGUlvqF2F3t6HAvgpz434UM7Ui47w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron-forge/shared-types": "7.8.2" + }, + "engines": { + "node": ">= 16.4.0" + } + }, + "node_modules/@electron-forge/publisher-github/node_modules/@electron-forge/shared-types": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.8.2.tgz", + "integrity": "sha512-1JnWaJs5vtiT51WxcXrDVFGls5UUOpAUNX5pT0j3/RJuq/CEfVQmH62tUo6ORbBasNLRgRgphXg6n8BfRte5/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron-forge/tracer": "7.8.2", + "@electron/packager": "^18.3.5", + "@electron/rebuild": "^3.7.0", + "listr2": "^7.0.2" + }, + "engines": { + "node": ">= 16.4.0" + } + }, + "node_modules/@electron-forge/publisher-github/node_modules/@electron-forge/tracer": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.8.2.tgz", + "integrity": "sha512-59M5PJT9otyVBtenZnOvjZLyB5H1JPqvrY4r9n9V7uFyuAI52a0TYyaCIcfzLchb/k+aDyeozfrqNFwvS6wTSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chrome-trace-event": "^1.0.3" + }, + "engines": { + "node": ">= 14.17.5" + } + }, "node_modules/@electron-forge/shared-types": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.8.2.tgz", @@ -2054,6 +2096,19 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@formkit/auto-animate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.8.2.tgz", @@ -2133,48 +2188,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@iracing-data/api": { - "version": "0.0.2-alpha.1", - "resolved": "https://registry.npmjs.org/@iracing-data/api/-/api-0.0.2-alpha.1.tgz", - "integrity": "sha512-2qMTSVBQFUGcVtzYn4YsP7KIyThK3B3LNBrOjjp1cQ1Pun5e168q/Wm0lG4JAKOxnIPBWEHysu+A2sM7q6o3nw==", - "dev": true, - "dependencies": { - "axios": "^1.7.9", - "axios-cookiejar-support": "^5.0.5", - "tough-cookie": "^5.1.1" - } - }, - "node_modules/@iracing-data/sync-track-assets": { - "version": "0.0.2-alpha.2", - "resolved": "https://registry.npmjs.org/@iracing-data/sync-track-assets/-/sync-track-assets-0.0.2-alpha.2.tgz", - "integrity": "sha512-RArujN0gy3F1tzSrNiYH1LidFhGOsckogDF2i6L38VVxkQfDwuD1D+xlNvMcJzt2+aFvEqkqqNDs8CudH146DA==", - "dev": true, - "dependencies": { - "@iracing-data/api": "0.0.2-alpha.1", - "dotenv": "16.4.7" - }, - "peerDependencies": { - "inquirer": "^12.4.1" - }, - "peerDependenciesMeta": { - "inquirer": { - "optional": true - } - } - }, - "node_modules/@iracing-data/sync-track-assets/node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5271,13 +5284,6 @@ "node": ">= 0.4" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -5352,38 +5358,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios-cookiejar-support": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.5.tgz", - "integrity": "sha512-jJG+p7JnOYxkVrYkCDKBrLqUmcpwHZTNQrEcIEKr5qe7YVTyPAD9nCsi1cO5LDmQpQApfS430czO+oceI3g/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "http-cookie-agent": "^6.0.8" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/3846masa" - }, - "peerDependencies": { - "axios": ">=0.20.0", - "tough-cookie": ">=4.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -6080,19 +6054,6 @@ "dev": true, "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -6844,16 +6805,6 @@ "robust-predicates": "^3.0.2" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -8572,6 +8523,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flag-icons": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.5.0.tgz", + "integrity": "sha512-kd+MNXviFIg5hijH766tt+3x76ele1AXlo4zDdCxIvqWZhKt4T83bOtxUOOMlTx/EcFdUMH5yvQgYlFh1EqqFg==", + "license": "MIT" + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -8618,27 +8575,6 @@ "imul": "^1.0.0" } }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -8685,23 +8621,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -9307,31 +9226,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/http-cookie-agent": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.8.tgz", - "integrity": "sha512-qnYh3yLSr2jBsTYkw11elq+T361uKAJaZ2dR4cfYZChw1dt9uL5t3zSUwehoqqVb4oldk1BpkXKm2oat8zV+oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.3" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/3846masa" - }, - "peerDependencies": { - "tough-cookie": "^4.0.0 || ^5.0.0", - "undici": "^5.11.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "undici": { - "optional": true - } - } - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -12276,13 +12170,6 @@ "dev": true, "license": "MIT" }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -12593,9 +12480,9 @@ } }, "node_modules/recast": { - "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 6d1e000..45c6d32 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "@electron-forge/publisher-github": "^7.8.0", "@electron/fuses": "^1.8.0", "@eslint/js": "^9.23.0", - "@iracing-data/sync-track-assets": "^0.0.2-alpha.2", "@storybook/addon-docs": "^9.0.12", "@storybook/react-vite": "^9.0.12", "@tailwindcss/postcss": "^4.0.0", @@ -85,6 +84,7 @@ "@phosphor-icons/react": "^2.1.7", "d3": "^7.9.0", "electron-squirrel-startup": "^1.0.1", + "flag-icons": "^7.5.0", "js-yaml": "^4.1.0", "react": "^19.1.0", "react-dom": "^19.1.0", diff --git a/src/app/bridge/iracingSdk/mock-data/session.json b/src/app/bridge/iracingSdk/mock-data/session.json index ff7c555..6fce6c4 100644 --- a/src/app/bridge/iracingSdk/mock-data/session.json +++ b/src/app/bridge/iracingSdk/mock-data/session.json @@ -3300,7 +3300,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 77 }, { "CarIdx": 2, @@ -3349,7 +3350,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 3, @@ -3398,7 +3400,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 4, @@ -3447,7 +3450,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": 4, - "TeamIncidentCount": 4 + "TeamIncidentCount": 4, + "FlairID": 149 }, { "CarIdx": 5, @@ -3496,7 +3500,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 6, @@ -3545,7 +3550,8 @@ "DivisionName": "Division 9", "DivisionID": 8, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 7, @@ -3594,7 +3600,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 8, @@ -3643,7 +3650,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 104 }, { "CarIdx": 9, @@ -3692,7 +3700,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 10, @@ -3741,7 +3750,8 @@ "DivisionName": "Division 8", "DivisionID": 7, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 11, @@ -3790,7 +3800,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 12, @@ -3839,7 +3850,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 31 }, { "CarIdx": 13, @@ -3888,7 +3900,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 222 }, { "CarIdx": 14, @@ -3937,7 +3950,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 15, @@ -3986,7 +4000,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 39 }, { "CarIdx": 16, @@ -4035,7 +4050,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 17, @@ -4084,7 +4100,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 18, @@ -4133,7 +4150,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 19, @@ -4182,7 +4200,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 20, @@ -4231,7 +4250,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 21, @@ -4280,7 +4300,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 22, @@ -4574,7 +4595,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 16 }, { "CarIdx": 28, @@ -4623,7 +4645,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 29, @@ -4672,7 +4695,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 16 }, { "CarIdx": 30, @@ -4721,7 +4745,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 31, @@ -4868,7 +4893,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 71 }, { "CarIdx": 34, @@ -4917,7 +4943,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 35, @@ -5015,7 +5042,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 1 }, { "CarIdx": 37, @@ -5064,7 +5092,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 38, @@ -5113,7 +5142,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 39, @@ -5162,7 +5192,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 40, @@ -5211,7 +5242,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 31 } ] }, diff --git a/src/app/irsdk/node/utils/mock-data/session.json b/src/app/irsdk/node/utils/mock-data/session.json index ff7c555..6fce6c4 100644 --- a/src/app/irsdk/node/utils/mock-data/session.json +++ b/src/app/irsdk/node/utils/mock-data/session.json @@ -3300,7 +3300,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 77 }, { "CarIdx": 2, @@ -3349,7 +3350,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 3, @@ -3398,7 +3400,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 4, @@ -3447,7 +3450,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": 4, - "TeamIncidentCount": 4 + "TeamIncidentCount": 4, + "FlairID": 149 }, { "CarIdx": 5, @@ -3496,7 +3500,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 6, @@ -3545,7 +3550,8 @@ "DivisionName": "Division 9", "DivisionID": 8, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 7, @@ -3594,7 +3600,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 8, @@ -3643,7 +3650,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 104 }, { "CarIdx": 9, @@ -3692,7 +3700,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 10, @@ -3741,7 +3750,8 @@ "DivisionName": "Division 8", "DivisionID": 7, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 11, @@ -3790,7 +3800,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 12, @@ -3839,7 +3850,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 31 }, { "CarIdx": 13, @@ -3888,7 +3900,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 222 }, { "CarIdx": 14, @@ -3937,7 +3950,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 15, @@ -3986,7 +4000,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 39 }, { "CarIdx": 16, @@ -4035,7 +4050,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 17, @@ -4084,7 +4100,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 18, @@ -4133,7 +4150,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 19, @@ -4182,7 +4200,8 @@ "DivisionName": "Division 6", "DivisionID": 5, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 20, @@ -4231,7 +4250,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 21, @@ -4280,7 +4300,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 22, @@ -4574,7 +4595,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 16 }, { "CarIdx": 28, @@ -4623,7 +4645,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 29, @@ -4672,7 +4695,8 @@ "DivisionName": "Division 3", "DivisionID": 2, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 16 }, { "CarIdx": 30, @@ -4721,7 +4745,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 31, @@ -4868,7 +4893,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 71 }, { "CarIdx": 34, @@ -4917,7 +4943,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 35, @@ -5015,7 +5042,8 @@ "DivisionName": "Division 5", "DivisionID": 4, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 1 }, { "CarIdx": 37, @@ -5064,7 +5092,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 38, @@ -5113,7 +5142,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 39, @@ -5162,7 +5192,8 @@ "DivisionName": "Division 7", "DivisionID": 6, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 223 }, { "CarIdx": 40, @@ -5211,7 +5242,8 @@ "DivisionName": "Division 4", "DivisionID": 3, "CurDriverIncidentCount": -1, - "TeamIncidentCount": -1 + "TeamIncidentCount": -1, + "FlairID": 31 } ] }, diff --git a/src/app/storage/defaultDashboard.ts b/src/app/storage/defaultDashboard.ts index 31c2efd..0d13db9 100644 --- a/src/app/storage/defaultDashboard.ts +++ b/src/app/storage/defaultDashboard.ts @@ -18,6 +18,7 @@ export const defaultDashboard: DashboardLayout = { lastTime: { enabled: true }, fastestTime: { enabled: true }, backgroundOpacity: { value: 0 }, + countryFlags: { enabled: true }, }, }, { @@ -62,6 +63,7 @@ export const defaultDashboard: DashboardLayout = { config: { buffer: 3, backgroundOpacity: { value: 0 }, + countryFlags: { enabled: true }, }, }, { diff --git a/src/frontend/components/Settings/sections/RelativeSettings.tsx b/src/frontend/components/Settings/sections/RelativeSettings.tsx index e0c1879..aa2fe07 100644 --- a/src/frontend/components/Settings/sections/RelativeSettings.tsx +++ b/src/frontend/components/Settings/sections/RelativeSettings.tsx @@ -2,12 +2,14 @@ import { useState } from 'react'; import { BaseSettingsSection } from '../components/BaseSettingsSection'; import { useDashboard } from '@irdashies/context'; import { RelativeWidgetSettings } from '../types'; +import { ToggleSwitch } from '../components/ToggleSwitch'; const SETTING_ID = 'relative'; const defaultConfig: RelativeWidgetSettings['config'] = { buffer: 3, background: { opacity: 0 }, + countryFlags: { enabled: true }, }; const migrateConfig = (savedConfig: unknown): RelativeWidgetSettings['config'] => { @@ -16,6 +18,7 @@ const migrateConfig = (savedConfig: unknown): RelativeWidgetSettings['config'] = return { buffer: (config.buffer as { value?: number })?.value ?? 3, background: { opacity: (config.background as { opacity?: number })?.opacity ?? 0 }, + countryFlags: { enabled: (config.countryFlags as { enabled?: boolean })?.enabled ?? true }, }; }; @@ -84,6 +87,15 @@ export const RelativeSettings = () => { +
+ Show Country Flags + + handleConfigChange({ countryFlags: { enabled } }) + } + /> +
)} diff --git a/src/frontend/components/Settings/sections/StandingsSettings.tsx b/src/frontend/components/Settings/sections/StandingsSettings.tsx index 496ccf2..0ea4812 100644 --- a/src/frontend/components/Settings/sections/StandingsSettings.tsx +++ b/src/frontend/components/Settings/sections/StandingsSettings.tsx @@ -13,6 +13,7 @@ const defaultConfig: StandingsWidgetSettings['config'] = { lastTime: { enabled: true }, fastestTime: { enabled: true }, background: { opacity: 0 }, + countryFlags: { enabled: true }, driverStandings: { buffer: 3, numNonClassDrivers: 3, @@ -46,6 +47,9 @@ const migrateConfig = ( background: { opacity: (config.background as { opacity?: number })?.opacity ?? 0, }, + countryFlags: { + enabled: (config.countryFlags as { enabled?: boolean })?.enabled ?? true, + }, driverStandings: { buffer: (config.driverStandings as { buffer?: number })?.buffer ?? @@ -138,6 +142,15 @@ export const StandingsSettings = () => { } /> +
+ Show Country Flags + + handleConfigChange({ countryFlags: { enabled } }) + } + /> +
{/* Driver Standings Settings */} diff --git a/src/frontend/components/Settings/types.ts b/src/frontend/components/Settings/types.ts index e3a7111..448da30 100644 --- a/src/frontend/components/Settings/types.ts +++ b/src/frontend/components/Settings/types.ts @@ -11,6 +11,7 @@ export interface StandingsWidgetSettings extends BaseWidgetSettings { lastTime: { enabled: boolean }; fastestTime: { enabled: boolean }; background: { opacity: number }; + countryFlags: { enabled: boolean }; driverStandings: { buffer: number; numNonClassDrivers: number; @@ -24,6 +25,7 @@ export interface RelativeWidgetSettings extends BaseWidgetSettings { config: { buffer: number; background: { opacity: number }; + countryFlags: { enabled: boolean }; }; } diff --git a/src/frontend/components/Standings/Relative.stories.tsx b/src/frontend/components/Standings/Relative.stories.tsx index c683076..4eb833e 100644 --- a/src/frontend/components/Standings/Relative.stories.tsx +++ b/src/frontend/components/Standings/Relative.stories.tsx @@ -64,3 +64,7 @@ export const PCCPacing: Story = { export const MultiClass: Story = { decorators: [TelemetryDecorator('/test-data/1747384033336')], }; + +export const WithFlairs: Story = { + decorators: [TelemetryDecorator('/test-data/1752616787255')], +}; diff --git a/src/frontend/components/Standings/Relative.tsx b/src/frontend/components/Standings/Relative.tsx index 547e4ce..9781a02 100644 --- a/src/frontend/components/Standings/Relative.tsx +++ b/src/frontend/components/Standings/Relative.tsx @@ -61,6 +61,7 @@ export const Relative = () => { radioActive={result.radioActive} isLapped={result.lappedState === 'behind'} isLappingAhead={result.lappedState === 'ahead'} + flairId={config?.countryFlags?.enabled ?? true ? result.driver?.flairId : undefined} badge={ { onPitRoad={result.onPitRoad} onTrack={result.onTrack} radioActive={result.radioActive} + flairId={settings?.countryFlags?.enabled ?? true ? result.driver?.flairId : undefined} badge={ settings?.badge?.enabled ? ( = { + component: CountryFlag, + parameters: { + layout: 'centered', + }, + argTypes: { + flairId: { + control: { type: 'number' }, + description: 'FlairID from the flairs.json data', + }, + size: { + control: { type: 'select' }, + options: ['sm', 'md', 'lg'], + description: 'Size of the flag', + }, + className: { + control: { type: 'text' }, + description: 'Additional CSS classes', + }, + }, +}; + +export default meta; +type Story = StoryObj; + +// Popular countries for examples +const popularCountries = [ + { flairId: 149, name: 'New Zealand' }, + { flairId: 223, name: 'United States' }, + { flairId: 222, name: 'United Kingdom' }, + { flairId: 77, name: 'Germany' }, + { flairId: 71, name: 'France' }, + { flairId: 101, name: 'Italy' }, + { flairId: 198, name: 'Spain' }, + { flairId: 16, name: 'Australia' }, + { flairId: 39, name: 'Canada' }, + { flairId: 104, name: 'Japan' }, + { flairId: 45, name: 'China' }, +]; + +// All supported flags +const allFlags = Object.entries(FLAIR_ID_TO_COUNTRY_CODE).map(([flairId, countryCode]) => ({ + flairId: parseInt(flairId), + countryCode, +})); + +export const Default: Story = { + args: { + flairId: 149, // New Zealand + size: 'md', + }, +}; + +export const Small: Story = { + args: { + flairId: 149, + size: 'sm', + }, +}; + +export const Large: Story = { + args: { + flairId: 149, + size: 'lg', + }, +}; + +export const PopularCountries: Story = { + render: () => ( +
+ {popularCountries.map((country) => ( +
+ + {country.name} +
+ ))} +
+ ), +}; + +export const AllSizes: Story = { + render: () => ( +
+ {popularCountries.slice(0, 3).map((country) => ( +
+ {country.name}: + + + +
+ ))} +
+ ), +}; + +export const InvalidFlairId: Story = { + args: { + flairId: 999999, // Invalid FlairID + size: 'md', + }, +}; + +export const Unaffiliated: Story = { + args: { + flairId: 1, // Unaffiliated - should show UN flag + size: 'md', + }, +}; + +export const AllFlags: Story = { + render: () => ( +
+ {allFlags.map((flag) => ( +
+ + + {flag.countryCode} + +
+ ))} +
+ ), +}; \ No newline at end of file diff --git a/src/frontend/components/Standings/components/CountryFlag/CountryFlag.tsx b/src/frontend/components/Standings/components/CountryFlag/CountryFlag.tsx new file mode 100644 index 0000000..eabeee4 --- /dev/null +++ b/src/frontend/components/Standings/components/CountryFlag/CountryFlag.tsx @@ -0,0 +1,279 @@ +import React from 'react'; +import 'flag-icons/css/flag-icons.min.css'; + +interface CountryFlagProps { + flairId: number; + className?: string; + size?: 'sm' | 'md' | 'lg'; +} + +// Hardcoded FlairID to country code mapping +export const FLAIR_ID_TO_COUNTRY_CODE: Record = { + 1: 'un', // Unaffiliated + 2: 'un', // iRacing + 3: 'AF', // Afghanistan + 4: 'AX', // Åland Islands + 5: 'AL', // Albania + 6: 'DZ', // Algeria + 7: 'AS', // American Samoa + 8: 'AD', // Andorra + 9: 'AO', // Angola + 10: 'AI', // Anguilla + 11: 'AQ', // Antarctica + 12: 'AG', // Antigua and Barbuda + 13: 'AR', // Argentina + 14: 'AM', // Armenia + 15: 'AW', // Aruba + 16: 'AU', // Australia + 17: 'AT', // Austria + 18: 'AZ', // Azerbaijan + 19: 'BS', // Bahamas + 20: 'BH', // Bahrain + 21: 'BD', // Bangladesh + 22: 'BB', // Barbados + 23: 'BE', // Belgium + 24: 'BZ', // Belize + 25: 'BJ', // Benin + 26: 'BM', // Bermuda + 27: 'BT', // Bhutan + 28: 'BO', // Bolivia + 29: 'BA', // Bosnia and Herzegovina + 30: 'BW', // Botswana + 31: 'BR', // Brazil + 32: 'VG', // British Virgin Islands + 33: 'BN', // Brunei Darussalam + 34: 'BG', // Bulgaria + 35: 'BF', // Burkina Faso + 36: 'BI', // Burundi + 37: 'KH', // Cambodia + 38: 'CM', // Cameroon + 39: 'CA', // Canada + 40: 'CV', // Cape Verde + 41: 'KY', // Cayman Islands + 42: 'CF', // Central African Republic + 43: 'TD', // Chad + 44: 'CL', // Chile + 45: 'CN', // China + 46: 'CX', // Christmas Island + 47: 'CC', // Cocos (Keeling) Islands + 48: 'CO', // Colombia + 49: 'KM', // Comoros + 50: 'CK', // Cook Islands + 51: 'CR', // Costa Rica + 52: 'HR', // Croatia + 53: 'CY', // Cyprus + 54: 'CZ', // Czechia + 55: 'CD', // Democratic Republic of the Congo + 56: 'DK', // Denmark + 57: 'DJ', // Djibouti + 58: 'DM', // Dominica + 59: 'DO', // Dominican Republic + 60: 'EC', // Ecuador + 61: 'EG', // Egypt + 62: 'SV', // El Salvador + 63: 'GQ', // Equatorial Guinea + 64: 'ER', // Eritrea + 65: 'EE', // Estonia + 66: 'ET', // Ethiopia + 67: 'FK', // Falkland Islands + 68: 'FO', // Faroe Islands + 69: 'FJ', // Fiji + 70: 'FI', // Finland + 71: 'FR', // France + 72: 'GF', // French Guiana + 73: 'PF', // French Polynesia + 74: 'GA', // Gabon + 75: 'GM', // Gambia + 76: 'GE', // Georgia + 77: 'DE', // Germany + 78: 'GH', // Ghana + 79: 'GI', // Gibraltar + 80: 'GR', // Greece + 81: 'GL', // Greenland + 82: 'GD', // Grenada + 83: 'GP', // Guadeloupe + 84: 'GU', // Guam + 85: 'GT', // Guatemala + 86: 'GG', // Guernsey + 87: 'GN', // Guinea + 88: 'GW', // Guinea-Bissau + 89: 'GY', // Guyana + 90: 'HT', // Haiti + 91: 'HN', // Honduras + 92: 'HK', // Hong Kong + 93: 'HU', // Hungary + 94: 'IS', // Iceland + 95: 'IN', // India + 96: 'ID', // Indonesia + 97: 'IQ', // Iraq + 98: 'IE', // Ireland + 99: 'IM', // Isle of Man + 100: 'IL', // Israel + 101: 'IT', // Italy + 102: 'CI', // Ivory Coast + 103: 'JM', // Jamaica + 104: 'JP', // Japan + 105: 'JE', // Jersey + 106: 'JO', // Jordan + 107: 'KZ', // Kazakhstan + 108: 'KE', // Kenya + 109: 'KI', // Kiribati + 110: 'KW', // Kuwait + 111: 'KG', // Kyrgyzstan + 112: 'LA', // Laos + 113: 'LV', // Latvia + 114: 'LB', // Lebanon + 115: 'LS', // Lesotho + 116: 'LR', // Liberia + 117: 'LY', // Libya + 118: 'LI', // Liechtenstein + 119: 'LT', // Lithuania + 120: 'LU', // Luxembourg + 121: 'MO', // Macau + 122: 'MK', // Macedonia + 123: 'MG', // Madagascar + 124: 'MW', // Malawi + 125: 'MY', // Malaysia + 126: 'MV', // Maldives + 127: 'ML', // Mali + 128: 'MT', // Malta + 129: 'MH', // Marshall Islands + 130: 'MQ', // Martinique + 131: 'MR', // Mauritania + 132: 'MU', // Mauritius + 133: 'YT', // Mayotte + 134: 'MX', // Mexico + 135: 'FM', // Micronesia + 136: 'MD', // Moldova + 137: 'MC', // Monaco + 138: 'MN', // Mongolia + 139: 'ME', // Montenegro + 140: 'MS', // Montserrat + 141: 'MA', // Morocco + 142: 'MZ', // Mozambique + 143: 'NA', // Namibia + 144: 'NR', // Nauru + 145: 'NP', // Nepal + 146: 'NL', // Netherlands + 148: 'NC', // New Caledonia + 149: 'NZ', // New Zealand + 150: 'NI', // Nicaragua + 151: 'NE', // Niger + 152: 'NG', // Nigeria + 153: 'NU', // Niue + 154: 'NF', // Norfolk Island + 155: 'MP', // Northern Mariana Islands + 156: 'NO', // Norway + 157: 'OM', // Oman + 158: 'PK', // Pakistan + 159: 'PW', // Palau + 160: 'PS', // Palestine + 161: 'PA', // Panama + 162: 'PG', // Papua New Guinea + 163: 'PY', // Paraguay + 164: 'PE', // Peru + 165: 'PH', // Philippines + 166: 'PN', // Pitcairn Islands + 167: 'PL', // Poland + 168: 'PT', // Portugal + 169: 'PR', // Puerto Rico + 170: 'QA', // Qatar + 171: 'CG', // Republic of the Congo + 172: 'RE', // Reunion + 173: 'RO', // Romania + 174: 'RW', // Rwanda + 175: 'SH', // Saint Helena + 176: 'KN', // Saint Kitts and Nevis + 177: 'LC', // Saint Lucia + 178: 'PM', // Saint Pierre & Miquelon + 179: 'VC', // Saint Vincent and the Grenadines + 180: 'BL', // Saint-Barthélemy + 181: 'MF', // Saint-Martin + 182: 'WS', // Samoa + 183: 'SM', // San Marino + 184: 'ST', // Sao Tome and Principe + 185: 'SA', // Saudi Arabia + 186: 'SN', // Senegal + 187: 'RS', // Serbia + 188: 'SC', // Seychelles + 189: 'SL', // Sierra Leone + 190: 'SG', // Singapore + 191: 'SK', // Slovakia + 192: 'SI', // Slovenia + 193: 'SB', // Solomon Islands + 194: 'SO', // Somalia + 195: 'ZA', // South Africa + 196: 'GS', // South Georgia & South Sandwich Islands + 197: 'KR', // South Korea + 198: 'ES', // Spain + 199: 'LK', // Sri Lanka + 200: 'SR', // Suriname + 201: 'SJ', // Svalbard + 202: 'SZ', // Eswatini + 203: 'SE', // Sweden + 204: 'CH', // Switzerland + 205: 'TW', // Taiwan + 206: 'TJ', // Tajikistan + 207: 'TZ', // Tanzania + 208: 'TH', // Thailand + 209: 'TL', // Timor-Leste + 210: 'TG', // Togo + 211: 'TK', // Tokelau + 212: 'TO', // Tonga + 213: 'TT', // Trinidad and Tobago + 214: 'TN', // Tunisia + 215: 'TR', // Türkiye + 216: 'TM', // Turkmenistan + 217: 'TC', // Turks and Caicos Islands + 218: 'TV', // Tuvalu + 219: 'UG', // Uganda + 220: 'UA', // Ukraine + 221: 'AE', // United Arab Emirates + 222: 'GB', // United Kingdom + 223: 'US', // United States + 224: 'UY', // Uruguay + 225: 'UZ', // Uzbekistan + 226: 'VU', // Vanuatu + 227: 'VA', // Vatican City + 228: 'VE', // Venezuela + 229: 'VN', // Vietnam + 230: 'VI', // Virgin Islands + 231: 'WF', // Wallis and Futuna + 232: 'EH', // Western Sahara + 233: 'YE', // Yemen + 234: 'ZM', // Zambia + 235: 'ZW', // Zimbabwe + 236: 'GB-ENG', // England + 237: 'GB-SCT', // Scotland + 238: 'GB-WLS', // Wales + 239: 'GB-NIR', // Northern Ireland + 240: 'BQ', // Bonaire, Sint Eustatius and Saba + 241: 'CW', // Curaçao + 242: 'SX', // Sint Maarten (Dutch part) +}; + +// Map FlairID to country code +const getCountryCodeFromFlairId = (flairId: number): string => { + return FLAIR_ID_TO_COUNTRY_CODE[flairId] || 'un'; // UN flag for unaffiliated/unknown +}; + +// Size classes for the flag +const sizeClasses = { + sm: 'w-4 h-3', + md: 'w-6 h-4.5', + lg: 'w-8 h-6', +}; + +export const CountryFlag: React.FC = ({ + flairId, + className = '', + size = 'md', +}) => { + const countryCode = getCountryCodeFromFlairId(flairId); + + return ( + + ); +}; diff --git a/src/frontend/components/Standings/components/DriverInfoRow/DriverInfoRow.stories.tsx b/src/frontend/components/Standings/components/DriverInfoRow/DriverInfoRow.stories.tsx index f890703..f43760d 100644 --- a/src/frontend/components/Standings/components/DriverInfoRow/DriverInfoRow.stories.tsx +++ b/src/frontend/components/Standings/components/DriverInfoRow/DriverInfoRow.stories.tsx @@ -204,6 +204,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 223, // United States }, isPlayer: false, delta: 12, @@ -224,6 +225,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 222, // United Kingdom }, isPlayer: false, delta: 2.7, @@ -244,6 +246,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 77, // Germany }, isPlayer: false, delta: 0.7, @@ -264,6 +267,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 71, // France }, isPlayer: true, delta: 0, @@ -282,6 +286,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 101, // Italy }, isPlayer: false, delta: -0.3, @@ -300,6 +305,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 198, // Spain }, isPlayer: false, delta: -3.9, @@ -318,6 +324,7 @@ export const Relative = () => { name: getRandomFullName(), license: getRandomLicense(), rating: getRandomRating(), + flairId: 39, // Canada }, isPlayer: false, delta: -33.2, @@ -356,6 +363,7 @@ export const Relative = () => { radioActive={result.radioActive} isLapped={result.lappedState === 'behind'} isLappingAhead={result.lappedState === 'ahead'} + flairId={result.driver?.flairId} badge={ { // convert seconds to mm:ss:ms const lastTimeString = formatTime(lastTime); @@ -73,7 +76,8 @@ export const DriverInfoRow = ({
-
+
+ {flairId && } diff --git a/src/frontend/components/Standings/createStandings.ts b/src/frontend/components/Standings/createStandings.ts index c82daae..298e1aa 100644 --- a/src/frontend/components/Standings/createStandings.ts +++ b/src/frontend/components/Standings/createStandings.ts @@ -14,6 +14,7 @@ export interface Standings { carNum: string; license: string; rating: number; + flairId?: number; }; fastestTime: number; hasFastestTime: boolean; @@ -110,6 +111,7 @@ export const createDriverStandings = ( carNum: driver.CarNumber, license: driver.LicString, rating: driver.IRating, + flairId: driver.FlairID, }, fastestTime: result.FastestTime, hasFastestTime: result.CarIdx === fastestDriverIdx, diff --git a/src/frontend/components/Standings/hooks/useDriverPositions.tsx b/src/frontend/components/Standings/hooks/useDriverPositions.tsx index 2f576de..b5ed449 100644 --- a/src/frontend/components/Standings/hooks/useDriverPositions.tsx +++ b/src/frontend/components/Standings/hooks/useDriverPositions.tsx @@ -40,6 +40,7 @@ export const useDrivers = () => { carNumRaw: driver.CarNumberRaw, license: driver.LicString, rating: driver.IRating, + flairId: driver.FlairID, carClass: { id: driver.CarClassID, color: driver.CarClassColor, @@ -117,6 +118,7 @@ export const useDriverStandings = () => { carNum: driver.carNum, license: driver.license, rating: driver.rating, + flairId: driver.flairId, }, fastestTime: driverPos.bestLap, hasFastestTime: false, // TODO diff --git a/src/frontend/components/Standings/hooks/useRelativeSettings.ts b/src/frontend/components/Standings/hooks/useRelativeSettings.ts index 7ab2966..465ae3a 100644 --- a/src/frontend/components/Standings/hooks/useRelativeSettings.ts +++ b/src/frontend/components/Standings/hooks/useRelativeSettings.ts @@ -5,4 +5,4 @@ export const useRelativeSettings = (): RelativeWidgetSettings['config'] => { const { currentDashboard } = useDashboard(); const widget = currentDashboard?.widgets.find(w => w.id === 'relative')?.config; return widget as RelativeWidgetSettings['config']; -}; \ No newline at end of file +}; \ No newline at end of file diff --git a/src/frontend/components/Standings/hooks/useRelativeSettings.tsx b/src/frontend/components/Standings/hooks/useRelativeSettings.tsx new file mode 100644 index 0000000..c9cf17f --- /dev/null +++ b/src/frontend/components/Standings/hooks/useRelativeSettings.tsx @@ -0,0 +1,12 @@ +import { useDashboard } from '@irdashies/context'; +import { RelativeWidgetSettings } from '../../Settings/types'; + +export const useRelativeSettings = () => { + const { currentDashboard } = useDashboard(); + + const relativeSettings = currentDashboard?.widgets.find( + (widget) => widget.id === 'relative', + )?.config; + + return relativeSettings as RelativeWidgetSettings['config']; +}; \ No newline at end of file diff --git a/test-data/1752616787255/session.json b/test-data/1752616787255/session.json new file mode 100644 index 0000000..243b4a1 --- /dev/null +++ b/test-data/1752616787255/session.json @@ -0,0 +1,4791 @@ +{ + "WeekendInfo": { + "TrackName": "interlagos gp", + "TrackID": 212, + "TrackLength": "4.2226 km", + "TrackLengthOfficial": "4.31 km", + "TrackDisplayName": "Aut dromo Jos Carlos Pace", + "TrackDisplayShortName": "Interlagos", + "TrackConfigName": "Grand Prix", + "TrackCity": "S o Paulo", + "TrackState": "S o Paulo", + "TrackCountry": "Brazil", + "TrackAltitude": "782.37 m", + "TrackLatitude": "-23.704804 m", + "TrackLongitude": "-46.699672 m", + "TrackNorthOffset": "1.5860 rad", + "TrackNumTurns": 15, + "TrackPitSpeedLimit": "80.00 kph", + "TrackPaceSpeed": "22.35 kph", + "TrackNumPitStalls": 39, + "TrackType": "road course", + "TrackDirection": "neutral", + "TrackWeatherType": "Realistic", + "TrackSkies": "Dynamic", + "TrackSurfaceTemp": "21.98 C", + "TrackSurfaceTempCrew": "21.98 C", + "TrackAirTemp": "18.98 C", + "TrackAirPressure": "27.49 Hg", + "TrackAirDensity": "1.10 kg/m^3", + "TrackWindVel": "5.62 m/s", + "TrackWindDir": "1.18 rad", + "TrackRelativeHumidity": "95 %", + "TrackFogLevel": "0 %", + "TrackPrecipitation": "0 %", + "TrackCleanup": 1, + "TrackDynamicTrack": 1, + "TrackVersion": "2025.06.18.02", + "SeriesID": 539, + "SeasonID": 5598, + "SessionID": 280249311, + "SubSessionID": 78438586, + "LeagueID": 0, + "Official": 1, + "RaceWeek": 4, + "EventType": "Race", + "Category": "SportsCar", + "SimMode": "full", + "TeamRacing": 0, + "MinDrivers": 0, + "MaxDrivers": 1, + "DCRuleSet": "None", + "QualifierMustStartRace": 0, + "NumCarClasses": 3, + "NumCarTypes": 17, + "HeatRacing": 0, + "BuildType": "Release", + "BuildTarget": "Members", + "BuildVersion": "2025.07.02.02", + "RaceFarm": "US-East-OH", + "WeekendOptions": { + "NumStarters": 50, + "StartingGrid": "2x2 inline pole on left", + "QualifyScoring": "best lap", + "CourseCautions": "local", + "StandingStart": 0, + "ShortParadeLap": 0, + "Restarts": "double file lapped cars behind", + "WeatherType": "Realistic", + "Skies": "Dynamic", + "WindDirection": "N", + "WindSpeed": "3.22 km/h", + "WeatherTemp": "25.56 C", + "RelativeHumidity": "45 %", + "FogLevel": "0 %", + "TimeOfDay": "8:30 am", + "Date": "2025-07-19T00:00:00.000Z", + "EarthRotationSpeedupFactor": 1, + "Unofficial": 0, + "CommercialMode": "consumer", + "NightMode": "variable", + "IsFixedSetup": 1, + "StrictLapsChecking": "default", + "HasOpenRegistration": 0, + "HardcoreLevel": 0, + "NumJokerLaps": 0, + "IncidentLimit": 25, + "FastRepairsLimit": 0, + "GreenWhiteCheckeredLimit": 0 + }, + "TelemetryOptions": { + "TelemetryDiskFile": "C /Users/tarik/Documents/iRacing/telemetry/ferrari296gt3_interlagos gp 2025-07-16 09-58-20.ibt" + } + }, + "SessionInfo": { + "CurrentSessionNum": 2, + "Sessions": [ + { + "SessionNum": 0, + "SessionLaps": "unlimited", + "SessionTime": "180.0000 sec", + "SessionNumLapsToAvg": 0, + "SessionType": "Practice", + "SessionTrackRubberState": "moderate usage", + "SessionName": "PRACTICE", + "SessionSubType": null, + "SessionSkipped": 0, + "SessionRunGroupsUsed": 0, + "SessionEnforceTireCompoundChange": 0, + "ResultsPositions": [ + { + "Position": 1, + "ClassPosition": 0, + "CarIdx": 10, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 2, + "ClassPosition": 1, + "CarIdx": 11, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.288, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 3, + "ClassPosition": 0, + "CarIdx": 20, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 4, + "ClassPosition": 2, + "CarIdx": 12, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 5, + "ClassPosition": 1, + "CarIdx": 21, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 6, + "ClassPosition": 3, + "CarIdx": 13, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 7, + "ClassPosition": 2, + "CarIdx": 22, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 8, + "ClassPosition": 3, + "CarIdx": 23, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.062, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 9, + "ClassPosition": 4, + "CarIdx": 24, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 10, + "ClassPosition": 5, + "CarIdx": 25, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 11, + "ClassPosition": 4, + "CarIdx": 14, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 12, + "ClassPosition": 5, + "CarIdx": 15, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 13, + "ClassPosition": 6, + "CarIdx": 26, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.056, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 14, + "ClassPosition": 7, + "CarIdx": 27, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.298, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 15, + "ClassPosition": 8, + "CarIdx": 28, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 16, + "ClassPosition": 9, + "CarIdx": 29, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 17, + "ClassPosition": 0, + "CarIdx": 1, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.077, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 18, + "ClassPosition": 6, + "CarIdx": 16, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.516, + "Incidents": 4, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 19, + "ClassPosition": 10, + "CarIdx": 30, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 20, + "ClassPosition": 7, + "CarIdx": 17, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 21, + "ClassPosition": 11, + "CarIdx": 31, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.314, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 22, + "ClassPosition": 12, + "CarIdx": 32, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.273, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 23, + "ClassPosition": 13, + "CarIdx": 33, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.369, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 24, + "ClassPosition": 1, + "CarIdx": 2, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 25, + "ClassPosition": 8, + "CarIdx": 18, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 26, + "ClassPosition": 2, + "CarIdx": 3, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 27, + "ClassPosition": 14, + "CarIdx": 34, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.33, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 28, + "ClassPosition": 9, + "CarIdx": 19, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.113, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 29, + "ClassPosition": 3, + "CarIdx": 4, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.272, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 30, + "ClassPosition": 4, + "CarIdx": 5, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.342, + "Incidents": 3, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 31, + "ClassPosition": 5, + "CarIdx": 6, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.391, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 32, + "ClassPosition": 15, + "CarIdx": 35, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 33, + "ClassPosition": 16, + "CarIdx": 36, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 34, + "ClassPosition": 17, + "CarIdx": 37, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 35, + "ClassPosition": 6, + "CarIdx": 7, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 36, + "ClassPosition": 18, + "CarIdx": 38, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 37, + "ClassPosition": 19, + "CarIdx": 39, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 38, + "ClassPosition": 7, + "CarIdx": 8, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 39, + "ClassPosition": 20, + "CarIdx": 40, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 40, + "ClassPosition": 21, + "CarIdx": 41, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 41, + "ClassPosition": 8, + "CarIdx": 9, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.309, + "Incidents": 3, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + } + ], + "ResultsFastestLap": [ + { + "CarIdx": 255, + "FastestLap": 0, + "FastestTime": -1 + } + ], + "ResultsAverageLapTime": -1, + "ResultsNumCautionFlags": 0, + "ResultsNumCautionLaps": 0, + "ResultsNumLeadChanges": 0, + "ResultsLapsComplete": -1, + "ResultsOfficial": 1 + }, + { + "SessionNum": 1, + "SessionLaps": 2, + "SessionTime": "480.0000 sec", + "SessionNumLapsToAvg": 0, + "SessionType": "Lone Qualify", + "SessionTrackRubberState": "carry over", + "SessionName": "QUALIFY", + "SessionSubType": null, + "SessionSkipped": 0, + "SessionRunGroupsUsed": 0, + "SessionEnforceTireCompoundChange": 0, + "ResultsPositions": [ + { + "Position": 1, + "ClassPosition": 0, + "CarIdx": 2, + "Lap": 2, + "Time": 95.6663, + "FastestLap": 2, + "FastestTime": 95.6663, + "LastTime": 95.6663, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.795, + "Incidents": 4, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 2, + "ClassPosition": 1, + "CarIdx": 3, + "Lap": 2, + "Time": 95.8725, + "FastestLap": 2, + "FastestTime": 95.8725, + "LastTime": 95.8725, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.212, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 3, + "ClassPosition": 0, + "CarIdx": 12, + "Lap": 1, + "Time": 96.662, + "FastestLap": 1, + "FastestTime": 96.662, + "LastTime": 96.662, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 3.212, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 4, + "ClassPosition": 1, + "CarIdx": 14, + "Lap": 2, + "Time": 96.8177, + "FastestLap": 2, + "FastestTime": 96.8177, + "LastTime": 96.8177, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 2.994, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 5, + "ClassPosition": 2, + "CarIdx": 10, + "Lap": 2, + "Time": 96.8659, + "FastestLap": 2, + "FastestTime": 96.8659, + "LastTime": 96.8659, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.904, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 6, + "ClassPosition": 3, + "CarIdx": 15, + "Lap": 1, + "Time": 98.3878, + "FastestLap": 1, + "FastestTime": 98.3878, + "LastTime": 98.3878, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.948, + "Incidents": 3, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 7, + "ClassPosition": 4, + "CarIdx": 19, + "Lap": 1, + "Time": 98.4199, + "FastestLap": 1, + "FastestTime": 98.4199, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 4.112, + "Incidents": 3, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 8, + "ClassPosition": 5, + "CarIdx": 16, + "Lap": 2, + "Time": 98.4823, + "FastestLap": 2, + "FastestTime": 98.4823, + "LastTime": 98.4823, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 2.988, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 9, + "ClassPosition": 6, + "CarIdx": 11, + "Lap": 2, + "Time": 98.616, + "FastestLap": 2, + "FastestTime": 98.616, + "LastTime": 98.616, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.968, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 10, + "ClassPosition": 2, + "CarIdx": 7, + "Lap": 1, + "Time": 99.6431, + "FastestLap": 1, + "FastestTime": 99.6431, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.04, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 11, + "ClassPosition": 0, + "CarIdx": 36, + "Lap": 1, + "Time": 102.424, + "FastestLap": 1, + "FastestTime": 102.424, + "LastTime": 102.424, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.784, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 12, + "ClassPosition": 1, + "CarIdx": 23, + "Lap": 2, + "Time": 102.9543, + "FastestLap": 2, + "FastestTime": 102.9543, + "LastTime": 102.9543, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 2.968, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 13, + "ClassPosition": 2, + "CarIdx": 22, + "Lap": 2, + "Time": 103.0657, + "FastestLap": 2, + "FastestTime": 103.0657, + "LastTime": 103.0657, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 4.172, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 14, + "ClassPosition": 3, + "CarIdx": 21, + "Lap": 2, + "Time": 103.1475, + "FastestLap": 2, + "FastestTime": 103.1475, + "LastTime": 103.1475, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 2.997, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 15, + "ClassPosition": 4, + "CarIdx": 27, + "Lap": 1, + "Time": 103.6535, + "FastestLap": 1, + "FastestTime": 103.6535, + "LastTime": 103.6535, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.659, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 16, + "ClassPosition": 5, + "CarIdx": 31, + "Lap": 2, + "Time": 104.5092, + "FastestLap": 2, + "FastestTime": 104.5092, + "LastTime": 104.5092, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.469, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 17, + "ClassPosition": 6, + "CarIdx": 28, + "Lap": 1, + "Time": 104.7203, + "FastestLap": 1, + "FastestTime": 104.7203, + "LastTime": 104.7203, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.751, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 18, + "ClassPosition": 7, + "CarIdx": 34, + "Lap": 2, + "Time": 105.0928, + "FastestLap": 2, + "FastestTime": 105.0928, + "LastTime": 105.0928, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.605, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 19, + "ClassPosition": 8, + "CarIdx": 41, + "Lap": 1, + "Time": 105.5422, + "FastestLap": 1, + "FastestTime": 105.5422, + "LastTime": 105.5422, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.632, + "Incidents": 4, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 20, + "ClassPosition": 9, + "CarIdx": 35, + "Lap": 2, + "Time": 105.7885, + "FastestLap": 2, + "FastestTime": 105.7885, + "LastTime": 105.7885, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.244, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 21, + "ClassPosition": 10, + "CarIdx": 37, + "Lap": 2, + "Time": 108.9492, + "FastestLap": 2, + "FastestTime": 108.9492, + "LastTime": 108.9492, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.932, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 22, + "ClassPosition": 11, + "CarIdx": 24, + "Lap": 1, + "Time": 109.7977, + "FastestLap": 1, + "FastestTime": 109.7977, + "LastTime": 109.7977, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.504, + "Incidents": 6, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 23, + "ClassPosition": 12, + "CarIdx": 20, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 1.536, + "Incidents": 4, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 24, + "ClassPosition": 7, + "CarIdx": 13, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 1.266, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 25, + "ClassPosition": 13, + "CarIdx": 25, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 1.28, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 26, + "ClassPosition": 14, + "CarIdx": 26, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 1.485, + "Incidents": 6, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 27, + "ClassPosition": 15, + "CarIdx": 29, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 28, + "ClassPosition": 3, + "CarIdx": 1, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 4.594, + "Incidents": 8, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 29, + "ClassPosition": 16, + "CarIdx": 30, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 30, + "ClassPosition": 8, + "CarIdx": 17, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 31, + "ClassPosition": 17, + "CarIdx": 32, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 2.402, + "Incidents": 1, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 32, + "ClassPosition": 18, + "CarIdx": 33, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.962, + "Incidents": 4, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 33, + "ClassPosition": 9, + "CarIdx": 18, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0.27, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 34, + "ClassPosition": 4, + "CarIdx": 4, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.016, + "Incidents": 2, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 35, + "ClassPosition": 5, + "CarIdx": 5, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 2.474, + "Incidents": 9, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 36, + "ClassPosition": 6, + "CarIdx": 6, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 37, + "ClassPosition": 19, + "CarIdx": 38, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 2.01, + "Incidents": 3, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 38, + "ClassPosition": 20, + "CarIdx": 39, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 39, + "ClassPosition": 7, + "CarIdx": 8, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 2, + "JokerLapsComplete": 0, + "LapsDriven": 3.34, + "Incidents": 7, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 40, + "ClassPosition": 21, + "CarIdx": 40, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 0, + "JokerLapsComplete": 0, + "LapsDriven": 0, + "Incidents": 0, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + }, + { + "Position": 41, + "ClassPosition": 8, + "CarIdx": 9, + "Lap": 0, + "Time": -1, + "FastestLap": -1, + "FastestTime": -1, + "LastTime": -1, + "LapsLed": 0, + "LapsComplete": 1, + "JokerLapsComplete": 0, + "LapsDriven": 3.168, + "Incidents": 9, + "ReasonOutId": 0, + "ReasonOutStr": "Running" + } + ], + "ResultsFastestLap": [ + { + "CarIdx": 2, + "FastestLap": 2, + "FastestTime": 95.6663 + } + ], + "ResultsAverageLapTime": -1, + "ResultsNumCautionFlags": 0, + "ResultsNumCautionLaps": 0, + "ResultsNumLeadChanges": 0, + "ResultsLapsComplete": -1, + "ResultsOfficial": 1 + }, + { + "SessionNum": 2, + "SessionLaps": "unlimited", + "SessionTime": "2100.0000 sec", + "SessionNumLapsToAvg": 0, + "SessionType": "Race", + "SessionTrackRubberState": "carry over", + "SessionName": "RACE", + "SessionSubType": null, + "SessionSkipped": 0, + "SessionRunGroupsUsed": 0, + "SessionEnforceTireCompoundChange": 0, + "ResultsPositions": null, + "ResultsFastestLap": [ + { + "CarIdx": 255, + "FastestLap": 0, + "FastestTime": -1 + } + ], + "ResultsAverageLapTime": -1, + "ResultsNumCautionFlags": 0, + "ResultsNumCautionLaps": 0, + "ResultsNumLeadChanges": 0, + "ResultsLapsComplete": -1, + "ResultsOfficial": 0 + } + ] + }, + "QualifyResultsInfo": { + "Results": [ + { + "Position": 0, + "ClassPosition": 0, + "CarIdx": 2, + "FastestLap": 2, + "FastestTime": 95.6663 + }, + { + "Position": 1, + "ClassPosition": 1, + "CarIdx": 3, + "FastestLap": 2, + "FastestTime": 95.8725 + }, + { + "Position": 2, + "ClassPosition": 2, + "CarIdx": 7, + "FastestLap": 1, + "FastestTime": 99.6431 + }, + { + "Position": 3, + "ClassPosition": 3, + "CarIdx": 1, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 4, + "ClassPosition": 4, + "CarIdx": 4, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 5, + "ClassPosition": 5, + "CarIdx": 5, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 6, + "ClassPosition": 6, + "CarIdx": 6, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 7, + "ClassPosition": 7, + "CarIdx": 8, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 8, + "ClassPosition": 8, + "CarIdx": 9, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 9, + "ClassPosition": 0, + "CarIdx": 12, + "FastestLap": 1, + "FastestTime": 96.662 + }, + { + "Position": 10, + "ClassPosition": 1, + "CarIdx": 14, + "FastestLap": 2, + "FastestTime": 96.8177 + }, + { + "Position": 11, + "ClassPosition": 2, + "CarIdx": 10, + "FastestLap": 2, + "FastestTime": 96.8659 + }, + { + "Position": 12, + "ClassPosition": 3, + "CarIdx": 15, + "FastestLap": 1, + "FastestTime": 98.3878 + }, + { + "Position": 13, + "ClassPosition": 4, + "CarIdx": 19, + "FastestLap": 1, + "FastestTime": 98.4199 + }, + { + "Position": 14, + "ClassPosition": 5, + "CarIdx": 16, + "FastestLap": 2, + "FastestTime": 98.4823 + }, + { + "Position": 15, + "ClassPosition": 6, + "CarIdx": 11, + "FastestLap": 2, + "FastestTime": 98.616 + }, + { + "Position": 16, + "ClassPosition": 7, + "CarIdx": 13, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 17, + "ClassPosition": 8, + "CarIdx": 18, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 18, + "ClassPosition": 9, + "CarIdx": 17, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 19, + "ClassPosition": 0, + "CarIdx": 36, + "FastestLap": 1, + "FastestTime": 102.424 + }, + { + "Position": 20, + "ClassPosition": 1, + "CarIdx": 23, + "FastestLap": 2, + "FastestTime": 102.9543 + }, + { + "Position": 21, + "ClassPosition": 2, + "CarIdx": 22, + "FastestLap": 2, + "FastestTime": 103.0657 + }, + { + "Position": 22, + "ClassPosition": 3, + "CarIdx": 21, + "FastestLap": 2, + "FastestTime": 103.1475 + }, + { + "Position": 23, + "ClassPosition": 4, + "CarIdx": 27, + "FastestLap": 1, + "FastestTime": 103.6535 + }, + { + "Position": 24, + "ClassPosition": 5, + "CarIdx": 31, + "FastestLap": 2, + "FastestTime": 104.5092 + }, + { + "Position": 25, + "ClassPosition": 6, + "CarIdx": 28, + "FastestLap": 1, + "FastestTime": 104.7203 + }, + { + "Position": 26, + "ClassPosition": 7, + "CarIdx": 34, + "FastestLap": 2, + "FastestTime": 105.0928 + }, + { + "Position": 27, + "ClassPosition": 8, + "CarIdx": 41, + "FastestLap": 1, + "FastestTime": 105.5422 + }, + { + "Position": 28, + "ClassPosition": 9, + "CarIdx": 35, + "FastestLap": 2, + "FastestTime": 105.7885 + }, + { + "Position": 29, + "ClassPosition": 10, + "CarIdx": 37, + "FastestLap": 2, + "FastestTime": 108.9492 + }, + { + "Position": 30, + "ClassPosition": 11, + "CarIdx": 24, + "FastestLap": 1, + "FastestTime": 109.7977 + }, + { + "Position": 31, + "ClassPosition": 12, + "CarIdx": 20, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 32, + "ClassPosition": 13, + "CarIdx": 25, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 33, + "ClassPosition": 14, + "CarIdx": 26, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 34, + "ClassPosition": 15, + "CarIdx": 29, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 35, + "ClassPosition": 16, + "CarIdx": 30, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 36, + "ClassPosition": 17, + "CarIdx": 32, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 37, + "ClassPosition": 18, + "CarIdx": 33, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 38, + "ClassPosition": 19, + "CarIdx": 38, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 39, + "ClassPosition": 20, + "CarIdx": 39, + "FastestLap": 0, + "FastestTime": -1 + }, + { + "Position": 40, + "ClassPosition": 21, + "CarIdx": 40, + "FastestLap": 0, + "FastestTime": -1 + } + ] + }, + "CameraInfo": { + "Groups": [ + { + "GroupNum": 1, + "GroupName": "Nose", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamNose" + } + ] + }, + { + "GroupNum": 2, + "GroupName": "Gearbox", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamGearbox" + } + ] + }, + { + "GroupNum": 3, + "GroupName": "Roll Bar", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamRoll Bar" + } + ] + }, + { + "GroupNum": 4, + "GroupName": "LF Susp", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamLF Susp" + } + ] + }, + { + "GroupNum": 5, + "GroupName": "LR Susp", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamLR Susp" + } + ] + }, + { + "GroupNum": 6, + "GroupName": "Gyro", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamGyro" + } + ] + }, + { + "GroupNum": 7, + "GroupName": "RF Susp", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamRF Susp" + } + ] + }, + { + "GroupNum": 8, + "GroupName": "RR Susp", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamRR Susp" + } + ] + }, + { + "GroupNum": 9, + "GroupName": "Cockpit", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamCockpit" + } + ] + }, + { + "GroupNum": 10, + "GroupName": "Blimp", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamBlimp_00" + }, + { + "CameraNum": 2, + "CameraName": "CamBlimp_01" + } + ] + }, + { + "GroupNum": 11, + "GroupName": "Chopper", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamChopper" + } + ] + }, + { + "GroupNum": 12, + "GroupName": "Chase", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamChase" + } + ] + }, + { + "GroupNum": 13, + "GroupName": "Far Chase", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamFar Chase" + } + ] + }, + { + "GroupNum": 14, + "GroupName": "Rear Chase", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamRear Chase" + } + ] + }, + { + "GroupNum": 15, + "GroupName": "Pit Lane", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamPit Lane" + } + ] + }, + { + "GroupNum": 16, + "GroupName": "Pit Lane 2", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamPit Lane 2" + } + ] + }, + { + "GroupNum": 17, + "GroupName": "Scenic0", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "Scenic_00" + }, + { + "CameraNum": 2, + "CameraName": "Scenic_01" + }, + { + "CameraNum": 3, + "CameraName": "Scenic_02" + }, + { + "CameraNum": 4, + "CameraName": "Scenic_03" + }, + { + "CameraNum": 5, + "CameraName": "Scenic_04" + }, + { + "CameraNum": 6, + "CameraName": "Scenic_05" + }, + { + "CameraNum": 7, + "CameraName": "Scenic_06" + }, + { + "CameraNum": 8, + "CameraName": "Scenic_07" + }, + { + "CameraNum": 9, + "CameraName": "Scenic_08" + }, + { + "CameraNum": 10, + "CameraName": "Scenic_09" + }, + { + "CameraNum": 11, + "CameraName": "Scenic_10" + } + ] + }, + { + "GroupNum": 18, + "GroupName": "Scenic", + "IsScenic": true, + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamScenic_00" + }, + { + "CameraNum": 2, + "CameraName": "CamScenic_01" + }, + { + "CameraNum": 3, + "CameraName": "CamScenic_02" + }, + { + "CameraNum": 4, + "CameraName": "CamScenic_03" + }, + { + "CameraNum": 5, + "CameraName": "CamScenic_04" + }, + { + "CameraNum": 6, + "CameraName": "CamScenic_05" + }, + { + "CameraNum": 7, + "CameraName": "CamScenic_06" + }, + { + "CameraNum": 8, + "CameraName": "CamScenic_07" + }, + { + "CameraNum": 9, + "CameraName": "CamScenic_08" + }, + { + "CameraNum": 10, + "CameraName": "CamScenic_09" + } + ] + }, + { + "GroupNum": 19, + "GroupName": "TV1", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamTV1_00" + }, + { + "CameraNum": 2, + "CameraName": "CamTV1_01" + }, + { + "CameraNum": 3, + "CameraName": "CamTV1_02" + }, + { + "CameraNum": 4, + "CameraName": "CamTV1_03" + }, + { + "CameraNum": 5, + "CameraName": "CamTV1_09" + }, + { + "CameraNum": 6, + "CameraName": "CamTV1_04" + }, + { + "CameraNum": 7, + "CameraName": "CamTV1_05" + }, + { + "CameraNum": 8, + "CameraName": "CamTV1_06" + }, + { + "CameraNum": 9, + "CameraName": "CamTV1_07" + }, + { + "CameraNum": 10, + "CameraName": "CamTV1_08" + } + ] + }, + { + "GroupNum": 20, + "GroupName": "TV2", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamTV2_00" + }, + { + "CameraNum": 2, + "CameraName": "CamTV2_01" + }, + { + "CameraNum": 3, + "CameraName": "CamTV2_02" + }, + { + "CameraNum": 4, + "CameraName": "CamTV2_03" + }, + { + "CameraNum": 5, + "CameraName": "CamTV2_04" + }, + { + "CameraNum": 6, + "CameraName": "CamTV2_05" + }, + { + "CameraNum": 7, + "CameraName": "CamTV2_06" + }, + { + "CameraNum": 8, + "CameraName": "CamTV2_07" + }, + { + "CameraNum": 9, + "CameraName": "CamTV2_08" + } + ] + }, + { + "GroupNum": 21, + "GroupName": "TV3", + "Cameras": [ + { + "CameraNum": 1, + "CameraName": "CamTV3_00" + }, + { + "CameraNum": 2, + "CameraName": "CamTV3_01" + }, + { + "CameraNum": 3, + "CameraName": "CamTV3_02" + }, + { + "CameraNum": 4, + "CameraName": "CamTV3_03" + }, + { + "CameraNum": 5, + "CameraName": "CamTV3_04" + }, + { + "CameraNum": 6, + "CameraName": "CamTV3_05" + }, + { + "CameraNum": 7, + "CameraName": "CamTV3_06" + }, + { + "CameraNum": 8, + "CameraName": "CamTV3_07" + }, + { + "CameraNum": 9, + "CameraName": "CamTV3_09" + } + ] + } + ] + }, + "RadioInfo": { + "SelectedRadioNum": 0, + "Radios": [ + { + "RadioNum": 0, + "HopCount": 1, + "NumFrequencies": 5, + "TunedToFrequencyNum": 1, + "ScanningIsOn": 1, + "Frequencies": [ + { + "FrequencyNum": 0, + "FrequencyName": "@ALLTEAMS", + "Priority": 12, + "CarIdx": -1, + "EntryIdx": -1, + "ClubID": 0, + "CanScan": 1, + "CanSquawk": 1, + "Muted": 0, + "IsMutable": 1, + "IsDeletable": 0 + }, + { + "FrequencyNum": 1, + "FrequencyName": "@DRIVERS", + "Priority": 15, + "CarIdx": -1, + "EntryIdx": -1, + "ClubID": 0, + "CanScan": 1, + "CanSquawk": 1, + "Muted": 0, + "IsMutable": 1, + "IsDeletable": 0 + }, + { + "FrequencyNum": 2, + "FrequencyName": "@TEAM", + "Priority": 60, + "CarIdx": 37, + "EntryIdx": -1, + "ClubID": 0, + "CanScan": 1, + "CanSquawk": 1, + "Muted": 0, + "IsMutable": 0, + "IsDeletable": 0 + }, + { + "FrequencyNum": 3, + "FrequencyName": "@RACECONTROL", + "Priority": 80, + "CarIdx": -1, + "EntryIdx": -1, + "ClubID": 0, + "CanScan": 1, + "CanSquawk": 0, + "Muted": 0, + "IsMutable": 0, + "IsDeletable": 0 + }, + { + "FrequencyNum": 4, + "FrequencyName": "@PRIVATE", + "Priority": 70, + "CarIdx": -1, + "EntryIdx": 37, + "ClubID": 0, + "CanScan": 1, + "CanSquawk": 1, + "Muted": 0, + "IsMutable": 0, + "IsDeletable": 0 + } + ] + } + ] + }, + "DriverInfo": { + "DriverCarIdx": 37, + "DriverUserID": 968989, + "PaceCarIdx": 0, + "DriverHeadPosX": 0.043, + "DriverHeadPosY": 0.325, + "DriverHeadPosZ": 0.535, + "DriverCarIsElectric": 0, + "DriverCarIdleRPM": 2950, + "DriverCarRedLine": 8000, + "DriverCarEngCylinderCount": 6, + "DriverCarFuelKgPerLtr": 0.75, + "DriverCarFuelMaxLtr": 104, + "DriverCarMaxFuelPct": 0.5, + "DriverCarGearNumForward": 6, + "DriverCarGearNeutral": 1, + "DriverCarGearReverse": 1, + "DriverCarSLFirstRPM": 6000, + "DriverCarSLShiftRPM": 7300, + "DriverCarSLLastRPM": 7500, + "DriverCarSLBlinkRPM": 7900, + "DriverCarVersion": "2025.07.02.02", + "DriverPitTrkPct": 0.018902, + "DriverCarEstLapTime": 89.3673, + "DriverSetupName": "fixed.sto", + "DriverSetupIsModified": 1, + "DriverSetupLoadTypeName": "fixed", + "DriverSetupPassedTech": 1, + "DriverIncidentCount": 0, + "DriverBrakeCurvingFactor": 0.001, + "DriverTires": [ + { + "TireIndex": 0, + "TireCompoundType": "Hard" + }, + { + "TireIndex": 1, + "TireCompoundType": "Wet" + } + ], + "Drivers": [ + { + "CarIdx": 0, + "UserName": "Pace Car", + "AbbrevName": null, + "Initials": null, + "UserID": -1, + "TeamID": 0, + "TeamName": "Pace Car", + "CarNumber": "0", + "CarNumberRaw": 0, + "CarPath": "safety pcporsche911cup", + "CarClassID": 11, + "CarID": 108, + "CarIsPaceCar": 1, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "safety pcporsche911cup", + "CarScreenNameShort": "safety pcporsche911cup", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": null, + "CarClassRelSpeed": 0, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "1.000 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 0, + "CarClassEstLapTime": 95.7478, + "IRating": 0, + "LicLevel": 1, + "LicSubLevel": 0, + "LicString": "R 0.00", + "LicColor": 16777215, + "IsSpectator": 0, + "CarDesignStr": "0,ffffff,ffffff,ffffff", + "HelmetDesignStr": "0,ffffff,ffffff,ffffff", + "SuitDesignStr": "0,ffffff,ffffff,ffffff", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,ffffff,ffffff", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "-none-", + "FlairID": 0, + "DivisionName": "Division 1", + "DivisionID": 0, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 1, + "UserName": "Théo Bardet", + "AbbrevName": "Bardet, T", + "Initials": "TB", + "UserID": 833104, + "TeamID": 0, + "TeamName": "Théo Bardet", + "CarNumber": "17", + "CarNumberRaw": 17, + "CarPath": "porsche963gtp", + "CarClassID": 4029, + "CarID": 174, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 963 GTP", + "CarScreenNameShort": "Porsche 963", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.4249, + "IRating": 1743, + "LicLevel": 17, + "LicSubLevel": 160, + "LicString": "A 1.60", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "3,ff0000,00ff00,0000ff", + "HelmetDesignStr": "0,372a75,f1732e,faff00", + "SuitDesignStr": "6,7f07c9,fffb00,fff500", + "BodyType": 1, + "FaceType": 8, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "France", + "FlairID": 71, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 2, + "UserName": "Ethan Rauscher", + "AbbrevName": "Rauscher, E", + "Initials": "ER", + "UserID": 1216093, + "TeamID": 0, + "TeamName": "Ethan Rauscher", + "CarNumber": "24", + "CarNumberRaw": 24, + "CarPath": "porsche963gtp", + "CarClassID": 4029, + "CarID": 174, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 963 GTP", + "CarScreenNameShort": "Porsche 963", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.4249, + "IRating": 1535, + "LicLevel": 20, + "LicSubLevel": 472, + "LicString": "A 4.72", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "2,ff0000,00ff00,0000ff", + "HelmetDesignStr": "36,000031,f7ff36,ffffff", + "SuitDesignStr": "32,000000,000000,000000", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 9", + "DivisionID": 8, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 3, + "UserName": "Joshua D Sutherland", + "AbbrevName": "Sutherland, J", + "Initials": "JS", + "UserID": 612076, + "TeamID": 0, + "TeamName": "Joshua D Sutherland", + "CarNumber": "26", + "CarNumberRaw": 26, + "CarPath": "cadillacvseriesrgtp", + "CarClassID": 4029, + "CarID": 168, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Cadillac V-Series.R", + "CarScreenNameShort": "Cadillac V-Series.R", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.7844, + "IRating": 1521, + "LicLevel": 18, + "LicSubLevel": 225, + "LicString": "A 2.25", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "3,ff0000,00ff00,0000ff", + "HelmetDesignStr": "2,fc0706,ffffff,111111", + "SuitDesignStr": "1,000000,ffffff,111111", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 4, + "UserName": "Hmud Ayed", + "AbbrevName": "Ayed, H", + "Initials": "HA", + "UserID": 1153359, + "TeamID": 0, + "TeamName": "Hmud Ayed", + "CarNumber": "29", + "CarNumberRaw": 29, + "CarPath": "ferrari499p", + "CarClassID": 4029, + "CarID": 196, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 499P", + "CarScreenNameShort": "Ferrari 499P", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.0358, + "IRating": 1451, + "LicLevel": 17, + "LicSubLevel": 178, + "LicString": "A 1.78", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff", + "HelmetDesignStr": "1,0a0a0a,f26522,00aeef", + "SuitDesignStr": "1,0a0a0a,f26522,00aeef", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Saudi Arabia", + "FlairID": 185, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 5, + "UserName": "Felipe Fernandes9", + "AbbrevName": "Fernandes9, F", + "Initials": "FF", + "UserID": 1153536, + "TeamID": 0, + "TeamName": "Felipe Fernandes9", + "CarNumber": "30", + "CarNumberRaw": 30, + "CarPath": "bmwlmdh", + "CarClassID": 4029, + "CarID": 159, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "BMW M Hybrid V8", + "CarScreenNameShort": "BMW M Hybrid V8", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.4799, + "IRating": 1370, + "LicLevel": 19, + "LicSubLevel": 336, + "LicString": "A 3.36", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff", + "HelmetDesignStr": "42,b4d511,3d8c13,0a4fff", + "SuitDesignStr": "2,575757,000000,000000", + "BodyType": 1, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,000000,ffffff", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 8", + "DivisionID": 7, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 6, + "UserName": "Cody J Deering", + "AbbrevName": "Deering, C", + "Initials": "CD", + "UserID": 981884, + "TeamID": 0, + "TeamName": "Cody J Deering", + "CarNumber": "31", + "CarNumberRaw": 31, + "CarPath": "cadillacvseriesrgtp", + "CarClassID": 4029, + "CarID": 168, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Cadillac V-Series.R", + "CarScreenNameShort": "Cadillac V-Series.R", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.7844, + "IRating": 1369, + "LicLevel": 19, + "LicSubLevel": 362, + "LicString": "A 3.62", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "14,111111,ffffff,f06e34", + "HelmetDesignStr": "56,111111,ffffff,c4ff00", + "SuitDesignStr": "25,111111,ffffff,c8f807", + "BodyType": 0, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 6", + "DivisionID": 5, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 7, + "UserName": "Patrice Mas", + "AbbrevName": "Mas, P", + "Initials": "PM", + "UserID": 762583, + "TeamID": 0, + "TeamName": "Patrice Mas", + "CarNumber": "35", + "CarNumberRaw": 35, + "CarPath": "porsche963gtp", + "CarClassID": 4029, + "CarID": 174, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 963 GTP", + "CarScreenNameShort": "Porsche 963", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.4249, + "IRating": 1260, + "LicLevel": 17, + "LicSubLevel": 175, + "LicString": "A 1.75", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff", + "HelmetDesignStr": "48,f00000,ffffff,a91919", + "SuitDesignStr": "25,e00202,ffffff,832121", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,777777,ffffff,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "France", + "FlairID": 71, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 8, + "UserName": "Anderson Garcia2", + "AbbrevName": "Garcia2, A", + "Initials": "AG", + "UserID": 1191928, + "TeamID": 0, + "TeamName": "Anderson Garcia2", + "CarNumber": "38", + "CarNumberRaw": 38, + "CarPath": "cadillacvseriesrgtp", + "CarClassID": 4029, + "CarID": 168, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Cadillac V-Series.R", + "CarScreenNameShort": "Cadillac V-Series.R", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.7844, + "IRating": 1150, + "LicLevel": 17, + "LicSubLevel": 162, + "LicString": "A 1.62", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff;e9ec09", + "HelmetDesignStr": "1,3f2eda,f0f4e9,3d4cd8", + "SuitDesignStr": "22,ededef,022a79,0f0273", + "BodyType": 1, + "FaceType": 6, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,1f0909,0e0101,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 9, + "UserName": "Bill Gillean", + "AbbrevName": "Gillean, B", + "Initials": "BG", + "UserID": 967848, + "TeamID": 0, + "TeamName": "Bill Gillean", + "CarNumber": "41", + "CarNumberRaw": 41, + "CarPath": "porsche963gtp", + "CarClassID": 4029, + "CarID": 174, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 963 GTP", + "CarScreenNameShort": "Porsche 963", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "GTP", + "CarClassRelSpeed": 179, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16767577, + "CarClassEstLapTime": 81.4249, + "IRating": 871, + "LicLevel": 18, + "LicSubLevel": 275, + "LicString": "A 2.75", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "18,2a3795,00f7ff,a8a8a8", + "HelmetDesignStr": "55,2a3795,00f7ff,a8a8a8", + "SuitDesignStr": "29,2a3795,00f7ff,a8a8a8", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 10, + "UserName": "Lourens Verbeek", + "AbbrevName": "Verbeek, L", + "Initials": "LV", + "UserID": 1058008, + "TeamID": 0, + "TeamName": "Lourens Verbeek", + "CarNumber": "1", + "CarNumberRaw": 1, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 2423, + "LicLevel": 19, + "LicSubLevel": 316, + "LicString": "A 3.16", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "4,ff0000,ffffff,1c00ff", + "HelmetDesignStr": "20,ff0000,ffffff,1c00ff", + "SuitDesignStr": "31,9105ff,000000,ffffff", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Netherlands", + "FlairID": 146, + "DivisionName": "Division 3", + "DivisionID": 2, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 11, + "UserName": "Victor S Nascimento", + "AbbrevName": "Nascimento, V", + "Initials": "VN", + "UserID": 684481, + "TeamID": 0, + "TeamName": "Victor S Nascimento", + "CarNumber": "2", + "CarNumberRaw": 2, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 2278, + "LicLevel": 20, + "LicSubLevel": 469, + "LicString": "A 4.69", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "8,000000,000000,000000", + "HelmetDesignStr": "18,000000,000000,000000", + "SuitDesignStr": "1,000000,000000,ffffff", + "BodyType": 1, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 12, + "UserName": "Aden Myburgh3", + "AbbrevName": "Myburgh3, A", + "Initials": "AM", + "UserID": 1017811, + "TeamID": 0, + "TeamName": "Aden Myburgh3", + "CarNumber": "4", + "CarNumberRaw": 4, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 2177, + "LicLevel": 20, + "LicSubLevel": 457, + "LicString": "A 4.57", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "5,6a0000,000000,ff0000;000000", + "HelmetDesignStr": "1,ffffff,111111,f06e34", + "SuitDesignStr": "6,000000,ff0000,000000", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,ff0000,ff6a6a", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "South Africa", + "FlairID": 195, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 13, + "UserName": "Héctor Pérez3", + "AbbrevName": "Pérez3, H", + "Initials": "HP", + "UserID": 1065668, + "TeamID": 0, + "TeamName": "Héctor Pérez3", + "CarNumber": "6", + "CarNumberRaw": 6, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 2064, + "LicLevel": 20, + "LicSubLevel": 403, + "LicString": "A 4.03", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "16,c334ed,eff407,000000", + "HelmetDesignStr": "32,c334ed,eff407,000000", + "SuitDesignStr": "1,eeebe8,ffffff,000000", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Spain", + "FlairID": 198, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 14, + "UserName": "CJ Jennings", + "AbbrevName": "Jennings, C", + "Initials": "CJ", + "UserID": 1052893, + "TeamID": 0, + "TeamName": "CJ Jennings", + "CarNumber": "11", + "CarNumberRaw": 11, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1958, + "LicLevel": 18, + "LicSubLevel": 245, + "LicString": "A 2.45", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "19,490684,ffffff,000000", + "HelmetDesignStr": "56,490684,ffffff,000000", + "SuitDesignStr": "20,4a0c87,000000,ffffff", + "BodyType": 0, + "FaceType": 8, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 15, + "UserName": "Michael Donovan5", + "AbbrevName": "Donovan5, M", + "Initials": "MD", + "UserID": 1160834, + "TeamID": 0, + "TeamName": "Michael Donovan5", + "CarNumber": "12", + "CarNumberRaw": 12, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1942, + "LicLevel": 18, + "LicSubLevel": 247, + "LicString": "A 2.47", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "20,000000,e300cc,000000", + "HelmetDesignStr": "9,000000,e300cc,000000", + "SuitDesignStr": "1,2a3795,ed2129,ffffff", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 16, + "UserName": "Ethan Konicek", + "AbbrevName": "Konicek, E", + "Initials": "EK", + "UserID": 1081274, + "TeamID": 0, + "TeamName": "Ethan Konicek", + "CarNumber": "18", + "CarNumberRaw": 18, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1687, + "LicLevel": 19, + "LicSubLevel": 356, + "LicString": "A 3.56", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "10,e60505,000000,717171,000000", + "HelmetDesignStr": "9,e60505,000000,717171", + "SuitDesignStr": "18,ff0000,000000,8d8d8d", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Kazakhstan", + "FlairID": 107, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 17, + "UserName": "Adrian Rutkowski3", + "AbbrevName": "Rutkowski3, A", + "Initials": "AR", + "UserID": 649119, + "TeamID": 0, + "TeamName": "Adrian Rutkowski3", + "CarNumber": "20", + "CarNumberRaw": 20, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1628, + "LicLevel": 19, + "LicSubLevel": 347, + "LicString": "A 3.47", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "15,391c83,111111,ccff00", + "HelmetDesignStr": "1,391c83,111111,ccff00", + "SuitDesignStr": "1,391c83,111111,ccff00", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Poland", + "FlairID": 167, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 18, + "UserName": "Guillermo Pérez", + "AbbrevName": "Pérez, G", + "Initials": "GP", + "UserID": 975467, + "TeamID": 0, + "TeamName": "Guillermo Pérez", + "CarNumber": "25", + "CarNumberRaw": 25, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1534, + "LicLevel": 19, + "LicSubLevel": 330, + "LicString": "A 3.30", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "13,ffffff,1f8227,b71c1c", + "HelmetDesignStr": "28,ffffff,1f8227,b71c1c", + "SuitDesignStr": "1,111111,03bbbd,184252", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Mexico", + "FlairID": 134, + "DivisionName": "Division 8", + "DivisionID": 7, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 19, + "UserName": "Shaun Odell", + "AbbrevName": "Odell, S", + "Initials": "SO", + "UserID": 1207580, + "TeamID": 0, + "TeamName": "Shaun Odell", + "CarNumber": "28", + "CarNumberRaw": 28, + "CarPath": "dallarap217", + "CarClassID": 2523, + "CarID": 128, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Dallara P217 LMP2", + "CarScreenNameShort": "Dallara P217 LMP2", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "Dallara P217", + "CarClassRelSpeed": 150, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.680 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 3395327, + "CarClassEstLapTime": 83.2432, + "IRating": 1489, + "LicLevel": 17, + "LicSubLevel": 138, + "LicString": "A 1.38", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ffffff,85b1ff,ff5555", + "HelmetDesignStr": "48,006bc2,ffcf00,52f5ff", + "SuitDesignStr": "35,000000,ffffff,000000", + "BodyType": 0, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 20, + "UserName": "Murilo Szczypior", + "AbbrevName": "Szczypior, M", + "Initials": "MS", + "UserID": 1175510, + "TeamID": 0, + "TeamName": "Murilo Szczypior", + "CarNumber": "3", + "CarNumberRaw": 3, + "CarPath": "mclaren720sgt3", + "CarClassID": 4011, + "CarID": 188, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "McLaren 720S GT3 EVO", + "CarScreenNameShort": "McLaren 720S GT3 EVO", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.0997, + "IRating": 2213, + "LicLevel": 18, + "LicSubLevel": 237, + "LicString": "A 2.37", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "24,75d417,d8f111,000000", + "HelmetDesignStr": "68,75d417,d8f111,000000", + "SuitDesignStr": "5,adec0e,080808,ecefe8", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 3", + "DivisionID": 2, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 21, + "UserName": "Bruno Lazzarotto", + "AbbrevName": "Lazzarotto, B", + "Initials": "BL", + "UserID": 1031136, + "TeamID": 0, + "TeamName": "Bruno Lazzarotto", + "CarNumber": "5", + "CarNumberRaw": 5, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 2155, + "LicLevel": 18, + "LicSubLevel": 224, + "LicString": "A 2.24", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "0,2a3795,ed2129,ffffff,232222", + "HelmetDesignStr": "0,111111,184252,bd0904", + "SuitDesignStr": "1,111111,184252,f90c0c", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 3", + "DivisionID": 2, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 22, + "UserName": "Christian Clifford", + "AbbrevName": "Clifford, C", + "Initials": "CC", + "UserID": 982239, + "TeamID": 0, + "TeamName": "Christian Clifford", + "CarNumber": "7", + "CarNumberRaw": 7, + "CarPath": "porsche992rgt3", + "CarClassID": 4011, + "CarID": 169, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 911 GT3 R (992)", + "CarScreenNameShort": "Porsche 911 GT3 R (992)", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.4585, + "IRating": 2019, + "LicLevel": 19, + "LicSubLevel": 348, + "LicString": "A 3.48", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "22,e1b0c2,eeeeee,010c56,aca9a3", + "HelmetDesignStr": "27,010c56,e1b0c2,eeeeee", + "SuitDesignStr": "30,e1b0c2,010c56,eeeeee", + "BodyType": 0, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "14,4,000000,d8b5be,ffffff", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 23, + "UserName": "Franklin Akutsu", + "AbbrevName": "Akutsu, F", + "Initials": "FA", + "UserID": 1116951, + "TeamID": 0, + "TeamName": "Franklin Akutsu", + "CarNumber": "8", + "CarNumberRaw": 8, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 2007, + "LicLevel": 18, + "LicSubLevel": 223, + "LicString": "A 2.23", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "2,ff0000,00ff00,0000ff,000000", + "HelmetDesignStr": "64,ffffff,ffffff,4e4e4e", + "SuitDesignStr": "3,ffffff,4e4e4e,4e4e4e", + "BodyType": 1, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,000000,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 24, + "UserName": "Lukas Kern", + "AbbrevName": "Kern, L", + "Initials": "LK", + "UserID": 1091420, + "TeamID": 0, + "TeamName": "Lukas Kern", + "CarNumber": "9", + "CarNumberRaw": 9, + "CarPath": "porsche992rgt3", + "CarClassID": 4011, + "CarID": 169, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 911 GT3 R (992)", + "CarScreenNameShort": "Porsche 911 GT3 R (992)", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.4585, + "IRating": 1972, + "LicLevel": 18, + "LicSubLevel": 238, + "LicString": "A 2.38", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "18,000765,bdff00,000765.bdff00", + "HelmetDesignStr": "56,000765,bdff00,ff0000", + "SuitDesignStr": "22,000765,bdff00,ff0000", + "BodyType": 1, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 198, + "CarSponsor_2": 46, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Germany", + "FlairID": 77, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 25, + "UserName": "Benjamin Crovari", + "AbbrevName": "Crovari, B", + "Initials": "BC", + "UserID": 285783, + "TeamID": 0, + "TeamName": "Benjamin Crovari", + "CarNumber": "10", + "CarNumberRaw": 10, + "CarPath": "mclaren720sgt3", + "CarClassID": 4011, + "CarID": 188, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "McLaren 720S GT3 EVO", + "CarScreenNameShort": "McLaren 720S GT3 EVO", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.0997, + "IRating": 1965, + "LicLevel": 18, + "LicSubLevel": 248, + "LicString": "A 2.48", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "15,ffffff,ffffff,ffffff,e5ff00", + "HelmetDesignStr": "49,ffffff,ffffff,ffffff", + "SuitDesignStr": "15,2e3af1,ffffff,18211c", + "BodyType": 0, + "FaceType": 10, + "HelmetType": 0, + "CarNumberDesignStr": "11,2,ffffff,000000,ffffff", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Chile", + "FlairID": 44, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 26, + "UserName": "Hugo Alexandre Lopes", + "AbbrevName": "Lopes, H", + "Initials": "HL", + "UserID": 1233799, + "TeamID": 0, + "TeamName": "Hugo Alexandre Lopes", + "CarNumber": "13", + "CarNumberRaw": 13, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 1864, + "LicLevel": 20, + "LicSubLevel": 408, + "LicString": "A 4.08", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff", + "HelmetDesignStr": "25,000000,fc0000,ffffff", + "SuitDesignStr": "1,000000,ffffff,fc0000", + "BodyType": 0, + "FaceType": 2, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Portugal", + "FlairID": 168, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 27, + "UserName": "Edgars Pojasnikovs", + "AbbrevName": "Pojasnikovs, E", + "Initials": "EP", + "UserID": 1131042, + "TeamID": 0, + "TeamName": "Edgars Pojasnikovs", + "CarNumber": "14", + "CarNumberRaw": 14, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 1786, + "LicLevel": 18, + "LicSubLevel": 268, + "LicString": "A 2.68", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "20,ffed00,ff0000,000000", + "HelmetDesignStr": "1,000000,ffe100,000000", + "SuitDesignStr": "12,ffe100,000000,ffe100", + "BodyType": 1, + "FaceType": 8, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Latvia", + "FlairID": 113, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 28, + "UserName": "Heitor Mancini", + "AbbrevName": "Mancini, H", + "Initials": "HM", + "UserID": 1015217, + "TeamID": 0, + "TeamName": "Heitor Mancini", + "CarNumber": "15", + "CarNumberRaw": 15, + "CarPath": "mercedesamgevogt3", + "CarClassID": 4011, + "CarID": 156, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Mercedes-AMG GT3 2020", + "CarScreenNameShort": "Mercedes GT3 2020", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.2412, + "IRating": 1753, + "LicLevel": 18, + "LicSubLevel": 233, + "LicString": "A 2.33", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "23,031298,d7f67f,ffc700", + "HelmetDesignStr": "28,031298,d7f67f,ffc700", + "SuitDesignStr": "34,0c31f5,ffbf00,000000", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "37,4,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 4", + "DivisionID": 3, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 29, + "UserName": "Wesley Johnson5", + "AbbrevName": "Johnson5, W", + "Initials": "WJ", + "UserID": 292881, + "TeamID": 0, + "TeamName": "Wesley Johnson5", + "CarNumber": "16", + "CarNumberRaw": 16, + "CarPath": "acuransxevo22gt3", + "CarClassID": 4011, + "CarID": 194, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Acura NSX GT3 EVO 22", + "CarScreenNameShort": "Acura NSX GT3 EVO 22", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 88.5465, + "IRating": 1751, + "LicLevel": 20, + "LicSubLevel": 447, + "LicString": "A 4.47", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "17,42ff00,ffffff,000000", + "HelmetDesignStr": "8,42ff00,ffffff,000000", + "SuitDesignStr": "30,000000,33ff00,000000", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 30, + "UserName": "Blake Hart", + "AbbrevName": "Hart, B", + "Initials": "BH", + "UserID": 18777, + "TeamID": 0, + "TeamName": "Blake Hart", + "CarNumber": "19", + "CarNumberRaw": 19, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 1629, + "LicLevel": 18, + "LicSubLevel": 226, + "LicString": "A 2.26", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "21,fd3f05,031adc,ffffff", + "HelmetDesignStr": "49,fd3f05,031adc,ffffff", + "SuitDesignStr": "17,e43500,031adc,ffffff", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 31, + "UserName": "Luis M Ferreira", + "AbbrevName": "Ferreira, L", + "Initials": "LF", + "UserID": 1097598, + "TeamID": 0, + "TeamName": "Luis M Ferreira", + "CarNumber": "21", + "CarNumberRaw": 21, + "CarPath": "mclaren720sgt3", + "CarClassID": 4011, + "CarID": 188, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "McLaren 720S GT3 EVO", + "CarScreenNameShort": "McLaren 720S GT3 EVO", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.0997, + "IRating": 1611, + "LicLevel": 18, + "LicSubLevel": 229, + "LicString": "A 2.29", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "7,000000,000000,111111;ff0000", + "HelmetDesignStr": "1,000000,000000,111111", + "SuitDesignStr": "1,000000,000000,111111", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "33,1,ff0000,060600,d1ff05", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Portugal", + "FlairID": 168, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 32, + "UserName": "Mirko Mastrangelo", + "AbbrevName": "Mastrangelo, M", + "Initials": "MM", + "UserID": 1188732, + "TeamID": 0, + "TeamName": "Mirko Mastrangelo", + "CarNumber": "22", + "CarNumberRaw": 22, + "CarPath": "mclaren720sgt3", + "CarClassID": 4011, + "CarID": 188, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "McLaren 720S GT3 EVO", + "CarScreenNameShort": "McLaren 720S GT3 EVO", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.0997, + "IRating": 1585, + "LicLevel": 20, + "LicSubLevel": 422, + "LicString": "A 4.22", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "3,ff0000,00ff00,0000ff,000000", + "HelmetDesignStr": "56,dbff00,006eff,000000", + "SuitDesignStr": "33,000000,0342ff,d4ff00", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "53,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Italy", + "FlairID": 101, + "DivisionName": "Division 6", + "DivisionID": 5, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 33, + "UserName": "Edison Toole", + "AbbrevName": "Toole, E", + "Initials": "ET", + "UserID": 750771, + "TeamID": 0, + "TeamName": "Edison Toole", + "CarNumber": "23", + "CarNumberRaw": 23, + "CarPath": "porsche992rgt3", + "CarClassID": 4011, + "CarID": 169, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 911 GT3 R (992)", + "CarScreenNameShort": "Porsche 911 GT3 R (992)", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.4585, + "IRating": 1546, + "LicLevel": 17, + "LicSubLevel": 146, + "LicString": "A 1.46", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "1,ff0000,00ff00,0000ff;52f23b", + "HelmetDesignStr": "19,000000,ff0000,fffc00", + "SuitDesignStr": "35,000000,ff0000,e0b600", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 6", + "DivisionID": 5, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 34, + "UserName": "Paul Hilliard", + "AbbrevName": "Hilliard, P", + "Initials": "PH", + "UserID": 1204802, + "TeamID": 0, + "TeamName": "Paul Hilliard", + "CarNumber": "27", + "CarNumberRaw": 27, + "CarPath": "porsche992rgt3", + "CarClassID": 4011, + "CarID": 169, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 911 GT3 R (992)", + "CarScreenNameShort": "Porsche 911 GT3 R (992)", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.4585, + "IRating": 1490, + "LicLevel": 19, + "LicSubLevel": 379, + "LicString": "A 3.79", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "3,097e76,01422a,00f9d3;000000", + "HelmetDesignStr": "57,a19b37,000000,37ff00", + "SuitDesignStr": "1,000000,1eda00,ed8900", + "BodyType": 0, + "FaceType": 8, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 35, + "UserName": "Andrew Merelman", + "AbbrevName": "Merelman, A", + "Initials": "AM", + "UserID": 1099804, + "TeamID": 0, + "TeamName": "Andrew Merelman", + "CarNumber": "32", + "CarNumberRaw": 32, + "CarPath": "mercedesamgevogt3", + "CarClassID": 4011, + "CarID": 156, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Mercedes-AMG GT3 2020", + "CarScreenNameShort": "Mercedes GT3 2020", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.2412, + "IRating": 1349, + "LicLevel": 18, + "LicSubLevel": 200, + "LicString": "A 2.00", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "24,000000,eeeeee,00bbff", + "HelmetDesignStr": "28,000000,eeeeee,00bbff", + "SuitDesignStr": "26,000000,eeeeee,00bbff", + "BodyType": 1, + "FaceType": 6, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 8", + "DivisionID": 7, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 36, + "UserName": "Aliffer Sarmento", + "AbbrevName": "Sarmento, A", + "Initials": "AS", + "UserID": 1050092, + "TeamID": 0, + "TeamName": "Aliffer Sarmento", + "CarNumber": "33", + "CarNumberRaw": 33, + "CarPath": "porsche992rgt3", + "CarClassID": 4011, + "CarID": 169, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Porsche 911 GT3 R (992)", + "CarScreenNameShort": "Porsche 911 GT3 R (992)", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.4585, + "IRating": 1348, + "LicLevel": 17, + "LicSubLevel": 174, + "LicString": "A 1.74", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "8,000000,540097,fdfdfd", + "HelmetDesignStr": "59,ffffff,9e00ff,000000", + "SuitDesignStr": "34,000000,ad00ff,f7f7f7", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 46, + "CarSponsor_2": 332, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 6", + "DivisionID": 5, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 37, + "UserName": "Tarik Alani", + "AbbrevName": "Alani, T", + "Initials": "TA", + "UserID": 968989, + "TeamID": 0, + "TeamName": "Tarik Alani", + "CarNumber": "34", + "CarNumberRaw": 34, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 1324, + "LicLevel": 18, + "LicSubLevel": 207, + "LicString": "A 2.07", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "7,000000,ffffff,00107c", + "HelmetDesignStr": "7,000000,ffffff,00107c", + "SuitDesignStr": "30,000000,ffffff,00015d", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "New Zealand", + "FlairID": 149, + "DivisionName": "Division 5", + "DivisionID": 4, + "CurDriverIncidentCount": 0, + "TeamIncidentCount": 0 + }, + { + "CarIdx": 38, + "UserName": "Fabio Ruhe", + "AbbrevName": "Ruhe, F", + "Initials": "FR", + "UserID": 969634, + "TeamID": 0, + "TeamName": "Fabio Ruhe", + "CarNumber": "36", + "CarNumberRaw": 36, + "CarPath": "mclaren720sgt3", + "CarClassID": 4011, + "CarID": 188, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "McLaren 720S GT3 EVO", + "CarScreenNameShort": "McLaren 720S GT3 EVO", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.0997, + "IRating": 1229, + "LicLevel": 19, + "LicSubLevel": 344, + "LicString": "A 3.44", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "23,01972b,01972b,ffffff", + "HelmetDesignStr": "1,01972b,01972b,ffffff", + "SuitDesignStr": "1,01972b,01972b,ffffff", + "BodyType": 0, + "FaceType": 4, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Brazil", + "FlairID": 31, + "DivisionName": "Division 10", + "DivisionID": 9, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 39, + "UserName": "Garrett Bainbridge", + "AbbrevName": "Bainbridge, G", + "Initials": "GB", + "UserID": 912764, + "TeamID": 0, + "TeamName": "Garrett Bainbridge", + "CarNumber": "37", + "CarNumberRaw": 37, + "CarPath": "bmwm4gt3", + "CarClassID": 4011, + "CarID": 132, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "BMW M4 GT3", + "CarScreenNameShort": "BMW M4 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.5706, + "IRating": 1197, + "LicLevel": 19, + "LicSubLevel": 320, + "LicString": "A 3.20", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "16,000000,dcee0d,33ad15", + "HelmetDesignStr": "10,000000,dcee0d,33ad15", + "SuitDesignStr": "3,33ad15,000000,dcee0d", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 9", + "DivisionID": 8, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 40, + "UserName": "Derek Dennis", + "AbbrevName": "Dennis, D", + "Initials": "DD", + "UserID": 439328, + "TeamID": 0, + "TeamName": "Derek Dennis", + "CarNumber": "39", + "CarNumberRaw": 39, + "CarPath": "chevyvettez06rgt3", + "CarClassID": 4011, + "CarID": 184, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Chevrolet Corvette Z06 GT3.R", + "CarScreenNameShort": "Corvette GT3.R", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 90.0175, + "IRating": 1149, + "LicLevel": 20, + "LicSubLevel": 461, + "LicString": "A 4.61", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "0,2a3795,ed2129,ffffff", + "HelmetDesignStr": "57,fffdfd,000000,ff1300", + "SuitDesignStr": "28,f1732e,ffffff,a3a1aa", + "BodyType": 0, + "FaceType": 0, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "United States", + "FlairID": 223, + "DivisionName": "Division 8", + "DivisionID": 7, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + }, + { + "CarIdx": 41, + "UserName": "Daniel Buhler", + "AbbrevName": "Buhler, D", + "Initials": "DB", + "UserID": 636976, + "TeamID": 0, + "TeamName": "Daniel Buhler", + "CarNumber": "40", + "CarNumberRaw": 40, + "CarPath": "ferrari296gt3", + "CarClassID": 4011, + "CarID": 173, + "CarIsPaceCar": 0, + "CarIsAI": 0, + "CarIsElectric": 0, + "CarScreenName": "Ferrari 296 GT3", + "CarScreenNameShort": "Ferrari 296 GT3", + "CarCfg": -1, + "CarCfgName": null, + "CarCfgCustomPaintExt": null, + "CarClassShortName": "IMSA23", + "CarClassRelSpeed": 52, + "CarClassLicenseLevel": 0, + "CarClassMaxFuelPct": "0.500 %", + "CarClassWeightPenalty": "0.000 kg", + "CarClassPowerAdjust": "0.000 %", + "CarClassDryTireSetLimit": "0 %", + "CarClassColor": 16734344, + "CarClassEstLapTime": 89.3673, + "IRating": 1064, + "LicLevel": 17, + "LicSubLevel": 169, + "LicString": "A 1.69", + "LicColor": 87003, + "IsSpectator": 0, + "CarDesignStr": "0,d90000,ffffff,111111", + "HelmetDesignStr": "11,ff0202,ffffff,1b46b1", + "SuitDesignStr": "12,d90000,2413c2,ffffff", + "BodyType": 1, + "FaceType": 11, + "HelmetType": 0, + "CarNumberDesignStr": "0,0,ffffff,777777,000000", + "CarSponsor_1": 0, + "CarSponsor_2": 0, + "ClubName": "None", + "ClubID": 0, + "FlairName": "Thailand", + "FlairID": 208, + "DivisionName": "Division 7", + "DivisionID": 6, + "CurDriverIncidentCount": -1, + "TeamIncidentCount": -1 + } + ] + }, + "SplitTimeInfo": { + "Sectors": [ + { + "SectorNum": 0, + "SectorStartPct": 0 + }, + { + "SectorNum": 1, + "SectorStartPct": 0.278071 + }, + { + "SectorNum": 2, + "SectorStartPct": 0.431505 + }, + { + "SectorNum": 3, + "SectorStartPct": 0.609232 + }, + { + "SectorNum": 4, + "SectorStartPct": 0.725358 + } + ] + }, + "CarSetup": { + "UpdateCount": 15, + "TiresAero": { + "TireType": { + "TireType": "Dry" + }, + "LeftFront": { + "StartingPressure": "159 kPa", + "LastHotPressure": "159 kPa", + "LastTempsOMI": "35C, 35C, 35C", + "TreadRemaining": "100%, 100%, 100%" + }, + "LeftRear": { + "StartingPressure": "159 kPa", + "LastHotPressure": "159 kPa", + "LastTempsOMI": "35C, 35C, 35C", + "TreadRemaining": "100%, 100%, 100%" + }, + "RightFront": { + "StartingPressure": "159 kPa", + "LastHotPressure": "159 kPa", + "LastTempsIMO": "35C, 35C, 35C", + "TreadRemaining": "100%, 100%, 100%" + }, + "RightRear": { + "StartingPressure": "159 kPa", + "LastHotPressure": "159 kPa", + "LastTempsIMO": "35C, 35C, 35C", + "TreadRemaining": "100%, 100%, 100%" + }, + "AeroBalanceCalc": { + "FrontRhAtSpeed": "49 mm", + "RearRhAtSpeed": "53 mm", + "RearWingAngle": "10 degrees", + "FrontDownforce": "41.6%" + } + }, + "Chassis": { + "FrontBrakesLights": { + "ArbBlades": "60 degrees", + "ArbOptions": "Large", + "TotalToeIn": "-3.1 mm", + "FrontMasterCyl": "17.8 mm", + "RearMasterCyl": "19.1 mm", + "BrakePads": "Medium friction", + "EnduranceLights": "Fitted", + "NightLedStripColor": "Red", + "CenterFrontSplitterHeight": "50.5 mm" + }, + "LeftFront": { + "CornerWeight": "3367 N", + "RideHeight": "53.5 mm", + "BumpRubberGap": "10 mm", + "SpringRate": "190 N/mm", + "Camber": "-4.0 deg" + }, + "LeftRear": { + "CornerWeight": "3812 N", + "RideHeight": "62.8 mm", + "BumpRubberGap": "40 mm", + "SpringRate": "200 N/mm", + "Camber": "-3.3 deg", + "ToeIn": "+1.6 mm" + }, + "Rear": { + "FuelLevel": "52.0 L", + "ArbBlades": "15 degrees", + "ArbOptions": "Large", + "RearWingAngle": "10 degrees" + }, + "InCarAdjustments": { + "BrakePressureBias": "48.1%", + "AbsSetting": "4 (ABS)", + "TcSetting": "4 (TC1+TC2)", + "ThrottleShapeSetting": "1 (PED)", + "DashDisplayPage": "Race", + "FWtdist": "46.9%", + "CrossWeight": "50.0%" + }, + "RightFront": { + "CornerWeight": "3367 N", + "RideHeight": "53.5 mm", + "BumpRubberGap": "10 mm", + "SpringRate": "190 N/mm", + "Camber": "-4.0 deg" + }, + "RightRear": { + "CornerWeight": "3812 N", + "RideHeight": "62.8 mm", + "BumpRubberGap": "40 mm", + "SpringRate": "200 N/mm", + "Camber": "-3.3 deg", + "ToeIn": "+1.6 mm" + }, + "GearsDifferential": { + "GearStack": "FIA", + "FrictionFaces": 10, + "DiffPreload": "100 Nm" + } + }, + "Dampers": { + "FrontDampers": { + "LowSpeedCompressionDamping": "6 clicks", + "HighSpeedCompressionDamping": "6 clicks", + "LowSpeedReboundDamping": "6 clicks", + "HighSpeedReboundDamping": "6 clicks" + }, + "RearDampers": { + "LowSpeedCompressionDamping": "6 clicks", + "HighSpeedCompressionDamping": "6 clicks", + "LowSpeedReboundDamping": "6 clicks", + "HighSpeedReboundDamping": "6 clicks" + } + } + } +} \ No newline at end of file diff --git a/test-data/1752616787255/telemetry.json b/test-data/1752616787255/telemetry.json new file mode 100644 index 0000000..304646f --- /dev/null +++ b/test-data/1752616787255/telemetry.json @@ -0,0 +1,5423 @@ +{ + "SessionTime": { + "countAsTime": false, + "length": 1, + "name": "SessionTime", + "description": "Seconds since session start", + "unit": "s", + "varType": 5, + "value": [ + 164.4666666671864 + ] + }, + "SessionTick": { + "countAsTime": false, + "length": 1, + "name": "SessionTick", + "description": "Current update number", + "unit": "", + "varType": 2, + "value": [ + 74625 + ] + }, + "SessionNum": { + "countAsTime": false, + "length": 1, + "name": "SessionNum", + "description": "Session number", + "unit": "", + "varType": 2, + "value": [ + 2 + ] + }, + "SessionState": { + "countAsTime": false, + "length": 1, + "name": "SessionState", + "description": "Session state", + "unit": "irsdk_SessionState", + "varType": 2, + "value": [ + 3 + ] + }, + "SessionUniqueID": { + "countAsTime": false, + "length": 1, + "name": "SessionUniqueID", + "description": "Session ID", + "unit": "", + "varType": 2, + "value": [ + 3 + ] + }, + "SessionFlags": { + "countAsTime": false, + "length": 1, + "name": "SessionFlags", + "description": "Session flags", + "unit": "irsdk_Flags", + "varType": 3, + "value": [ + 537133568 + ] + }, + "SessionTimeRemain": { + "countAsTime": false, + "length": 1, + "name": "SessionTimeRemain", + "description": "Seconds left till session ends", + "unit": "s", + "varType": 5, + "value": [ + -1 + ] + }, + "SessionLapsRemain": { + "countAsTime": false, + "length": 1, + "name": "SessionLapsRemain", + "description": "Old laps left till session ends use SessionLapsRemainEx", + "unit": "", + "varType": 2, + "value": [ + 32767 + ] + }, + "SessionLapsRemainEx": { + "countAsTime": false, + "length": 1, + "name": "SessionLapsRemainEx", + "description": "New improved laps left till session ends", + "unit": "", + "varType": 2, + "value": [ + 32767 + ] + }, + "SessionTimeTotal": { + "countAsTime": false, + "length": 1, + "name": "SessionTimeTotal", + "description": "Total number of seconds in session", + "unit": "s", + "varType": 5, + "value": [ + 2100 + ] + }, + "SessionLapsTotal": { + "countAsTime": false, + "length": 1, + "name": "SessionLapsTotal", + "description": "Total number of laps in session", + "unit": "", + "varType": 2, + "value": [ + 32767 + ] + }, + "SessionJokerLapsRemain": { + "countAsTime": false, + "length": 1, + "name": "SessionJokerLapsRemain", + "description": "Joker laps remaining to be taken", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "SessionOnJokerLap": { + "countAsTime": false, + "length": 1, + "name": "SessionOnJokerLap", + "description": "Player is currently completing a joker lap", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "SessionTimeOfDay": { + "countAsTime": false, + "length": 1, + "name": "SessionTimeOfDay", + "description": "Time of day in seconds", + "unit": "s", + "varType": 4, + "value": [ + 32864 + ] + }, + "RadioTransmitCarIdx": { + "countAsTime": false, + "length": 1, + "name": "RadioTransmitCarIdx", + "description": "The car index of the current person speaking on the radio", + "unit": "", + "varType": 2, + "value": [ + -1 + ] + }, + "RadioTransmitRadioIdx": { + "countAsTime": false, + "length": 1, + "name": "RadioTransmitRadioIdx", + "description": "The radio index of the current person speaking on the radio", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "RadioTransmitFrequencyIdx": { + "countAsTime": false, + "length": 1, + "name": "RadioTransmitFrequencyIdx", + "description": "The frequency index of the current person speaking on the radio", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "DisplayUnits": { + "countAsTime": false, + "length": 1, + "name": "DisplayUnits", + "description": "Default units for the user interface 0 = english 1 = metric", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "DriverMarker": { + "countAsTime": false, + "length": 1, + "name": "DriverMarker", + "description": "Driver activated flag", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "PushToTalk": { + "countAsTime": false, + "length": 1, + "name": "PushToTalk", + "description": "Push to talk button state", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "PushToPass": { + "countAsTime": false, + "length": 1, + "name": "PushToPass", + "description": "Push to pass button state", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "ManualBoost": { + "countAsTime": false, + "length": 1, + "name": "ManualBoost", + "description": "Hybrid manual boost state", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "ManualNoBoost": { + "countAsTime": false, + "length": 1, + "name": "ManualNoBoost", + "description": "Hybrid manual no boost state", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "IsOnTrack": { + "countAsTime": false, + "length": 1, + "name": "IsOnTrack", + "description": "1=Car on track physics running with player in car", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "IsReplayPlaying": { + "countAsTime": false, + "length": 1, + "name": "IsReplayPlaying", + "description": "0=replay not playing 1=replay playing", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "ReplayFrameNum": { + "countAsTime": false, + "length": 1, + "name": "ReplayFrameNum", + "description": "Integer replay frame number (60 per second)", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "ReplayFrameNumEnd": { + "countAsTime": false, + "length": 1, + "name": "ReplayFrameNumEnd", + "description": "Integer replay frame number from end of tape", + "unit": "", + "varType": 2, + "value": [ + 42598 + ] + }, + "IsDiskLoggingEnabled": { + "countAsTime": false, + "length": 1, + "name": "IsDiskLoggingEnabled", + "description": "0=disk based telemetry turned off 1=turned on", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "IsDiskLoggingActive": { + "countAsTime": false, + "length": 1, + "name": "IsDiskLoggingActive", + "description": "0=disk based telemetry file not being written 1=being written", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "FrameRate": { + "countAsTime": false, + "length": 1, + "name": "FrameRate", + "description": "Average frames per second", + "unit": "fps", + "varType": 4, + "value": [ + 38.215877532958984 + ] + }, + "CpuUsageFG": { + "countAsTime": false, + "length": 1, + "name": "CpuUsageFG", + "description": "Percent of available tim fg thread took with a 1 sec avg", + "unit": "%", + "varType": 4, + "value": [ + 1.4918196201324463 + ] + }, + "GpuUsage": { + "countAsTime": false, + "length": 1, + "name": "GpuUsage", + "description": "Percent of available tim gpu took with a 1 sec avg", + "unit": "%", + "varType": 4, + "value": [ + 1.3976901769638062 + ] + }, + "ChanAvgLatency": { + "countAsTime": false, + "length": 1, + "name": "ChanAvgLatency", + "description": "Communications average latency", + "unit": "s", + "varType": 4, + "value": [ + 0.22681784629821777 + ] + }, + "ChanLatency": { + "countAsTime": false, + "length": 1, + "name": "ChanLatency", + "description": "Communications latency", + "unit": "s", + "varType": 4, + "value": [ + 0.20000000298023224 + ] + }, + "ChanQuality": { + "countAsTime": false, + "length": 1, + "name": "ChanQuality", + "description": "Communications quality", + "unit": "%", + "varType": 4, + "value": [ + 0.998978316783905 + ] + }, + "ChanPartnerQuality": { + "countAsTime": false, + "length": 1, + "name": "ChanPartnerQuality", + "description": "Partner communications quality", + "unit": "%", + "varType": 4, + "value": [ + 1 + ] + }, + "CpuUsageBG": { + "countAsTime": false, + "length": 1, + "name": "CpuUsageBG", + "description": "Percent of available tim bg thread took with a 1 sec avg", + "unit": "%", + "varType": 4, + "value": [ + 0.5510022640228271 + ] + }, + "ChanClockSkew": { + "countAsTime": false, + "length": 1, + "name": "ChanClockSkew", + "description": "Communications server clock skew", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "MemPageFaultSec": { + "countAsTime": false, + "length": 1, + "name": "MemPageFaultSec", + "description": "Memory page faults per second", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "MemSoftPageFaultSec": { + "countAsTime": false, + "length": 1, + "name": "MemSoftPageFaultSec", + "description": "Memory soft page faults per second", + "unit": "", + "varType": 4, + "value": [ + 18231 + ] + }, + "PlayerCarPosition": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarPosition", + "description": "Players position in race", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarClassPosition": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarClassPosition", + "description": "Players class position in race", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarClass": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarClass", + "description": "Player car class id", + "unit": "", + "varType": 2, + "value": [ + 4011 + ] + }, + "PlayerTrackSurface": { + "countAsTime": false, + "length": 1, + "name": "PlayerTrackSurface", + "description": "Players car track surface type", + "unit": "irsdk_TrkLoc", + "varType": 2, + "value": [ + 3 + ] + }, + "PlayerTrackSurfaceMaterial": { + "countAsTime": false, + "length": 1, + "name": "PlayerTrackSurfaceMaterial", + "description": "Players car track surface material type", + "unit": "irsdk_TrkSurf", + "varType": 2, + "value": [ + 1 + ] + }, + "PlayerCarIdx": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarIdx", + "description": "Players carIdx", + "unit": "", + "varType": 2, + "value": [ + 37 + ] + }, + "PlayerCarTeamIncidentCount": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarTeamIncidentCount", + "description": "Players team incident count for this session", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarMyIncidentCount": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarMyIncidentCount", + "description": "Players own incident count for this session", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarDriverIncidentCount": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarDriverIncidentCount", + "description": "Teams current drivers incident count for this session", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarWeightPenalty": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarWeightPenalty", + "description": "Players weight penalty", + "unit": "kg", + "varType": 4, + "value": [ + 0 + ] + }, + "PlayerCarPowerAdjust": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarPowerAdjust", + "description": "Players power adjust", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "PlayerCarDryTireSetLimit": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarDryTireSetLimit", + "description": "Players dry tire set limit", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerCarTowTime": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarTowTime", + "description": "Players car is being towed if time is greater than zero", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "PlayerCarInPitStall": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarInPitStall", + "description": "Players car is properly in their pitstall", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "PlayerCarPitSvStatus": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarPitSvStatus", + "description": "Players car pit service status bits", + "unit": "irsdk_PitSvStatus", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerTireCompound": { + "countAsTime": false, + "length": 1, + "name": "PlayerTireCompound", + "description": "Players car current tire compound", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "PlayerFastRepairsUsed": { + "countAsTime": false, + "length": 1, + "name": "PlayerFastRepairsUsed", + "description": "Players car number of fast repairs used", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "CarIdxLap": { + "countAsTime": false, + "length": 64, + "name": "CarIdxLap", + "description": "Laps started by car index", + "unit": "", + "varType": 2, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxLapCompleted": { + "countAsTime": false, + "length": 64, + "name": "CarIdxLapCompleted", + "description": "Laps completed by car index", + "unit": "", + "varType": 2, + "value": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxLapDistPct": { + "countAsTime": false, + "length": 64, + "name": "CarIdxLapDistPct", + "description": "Percentage distance around lap by car index", + "unit": "%", + "varType": 4, + "value": [ + 0.6157527565956116, + 0.5998480916023254, + 0.6096497178077698, + 0.606037974357605, + 0.5923144817352295, + 0.5922114253044128, + 0.5727160573005676, + 0.5982801914215088, + 0.5848683714866638, + 0.568743884563446, + 0.5011778473854065, + 0.48939138650894165, + 0.05211706459522247, + 0.48205462098121643, + 0.5037395358085632, + 0.495958149433136, + 0.4917910397052765, + -1, + 0.46847108006477356, + 0.4964464604854584, + 0.43347659707069397, + 0.45296210050582886, + 0.44972822070121765, + 0.4707780182361603, + 0.43348759412765503, + 0.43159180879592896, + 0.4315689504146576, + 0.44264230132102966, + 0.4394476115703583, + -1, + 0.42966118454933167, + 0.44526800513267517, + 0.42978402972221375, + 0.42790675163269043, + 0.44091856479644775, + 0.43590623140335083, + 0.46071040630340576, + 0.4353986382484436, + 0.42590898275375366, + 0.4259645938873291, + 0.4240149259567261, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxTrackSurface": { + "countAsTime": false, + "length": 64, + "name": "CarIdxTrackSurface", + "description": "Track surface type by car index", + "unit": "irsdk_TrkLoc", + "varType": 2, + "value": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 1, + 3, + 3, + 3, + 3, + -1, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + -1, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxTrackSurfaceMaterial": { + "countAsTime": false, + "length": 64, + "name": "CarIdxTrackSurfaceMaterial", + "description": "Track surface material type by car index", + "unit": "irsdk_TrkSurf", + "varType": 2, + "value": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 5, + 1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxOnPitRoad": { + "countAsTime": false, + "length": 64, + "name": "CarIdxOnPitRoad", + "description": "On pit road between the cones by car index", + "unit": "", + "varType": 1, + "value": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + true, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "CarIdxPosition": { + "countAsTime": false, + "length": 64, + "name": "CarIdxPosition", + "description": "Cars position in race by car index", + "unit": "", + "varType": 2, + "value": [ + 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, + 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 + ] + }, + "CarIdxClassPosition": { + "countAsTime": false, + "length": 64, + "name": "CarIdxClassPosition", + "description": "Cars class position in race by car index", + "unit": "", + "varType": 2, + "value": [ + 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, + 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 + ] + }, + "CarIdxClass": { + "countAsTime": false, + "length": 64, + "name": "CarIdxClass", + "description": "Cars class id by car index", + "unit": "", + "varType": 2, + "value": [ + 11, + 4029, + 4029, + 4029, + 4029, + 4029, + 4029, + 4029, + 4029, + 4029, + 2523, + 2523, + 2523, + 2523, + 2523, + 2523, + 2523, + 2523, + 2523, + 2523, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + 4011, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4011 + ] + }, + "CarIdxF2Time": { + "countAsTime": false, + "length": 64, + "name": "CarIdxF2Time", + "description": "Race time behind leader or fastest lap time otherwise", + "unit": "s", + "varType": 4, + "value": [ + 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, + 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 + ] + }, + "CarIdxEstTime": { + "countAsTime": false, + "length": 64, + "name": "CarIdxEstTime", + "description": "Estimated time to reach current location on track", + "unit": "s", + "varType": 4, + "value": [ + 59.71072769165039, + 49.419471740722656, + 50.28829574584961, + 50.151512145996094, + 48.6306037902832, + 48.67388153076172, + 46.23629379272461, + 49.270263671875, + 47.93666458129883, + 45.52106475830078, + 38.35770797729492, + 37.323699951171875, + 2.924497604370117, + 36.65300369262695, + 38.57279586791992, + 37.910648345947266, + 37.54115676879883, + 0, + 35.54023742675781, + 37.95301818847656, + 35.6782112121582, + 37.141326904296875, + 37.352542877197266, + 38.58738327026367, + 36.20934295654297, + 35.544837951660156, + 35.64521408081055, + 36.4227180480957, + 36.563636779785156, + 0, + 35.509796142578125, + 36.503639221191406, + 35.416507720947266, + 35.8101806640625, + 36.73476028442383, + 36.31155776977539, + 38.19721603393555, + 35.91572189331055, + 35.140052795410156, + 35.315162658691406, + 35.33525466918945, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "CarIdxLastLapTime": { + "countAsTime": false, + "length": 64, + "name": "CarIdxLastLapTime", + "description": "Cars last lap time", + "unit": "s", + "varType": 4, + "value": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxBestLapTime": { + "countAsTime": false, + "length": 64, + "name": "CarIdxBestLapTime", + "description": "Cars best lap time", + "unit": "s", + "varType": 4, + "value": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxBestLapNum": { + "countAsTime": false, + "length": 64, + "name": "CarIdxBestLapNum", + "description": "Cars best lap number", + "unit": "", + "varType": 2, + "value": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxTireCompound": { + "countAsTime": false, + "length": 64, + "name": "CarIdxTireCompound", + "description": "Cars current tire compound", + "unit": "", + "varType": 2, + "value": [ + -1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + -1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + -1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxQualTireCompound": { + "countAsTime": false, + "length": 64, + "name": "CarIdxQualTireCompound", + "description": "Cars Qual tire compound", + "unit": "", + "varType": 2, + "value": [ + -1, + -1, + 1, + 0, + -1, + -1, + -1, + 1, + -1, + -1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + 1, + 1, + 0, + -1, + -1, + 1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + 1, + 1, + 0, + -1, + -1, + -1, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxQualTireCompoundLocked": { + "countAsTime": false, + "length": 64, + "name": "CarIdxQualTireCompoundLocked", + "description": "Cars Qual tire compound is locked-in", + "unit": "", + "varType": 1, + "value": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "CarIdxFastRepairsUsed": { + "countAsTime": false, + "length": 64, + "name": "CarIdxFastRepairsUsed", + "description": "How many fast repairs each car has used", + "unit": "", + "varType": 2, + "value": [ + 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, + 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 + ] + }, + "CarIdxSessionFlags": { + "countAsTime": false, + "length": 64, + "name": "CarIdxSessionFlags", + "description": "Session flags for each player", + "unit": "irsdk_Flags", + "varType": 3, + "value": [ + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 0, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 0, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 262144, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "PaceMode": { + "countAsTime": false, + "length": 1, + "name": "PaceMode", + "description": "Are we pacing or not", + "unit": "irsdk_PaceMode", + "varType": 2, + "value": [ + 1 + ] + }, + "CarIdxPaceLine": { + "countAsTime": false, + "length": 64, + "name": "CarIdxPaceLine", + "description": "What line cars are pacing in or -1 if not pacing", + "unit": "", + "varType": 2, + "value": [ + -1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + -1, + 0, + 0, + 0, + 0, + -1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + -1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxPaceRow": { + "countAsTime": false, + "length": 64, + "name": "CarIdxPaceRow", + "description": "What row cars are pacing in or -1 if not pacing", + "unit": "", + "varType": 2, + "value": [ + -1, + 1, + 0, + 0, + 2, + 2, + 3, + 1, + 3, + 4, + 4, + 6, + -1, + 8, + 5, + 6, + 7, + -1, + 7, + 5, + 13, + 10, + 9, + 9, + 14, + 15, + 14, + 10, + 11, + -1, + 15, + 11, + 16, + 16, + 12, + 13, + 8, + 12, + 17, + 17, + 18, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxPaceFlags": { + "countAsTime": false, + "length": 64, + "name": "CarIdxPaceFlags", + "description": "Pacing status flags for each car", + "unit": "irsdk_PaceFlags", + "varType": 3, + "value": [ + 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, + 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 + ] + }, + "OnPitRoad": { + "countAsTime": false, + "length": 1, + "name": "OnPitRoad", + "description": "Is the player car on pit road between the cones", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "CarIdxSteer": { + "countAsTime": false, + "length": 64, + "name": "CarIdxSteer", + "description": "Steering wheel angle by car index", + "unit": "rad", + "varType": 4, + "value": [ + -0.4360554814338684, + -0.19337686896324158, + -0.21748945116996765, + 1.4462215900421143, + 0.07923811674118042, + -0.03902451694011688, + 1.4601343870162964, + -0.3705190420150757, + 1.9216386079788208, + 1.9287176132202148, + -1.2088749408721924, + -0.8465180993080139, + 7.416278435812274e-8, + -0.5722006559371948, + -1.1515082120895386, + -0.7419734001159668, + -0.6626843214035034, + 0, + -0.930095911026001, + -0.554693877696991, + 3.942514581467549e-7, + -0.1635221242904663, + -0.11784632503986359, + -0.6841662526130676, + 9.827892881730804e-7, + 2.892645678542749e-9, + -1.628763968142266e-8, + -0.08295974135398865, + -0.039602603763341904, + 0, + -1.916322656114744e-9, + -0.12597393989562988, + -1.2323391196389366e-8, + 6.012557918211314e-8, + 0.10938061028718948, + 0.0500321127474308, + -0.5271873474121094, + -0.27562180161476135, + 1.125327031559209e-8, + -0.0000015809823707968462, + -9.509267151486256e-9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "CarIdxRPM": { + "countAsTime": false, + "length": 64, + "name": "CarIdxRPM", + "description": "Engine rpm by car index", + "unit": "revs/min", + "varType": 4, + "value": [ + 3522.619873046875, + 5972.58544921875, + 5387.0888671875, + 5008.46728515625, + 5162.4833984375, + 5406.0595703125, + 3828.365478515625, + 6709.82861328125, + 5455.5703125, + 3569.759765625, + 4557.52099609375, + 3313.8291015625, + 2399.28369140625, + 4921.58984375, + 3212.375244140625, + 4789.2060546875, + 4846.22509765625, + -1, + 3292.23681640625, + 5218.119140625, + 1804.4576416015625, + 4810.54736328125, + 5905.974609375, + 2999.892578125, + 1746.029052734375, + 1804.4576416015625, + 2945.823486328125, + 2327.35546875, + 4023.970703125, + -1, + 2945.823486328125, + 2972.830078125, + 1804.45751953125, + 1746.029052734375, + 2483.143310546875, + 1475.47021484375, + 5390.88037109375, + 3164.09033203125, + 1804.4576416015625, + 1478.214599609375, + 1947.0867919921875, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "CarIdxGear": { + "countAsTime": false, + "length": 64, + "name": "CarIdxGear", + "description": "-1=reverse 0=neutral 1..n=current gear by car index", + "unit": "", + "varType": 2, + "value": [ + 4, + 2, + 2, + 2, + 1, + 2, + 2, + 1, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + -1, + 2, + 1, + 1, + 1, + 1, + 2, + 0, + 1, + 1, + 1, + 1, + -1, + 0, + 1, + 1, + 0, + 1, + 1, + 2, + 1, + 0, + 1, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "SteeringWheelAngle": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelAngle", + "description": "Steering wheel angle", + "unit": "rad", + "varType": 4, + "value": [ + -0.27562180161476135 + ] + }, + "Throttle": { + "countAsTime": false, + "length": 1, + "name": "Throttle", + "description": "0=off throttle to 1=full throttle", + "unit": "%", + "varType": 4, + "value": [ + 0.3383477032184601 + ] + }, + "Brake": { + "countAsTime": false, + "length": 1, + "name": "Brake", + "description": "0=brake released to 1=max pedal force", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "Clutch": { + "countAsTime": false, + "length": 1, + "name": "Clutch", + "description": "0=disengaged to 1=fully engaged", + "unit": "%", + "varType": 4, + "value": [ + 0.2969607710838318 + ] + }, + "Gear": { + "countAsTime": false, + "length": 1, + "name": "Gear", + "description": "-1=reverse 0=neutral 1..n=current gear", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RPM": { + "countAsTime": false, + "length": 1, + "name": "RPM", + "description": "Engine rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 3164.09033203125 + ] + }, + "PlayerCarSLFirstRPM": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarSLFirstRPM", + "description": "Shift light first light rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 6000 + ] + }, + "PlayerCarSLShiftRPM": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarSLShiftRPM", + "description": "Shift light shift rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 7300 + ] + }, + "PlayerCarSLLastRPM": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarSLLastRPM", + "description": "Shift light last light rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 7500 + ] + }, + "PlayerCarSLBlinkRPM": { + "countAsTime": false, + "length": 1, + "name": "PlayerCarSLBlinkRPM", + "description": "Shift light blink rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 7900 + ] + }, + "Lap": { + "countAsTime": false, + "length": 1, + "name": "Lap", + "description": "Laps started count", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "LapCompleted": { + "countAsTime": false, + "length": 1, + "name": "LapCompleted", + "description": "Laps completed count", + "unit": "", + "varType": 2, + "value": [ + -1 + ] + }, + "LapDist": { + "countAsTime": false, + "length": 1, + "name": "LapDist", + "description": "Meters traveled from S/F this lap", + "unit": "m", + "varType": 4, + "value": [ + 1838.512451171875 + ] + }, + "LapDistPct": { + "countAsTime": false, + "length": 1, + "name": "LapDistPct", + "description": "Percentage distance around lap", + "unit": "%", + "varType": 4, + "value": [ + 0.4353986382484436 + ] + }, + "RaceLaps": { + "countAsTime": false, + "length": 1, + "name": "RaceLaps", + "description": "Laps completed in race", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "CarDistAhead": { + "countAsTime": false, + "length": 1, + "name": "CarDistAhead", + "description": "Distance to first car in front of player in meters", + "unit": "m", + "varType": 4, + "value": [ + 2.143310546875 + ] + }, + "CarDistBehind": { + "countAsTime": false, + "length": 1, + "name": "CarDistBehind", + "description": "Distance to first car behind player in meters", + "unit": "m", + "varType": 4, + "value": [ + 8.069580078125 + ] + }, + "LapBestLap": { + "countAsTime": false, + "length": 1, + "name": "LapBestLap", + "description": "Players best lap number", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "LapBestLapTime": { + "countAsTime": false, + "length": 1, + "name": "LapBestLapTime", + "description": "Players best lap time", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapLastLapTime": { + "countAsTime": false, + "length": 1, + "name": "LapLastLapTime", + "description": "Players last lap time", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapCurrentLapTime": { + "countAsTime": false, + "length": 1, + "name": "LapCurrentLapTime", + "description": "Estimate of players current lap time as shown in F3 box", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapLasNLapSeq": { + "countAsTime": false, + "length": 1, + "name": "LapLasNLapSeq", + "description": "Player num consecutive clean laps completed for N average", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "LapLastNLapTime": { + "countAsTime": false, + "length": 1, + "name": "LapLastNLapTime", + "description": "Player last N average lap time", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapBestNLapLap": { + "countAsTime": false, + "length": 1, + "name": "LapBestNLapLap", + "description": "Player last lap in best N average lap time", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "LapBestNLapTime": { + "countAsTime": false, + "length": 1, + "name": "LapBestNLapTime", + "description": "Player best N average lap time", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToBestLap": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToBestLap", + "description": "Delta time for best lap", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToBestLap_DD": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToBestLap_DD", + "description": "Rate of change of delta time for best lap", + "unit": "s/s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToBestLap_OK": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToBestLap_OK", + "description": "Delta time for best lap is valid", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "LapDeltaToOptimalLap": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToOptimalLap", + "description": "Delta time for optimal lap", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToOptimalLap_DD": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToOptimalLap_DD", + "description": "Rate of change of delta time for optimal lap", + "unit": "s/s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToOptimalLap_OK": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToOptimalLap_OK", + "description": "Delta time for optimal lap is valid", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "LapDeltaToSessionBestLap": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionBestLap", + "description": "Delta time for session best lap", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionBestLap_DD": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionBestLap_DD", + "description": "Rate of change of delta time for session best lap", + "unit": "s/s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionBestLap_OK": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionBestLap_OK", + "description": "Delta time for session best lap is valid", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "LapDeltaToSessionOptimalLap": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionOptimalLap", + "description": "Delta time for session optimal lap", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionOptimalLap_DD": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionOptimalLap_DD", + "description": "Rate of change of delta time for session optimal lap", + "unit": "s/s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionOptimalLap_OK": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionOptimalLap_OK", + "description": "Delta time for session optimal lap is valid", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "LapDeltaToSessionLastlLap": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionLastlLap", + "description": "Delta time for session last lap", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionLastlLap_DD": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionLastlLap_DD", + "description": "Rate of change of delta time for session last lap", + "unit": "s/s", + "varType": 4, + "value": [ + 0 + ] + }, + "LapDeltaToSessionLastlLap_OK": { + "countAsTime": false, + "length": 1, + "name": "LapDeltaToSessionLastlLap_OK", + "description": "Delta time for session last lap is valid", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "Speed": { + "countAsTime": false, + "length": 1, + "name": "Speed", + "description": "GPS vehicle speed", + "unit": "m/s", + "varType": 4, + "value": [ + 0.21389096975326538 + ] + }, + "Yaw": { + "countAsTime": false, + "length": 1, + "name": "Yaw", + "description": "Yaw orientation", + "unit": "rad", + "varType": 4, + "value": [ + -2.1715786457061768 + ] + }, + "YawNorth": { + "countAsTime": false, + "length": 1, + "name": "YawNorth", + "description": "Yaw orientation relative to north", + "unit": "rad", + "varType": 4, + "value": [ + 3.757598876953125 + ] + }, + "Pitch": { + "countAsTime": false, + "length": 1, + "name": "Pitch", + "description": "Pitch orientation", + "unit": "rad", + "varType": 4, + "value": [ + -0.05754435807466507 + ] + }, + "Roll": { + "countAsTime": false, + "length": 1, + "name": "Roll", + "description": "Roll orientation", + "unit": "rad", + "varType": 4, + "value": [ + 0.0064175985753536224 + ] + }, + "EnterExitReset": { + "countAsTime": false, + "length": 1, + "name": "EnterExitReset", + "description": "Indicate action the reset key will take 0 enter 1 exit 2 reset", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "TrackTemp": { + "countAsTime": false, + "length": 1, + "name": "TrackTemp", + "description": "Deprecated set to TrackTempCrew", + "unit": "C", + "varType": 4, + "value": [ + 17.22222900390625 + ] + }, + "TrackTempCrew": { + "countAsTime": false, + "length": 1, + "name": "TrackTempCrew", + "description": "Temperature of track measured by crew around track", + "unit": "C", + "varType": 4, + "value": [ + 17.22222900390625 + ] + }, + "AirTemp": { + "countAsTime": false, + "length": 1, + "name": "AirTemp", + "description": "Temperature of air at start/finish line", + "unit": "C", + "varType": 4, + "value": [ + 19.01333236694336 + ] + }, + "TrackWetness": { + "countAsTime": false, + "length": 1, + "name": "TrackWetness", + "description": "How wet is the average track surface", + "unit": "irsdk_TrackWetness", + "varType": 2, + "value": [ + 3 + ] + }, + "Skies": { + "countAsTime": false, + "length": 1, + "name": "Skies", + "description": "Skies (0=clear/1=p cloudy/2=m cloudy/3=overcast)", + "unit": "", + "varType": 2, + "value": [ + 3 + ] + }, + "AirDensity": { + "countAsTime": false, + "length": 1, + "name": "AirDensity", + "description": "Density of air at start/finish line", + "unit": "kg/m^3", + "varType": 4, + "value": [ + 1.0999425649642944 + ] + }, + "AirPressure": { + "countAsTime": false, + "length": 1, + "name": "AirPressure", + "description": "Pressure of air at start/finish line", + "unit": "Pa", + "varType": 4, + "value": [ + 93034.453125 + ] + }, + "WindVel": { + "countAsTime": false, + "length": 1, + "name": "WindVel", + "description": "Wind velocity at start/finish line", + "unit": "m/s", + "varType": 4, + "value": [ + 4.648459434509277 + ] + }, + "WindDir": { + "countAsTime": false, + "length": 1, + "name": "WindDir", + "description": "Wind direction at start/finish line", + "unit": "rad", + "varType": 4, + "value": [ + 0.5065906047821045 + ] + }, + "RelativeHumidity": { + "countAsTime": false, + "length": 1, + "name": "RelativeHumidity", + "description": "Relative Humidity at start/finish line", + "unit": "%", + "varType": 4, + "value": [ + 0.949999988079071 + ] + }, + "FogLevel": { + "countAsTime": false, + "length": 1, + "name": "FogLevel", + "description": "Fog level at start/finish line", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "Precipitation": { + "countAsTime": false, + "length": 1, + "name": "Precipitation", + "description": "Precipitation at start/finish line", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "SolarAltitude": { + "countAsTime": false, + "length": 1, + "name": "SolarAltitude", + "description": "Sun angle above horizon in radians", + "unit": "rad", + "varType": 4, + "value": [ + 0.46321797370910645 + ] + }, + "SolarAzimuth": { + "countAsTime": false, + "length": 1, + "name": "SolarAzimuth", + "description": "Sun angle clockwise from north in radians", + "unit": "rad", + "varType": 4, + "value": [ + 0.8542160391807556 + ] + }, + "WeatherDeclaredWet": { + "countAsTime": false, + "length": 1, + "name": "WeatherDeclaredWet", + "description": "The steward says rain tires can be used", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "SteeringFFBEnabled": { + "countAsTime": false, + "length": 1, + "name": "SteeringFFBEnabled", + "description": "Force feedback is enabled", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "DCLapStatus": { + "countAsTime": false, + "length": 1, + "name": "DCLapStatus", + "description": "Status of driver change lap requirements", + "unit": "", + "varType": 2, + "value": [ + 2 + ] + }, + "DCDriversSoFar": { + "countAsTime": false, + "length": 1, + "name": "DCDriversSoFar", + "description": "Number of team drivers who have run a stint", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "OkToReloadTextures": { + "countAsTime": false, + "length": 1, + "name": "OkToReloadTextures", + "description": "True if it is ok to reload car textures at this time", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "LoadNumTextures": { + "countAsTime": false, + "length": 1, + "name": "LoadNumTextures", + "description": "True if the car_num texture will be loaded", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "CarLeftRight": { + "countAsTime": false, + "length": 1, + "name": "CarLeftRight", + "description": "Notify if car is to the left or right of driver", + "unit": "irsdk_CarLeftRight", + "varType": 2, + "value": [ + 1 + ] + }, + "PitsOpen": { + "countAsTime": false, + "length": 1, + "name": "PitsOpen", + "description": "True if pit stop is allowed for the current player", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "VidCapEnabled": { + "countAsTime": false, + "length": 1, + "name": "VidCapEnabled", + "description": "True if video capture system is enabled", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "VidCapActive": { + "countAsTime": false, + "length": 1, + "name": "VidCapActive", + "description": "True if video currently being captured", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "PitRepairLeft": { + "countAsTime": false, + "length": 1, + "name": "PitRepairLeft", + "description": "Time left for mandatory pit repairs if repairs are active", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "PitOptRepairLeft": { + "countAsTime": false, + "length": 1, + "name": "PitOptRepairLeft", + "description": "Time left for optional repairs if repairs are active", + "unit": "s", + "varType": 4, + "value": [ + 0 + ] + }, + "PitstopActive": { + "countAsTime": false, + "length": 1, + "name": "PitstopActive", + "description": "Is the player getting pit stop service", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "FastRepairUsed": { + "countAsTime": false, + "length": 1, + "name": "FastRepairUsed", + "description": "How many fast repairs used so far", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "FastRepairAvailable": { + "countAsTime": false, + "length": 1, + "name": "FastRepairAvailable", + "description": "How many fast repairs left 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "LFTiresUsed": { + "countAsTime": false, + "length": 1, + "name": "LFTiresUsed", + "description": "How many left front tires used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RFTiresUsed": { + "countAsTime": false, + "length": 1, + "name": "RFTiresUsed", + "description": "How many right front tires used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "LRTiresUsed": { + "countAsTime": false, + "length": 1, + "name": "LRTiresUsed", + "description": "How many left rear tires used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RRTiresUsed": { + "countAsTime": false, + "length": 1, + "name": "RRTiresUsed", + "description": "How many right rear tires used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "LeftTireSetsUsed": { + "countAsTime": false, + "length": 1, + "name": "LeftTireSetsUsed", + "description": "How many left tire sets used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RightTireSetsUsed": { + "countAsTime": false, + "length": 1, + "name": "RightTireSetsUsed", + "description": "How many right tire sets used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "FrontTireSetsUsed": { + "countAsTime": false, + "length": 1, + "name": "FrontTireSetsUsed", + "description": "How many front tire sets used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RearTireSetsUsed": { + "countAsTime": false, + "length": 1, + "name": "RearTireSetsUsed", + "description": "How many rear tire sets used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "TireSetsUsed": { + "countAsTime": false, + "length": 1, + "name": "TireSetsUsed", + "description": "How many tire sets used so far", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "LFTiresAvailable": { + "countAsTime": false, + "length": 1, + "name": "LFTiresAvailable", + "description": "How many left front tires are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RFTiresAvailable": { + "countAsTime": false, + "length": 1, + "name": "RFTiresAvailable", + "description": "How many right front tires are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "LRTiresAvailable": { + "countAsTime": false, + "length": 1, + "name": "LRTiresAvailable", + "description": "How many left rear tires are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RRTiresAvailable": { + "countAsTime": false, + "length": 1, + "name": "RRTiresAvailable", + "description": "How many right rear tires are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "LeftTireSetsAvailable": { + "countAsTime": false, + "length": 1, + "name": "LeftTireSetsAvailable", + "description": "How many left tire sets are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RightTireSetsAvailable": { + "countAsTime": false, + "length": 1, + "name": "RightTireSetsAvailable", + "description": "How many right tire sets are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "FrontTireSetsAvailable": { + "countAsTime": false, + "length": 1, + "name": "FrontTireSetsAvailable", + "description": "How many front tire sets are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "RearTireSetsAvailable": { + "countAsTime": false, + "length": 1, + "name": "RearTireSetsAvailable", + "description": "How many rear tire sets are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "TireSetsAvailable": { + "countAsTime": false, + "length": 1, + "name": "TireSetsAvailable", + "description": "How many tire sets are remaining 255 is unlimited", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "CamCarIdx": { + "countAsTime": false, + "length": 1, + "name": "CamCarIdx", + "description": "Active camera's focus car index", + "unit": "", + "varType": 2, + "value": [ + 37 + ] + }, + "CamCameraNumber": { + "countAsTime": false, + "length": 1, + "name": "CamCameraNumber", + "description": "Active camera number", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "CamGroupNumber": { + "countAsTime": false, + "length": 1, + "name": "CamGroupNumber", + "description": "Active camera group number", + "unit": "", + "varType": 2, + "value": [ + 9 + ] + }, + "CamCameraState": { + "countAsTime": false, + "length": 1, + "name": "CamCameraState", + "description": "State of camera system", + "unit": "irsdk_CameraState", + "varType": 3, + "value": [ + 80 + ] + }, + "IsOnTrackCar": { + "countAsTime": false, + "length": 1, + "name": "IsOnTrackCar", + "description": "1=Car on track physics running", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "IsInGarage": { + "countAsTime": false, + "length": 1, + "name": "IsInGarage", + "description": "1=Car in garage physics running", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "SteeringWheelAngleMax": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelAngleMax", + "description": "Steering wheel max angle", + "unit": "rad", + "varType": 4, + "value": [ + 7.866819858551025 + ] + }, + "ShiftPowerPct": { + "countAsTime": false, + "length": 1, + "name": "ShiftPowerPct", + "description": "Friction torque applied to gears when shifting or grinding", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "ShiftGrindRPM": { + "countAsTime": false, + "length": 1, + "name": "ShiftGrindRPM", + "description": "RPM of shifter grinding noise", + "unit": "RPM", + "varType": 4, + "value": [ + 0 + ] + }, + "ThrottleRaw": { + "countAsTime": false, + "length": 1, + "name": "ThrottleRaw", + "description": "Raw throttle input 0=off throttle to 1=full throttle", + "unit": "%", + "varType": 4, + "value": [ + 0.3383477032184601 + ] + }, + "BrakeRaw": { + "countAsTime": false, + "length": 1, + "name": "BrakeRaw", + "description": "Raw brake input 0=brake released to 1=max pedal force", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "ClutchRaw": { + "countAsTime": false, + "length": 1, + "name": "ClutchRaw", + "description": "Raw clutch input 0=disengaged to 1=fully engaged", + "unit": "%", + "varType": 4, + "value": [ + 1 + ] + }, + "HandbrakeRaw": { + "countAsTime": false, + "length": 1, + "name": "HandbrakeRaw", + "description": "Raw handbrake input 0=handbrake released to 1=max force", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "BrakeABSactive": { + "countAsTime": false, + "length": 1, + "name": "BrakeABSactive", + "description": "true if abs is currently reducing brake force pressure", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "EngineWarnings": { + "countAsTime": false, + "length": 1, + "name": "EngineWarnings", + "description": "Bitfield for warning lights", + "unit": "irsdk_EngineWarnings", + "varType": 3, + "value": [ + 0 + ] + }, + "FuelLevelPct": { + "countAsTime": false, + "length": 1, + "name": "FuelLevelPct", + "description": "Percent fuel remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.4988507926464081 + ] + }, + "PitSvFlags": { + "countAsTime": false, + "length": 1, + "name": "PitSvFlags", + "description": "Bitfield of pit service checkboxes", + "unit": "irsdk_PitSvFlags", + "varType": 3, + "value": [ + 48 + ] + }, + "PitSvLFP": { + "countAsTime": false, + "length": 1, + "name": "PitSvLFP", + "description": "Pit service left front tire pressure", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "PitSvRFP": { + "countAsTime": false, + "length": 1, + "name": "PitSvRFP", + "description": "Pit service right front tire pressure", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "PitSvLRP": { + "countAsTime": false, + "length": 1, + "name": "PitSvLRP", + "description": "Pit service left rear tire pressure", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "PitSvRRP": { + "countAsTime": false, + "length": 1, + "name": "PitSvRRP", + "description": "Pit service right rear tire pressure", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "PitSvFuel": { + "countAsTime": false, + "length": 1, + "name": "PitSvFuel", + "description": "Pit service fuel add amount", + "unit": "l or kWh", + "varType": 4, + "value": [ + 52 + ] + }, + "PitSvTireCompound": { + "countAsTime": false, + "length": 1, + "name": "PitSvTireCompound", + "description": "Pit service pending tire compound", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "CarIdxP2P_Status": { + "countAsTime": false, + "length": 64, + "name": "CarIdxP2P_Status", + "description": "Push2Pass active or not", + "unit": "", + "varType": 1, + "value": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "CarIdxP2P_Count": { + "countAsTime": false, + "length": 64, + "name": "CarIdxP2P_Count", + "description": "Push2Pass count of usage (or remaining in Race)", + "unit": "", + "varType": 2, + "value": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + }, + "P2P_Status": { + "countAsTime": false, + "length": 1, + "name": "P2P_Status", + "description": "Push2Pass active or not on your car", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "P2P_Count": { + "countAsTime": false, + "length": 1, + "name": "P2P_Count", + "description": "Push2Pass count of usage (or remaining in Race) on your car", + "unit": "", + "varType": 2, + "value": [ + 0 + ] + }, + "SteeringWheelPctTorque": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctTorque", + "description": "Force feedback % max torque on steering shaft unsigned", + "unit": "%", + "varType": 4, + "value": [ + 0.1073838397860527 + ] + }, + "SteeringWheelPctTorqueSign": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctTorqueSign", + "description": "Force feedback % max torque on steering shaft signed", + "unit": "%", + "varType": 4, + "value": [ + 0.1073838397860527 + ] + }, + "SteeringWheelPctTorqueSignStops": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctTorqueSignStops", + "description": "Force feedback % max torque on steering shaft signed stops", + "unit": "%", + "varType": 4, + "value": [ + 0.03744460642337799 + ] + }, + "SteeringWheelPctIntensity": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctIntensity", + "description": "Force feedback % max intensity", + "unit": "%", + "varType": 4, + "value": [ + 0.5 + ] + }, + "SteeringWheelPctSmoothing": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctSmoothing", + "description": "Force feedback % max smoothing", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "SteeringWheelPctDamper": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPctDamper", + "description": "Force feedback % max damping", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "SteeringWheelLimiter": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelLimiter", + "description": "Force feedback limiter strength limits impacts and oscillation", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "SteeringWheelMaxForceNm": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelMaxForceNm", + "description": "Value of strength or max force slider in Nm for FFB", + "unit": "N*m", + "varType": 4, + "value": [ + 41.10961151123047 + ] + }, + "SteeringWheelPeakForceNm": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelPeakForceNm", + "description": "Peak torque mapping to direct input units for FFB", + "unit": "N*m", + "varType": 4, + "value": [ + -1 + ] + }, + "SteeringWheelUseLinear": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelUseLinear", + "description": "True if steering wheel force is using linear mode", + "unit": "", + "varType": 1, + "value": [ + true + ] + }, + "ShiftIndicatorPct": { + "countAsTime": false, + "length": 1, + "name": "ShiftIndicatorPct", + "description": "DEPRECATED use DriverCarSLBlinkRPM instead", + "unit": "%", + "varType": 4, + "value": [ + 0 + ] + }, + "ReplayPlaySpeed": { + "countAsTime": false, + "length": 1, + "name": "ReplayPlaySpeed", + "description": "Replay playback speed", + "unit": "", + "varType": 2, + "value": [ + 1 + ] + }, + "ReplayPlaySlowMotion": { + "countAsTime": false, + "length": 1, + "name": "ReplayPlaySlowMotion", + "description": "0=not slow motion 1=replay is in slow motion", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "ReplaySessionTime": { + "countAsTime": false, + "length": 1, + "name": "ReplaySessionTime", + "description": "Seconds since replay session start", + "unit": "s", + "varType": 5, + "value": [ + 0 + ] + }, + "ReplaySessionNum": { + "countAsTime": false, + "length": 1, + "name": "ReplaySessionNum", + "description": "Replay session number", + "unit": "", + "varType": 2, + "value": [ + -1 + ] + }, + "TireLF_RumblePitch": { + "countAsTime": false, + "length": 1, + "name": "TireLF_RumblePitch", + "description": "Players LF Tire Sound rumblestrip pitch", + "unit": "Hz", + "varType": 4, + "value": [ + 0 + ] + }, + "TireRF_RumblePitch": { + "countAsTime": false, + "length": 1, + "name": "TireRF_RumblePitch", + "description": "Players RF Tire Sound rumblestrip pitch", + "unit": "Hz", + "varType": 4, + "value": [ + 0 + ] + }, + "TireLR_RumblePitch": { + "countAsTime": false, + "length": 1, + "name": "TireLR_RumblePitch", + "description": "Players LR Tire Sound rumblestrip pitch", + "unit": "Hz", + "varType": 4, + "value": [ + 0 + ] + }, + "TireRR_RumblePitch": { + "countAsTime": false, + "length": 1, + "name": "TireRR_RumblePitch", + "description": "Players RR Tire Sound rumblestrip pitch", + "unit": "Hz", + "varType": 4, + "value": [ + 0 + ] + }, + "IsGarageVisible": { + "countAsTime": false, + "length": 1, + "name": "IsGarageVisible", + "description": "1=Garage screen is visible", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "SteeringWheelTorque_ST": { + "countAsTime": true, + "length": 6, + "name": "SteeringWheelTorque_ST", + "description": "Output torque on steering shaft at 360 Hz", + "unit": "N*m", + "varType": 4, + "value": [ + 4.184950828552246, + 4.214134216308594, + 4.2912397384643555, + 4.3538737297058105, + 4.395411968231201, + 4.414507865905762 + ] + }, + "SteeringWheelTorque": { + "countAsTime": false, + "length": 1, + "name": "SteeringWheelTorque", + "description": "Output torque on steering shaft", + "unit": "N*m", + "varType": 4, + "value": [ + 4.414507865905762 + ] + }, + "VelocityZ_ST": { + "countAsTime": true, + "length": 6, + "name": "VelocityZ_ST", + "description": "Z velocity", + "unit": "m/s at 360 Hz", + "varType": 4, + "value": [ + 0.006493896245956421, + 0.0063067954033613205, + 0.0061207180842757225, + 0.005937468260526657, + 0.005753867328166962, + 0.0055713774636387825 + ] + }, + "VelocityY_ST": { + "countAsTime": true, + "length": 6, + "name": "VelocityY_ST", + "description": "Y velocity", + "unit": "m/s at 360 Hz", + "varType": 4, + "value": [ + -0.007246164605021477, + -0.007057185750454664, + -0.006848372984677553, + -0.006627339869737625, + -0.006395908538252115, + -0.006155774462968111 + ] + }, + "VelocityX_ST": { + "countAsTime": true, + "length": 6, + "name": "VelocityX_ST", + "description": "X velocity", + "unit": "m/s at 360 Hz", + "varType": 4, + "value": [ + 0.19722549617290497, + 0.20032425224781036, + 0.20355932414531708, + 0.2069036215543747, + 0.21032236516475677, + 0.21380236744880676 + ] + }, + "VelocityZ": { + "countAsTime": false, + "length": 1, + "name": "VelocityZ", + "description": "Z velocity", + "unit": "m/s", + "varType": 4, + "value": [ + 0.0055713774636387825 + ] + }, + "VelocityY": { + "countAsTime": false, + "length": 1, + "name": "VelocityY", + "description": "Y velocity", + "unit": "m/s", + "varType": 4, + "value": [ + -0.006155774462968111 + ] + }, + "VelocityX": { + "countAsTime": false, + "length": 1, + "name": "VelocityX", + "description": "X velocity", + "unit": "m/s", + "varType": 4, + "value": [ + 0.21380236744880676 + ] + }, + "YawRate_ST": { + "countAsTime": true, + "length": 6, + "name": "YawRate_ST", + "description": "Yaw rate at 360 Hz", + "unit": "rad/s", + "varType": 4, + "value": [ + -0.0006367102614603937, + -0.000710119609721005, + -0.000778103421907872, + -0.0008467169245705009, + -0.0009150569676421583, + -0.0009924096520990133 + ] + }, + "PitchRate_ST": { + "countAsTime": true, + "length": 6, + "name": "PitchRate_ST", + "description": "Pitch rate at 360 Hz", + "unit": "rad/s", + "varType": 4, + "value": [ + -0.00487911282107234, + -0.005045129451900721, + -0.005113071296364069, + -0.005172543227672577, + -0.005219677928835154, + -0.005261560436338186 + ] + }, + "RollRate_ST": { + "countAsTime": true, + "length": 6, + "name": "RollRate_ST", + "description": "Roll rate at 360 Hz", + "unit": "rad/s", + "varType": 4, + "value": [ + 0.003030817024409771, + 0.0030721276998519897, + 0.0031098290346562862, + 0.003123379312455654, + 0.0031107303220778704, + 0.0030806015711277723 + ] + }, + "YawRate": { + "countAsTime": false, + "length": 1, + "name": "YawRate", + "description": "Yaw rate", + "unit": "rad/s", + "varType": 4, + "value": [ + -0.0009924096520990133 + ] + }, + "PitchRate": { + "countAsTime": false, + "length": 1, + "name": "PitchRate", + "description": "Pitch rate", + "unit": "rad/s", + "varType": 4, + "value": [ + -0.005261560436338186 + ] + }, + "RollRate": { + "countAsTime": false, + "length": 1, + "name": "RollRate", + "description": "Roll rate", + "unit": "rad/s", + "varType": 4, + "value": [ + 0.0030806015711277723 + ] + }, + "VertAccel_ST": { + "countAsTime": true, + "length": 6, + "name": "VertAccel_ST", + "description": "Vertical acceleration (including gravity) at 360 Hz", + "unit": "m/s^2", + "varType": 4, + "value": [ + 9.714908599853516, + 9.723861694335938, + 9.724249839782715, + 9.725290298461914, + 9.725181579589844, + 9.725602149963379 + ] + }, + "LatAccel_ST": { + "countAsTime": true, + "length": 6, + "name": "LatAccel_ST", + "description": "Lateral acceleration (including gravity) at 360 Hz", + "unit": "m/s^2", + "varType": 4, + "value": [ + 0.1274350881576538, + 0.1303693950176239, + 0.13757652044296265, + 0.1420455276966095, + 0.14585936069488525, + 0.14906036853790283 + ] + }, + "LongAccel_ST": { + "countAsTime": true, + "length": 6, + "name": "LongAccel_ST", + "description": "Longitudinal acceleration (including gravity) at 360 Hz", + "unit": "m/s^2", + "varType": 4, + "value": [ + 1.5919504165649414, + 1.6789634227752686, + 1.7281699180603027, + 1.767625331878662, + 1.7945760488510132, + 1.8167699575424194 + ] + }, + "VertAccel": { + "countAsTime": false, + "length": 1, + "name": "VertAccel", + "description": "Vertical acceleration (including gravity)", + "unit": "m/s^2", + "varType": 4, + "value": [ + 9.725602149963379 + ] + }, + "LatAccel": { + "countAsTime": false, + "length": 1, + "name": "LatAccel", + "description": "Lateral acceleration (including gravity)", + "unit": "m/s^2", + "varType": 4, + "value": [ + 0.14906036853790283 + ] + }, + "LongAccel": { + "countAsTime": false, + "length": 1, + "name": "LongAccel", + "description": "Longitudinal acceleration (including gravity)", + "unit": "m/s^2", + "varType": 4, + "value": [ + 1.8167699575424194 + ] + }, + "dcStarter": { + "countAsTime": false, + "length": 1, + "name": "dcStarter", + "description": "In car trigger car starter", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dcPitSpeedLimiterToggle": { + "countAsTime": false, + "length": 1, + "name": "dcPitSpeedLimiterToggle", + "description": "Track if pit speed limiter system is enabled", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dcTractionControlToggle": { + "countAsTime": false, + "length": 1, + "name": "dcTractionControlToggle", + "description": "In car traction control active", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dcHeadlightFlash": { + "countAsTime": false, + "length": 1, + "name": "dcHeadlightFlash", + "description": "In car headlight flash control active", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dcLowFuelAccept": { + "countAsTime": false, + "length": 1, + "name": "dcLowFuelAccept", + "description": "In car low fuel accept", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dpRFTireChange": { + "countAsTime": false, + "length": 1, + "name": "dpRFTireChange", + "description": "Pitstop rf tire change request", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpLFTireChange": { + "countAsTime": false, + "length": 1, + "name": "dpLFTireChange", + "description": "Pitstop lf tire change request", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpRRTireChange": { + "countAsTime": false, + "length": 1, + "name": "dpRRTireChange", + "description": "Pitstop rr tire change request", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpLRTireChange": { + "countAsTime": false, + "length": 1, + "name": "dpLRTireChange", + "description": "Pitstop lr tire change request", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpFuelFill": { + "countAsTime": false, + "length": 1, + "name": "dpFuelFill", + "description": "Pitstop fuel fill flag", + "unit": "", + "varType": 4, + "value": [ + 1 + ] + }, + "dpFuelAutoFillEnabled": { + "countAsTime": false, + "length": 1, + "name": "dpFuelAutoFillEnabled", + "description": "Pitstop auto fill fuel system enabled", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpFuelAutoFillActive": { + "countAsTime": false, + "length": 1, + "name": "dpFuelAutoFillActive", + "description": "Pitstop auto fill fuel next stop flag", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dpWindshieldTearoff": { + "countAsTime": false, + "length": 1, + "name": "dpWindshieldTearoff", + "description": "Pitstop windshield tearoff", + "unit": "", + "varType": 4, + "value": [ + 1 + ] + }, + "dpFuelAddKg": { + "countAsTime": false, + "length": 1, + "name": "dpFuelAddKg", + "description": "Pitstop fuel add amount", + "unit": "kg", + "varType": 4, + "value": [ + 52 + ] + }, + "dpFastRepair": { + "countAsTime": false, + "length": 1, + "name": "dpFastRepair", + "description": "Pitstop fast repair set", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dcDashPage": { + "countAsTime": false, + "length": 1, + "name": "dcDashPage", + "description": "In car dash display page adjustment", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dcDashPage2": { + "countAsTime": false, + "length": 1, + "name": "dcDashPage2", + "description": "In car second dash display page adjustment", + "unit": "", + "varType": 4, + "value": [ + 0 + ] + }, + "dcBrakeBias": { + "countAsTime": false, + "length": 1, + "name": "dcBrakeBias", + "description": "In car brake bias adjustment", + "unit": "", + "varType": 4, + "value": [ + 48.10425567626953 + ] + }, + "dpLFTireColdPress": { + "countAsTime": false, + "length": 1, + "name": "dpLFTireColdPress", + "description": "Pitstop lf tire cold pressure adjustment", + "unit": "Pa", + "varType": 4, + "value": [ + 158.57899475097656 + ] + }, + "dpRFTireColdPress": { + "countAsTime": false, + "length": 1, + "name": "dpRFTireColdPress", + "description": "Pitstop rf cold tire pressure adjustment", + "unit": "Pa", + "varType": 4, + "value": [ + 158.57899475097656 + ] + }, + "dpLRTireColdPress": { + "countAsTime": false, + "length": 1, + "name": "dpLRTireColdPress", + "description": "Pitstop lr tire cold pressure adjustment", + "unit": "Pa", + "varType": 4, + "value": [ + 158.57899475097656 + ] + }, + "dpRRTireColdPress": { + "countAsTime": false, + "length": 1, + "name": "dpRRTireColdPress", + "description": "Pitstop rr cold tire pressure adjustment", + "unit": "Pa", + "varType": 4, + "value": [ + 158.57899475097656 + ] + }, + "dcTractionControl": { + "countAsTime": false, + "length": 1, + "name": "dcTractionControl", + "description": "In car traction control adjustment", + "unit": "", + "varType": 4, + "value": [ + 4 + ] + }, + "dcABS": { + "countAsTime": false, + "length": 1, + "name": "dcABS", + "description": "In car abs adjustment", + "unit": "", + "varType": 4, + "value": [ + 4 + ] + }, + "dcThrottleShape": { + "countAsTime": false, + "length": 1, + "name": "dcThrottleShape", + "description": "In car throttle shape adjustment", + "unit": "", + "varType": 4, + "value": [ + 1 + ] + }, + "dcToggleWindshieldWipers": { + "countAsTime": false, + "length": 1, + "name": "dcToggleWindshieldWipers", + "description": "In car turn wipers on or off", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "dcTriggerWindshieldWipers": { + "countAsTime": false, + "length": 1, + "name": "dcTriggerWindshieldWipers", + "description": "In car momentarily turn on wipers", + "unit": "", + "varType": 1, + "value": [ + false + ] + }, + "RFbrakeLinePress": { + "countAsTime": false, + "length": 1, + "name": "RFbrakeLinePress", + "description": "RF brake line pressure", + "unit": "bar", + "varType": 4, + "value": [ + 0 + ] + }, + "RFcoldPressure": { + "countAsTime": false, + "length": 1, + "name": "RFcoldPressure", + "description": "RF tire cold pressure as set in the garage", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "RFtempCL": { + "countAsTime": false, + "length": 1, + "name": "RFtempCL", + "description": "RF tire left carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 67.58041381835938 + ] + }, + "RFtempCM": { + "countAsTime": false, + "length": 1, + "name": "RFtempCM", + "description": "RF tire middle carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 64.03765869140625 + ] + }, + "RFtempCR": { + "countAsTime": false, + "length": 1, + "name": "RFtempCR", + "description": "RF tire right carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 57.04473876953125 + ] + }, + "RFwearL": { + "countAsTime": false, + "length": 1, + "name": "RFwearL", + "description": "RF tire left percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9737342596054077 + ] + }, + "RFwearM": { + "countAsTime": false, + "length": 1, + "name": "RFwearM", + "description": "RF tire middle percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9733490347862244 + ] + }, + "RFwearR": { + "countAsTime": false, + "length": 1, + "name": "RFwearR", + "description": "RF tire right percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.99355149269104 + ] + }, + "LFbrakeLinePress": { + "countAsTime": false, + "length": 1, + "name": "LFbrakeLinePress", + "description": "LF brake line pressure", + "unit": "bar", + "varType": 4, + "value": [ + 0 + ] + }, + "LFcoldPressure": { + "countAsTime": false, + "length": 1, + "name": "LFcoldPressure", + "description": "LF tire cold pressure as set in the garage", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "LFtempCL": { + "countAsTime": false, + "length": 1, + "name": "LFtempCL", + "description": "LF tire left carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 48.167083740234375 + ] + }, + "LFtempCM": { + "countAsTime": false, + "length": 1, + "name": "LFtempCM", + "description": "LF tire middle carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 58.27838134765625 + ] + }, + "LFtempCR": { + "countAsTime": false, + "length": 1, + "name": "LFtempCR", + "description": "LF tire right carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 61.5562744140625 + ] + }, + "LFwearL": { + "countAsTime": false, + "length": 1, + "name": "LFwearL", + "description": "LF tire left percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9974302053451538 + ] + }, + "LFwearM": { + "countAsTime": false, + "length": 1, + "name": "LFwearM", + "description": "LF tire middle percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.976250410079956 + ] + }, + "LFwearR": { + "countAsTime": false, + "length": 1, + "name": "LFwearR", + "description": "LF tire right percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9759439826011658 + ] + }, + "FuelUsePerHour": { + "countAsTime": false, + "length": 1, + "name": "FuelUsePerHour", + "description": "Engine fuel used instantaneous", + "unit": "kg/h", + "varType": 4, + "value": [ + 44.64491653442383 + ] + }, + "Voltage": { + "countAsTime": false, + "length": 1, + "name": "Voltage", + "description": "Engine voltage", + "unit": "V", + "varType": 4, + "value": [ + 14.5 + ] + }, + "WaterTemp": { + "countAsTime": false, + "length": 1, + "name": "WaterTemp", + "description": "Engine coolant temp", + "unit": "C", + "varType": 4, + "value": [ + 78.14173126220703 + ] + }, + "WaterLevel": { + "countAsTime": false, + "length": 1, + "name": "WaterLevel", + "description": "Engine coolant level", + "unit": "l", + "varType": 4, + "value": [ + 13 + ] + }, + "FuelPress": { + "countAsTime": false, + "length": 1, + "name": "FuelPress", + "description": "Engine fuel pressure", + "unit": "bar", + "varType": 4, + "value": [ + 7.900000095367432 + ] + }, + "OilTemp": { + "countAsTime": false, + "length": 1, + "name": "OilTemp", + "description": "Engine oil temperature", + "unit": "C", + "varType": 4, + "value": [ + 84.71864318847656 + ] + }, + "OilPress": { + "countAsTime": false, + "length": 1, + "name": "OilPress", + "description": "Engine oil pressure", + "unit": "bar", + "varType": 4, + "value": [ + 4.291805744171143 + ] + }, + "OilLevel": { + "countAsTime": false, + "length": 1, + "name": "OilLevel", + "description": "Engine oil level", + "unit": "l", + "varType": 4, + "value": [ + 9 + ] + }, + "ManifoldPress": { + "countAsTime": false, + "length": 1, + "name": "ManifoldPress", + "description": "Engine manifold pressure", + "unit": "bar", + "varType": 4, + "value": [ + 0.7795017957687378 + ] + }, + "FuelLevel": { + "countAsTime": false, + "length": 1, + "name": "FuelLevel", + "description": "Liters of fuel remaining", + "unit": "l", + "varType": 4, + "value": [ + 51.8804817199707 + ] + }, + "Engine0_RPM": { + "countAsTime": false, + "length": 1, + "name": "Engine0_RPM", + "description": "Engine0Engine rpm", + "unit": "revs/min", + "varType": 4, + "value": [ + 3164.091552734375 + ] + }, + "RRbrakeLinePress": { + "countAsTime": false, + "length": 1, + "name": "RRbrakeLinePress", + "description": "RR brake line pressure", + "unit": "bar", + "varType": 4, + "value": [ + 0 + ] + }, + "RRcoldPressure": { + "countAsTime": false, + "length": 1, + "name": "RRcoldPressure", + "description": "RR tire cold pressure as set in the garage", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "RRtempCL": { + "countAsTime": false, + "length": 1, + "name": "RRtempCL", + "description": "RR tire left carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 60.6326904296875 + ] + }, + "RRtempCM": { + "countAsTime": false, + "length": 1, + "name": "RRtempCM", + "description": "RR tire middle carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 57.805908203125 + ] + }, + "RRtempCR": { + "countAsTime": false, + "length": 1, + "name": "RRtempCR", + "description": "RR tire right carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 53.768341064453125 + ] + }, + "RRwearL": { + "countAsTime": false, + "length": 1, + "name": "RRwearL", + "description": "RR tire left percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9894644618034363 + ] + }, + "RRwearM": { + "countAsTime": false, + "length": 1, + "name": "RRwearM", + "description": "RR tire middle percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9892746210098267 + ] + }, + "RRwearR": { + "countAsTime": false, + "length": 1, + "name": "RRwearR", + "description": "RR tire right percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9937880635261536 + ] + }, + "LRbrakeLinePress": { + "countAsTime": false, + "length": 1, + "name": "LRbrakeLinePress", + "description": "LR brake line pressure", + "unit": "bar", + "varType": 4, + "value": [ + 0 + ] + }, + "LRcoldPressure": { + "countAsTime": false, + "length": 1, + "name": "LRcoldPressure", + "description": "LR tire cold pressure as set in the garage", + "unit": "kPa", + "varType": 4, + "value": [ + 158.57901000976562 + ] + }, + "LRtempCL": { + "countAsTime": false, + "length": 1, + "name": "LRtempCL", + "description": "LR tire left carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 46.224395751953125 + ] + }, + "LRtempCM": { + "countAsTime": false, + "length": 1, + "name": "LRtempCM", + "description": "LR tire middle carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 52.473297119140625 + ] + }, + "LRtempCR": { + "countAsTime": false, + "length": 1, + "name": "LRtempCR", + "description": "LR tire right carcass temperature", + "unit": "C", + "varType": 4, + "value": [ + 55.096160888671875 + ] + }, + "LRwearL": { + "countAsTime": false, + "length": 1, + "name": "LRwearL", + "description": "LR tire left percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9973198175430298 + ] + }, + "LRwearM": { + "countAsTime": false, + "length": 1, + "name": "LRwearM", + "description": "LR tire middle percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9908255338668823 + ] + }, + "LRwearR": { + "countAsTime": false, + "length": 1, + "name": "LRwearR", + "description": "LR tire right percent tread remaining", + "unit": "%", + "varType": 4, + "value": [ + 0.9907817840576172 + ] + }, + "LRshockDefl": { + "countAsTime": false, + "length": 1, + "name": "LRshockDefl", + "description": "LR shock deflection", + "unit": "m", + "varType": 4, + "value": [ + 0.048880159854888916 + ] + }, + "LRshockDefl_ST": { + "countAsTime": true, + "length": 6, + "name": "LRshockDefl_ST", + "description": "LR shock deflection at 360 Hz", + "unit": "m", + "varType": 4, + "value": [ + 0.0489363968372345, + 0.048925697803497314, + 0.048914581537246704, + 0.04890322685241699, + 0.0488915741443634, + 0.048880159854888916 + ] + }, + "LRshockVel": { + "countAsTime": false, + "length": 1, + "name": "LRshockVel", + "description": "LR shock velocity", + "unit": "m/s", + "varType": 4, + "value": [ + -0.003934852313250303 + ] + }, + "LRshockVel_ST": { + "countAsTime": true, + "length": 6, + "name": "LRshockVel_ST", + "description": "LR shock velocity at 360 Hz", + "unit": "m/s", + "varType": 4, + "value": [ + -0.003934259992092848, + -0.00395496329292655, + -0.004060510080307722, + -0.004157243296504021, + -0.0041541350074112415, + -0.003934852313250303 + ] + }, + "RRshockDefl": { + "countAsTime": false, + "length": 1, + "name": "RRshockDefl", + "description": "RR shock deflection", + "unit": "m", + "varType": 4, + "value": [ + 0.04906588792800903 + ] + }, + "RRshockDefl_ST": { + "countAsTime": true, + "length": 6, + "name": "RRshockDefl_ST", + "description": "RR shock deflection at 360 Hz", + "unit": "m", + "varType": 4, + "value": [ + 0.04908400774002075, + 0.049080491065979004, + 0.04907670617103577, + 0.049072712659835815, + 0.049068957567214966, + 0.04906588792800903 + ] + }, + "RRshockVel": { + "countAsTime": false, + "length": 1, + "name": "RRshockVel", + "description": "RR shock velocity", + "unit": "m/s", + "varType": 4, + "value": [ + -0.0009919797303155065 + ] + }, + "RRshockVel_ST": { + "countAsTime": true, + "length": 6, + "name": "RRshockVel_ST", + "description": "RR shock velocity at 360 Hz", + "unit": "m/s", + "varType": 4, + "value": [ + -0.0012405874440446496, + -0.0013344705803319812, + -0.0014267974765971303, + -0.001405911287292838, + -0.001236040610820055, + -0.0009919797303155065 + ] + }, + "LFshockDefl": { + "countAsTime": false, + "length": 1, + "name": "LFshockDefl", + "description": "LF shock deflection", + "unit": "m", + "varType": 4, + "value": [ + 0.04764890670776367 + ] + }, + "LFshockDefl_ST": { + "countAsTime": true, + "length": 6, + "name": "LFshockDefl_ST", + "description": "LF shock deflection at 360 Hz", + "unit": "m", + "varType": 4, + "value": [ + 0.047780841588974, + 0.047753602266311646, + 0.04772692918777466, + 0.04770061373710632, + 0.04767462611198425, + 0.04764890670776367 + ] + }, + "LFshockVel": { + "countAsTime": false, + "length": 1, + "name": "LFshockVel", + "description": "LF shock velocity", + "unit": "m/s", + "varType": 4, + "value": [ + -0.009211170487105846 + ] + }, + "LFshockVel_ST": { + "countAsTime": true, + "length": 6, + "name": "LFshockVel_ST", + "description": "LF shock velocity at 360 Hz", + "unit": "m/s", + "varType": 4, + "value": [ + -0.009732718579471111, + -0.00964313093572855, + -0.009506264701485634, + -0.009412686340510845, + -0.009292279370129108, + -0.009211170487105846 + ] + }, + "RFshockDefl": { + "countAsTime": false, + "length": 1, + "name": "RFshockDefl", + "description": "RF shock deflection", + "unit": "m", + "varType": 4, + "value": [ + 0.047554850578308105 + ] + }, + "RFshockDefl_ST": { + "countAsTime": true, + "length": 6, + "name": "RFshockDefl_ST", + "description": "RF shock deflection at 360 Hz", + "unit": "m", + "varType": 4, + "value": [ + 0.047648727893829346, + 0.047629207372665405, + 0.04761004447937012, + 0.04759126901626587, + 0.04757291078567505, + 0.047554850578308105 + ] + }, + "RFshockVel": { + "countAsTime": false, + "length": 1, + "name": "RFshockVel", + "description": "RF shock velocity", + "unit": "m/s", + "varType": 4, + "value": [ + -0.006468473467975855 + ] + }, + "RFshockVel_ST": { + "countAsTime": true, + "length": 6, + "name": "RFshockVel_ST", + "description": "RF shock velocity at 360 Hz", + "unit": "m/s", + "varType": 4, + "value": [ + -0.0070065101608633995, + -0.006984491366893053, + -0.006851166021078825, + -0.006703393999487162, + -0.006570478901267052, + -0.006468473467975855 + ] + } +} \ No newline at end of file diff --git a/tools/download-track-svgs.ts b/tools/download-track-svgs.ts new file mode 100644 index 0000000..832e3ad --- /dev/null +++ b/tools/download-track-svgs.ts @@ -0,0 +1,46 @@ +import { readFileSync, existsSync, mkdirSync, writeFileSync } from 'fs'; + +interface TrackAsset { + track_id: string; + track_map: string; + track_map_layers: Record; +} + +export const downloadTrackSvgs = async () => { + const tracks = readFileSync('./asset-data/tracks.json', 'utf8'); + const cookie = readFileSync('./asset-data/cookie-jar.txt', 'utf8'); + + const allTracks: Record = JSON.parse(tracks); + + Object.values(allTracks).forEach(async (track) => { + await downloadTrackSvgs(track); + }); + + async function downloadTrackSvgs(track: TrackAsset) { + for (const [, layer] of Object.entries(track.track_map_layers)) { + try { + console.log(`Downloading ${layer} for track ${track.track_id}`); + const response = await fetch(`${track.track_map}${layer}`, { + headers: { + cookie, + }, + }); + + if (!response.ok) { + console.log(await response.text()); + throw new Error('Failed to get track svgs'); + } + + const data = await response.text(); + + if (!existsSync(`./asset-data/${track.track_id}`)) { + mkdirSync(`./asset-data/${track.track_id}`, { recursive: true }); + } + + writeFileSync(`./asset-data/${track.track_id}/${layer}`, data, 'utf8'); + } catch (error) { + console.error(error); + } + } + } +}; diff --git a/tools/get-flairs.ts b/tools/get-flairs.ts new file mode 100644 index 0000000..8830ec3 --- /dev/null +++ b/tools/get-flairs.ts @@ -0,0 +1,39 @@ +import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs'; + +export const getFlairs = async () => { + const cookie = readFileSync('asset-data/cookie-jar.txt', 'utf8'); + try { + const response = await fetch( + 'https://members-ng.iracing.com/data/lookup/flairs', + { + headers: { + cookie, + }, + } + ); + + if (!response.ok) { + console.log(await response.text()); + throw new Error('Failed to get flairs'); + } + + const data = await response.json(); + console.log(data); + + const trackResponse = await fetch(data.link); + + if (!trackResponse.ok) { + console.log(await trackResponse.text()); + throw new Error('Failed to get flairs'); + } + + const trackData = await trackResponse.text(); + if (!existsSync('asset-data')) { + mkdirSync('asset-data'); + } + + writeFileSync('asset-data/flairs.json', trackData, 'utf8'); + } catch (error) { + console.error(error); + } +}; diff --git a/tools/get-tracks-info.ts b/tools/get-tracks-info.ts new file mode 100644 index 0000000..83569c9 --- /dev/null +++ b/tools/get-tracks-info.ts @@ -0,0 +1,39 @@ +import fs, { existsSync, mkdirSync } from 'fs'; + +export const getTracksInfo = async () => { + const cookie = fs.readFileSync('./asset-data/cookie-jar.txt', 'utf8'); + + try { + const response = await fetch( + 'https://members-ng.iracing.com/data/track/get', + { + headers: { + cookie, + }, + } + ); + + if (!response.ok) { + console.log(await response.text()); + throw new Error('Failed to get tracks'); + } + + const data = await response.json(); + console.log(data); + + const trackResponse = await fetch(data.link); + + if (!trackResponse.ok) { + console.log(await trackResponse.text()); + throw new Error('Failed to get tracks'); + } + + const trackData = await trackResponse.text(); + if (!existsSync('./asset-data')) { + mkdirSync('./asset-data'); + } + fs.writeFileSync('./asset-data/track-info.json', trackData, 'utf8'); + } catch (error) { + console.error(error); + } +}; diff --git a/tools/get-tracks.ts b/tools/get-tracks.ts new file mode 100644 index 0000000..5a544a2 --- /dev/null +++ b/tools/get-tracks.ts @@ -0,0 +1,39 @@ +import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs'; + +export const getTracks = async () => { + const cookie = readFileSync('asset-data/cookie-jar.txt', 'utf8'); + try { + const response = await fetch( + 'https://members-ng.iracing.com/data/track/assets', + { + headers: { + cookie, + }, + } + ); + + if (!response.ok) { + console.log(await response.text()); + throw new Error('Failed to get tracks'); + } + + const data = await response.json(); + console.log(data); + + const trackResponse = await fetch(data.link); + + if (!trackResponse.ok) { + console.log(await trackResponse.text()); + throw new Error('Failed to get tracks'); + } + + const trackData = await trackResponse.text(); + if (!existsSync('asset-data')) { + mkdirSync('asset-data'); + } + + writeFileSync('asset-data/tracks.json', trackData, 'utf8'); + } catch (error) { + console.error(error); + } +}; diff --git a/tools/index.ts b/tools/index.ts index 9742717..d31455a 100644 --- a/tools/index.ts +++ b/tools/index.ts @@ -1,20 +1,17 @@ -import { syncTrackAssets } from '@iracing-data/sync-track-assets'; +import { downloadTrackSvgs } from './download-track-svgs'; import { generateTrackJson } from './generate-paths-json'; - -import * as dotenv from 'dotenv'; -dotenv.config(); +import { getFlairs } from './get-flairs'; +import { getTracks } from './get-tracks'; +import { getTracksInfo } from './get-tracks-info'; +import { login } from './login'; const main = async () => { - await syncTrackAssets({ - outputDir: './asset-data', - writeFullAssets: true, - writeFullInfo: true, - includeSVGs: true, - }); - - console.log('Generating track JSON.'); + await login(); + await getFlairs(); + await getTracks(); + await getTracksInfo(); + await downloadTrackSvgs(); generateTrackJson(); - console.log('Done!'); }; main(); diff --git a/tools/login.ts b/tools/login.ts new file mode 100644 index 0000000..3cbeaba --- /dev/null +++ b/tools/login.ts @@ -0,0 +1,52 @@ +import crypto from 'crypto'; +import fs from 'fs'; +import 'dotenv/config'; + +export const login = async () => { + const username = process.env.IRACING_USERNAME; + const password = process.env.IRACING_PASSWORD; + + if (!username || !password) { + throw new Error( + 'Please provide IRACING_USERNAME and IRACING_PASSWORD environment variables.' + ); + } + + const hashPassword = crypto + .createHash('sha256') + .update(password + username.toLowerCase()) + .digest('base64'); + + try { + const response = await fetch('https://members-ng.iracing.com/auth', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + email: username, + password: hashPassword, + }), + }); + + if (response.ok) { + const setCookieHeader = response.headers.getSetCookie(); + if (setCookieHeader) { + // concat multiple cookies + const setCookie = setCookieHeader.join('; '); + + // Save the cookie to the cookie-jar.txt file + fs.mkdirSync('./asset-data', { recursive: true }); + fs.writeFileSync('./asset-data/cookie-jar.txt', setCookie, 'utf8'); + console.log('Cookie saved to cookie-jar.txt'); + } + + const data = await response.text(); + console.log(data); + } else { + throw new Error('Failed to login'); + } + } catch (error) { + console.error(error); + } +};