diff --git a/assets/versions.js b/assets/versions.js index bf9d1fa..994677d 100644 --- a/assets/versions.js +++ b/assets/versions.js @@ -1,8 +1,16 @@ // Generated by tools/make_builder_data.py from tools/changelog.json and the mods' versions. window.CDJ_VERSIONS = { - "site": "1.6.1", + "site": "1.7.0", "date": "2026-10-20", "log": [ + { + "version": "1.7.0", + "date": "2026-10-20", + "changes": [ + "Builder: every mod in any combination. Our mods are the Python patcher's own code, run in your browser (Pyodide, from this site); arnoldasr's part is checked by SHA-256 as before. The update is the patcher's byte for byte.", + "New in the builder: cue names, played tracks, end warning, quick search, USB auto load, the WAVEFORM modes (BLUE / RGB / 3BAND) and the phase meter's REVERSE and room for the countdown." + ] + }, { "version": "1.6.1", "date": "2026-10-20", diff --git a/builder.html b/builder.html index de62991..f7fd10e 100644 --- a/builder.html +++ b/builder.html @@ -6,12 +6,12 @@ Pionaarr Mods Builder - - - - - - + + + + + + diff --git a/builder/builder.js b/builder/builder.js index c7741b3..6947716 100644 --- a/builder/builder.js +++ b/builder/builder.js @@ -3,9 +3,11 @@ // a new one with the chosen mods out. Nothing is uploaded or downloaded. // // Ports of the patcher's upd.py (update file), the emulator checkout's -// lzss_encode.py (packer) and patch_cdj900nxs.py's asset blob; the mods' -// bytes are in builder/data.js (tools/make_builder_data.py), with the -// SHA-256 of the finished application for every combination. +// lzss_encode.py (packer) and patch_cdj900nxs.py's asset blob. Stage 1, +// arnoldasr's mods, is in builder/data.js (tools/make_builder_data.py) with +// the SHA-256 of its result; stage 2, ours, is the patcher's own Python +// (builder/py/bundle.json) run here in Pyodide (builder/pyodide/, served +// from this site), so the result is the patcher's byte for byte. (function () { 'use strict'; var D = window.BUILDER_DATA; @@ -14,7 +16,7 @@ var ADDRESS_BYTES = { 0: 2, 1: 2, 2: 3, 3: 4, 5: 2, 6: 3, 7: 4, 8: 3, 9: 2 }; var LABEL = '1.32'; var UPSTREAM = ['extended_bpm', 'phasemeter', 'advanced_waveforms']; - var OURS = ['beatjump', 'cuecolours', 'hotcuekeys', 'ledsaver', 'keynotation', 'credit']; + var PY_BASE = 'builder/'; function fail(msg) { throw new Error(msg); } @@ -450,25 +452,68 @@ return out; } + // ---------- stage 2: our mods, the patcher's Python in Pyodide ---------- + var pyReady = null; + function loadPython(log) { + if (pyReady) return pyReady; + log('loading Python for our mods (the first time takes a few seconds)...'); + pyReady = new Promise(function (resolve, reject) { + var sc = document.createElement('script'); + sc.src = PY_BASE + 'pyodide/pyodide.js'; + sc.onload = resolve; + sc.onerror = function () { reject(new Error('could not load builder/pyodide/pyodide.js')); }; + document.head.appendChild(sc); + }).then(function () { + return window.loadPyodide({ indexURL: new URL(PY_BASE + 'pyodide/', document.baseURI).href }); + }).then(function (py) { + return fetch(PY_BASE + 'py/bundle.json').then(function (r) { + if (!r.ok) fail('could not load builder/py/bundle.json'); + return r.json(); + }).then(function (files) { + py.FS.mkdirTree('/cdj/mods/cdj900nxs'); + Object.keys(files).forEach(function (rel) { py.FS.writeFile('/cdj/' + rel, files[rel]); }); + py.runPython('import sys\nsys.path[:0] = ["/cdj/mods", "/cdj/mods/cdj900nxs"]\nimport patch_cdj900nxs'); + return py; + }); + }); + pyReady.catch(function () { pyReady = null; }); + return pyReady; + } + + function patchOurs(app, stock, names, log) { + return loadPython(log).then(function (py) { + var t = Date.now(); + py.globals.set('js_app', app); + py.globals.set('js_stock', stock); + py.globals.set('js_names', names.join(',')); + var out = py.runPython([ + 'import patch_cdj900nxs as p', + '_names = p.check_names(js_names.split(","))', + '_out = p.patch_ours(bytes(js_app.to_bytes()), bytes(js_stock.to_bytes()), _names)', + '_out'].join('\n')); + var u8 = out.toJs(); + out.destroy(); + py.runPython('del js_app, js_stock, _out'); + log('our mods applied by the patcher\'s own code (' + Math.round((Date.now() - t) / 100) / 10 + ' s)'); + return u8; + }); + } + // ---------- the whole build ---------- function patchApp(stock, names, log) { var up = UPSTREAM.filter(function (n) { return names.indexOf(n) >= 0; }); - var ours = OURS.filter(function (n) { return names.indexOf(n) >= 0; }); - var app = stock; + var app = stock, first; if (up.length) { app = applyVariant(app, stock, D.upstream[up.join(',')]); log('arnoldasr\'s mods applied (' + up.join(', ') + ')'); + first = sha256(app).then(function (h) { + if (h !== D.expect[up.join(',')]) fail('arnoldasr\'s part is not the one the patcher makes (SHA-256 ' + h + ')'); + log('arnoldasr\'s part is exactly the patcher\'s (SHA-256 checked)'); + }); + } else { + first = Promise.resolve(); } - if (ours.length) { - app = applyVariant(app, stock, D.ours[ours.join(',')]); - log('our mods applied (' + ours.join(', ') + ')'); - } - var key = up.concat(ours).join(','); - return sha256(app).then(function (h) { - if (h !== D.expect[key]) fail('the patched application is not the one the patcher makes (SHA-256 ' + h + ')'); - log('the patched application is exactly the patcher\'s (SHA-256 checked)'); - return app; - }); + return first.then(function () { return patchOurs(app, stock, names, log); }); } function build(raw, names, log) { @@ -496,5 +541,5 @@ }); } - window.CDJBuilder = { build: build, UPSTREAM: UPSTREAM, OURS: OURS, lzssPack: lzssPack, unpackLzss: unpackLzss }; + window.CDJBuilder = { build: build, UPSTREAM: UPSTREAM, lzssPack: lzssPack, unpackLzss: unpackLzss, patchApp: patchApp }; })(); diff --git a/builder/data.js b/builder/data.js index a36855d..be8ecba 100644 --- a/builder/data.js +++ b/builder/data.js @@ -1,2 +1,2 @@ // Generated by tools/make_builder_data.py -- do not edit. -window.BUILDER_DATA = {"stockUpdSha256":"e96bca7d1ac983985992a8e5fa7813e1ebf04bef514e0c6cfd0a8375f667f7f9","stockAppSha256":"1ac3e30cde292865413950fe159663b3958e85939ed0a5d0122f796809a5f8ef","appSize":16519056,"dataBase":150744320,"upstream":{"extended_bpm":{"size":16576352,"ops":[["data",145914824,"45b88bcd5afea839"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"advanced_waveforms":{"size":16636928,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9bed08a38f1020b6"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"extended_bpm,phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"9e7532da7f56183c"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"extended_bpm,advanced_waveforms":{"size":16636928,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"phasemeter,advanced_waveforms":{"size":16636928,"ops":[["data",135069542,"845677fae2e67916"],["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147243844,"d77596e8499df246"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"extended_bpm,phasemeter,advanced_waveforms":{"size":16636928,"ops":[["data",135069542,"845677fae2e67916"],["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147243844,"d77596e8499df246"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9e7532da7f56183c"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]}},"ours":{"cuecolours":{"size":16599808,"ops":[["data",144150352,"ac638ec83c8cae54"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",150796800,"0e8421a63d88c83b"]]},"ledsaver":{"size":16612352,"ops":[["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",147246160,"f299791cddd3d666"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"]]},"keynotation":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144173884,"9d16f6c1bba1e27b"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"f299791cddd3d666"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"dee05de8d71afb56"]]},"credit":{"size":16578880,"ops":[["data",146656652,"f445e63209e0be24"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"]]},"cuecolours,hotcuekeys":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"a09598a5264d6afb"],["data",146648232,"a09598a5264d6afb"],["data",146649044,"a09598a5264d6afb"],["data",146649196,"a09598a5264d6afb"],["data",147246160,"f299791cddd3d666"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,ledsaver":{"size":16612352,"ops":[["data",144150352,"ac638ec83c8cae54"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",147246160,"f299791cddd3d666"],["data",150796800,"0e8421a63d88c83b"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"]]},"cuecolours,keynotation":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"f299791cddd3d666"],["data",150796800,"0e8421a63d88c83b"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"dee05de8d71afb56"]]},"cuecolours,credit":{"size":16599808,"ops":[["data",144150352,"ac638ec83c8cae54"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146656652,"f445e63209e0be24"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"]]},"ledsaver,keynotation":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144173884,"9d16f6c1bba1e27b"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"ab897fbdedfa502b"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"6a4d77cb1196e230"]]},"ledsaver,credit":{"size":16612352,"ops":[["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",146656652,"f445e63209e0be24"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"]]},"keynotation,credit":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144173884,"9d16f6c1bba1e27b"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"dee05de8d71afb56"]]},"beatjump,cuecolours,hotcuekeys":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"a09598a5264d6afb"],["data",146648232,"a09598a5264d6afb"],["data",146649044,"a09598a5264d6afb"],["data",146649196,"a09598a5264d6afb"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"f299791cddd3d666"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,ledsaver":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",147246160,"ab897fbdedfa502b"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828908,"9fc0dfa509200025"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,keynotation":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"ab897fbdedfa502b"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"93ed1e943b18ad23"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"a09598a5264d6afb"],["data",146648232,"a09598a5264d6afb"],["data",146649044,"a09598a5264d6afb"],["data",146649196,"a09598a5264d6afb"],["data",146656652,"f445e63209e0be24"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,ledsaver,keynotation":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"ab897fbdedfa502b"],["data",150796800,"0e8421a63d88c83b"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"6a4d77cb1196e230"]]},"cuecolours,ledsaver,credit":{"size":16612352,"ops":[["data",144150352,"ac638ec83c8cae54"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",146656652,"f445e63209e0be24"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"]]},"cuecolours,keynotation,credit":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"dee05de8d71afb56"]]},"ledsaver,keynotation,credit":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144173884,"9d16f6c1bba1e27b"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"6a4d77cb1196e230"]]},"beatjump,cuecolours,hotcuekeys,ledsaver":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"ab897fbdedfa502b"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828756,"2e67d8cc8a6ce79f"],["data",150828908,"9fc0dfa509200025"],["data",150834368,"5f07a1c7e5c3cee4"]]},"beatjump,cuecolours,hotcuekeys,keynotation":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"ab897fbdedfa502b"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833200,"2e67d8cc8a6ce79f"],["data",150833352,"93ed1e943b18ad23"],["data",150834368,"5f07a1c7e5c3cee4"]]},"beatjump,cuecolours,hotcuekeys,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"a09598a5264d6afb"],["data",146648232,"a09598a5264d6afb"],["data",146649044,"a09598a5264d6afb"],["data",146649196,"a09598a5264d6afb"],["data",146656652,"f445e63209e0be24"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"f299791cddd3d666"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,ledsaver,keynotation":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246160,"83891d7fe85c33e5"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828908,"9fc0dfa509200025"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"66178b817fde140a"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,ledsaver,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",146656652,"f445e63209e0be24"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828908,"9fc0dfa509200025"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,keynotation,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"93ed1e943b18ad23"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,ledsaver,keynotation,credit":{"size":16616448,"ops":[["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"1f38751fbe9c8e00"],["copy",150828024,147245276,884],["data",150828908,"3a11950e2934091a"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"6a4d77cb1196e230"]]},"beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"83891d7fe85c33e5"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828756,"2e67d8cc8a6ce79f"],["data",150828908,"9fc0dfa509200025"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833200,"2e67d8cc8a6ce79f"],["data",150833352,"66178b817fde140a"],["data",150834368,"5f07a1c7e5c3cee4"]]},"beatjump,cuecolours,hotcuekeys,ledsaver,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"28dd5e2b2f412bd3"],["data",146648232,"28dd5e2b2f412bd3"],["data",146649044,"28dd5e2b2f412bd3"],["data",146649196,"28dd5e2b2f412bd3"],["data",146656652,"f445e63209e0be24"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828756,"2e67d8cc8a6ce79f"],["data",150828908,"9fc0dfa509200025"],["data",150834368,"5f07a1c7e5c3cee4"]]},"beatjump,cuecolours,hotcuekeys,keynotation,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"b40832cbfea8a56a"],["data",146166692,"6ba44de0586c7d7e"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"ab897fbdedfa502b"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833200,"2e67d8cc8a6ce79f"],["data",150833352,"93ed1e943b18ad23"],["data",150834368,"5f07a1c7e5c3cee4"]]},"cuecolours,hotcuekeys,ledsaver,keynotation,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246160,"83891d7fe85c33e5"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"c97ec5db67c03e57"],["copy",150811064,147245276,884],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828908,"9fc0dfa509200025"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833352,"66178b817fde140a"],["data",150834368,"5f07a1c7e5c3cee4"]]},"beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":{"size":16620544,"ops":[["box",150817984,424,63488,0,"HOT KEYS"],["box",150820640,425,0,16904,"HOT KEYS"],["box",150835200,424,64608,0,"LOADING"],["data",134226837,"0b2b89bc3015d85a"],["data",134277040,"ec409d90d36c9f31"],["data",134277136,"1121820250d3aa1e"],["data",134277264,"c9b3cdc9bcb746ba"],["data",134948828,"fe03389f8943eb44"],["data",134948852,"31a62e82bb5c9896"],["data",135069932,"f22472655acec567"],["data",144150352,"ac638ec83c8cae54"],["data",144173884,"9d16f6c1bba1e27b"],["data",144257356,"3bf2946e18115055"],["data",144629884,"cf91aec1c43d7e72"],["data",144647420,"c88c65dce86503c9"],["data",144648700,"0c434993dc238c55"],["data",144650740,"bfe6506030b13eb7"],["data",145816836,"b83d3c161a3414da"],["data",145945476,"f61749d9268876a4"],["data",145995618,"ab93ae83b553acd0"],["data",145996992,"32d1ae64e3779708"],["data",145997340,"7f65b2feaebd383a"],["data",146154152,"f528282873b9c40b"],["data",146166692,"62ab7ebb0d777c57"],["data",146505312,"b3ab5da5290d7036"],["data",146566136,"b945ef223d27a043"],["data",146588136,"236dcd14b24e3c3e"],["data",146601454,"38712f352f6a6c0e"],["data",146601494,"e7cf46a078fed4fa"],["data",146601840,"6b6137b48f13552d"],["data",146602956,"bc1f4f60395e9c09"],["data",146623168,"7856242fc2aab036"],["data",146647420,"8ba3a08b3786731c"],["data",146648232,"8ba3a08b3786731c"],["data",146649044,"8ba3a08b3786731c"],["data",146649196,"8ba3a08b3786731c"],["data",146656652,"f445e63209e0be24"],["data",147246008,"2e67d8cc8a6ce79f"],["data",147246160,"83891d7fe85c33e5"],["data",147247660,"95951541115495c3"],["data",147341798,"e9b0c031f0493d3f"],["data",150411660,"f22472655acec567"],["data",150427820,"f22472655acec567"],["data",150446460,"f22472655acec567"],["data",150464772,"f22472655acec567"],["data",150483012,"f22472655acec567"],["data",150501396,"f22472655acec567"],["data",150519720,"f22472655acec567"],["data",150538096,"f22472655acec567"],["data",150556402,"f22472655acec567"],["data",150572514,"f22472655acec567"],["data",150586894,"f22472655acec567"],["data",150601248,"f22472655acec567"],["data",150619142,"f22472655acec567"],["data",150637496,"f22472655acec567"],["data",150655730,"f22472655acec567"],["data",150673534,"f22472655acec567"],["data",150692144,"f22472655acec567"],["data",150709844,"f22472655acec567"],["data",150795264,"533413c9bab7d01d"],["data",150796280,"32a4adf302f1aa30"],["data",150796544,"c76a1882879da374"],["data",150796800,"0e8421a63d88c83b"],["data",150804512,"36237a495d128a80"],["copy",150811064,147245276,884],["data",150811796,"2e67d8cc8a6ce79f"],["data",150811948,"447b093f40d895d7"],["data",150812152,"3854155ee65e476b"],["data",150823379,"4f72ba82f5e21909"],["data",150825984,"4bf5122f344554c5"],["data",150826016,"cf1c0cd44bbdc00e"],["copy",150828024,147245276,884],["data",150828756,"2e67d8cc8a6ce79f"],["data",150828908,"9fc0dfa509200025"],["data",150830080,"62b05aa48751e9d7"],["copy",150832468,147245276,884],["data",150833200,"2e67d8cc8a6ce79f"],["data",150833352,"66178b817fde140a"],["data",150834368,"5f07a1c7e5c3cee4"]]}},"expect":{"cuecolours":"1aac029e66251bf499d2b1c96fb8ae259e2057e48d79d1a9bc8830f6ec6d7dc0","ledsaver":"a72fdfed0d9096a0f46797d2aed9eaf53f0539673e2b31cf682e71fada1c1f13","keynotation":"5fb46ad2ffa844ef6c08de85eea485b499b1b4a51bfa41a1935b3ff50f404398","credit":"cdbbeedd453c58439790d38d901efdb5be846a036f9a7fd0b8085faa05a7dc52","cuecolours,hotcuekeys":"bd9cdc44d7500740400853af36d311ce17a34388f23f0f0e6f632896c468486e","cuecolours,ledsaver":"51fb7fdabe5ae8680a43e8097845c3aee73e8c654a2e88a9325390a17bf5b0ac","cuecolours,keynotation":"51a0ddd08bc6a28bb021e11f0cec2e7d3513ba5e89c21061fb663f3a2bce9ec7","cuecolours,credit":"32bda897adba378c96154008eb43ca38a257dec26f94506b8819d96a185f85fa","ledsaver,keynotation":"691ac4fc3e9c9f2ae238d7e84cbf496ba279fcb83013708d0149eabb9f01d00d","ledsaver,credit":"8173b9240f82db6a0066372c6ff030ede8e3288977212f8e998a4c786c3415f8","keynotation,credit":"a95188c561677505ca0ca825d89c73b0fec2b4819eaaa25f009858a10f575bc3","beatjump,cuecolours,hotcuekeys":"a774eec750ff150b29dedd700f9039897a2d4804c81a5330af108e5208ef1634","cuecolours,hotcuekeys,ledsaver":"8e6e4170bce1c53915477035a3bed5a38f8bb1afeb7920b8c6eb3a2ddf63fe8b","cuecolours,hotcuekeys,keynotation":"e9b2c71ee2ef0c01c088692acf7efd8615683aea1f596b0dd340968fad544d1f","cuecolours,hotcuekeys,credit":"7b2925f5d77aff306163240bce872be03b10fcacee8f33518489d3be02490802","cuecolours,ledsaver,keynotation":"e12bf7f7f740a42c123efbb12617ce006e816dc66dff4d3b24dbc964c989a515","cuecolours,ledsaver,credit":"0bee49eed34120121bc12fad481d6633eb28c7aacf67674532233f4e5ff311f5","cuecolours,keynotation,credit":"2b13ed2bd5564370bf3a9bf1fa149cb83bf04c9f8cfcdd47e7de85ff9224b5be","ledsaver,keynotation,credit":"51bf54def89b4ecb994761d08bd10d2b01a92b80902650495c0e5b7f21b66462","beatjump,cuecolours,hotcuekeys,ledsaver":"20d8eeaa545380ed8cf68c000a9358ba1d48cc94512a9e26e000e99ea10a2bf3","beatjump,cuecolours,hotcuekeys,keynotation":"f8f34a0aa4d50e6963b14cb9428cf6dd93d2339c3d3bac2c00978bd77aa32abe","beatjump,cuecolours,hotcuekeys,credit":"a067a7caafcc10d329e0d6a39853e70a242c35e36fa59d6a22d189c27a8403bc","cuecolours,hotcuekeys,ledsaver,keynotation":"9216fbb694685c183a8bc777ea67e1cad1c8dbb5aaad629decd2c70a68e1045f","cuecolours,hotcuekeys,ledsaver,credit":"93bd790aaf9061d15e0d7ae292af061ef92d885f00ce67ff3fa504b03f6bc6aa","cuecolours,hotcuekeys,keynotation,credit":"f2cbd5ef249cc1c1c71e80c63204b864a7da960deef2b78cd3335ed4b3f7cd9a","cuecolours,ledsaver,keynotation,credit":"d7bb80bff0cb78b1e9024f62a3c7b1fca1559e8e43e04bc3851a4bc8657f406b","beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"e3c306d6581f7943d253a44af863f29021395ba474d2fa48f9c24de87999db55","beatjump,cuecolours,hotcuekeys,ledsaver,credit":"f00b6eaa3219749fef2d3ad22a5d10751802115a252504d79cd91a192eb41fca","beatjump,cuecolours,hotcuekeys,keynotation,credit":"f24c6b3dd3e545e8e1beb61607f6550f7ca424731b9560ded9f6aa970a2cd93b","cuecolours,hotcuekeys,ledsaver,keynotation,credit":"25054be492d05bb5129d308a185f363c0fea56e247b41928bee1b13cbe0b5769","beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"3c77d10d536d407792b3ef04f9c193f02fa14413152d35a173ab039899e1796f","extended_bpm":"1150cc0099d890fb4b9e09cf19f03464106ffd5fd04b1fa940d5af0b41008c4a","extended_bpm,cuecolours":"2f5e3abde1c9c6418d92aba1a4541591319649f3b735078ca21270d9dd412656","extended_bpm,ledsaver":"3ff12eafdb2fa13571e3e00fddd9627711300e6a3fb7240f2e3743b0ecba40cd","extended_bpm,keynotation":"9b76cc53944121361d58bfea1e8b4c9debc71d207ac4efc88e38dd4e4bb1fb72","extended_bpm,credit":"5ce2c13313f4f29b75d03ae3076aae93230940ba30689c1413eea6665f70335e","extended_bpm,cuecolours,hotcuekeys":"2b672eac2ffaa726a31a1e042cb1cb790a60f3998c10eab702aad4b6eb16123a","extended_bpm,cuecolours,ledsaver":"08fabbbd317ba8b9fb3b412c7f8958588eef6c7f7ffc58100935cec9e05e1148","extended_bpm,cuecolours,keynotation":"cf770ec044ce8a7918a422cf15c870aad1569583b151b6753fb1516429893921","extended_bpm,cuecolours,credit":"82dffa160f056916a505bfd820653c0098b4a1aca86b499c3bdb67f17270da5b","extended_bpm,ledsaver,keynotation":"4ba383dd26ebcc50d68568a65ec7358aec6025a4ea02a95bfd6e1b6485835849","extended_bpm,ledsaver,credit":"1b48a24ef744b2e2ac4f2952ae72c717ef554abab3ce8c46049b714221c31e67","extended_bpm,keynotation,credit":"11e856e2ae0b72eb951ee4d5991a7d82dda57c7c5439bd4a7849573b09ba4e5b","extended_bpm,beatjump,cuecolours,hotcuekeys":"ca38e860c53ca2635c32c1142280f09afb4a645a297efa5b16fc9674ddb92a7e","extended_bpm,cuecolours,hotcuekeys,ledsaver":"8b786af1d9bc75e49f378ae2ba187879b2b5dae420ca7d2d718ef24b6c98cc04","extended_bpm,cuecolours,hotcuekeys,keynotation":"ecfa853b7b7989c7a5294692b948f52f5e7ebc7c85140e6c51929f80d0cfeb15","extended_bpm,cuecolours,hotcuekeys,credit":"f413931132be737dc402ee116d3067a79d85570d78f38a935069c2be8fe10ca1","extended_bpm,cuecolours,ledsaver,keynotation":"5c1f98331062d9331e0a9ec4ba4857ff2094cdb6f00511dace0dcbd4b5c3185f","extended_bpm,cuecolours,ledsaver,credit":"086651804015677a792b75f5de2ce023f13e22f25a8b0c5fa4370cebf4939dfa","extended_bpm,cuecolours,keynotation,credit":"d8b2e991bbfd8adf3e1b085d985203ff0333514274e7d5e6dc08396d44a851ff","extended_bpm,ledsaver,keynotation,credit":"ae7b3cb4f642aad0428b77c5bc02091837f9059b2b88f3712ba7c955eabf19e8","extended_bpm,beatjump,cuecolours,hotcuekeys,ledsaver":"cafdc27faeb3fd34f466aee8204b2d52420b29ff2919ec0f30bfa8ecbbf68d73","extended_bpm,beatjump,cuecolours,hotcuekeys,keynotation":"73306cc9118fe2fb2f2dfdef35379162596a78207b8978bcfabf7877f838291a","extended_bpm,beatjump,cuecolours,hotcuekeys,credit":"282298a378f58e01fd239dd5159fa2b05c7fea16d1bd04e5de8025718331fc1a","extended_bpm,cuecolours,hotcuekeys,ledsaver,keynotation":"ea81bf55e8a627b46ec50fac34e9ab4d7928191072b9fe6ec03cc7528c638517","extended_bpm,cuecolours,hotcuekeys,ledsaver,credit":"59887f61fea11afe66f404f95c66b6ed0f9ca9c17782df3d0576d99d72b65e9c","extended_bpm,cuecolours,hotcuekeys,keynotation,credit":"1dd7d78abc0569c01de878b10aae9c80934a69c4c5ffb11acf4f748170f586d8","extended_bpm,cuecolours,ledsaver,keynotation,credit":"3c96d68846da8aa9939abd06d793ea623c5bc26663d9fe32e29976de4e042023","extended_bpm,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"574509de366edcaceffc34e0ce68d8f8039382938871afca7230be92ffec9de8","extended_bpm,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"b754ee38795fbce4cfd2f05721e8c760ff3e41dd1da90772be837c225ee655fb","extended_bpm,beatjump,cuecolours,hotcuekeys,keynotation,credit":"386ac4c7e1880864930255688613fb4879e78cba93e599c51a4909ea4c614592","extended_bpm,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"13cb775daf0c4e78bc1359661742f2db15ee4d1bc6640b34feb65b0481374f5f","extended_bpm,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"f05f2dfecc71a1d4dc3688798163fb6ed5d9a0c22710c5841dcf1e9c15875b01","phasemeter":"dca533375e39fed109c5b35aef80bcc036ed4500ee2e67f8f3ea3bb0309cdedb","phasemeter,cuecolours":"e36e04deae7929d0618f25b37786a4e9f67fa975a7db269080469038ef823dea","phasemeter,ledsaver":"13ed14e1750ec1ad52811773f6f5d82c8285e49cc0312f4faa2e52d4c6e69250","phasemeter,keynotation":"f80ee1c97bd057ff69ad1744fb03b83e81e5580de4c2a3a84de43d8e045a446b","phasemeter,credit":"9b6c48e501f784c65d157147fd07c9a3d0585ca5de7b5c6bc6e12dca23f55f59","phasemeter,cuecolours,hotcuekeys":"80d865536ce01578866168165cc2f42feb52344c7897abeb93e6e22d51da5320","phasemeter,cuecolours,ledsaver":"26d9d91831e283758960071f65777043e299a47784f48ccd0780983aff760666","phasemeter,cuecolours,keynotation":"f48f07a53fc61b18a25e517f8076c98b8d868ba14b22caa45b4c0a32e6dd7659","phasemeter,cuecolours,credit":"d043a66826387cc18f4661882d096ff6a73729e15e15e7ba668fff95d9efea42","phasemeter,ledsaver,keynotation":"b2fe2baf885563e413af08bbeeb98153bb3ac54fe5371a47db3e87f695ee4ecf","phasemeter,ledsaver,credit":"ae6f07e4823803feff9ba5ffc99c5a99bd6fd7528e399c196a1ebeb97cad5227","phasemeter,keynotation,credit":"c573d59e528c5c987850527490e6e4cf4491c02219cdaf8558fe2e9640934937","phasemeter,beatjump,cuecolours,hotcuekeys":"1266c4123bece1a4b689051abd3008774f7e67048c58ed0292dccea00a8cd310","phasemeter,cuecolours,hotcuekeys,ledsaver":"3efb4317327b25302be3aecc688400520e238b40eccb53f4a6c386ee39ea087e","phasemeter,cuecolours,hotcuekeys,keynotation":"0e9c37ed075bbed11a959d158bba259de03c37b3336a55473fa44cc1d6644b6c","phasemeter,cuecolours,hotcuekeys,credit":"c9b64f051d3c64f01177546b69c27b3d1880bef25dff6fba66a11c140eab9d6d","phasemeter,cuecolours,ledsaver,keynotation":"4a99a854b011eb23d628f693c35170735b37122c4a3bf3ba8cdaa5147c10da9e","phasemeter,cuecolours,ledsaver,credit":"c35edf3819e63a2305b08e8611fb7f215f9e7c809a3cfedec76fbb741fc5d70e","phasemeter,cuecolours,keynotation,credit":"c8dec55c9c7d97d483de2ccfe4e29afe9af06327ecdb859ea6310e13a8f83252","phasemeter,ledsaver,keynotation,credit":"e1f23ec60f7a298c302b3ab3906f415b8f286ddcaa4e4c2b96a980df3da64b39","phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver":"eca4455d6c342bc2a250de9eb47a03a6e722a3b2ecdffea7adae4cddb7c2e4db","phasemeter,beatjump,cuecolours,hotcuekeys,keynotation":"15b74f5a90ebc4a4f88160eafa91f7294515af1a08671f59bbbb2ded31b202bb","phasemeter,beatjump,cuecolours,hotcuekeys,credit":"80c4dfc12b1bf40ebb1e1f8fe3e54a7ad46a7ccd46bf38cbb07c790fd1dd25be","phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation":"36d4e583027d1654baec4495cd90e50a12c02a12fa717c638e861a503c077a65","phasemeter,cuecolours,hotcuekeys,ledsaver,credit":"54b0ca96c90eec81e89fea09279baa7696752f550db9cfaa2d4f11c71da3308b","phasemeter,cuecolours,hotcuekeys,keynotation,credit":"180210eb4e94fa560106c28e4c9becb57aaf0a9b6a32e35edcd3c4e05fac7965","phasemeter,cuecolours,ledsaver,keynotation,credit":"85193b32de64671a3b36ec7740f2d7f0635bcdeb509ee29b1d0d9db8ff623c48","phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"769d73fa4788cddf309007e450e64dbc8b9737ba8eca2c3f7c82aec6fd47a6a0","phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"c5fff01f2a4633da77913b70e9cbc5b7f682dd41c0c7a3b619d7534a946a0572","phasemeter,beatjump,cuecolours,hotcuekeys,keynotation,credit":"7b7832a17837180370121b9a75f66641cfaf755ad5e43058050da030f6e56519","phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"32628e6460f21baac5db9abdd0771a5fa2bc30d5981961c51edb4ec02a1fd933","phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"4f61ff9cd068afbf21a2feb38b7d23530daf1de5a20767e4c8b51b5cc72e1686","advanced_waveforms":"d91dbf251c1c92ff06b41c28582e78fe2611d7e419b6cf0e9bdf7fadf8eb723d","advanced_waveforms,cuecolours":"def7fac94fb680b6d73408a8cf90b65eeb73ee33c42716af3b157c88d73d8fc4","advanced_waveforms,ledsaver":"e68f3a2e53850fcfb694aeb9f28633b6e9b3c263b4cbf390b8e2167370fc1fa7","advanced_waveforms,keynotation":"b086305c5c4ff511a0bae36e4e017f7ce1630a2ffb3a1751741ed96572cb68c6","advanced_waveforms,credit":"4183c880f0acfff95ffca0fc43886fa17bf9259928d3aad487b84039f2165218","advanced_waveforms,cuecolours,hotcuekeys":"479e5b0a9092e014ac6f8dc8924cbd91dd7ed86e7d790466aad6dc91d5948db8","advanced_waveforms,cuecolours,ledsaver":"b3d95cb865e6ad7e1d522b38f4765f58094a62233749766d68036eeda6e9a6a3","advanced_waveforms,cuecolours,keynotation":"4bc77f53448002ed97551d4b07311714dcf72ec52c1531394e74885dfbd27c00","advanced_waveforms,cuecolours,credit":"be9826fa775e8efb97bb4c3dc7b84c81cbc77e46bf2bd1755f43a5ae0c32ef65","advanced_waveforms,ledsaver,keynotation":"d5aed28d49ccee023d9d45225b86456db2fe6d04d44080927267c1f8dcfbd539","advanced_waveforms,ledsaver,credit":"2faa62d923ccea3fe7811a11cdcdb9ba1d0655356a7328f41ec18df7b82ed0a3","advanced_waveforms,keynotation,credit":"6f923448ebca9bcb84481075991a9b6bb1ee045131626c6c984dfc82b28889fa","advanced_waveforms,beatjump,cuecolours,hotcuekeys":"a3e405fd39f2ff89b7f07a0eb8f758c3b4836ec9b09a445e8a0436299a975120","advanced_waveforms,cuecolours,hotcuekeys,ledsaver":"d08ff748fcd7267fa90662433bf0205adac9901aa471cd5363ad389128552186","advanced_waveforms,cuecolours,hotcuekeys,keynotation":"436fb803178a5f663d7754ac23eb2fd37c4a4628d5d1e74dcacab3eefc04389d","advanced_waveforms,cuecolours,hotcuekeys,credit":"2c93fcf3029ae173ab8b3ca92385322030a6fcf4e7456f454d52e2fa7dc96966","advanced_waveforms,cuecolours,ledsaver,keynotation":"864305cbdd5f97a8d8f643b54d353b907685fb53a96364a28a3f3481c5c17c45","advanced_waveforms,cuecolours,ledsaver,credit":"e868e633fd0af24c5d9c9fa4c6835f53926cec992d4f8ac33a0168fbe82771d0","advanced_waveforms,cuecolours,keynotation,credit":"32a8360e6dbc59e31285f7a02166483eb9270a3b543d2cc13287144d9244ff6d","advanced_waveforms,ledsaver,keynotation,credit":"986db6382e1b246b3e7437fee22840854a16ab58d645bae2e38fdfe4591112cd","advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver":"7e74feb95e81abb4dcf7a1da1a71538eb2fb2bbb4fe7373371729a7d6f050996","advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation":"fe325f5847f48bd5b3692ba7c28153cc0da5f1158e54cb0d2ef0c3d33511895c","advanced_waveforms,beatjump,cuecolours,hotcuekeys,credit":"c9a5867a0d23cc49bce42e996ca046f310dfc24b14afd5acc1bd37880b975770","advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation":"c4a76904946a229df4f10d531c2460855e29972805afd2311b477943545a8798","advanced_waveforms,cuecolours,hotcuekeys,ledsaver,credit":"b13eb7ba23d88b11c22d3dbc20841134b50b3a6139287bd6393a080a2485b79a","advanced_waveforms,cuecolours,hotcuekeys,keynotation,credit":"612d1010dd584a30755e76a41d082c5d4fb29ec5d15554252ee60aa8f82a4436","advanced_waveforms,cuecolours,ledsaver,keynotation,credit":"410309a6cb9fbc99e27a5cea11456e4ae9efdc90265b70fbc49170feb2aba756","advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"69a8823a9c00d20a91ce11e097d3eb71db23b0f9c5ce8afc7ddf80f6db7c2c16","advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"c8165ebc6b8299f6762ff347cd9e5436e199765755702edc697b0aed083a2c7a","advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation,credit":"92077fc1b1fc7d116eaea876d653357cd4ab3ccd50976abb1a38f9591603fa2f","advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"150a2114ee62dccb01d56243e474d5dbd273ce6c65de7820d777f3ecf6bff34b","advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"a59d839c0546e87e6c2646629447d93162ca8b2e072f515ed99dcea91f747091","extended_bpm,phasemeter":"5c663e5fdb53c791a75ee45de1a0875eb83fd247534a916403427cb35e578f14","extended_bpm,phasemeter,cuecolours":"53aabb8562d5cd390da08d48e747edb90e7a811dc0f8a5c16860c3e53a0606c4","extended_bpm,phasemeter,ledsaver":"9ac0a6223d37aa09ed7c71b53d18a3f791646882ac2d5c4d149f0507977875de","extended_bpm,phasemeter,keynotation":"ea47747445f7fc6bbae262bf17875c63ce14b8f8b834a5817a494d554d0533ab","extended_bpm,phasemeter,credit":"3eac8591830185176f578076dc7fd2ee233c30bde2fa38a0afb6f7470241c837","extended_bpm,phasemeter,cuecolours,hotcuekeys":"193f501e567f7b41ea024c83102f742c7e8b44a0be016974e5d700d34759f07a","extended_bpm,phasemeter,cuecolours,ledsaver":"c1061166b4c7f9b54a987807124a4899aa1787eaf00c82e2c5baffeb2d8df6fe","extended_bpm,phasemeter,cuecolours,keynotation":"a3972dc605ab8c6191890026a237e6f2da3d336ed66c773ccb8cd9301f9442ef","extended_bpm,phasemeter,cuecolours,credit":"7c787f4833ded375230bfbbc584996eb7e1f7f51623e316e4d8ceb8d37edf91e","extended_bpm,phasemeter,ledsaver,keynotation":"34e45e8358b583e0684ff984b22112dafe076837880974b6499a534f136d596e","extended_bpm,phasemeter,ledsaver,credit":"54dfe2b040666cb9b8b808bae55e1f12216a5c75c9c89ee91744ef5bb62b3f5b","extended_bpm,phasemeter,keynotation,credit":"43c96006e53ea6eb5e9eb0d519e3b25801c6d8693142ea33420cbfa559a677e7","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys":"a4332fcc0597d1999ef18c3afef8d369b49af0fa5ede0517c41bf10d59b32621","extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver":"0d99b708932a5ff071776bb694a1ed5b59b54ef0b1e3c9ca47f421f22bee839b","extended_bpm,phasemeter,cuecolours,hotcuekeys,keynotation":"5edc998f835cf5891a5f24a7a4b315f15c8d5480a251c22d85301699b7794dee","extended_bpm,phasemeter,cuecolours,hotcuekeys,credit":"b2d58eed5c0887950f207dd7aa520e79a324566abd7d620372596af47f08c1ca","extended_bpm,phasemeter,cuecolours,ledsaver,keynotation":"afe8bef8adf53867b9f70a57fb9f98d363ebb91521770d023cf9c83850bc178a","extended_bpm,phasemeter,cuecolours,ledsaver,credit":"e22bd1cf8b8633303b149ac5ebb12f892354d0112549cb4f24b8f5e82736241a","extended_bpm,phasemeter,cuecolours,keynotation,credit":"694c139b93852110f92d2b23f84c7a7254aa622c75379a01d1f13db185ce564f","extended_bpm,phasemeter,ledsaver,keynotation,credit":"91314180b8a41edbe30305b1a04dd5928d56f6fcfd7be78f46f92d4e5baeb3bf","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver":"f474a656020c084f16c3172eafe567df9245f8243723cd3007a7044ce4c9fb35","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,keynotation":"cfa4d13ca5b975273dd13fb5a00b7ef85bf319acb6e2fd7e9e90f24c73103209","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,credit":"06cb99ff1a21c7a45c1ad089de6efbaa8987eefa4e4e1301c7d327df64aaec7c","extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation":"ac0bac7294c49f39087a37cf06ece76e5552abb754ca79af14cf207ffa1b743c","extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver,credit":"d6de3e743023b5197f7462d63b95e6ddd2d1b35133f0bfdf4ca64de466dcbc01","extended_bpm,phasemeter,cuecolours,hotcuekeys,keynotation,credit":"fe67b2bc28c1371caf861f9d15c8868d814eca6bed2b4e97b12471a7683a0ad3","extended_bpm,phasemeter,cuecolours,ledsaver,keynotation,credit":"ef8c3597a56ecd464f3880a74c2085deb02887e167bec0ddb92b9f707454c3db","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"0211d5a80134150c86b0136fb0eac62e46abba3679a7043ca247b87d0abae872","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"498722b801d16c57b434e824275dac584f57fc6f7d037f20e2e683f7d45fb3da","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,keynotation,credit":"1ba7169d466db746d03985865e2af631b10ad07c1ba70706cdded1c5bc49e279","extended_bpm,phasemeter,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"1db415901c4803f75cfaafcd5e36823d9d7bf62102f983980c61e848692a031b","extended_bpm,phasemeter,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"91e03242dad0e2985a3230bc596ef0dd2ea74ded1915ad193e82438771348a99","extended_bpm,advanced_waveforms":"9b74c6fe5760b86c81217dc536ae98c2bf2f23f7552818ff1519f06862265b33","extended_bpm,advanced_waveforms,cuecolours":"4a65f761eb9e1f70863dbbe700647a07f2a466b4c7b03ccd46932dadc7d7628f","extended_bpm,advanced_waveforms,ledsaver":"fab0c3921b82a76b9db6a5c9de2c10ced66ae05d8d9a5b455e9708bba620d0b4","extended_bpm,advanced_waveforms,keynotation":"30d378b0222c80d7a1c436a88da0afb15ad7176844f983dcfb924b572be901d8","extended_bpm,advanced_waveforms,credit":"acbe5bcc9dbc0ddd338d73453346baebcb0b626dd1767f1efc67171687c95611","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys":"f12de702b1dbcb5d057675b2a2937df34b2e8597236e68493a4f85e78212c396","extended_bpm,advanced_waveforms,cuecolours,ledsaver":"cc2443c943a0ad80e1502d04c8cbe2dd6481d4b58775044b12e3f7f8a1308255","extended_bpm,advanced_waveforms,cuecolours,keynotation":"9009d80ddbe81ccffc0a6b5bc80dcc02e07896750fd5acbc4299dd75e71b93f1","extended_bpm,advanced_waveforms,cuecolours,credit":"afc44649227125c318872edca7d93030d9df2f934873b4090bfdfd205a10f96e","extended_bpm,advanced_waveforms,ledsaver,keynotation":"8ea53dfdfc12ce33410f3d6bb3f0bfddaf77093bdbecf7d1ac297f48c5b470e9","extended_bpm,advanced_waveforms,ledsaver,credit":"01a46f77954aa2f482a0baffe4375a92d63f0adc622689d4ac518907bd6a8d4e","extended_bpm,advanced_waveforms,keynotation,credit":"cc81fcbb1402363a64b32d5249492545e8bb0289577a3391a5b140eed515b1be","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys":"5efb7c466e1b53253e04aec2efa99b3ae6f44875af685ed4f6852d346c4e278f","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,ledsaver":"8293633aae2926f2f15fc1897dbf1fa0206f46633ca8542dc2684bd751ac1e41","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,keynotation":"d13c3f9182a3c60659ba9ad10040a16d9a91d8a1e2e83bad0ff41164dfab896e","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,credit":"aced28c262fa6c9b4692167846bc89b10984e743e7a7e5e47a25baffe4bf5914","extended_bpm,advanced_waveforms,cuecolours,ledsaver,keynotation":"1fc94b6e2535c8a2c248d7a0c6516e15356bd54ce9b2f295ad2111ad34c09170","extended_bpm,advanced_waveforms,cuecolours,ledsaver,credit":"0d19dcd63cb29a30f99a75dc186e4b3911db164c7457bfcfab87a7f7ed0d52f8","extended_bpm,advanced_waveforms,cuecolours,keynotation,credit":"3eb4bd5789d38d6df185945f738fb8a00e2fd1280b31eb04d66b37ca5c8c8a4e","extended_bpm,advanced_waveforms,ledsaver,keynotation,credit":"5589500080ecfbd08e3f06d9b46ae11ef8214e2d37207c99b3344e461e33e9c9","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver":"7099a80d8ba1b00209df31af70d714388853d28908bc711593c4d6e6160c165b","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation":"8c1fcb4505adc2eccf7d3d9e87e9b732b9383985c2a7ff9513fd3a9f846f8943","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,credit":"2f73dc9c1febbcebf08ac62af39b5f012bbb096dfa60297debc08e72189cef8f","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation":"1d2e6c80df78b592944a74c70276c99814a8051ab73daa8142ca25e89752f19a","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,credit":"edd86e367278e40915573f72d17438b13587b805dd4c1b40dd13334b82ad9c6b","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,keynotation,credit":"3c944f0c6212d791b5327e7a8857cad0089a73959f87baa77f9ac048fcf8c01b","extended_bpm,advanced_waveforms,cuecolours,ledsaver,keynotation,credit":"cd2ea4211d05914816c4d1cf8b75951e453c490b9c43ffd6513d9c0ef44c25c9","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"3d223491ece5ca63b2068e6addea06eb775a864915bb395c809ad80369dbef3d","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"62825002aa87f758d1ee9a0534bbd4b5eea5e333f9ca53c539010055d9fb6231","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation,credit":"7cc2a6730317d386facb016671e3448ae6cf9e881aa501d42e1c4c9c94c97756","extended_bpm,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"e7082b722879a698dc762ba07ba8d0b456d803536d54c31b2e2268fea0e18a1a","extended_bpm,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"2d62bdb789b2bb959a70357ae137f3b413c0de6f166480ade16605db90434ac6","phasemeter,advanced_waveforms":"3343e8ee244a2afee30f8ca950019be6f99d3d4ccba702cff50913b342a02c1f","phasemeter,advanced_waveforms,cuecolours":"d08e78bf6c357448081fc398b97120a7068d1124ab76f75172ded78c4e0ac97a","phasemeter,advanced_waveforms,ledsaver":"73b81991eb4cd308b5b9416a54766c77d8d8da569e4fe00510c3960eeb5e6946","phasemeter,advanced_waveforms,keynotation":"0919168c63ddf1aef808ca71cf2317b920f3401bf96cb4e323d879b7fed063a2","phasemeter,advanced_waveforms,credit":"cddb7eb8fb46a3244e685ad40a402ded731e5f0a5ddeca404052a3cc3c3436df","phasemeter,advanced_waveforms,cuecolours,hotcuekeys":"80fb392739e098d55c14799a3465d18eb3e59611d670f24ffbb8406493d293d0","phasemeter,advanced_waveforms,cuecolours,ledsaver":"2129e4964e34da2a3d53705201ee0cf61e8bc2672d43cdc6b98d3f22bef7eeb6","phasemeter,advanced_waveforms,cuecolours,keynotation":"2f6425fba3f0e9d8aa6d8b22e2d1db0e5bf5749c0efc6132f69cc8b70cf3f0e6","phasemeter,advanced_waveforms,cuecolours,credit":"40c3c1973429ec494da1e10c22f3466d168d1110dfaa44ff2c35c40f76db059d","phasemeter,advanced_waveforms,ledsaver,keynotation":"384a35d6d16c1701ba6f4bb376ded40d072c43ede105377348cf24118c23051c","phasemeter,advanced_waveforms,ledsaver,credit":"9024562f74fdff67f33b041a6d8b3aa77cbb9328e572b75b3fed906fef2730f4","phasemeter,advanced_waveforms,keynotation,credit":"22b464556e54de8a7d1ccaf4a282e941c11e6cd1aa7140e8a4206c5beae74536","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys":"9499df99c522d8bd22472186a62a3b25ec6078b68fd04735f89081f1fcc489ad","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver":"577ef46b69d0a90b8059b18cfb09af0e4212d783499b259c7fb458ee002e1b49","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,keynotation":"4401a8b986632570e12bc0c6983fea2fae31bed7f52851888eab22195c4bf777","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,credit":"e2b064822aa53eb1b89ff4ab7749490e8e607cfd521a530b5f2df6338ba8ac7f","phasemeter,advanced_waveforms,cuecolours,ledsaver,keynotation":"6cc74cd1b0119f2c666ac95d8c07a8d62fb60d7f042df22871a7c7c6882fd242","phasemeter,advanced_waveforms,cuecolours,ledsaver,credit":"f97f9c8bc6455d75a176743fd0247cb9bd96a3ad4e1e0aafccc045ec0d2263f8","phasemeter,advanced_waveforms,cuecolours,keynotation,credit":"af0e5d9a9c15ccf01654b4d8eedb82cda568c8f6cfafc3a0d679f200b9b5bd19","phasemeter,advanced_waveforms,ledsaver,keynotation,credit":"bce50af7e9f3644fbbd2f69f7f4c95e1ec03ebd51e20f521633c536e7317e592","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver":"70209e52f8f3f214e08f011c27660d2b3fea8ddc2927cd9d4f6011d0f6ef356d","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation":"48e70edd12fb1346b538168b9347d95ba19b8ce09dec91fbaeedc9517dbe309a","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,credit":"d7fb83216408d7f3d77f341a2bb9822286bb569b2ddc23aee5bdf4162d7aab28","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation":"9373c0029baa3f3c115129c9afc3aba34ddfe03268d2277b1bd474bbafb77958","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,credit":"f205c7591be411b78370ca3b684be053dd57bd96af8a3bf86cbb0916ad9b93c4","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,keynotation,credit":"419e6385c1704a44e9f8b440dd7c566ead880f06671ebcd67c1cbdb88d06acae","phasemeter,advanced_waveforms,cuecolours,ledsaver,keynotation,credit":"9306b2787646cf1e32ebbc63214e73d525e4df15d3f8654de8e09de032bbcd53","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"1454dc3dac752531dc290700555844eb053436379c241005b672973402f562ba","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"1c30c0864a11699343756f8645295622eaa114104bacafd5ff72fe72792d2a4a","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation,credit":"ae3b3faa1e3b51943b201326e9fda739d7d1c8b742d9bc27ab11e07b78f4d2d9","phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"8b23cc955798599129f2bec69ff65de6c355c767505766d3711e1da65dda4a30","phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"f6105c73186ab1e1c2f264f00a0616f10532aadf881de93025e9790e5598bcf9","extended_bpm,phasemeter,advanced_waveforms":"cb991e829faf76cd8a64fbdc6a52852aac4daac2aaedd2f32a59db3bf222007e","extended_bpm,phasemeter,advanced_waveforms,cuecolours":"c3c62176d804546f003c27d4bf5ba9e4a8b72d56e651356a2cdecd16bf33614a","extended_bpm,phasemeter,advanced_waveforms,ledsaver":"49063e2fec76c3aa2e2eb9f24a4dd080766e58767b1660dc9b2e51de515e0e06","extended_bpm,phasemeter,advanced_waveforms,keynotation":"21977677863dcee84a0dc1e0b91e82ed5eb740b17cd5db759ffb1578dac9f33f","extended_bpm,phasemeter,advanced_waveforms,credit":"250f8eb4ae332390a41230bc82af0cc99d5f328015ba183aa25f62a555194470","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys":"7296abf57e8fa55ed11b27330095ef5a27da3b428a038f7a1133b3504c0ab103","extended_bpm,phasemeter,advanced_waveforms,cuecolours,ledsaver":"d75a8875f58ab8abf80383099c287170c78e26d13f7b9bae3a1cdb6a15f2ae67","extended_bpm,phasemeter,advanced_waveforms,cuecolours,keynotation":"5720490245b8ef19780bc37196085a96ed1a5dceb6aea5e4e2c8ac1ef5df5a5c","extended_bpm,phasemeter,advanced_waveforms,cuecolours,credit":"29ef8863fef9a6344292618b7758b71a755dd0f568180ad1ceb2672bd3b0d547","extended_bpm,phasemeter,advanced_waveforms,ledsaver,keynotation":"27bc78e930cdc23001fd2c1a8e43936a99c304fb9c5ccf348d8894f8ef42794d","extended_bpm,phasemeter,advanced_waveforms,ledsaver,credit":"b5d52315233a0de622b81616111d883078747ea2201a99ba44342abdb38b71b5","extended_bpm,phasemeter,advanced_waveforms,keynotation,credit":"4958fa666f9fd6a5cbe2c5485c41cb4a3ea9f0f415045dba9824816f356c0984","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys":"a7aa85bc25fb6675ba7e79c867420f247c87285af92d3062a7746fa0b40b750e","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver":"86aa92337950bd7ce722c4de6e1c1d5032ae19de770df9e8b3537a7080d55ae2","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,keynotation":"373c3af9cdfbe0931bb2089ca66806603152a5f351f81c2703ef814c3b7185c7","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,credit":"e99ff9467c19bb45c1a1ca4ad4d7334ec0a8542a84398b186005cef946b68a8c","extended_bpm,phasemeter,advanced_waveforms,cuecolours,ledsaver,keynotation":"c29879faebb3d56b84722f91345b1ba6bb2d6e6e9230209b4a58e2a32ab0b0dd","extended_bpm,phasemeter,advanced_waveforms,cuecolours,ledsaver,credit":"8420df5e34c54afd808e601f0a96a8d68a15fb5f8d3f14b4719e13480f885644","extended_bpm,phasemeter,advanced_waveforms,cuecolours,keynotation,credit":"53663e4aa02e67534d70031fb0523ac5f9d53af2b727ea83c82c1617448722a9","extended_bpm,phasemeter,advanced_waveforms,ledsaver,keynotation,credit":"985f2a17c1b3610eaf895c564b79070ddadc16b7f520a1b1768e609579da03e9","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver":"426b815be12276343df25a71d39e38f54b6815cebdd13d092b5487e51cf09270","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation":"cfed1365f524ed42a396d582fd2779a7da7205132123eff6729b700377aa7150","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,credit":"9bde68f53fa5d6a2d50946b12cd3bc82a7209f3c2c7b8e1cdd984dc5703d3eaf","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation":"b9f6c92eea9554d0f58423c8a62dca78523023ee8b7c1fd302443d16b099536e","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,credit":"ed77d6b0850ae0a8bd93d239fb2ee8ddcbd0f1da5e70924f377636b472a43eb2","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,keynotation,credit":"a3eb32a3aebe40bcd19ff10356e23051869afa90b219ecfa73007680e6a5b15c","extended_bpm,phasemeter,advanced_waveforms,cuecolours,ledsaver,keynotation,credit":"4f32d96d12c8806433d9b6396f00744a010740c7cec2a4f942b6dd9f1f82eeb7","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation":"7e13582c6e2aa9bf6acfdfdc6dd5108856c98657ac48c9c5746ef7e7d70f4df5","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,credit":"9656f6350fd9a5ff761cba4158f9646eaa49238b9c798de89589ed8ca4d63277","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,keynotation,credit":"36903c24089d5a79a214a395d8b5931e767154943a6202744037bc0c796f40d3","extended_bpm,phasemeter,advanced_waveforms,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"1bcc2b0ea0b0ee4fae78a658d9a25ec1c621ec6e0f309888dcf50da677a9fa3d","extended_bpm,phasemeter,advanced_waveforms,beatjump,cuecolours,hotcuekeys,ledsaver,keynotation,credit":"fcd743bdfffc8356a84defada14bf5d0d7c3a96319f0ccb3634eced614251f3c"},"box":{"resTable":1048576,"width":88,"height":15,"glyphs":{"H":["X.....X","X.....X","X.....X","XXXXXXX","X.....X","X.....X","X.....X"],"O":[".XXXXX.","X.....X","X.....X","X.....X","X.....X","X.....X",".XXXXX."],"T":["XXXXXXX","...X...","...X...","...X...","...X...","...X...","...X..."],"K":["X....X.","X...X..","X..X...","XXX....","X..X...","X...X..","X....X."],"E":["XXXXXX","X.....","X.....","XXXXX.","X.....","X.....","XXXXXX"],"Y":["X.....X",".X...X.","..X.X..","...X...","...X...","...X...","...X..."],"S":[".XXXXX.","X......","X......",".XXXXX.","......X","......X",".XXXXX."],"L":["X.....","X.....","X.....","X.....","X.....","X.....","XXXXXX"],"A":["..XXX..",".X...X.","X.....X","X.....X","XXXXXXX","X.....X","X.....X"],"D":["XXXXX..","X....X.","X.....X","X.....X","X.....X","X....X.","XXXXX.."],"I":["XXX",".X.",".X.",".X.",".X.",".X.","XXX"],"N":["X.....X","XX....X","X.X...X","X..X..X","X...X.X","X....XX","X.....X"],"G":[".XXXXX.","X......","X......","X...XXX","X.....X","X.....X",".XXXXX."]},"gap":3,"space":5},"chunks":{"45b88bcd5afea839":"ACX8","c465a030b70c781e":"ACL8","c3967666e153796f":"ACH8","7f0079b1f754ae7e":"AdErQQkACQAAEPwI","a91a9b3491491b64":"AdYrRgkACQAAEvwI","f9e6d34295c320f0":"ACT8","6d11cfe939a0630a":"hi+WLyJPCdj/4AEYCNELQQkAA2kCKAfREmEYIQGJ/+ABGJNgJk/2aQsA9mgALPwIACD8CKDSTQo=","a4d77ab57ab896dd":"Bi8WLyYvNi9GL1YvZi92LyJPEk8CTwNl42QM0QtBCQAL0QERBk8WTyZP9mf2ZvZl9mT2Y/Zi9mH2YGoFJ+YYRgTREHYE1wXSK0IJAAAU/AgALPwIhIurC1DDAADkPr0I","906ea135b6ba2cef":"Ek8CTw3REjQTiQ3REzUQiwzRFzUNiQzRHDVHBRoAC9EcMAvSJTAKAPPhHUAJ0RIwAIv/4AZPCwAWTwkA//8AAPDY////fwAAECcAAIgTAABZF7fRoIYB","d6db78bde1edbcae":"hi+WL6Yvti/GL9Yv5i8iTxJPAk/sfz7YglAIIAKJg1AIIAGLaKAJAIhbOtESOweJiVADagGIDYkCiAuJA4gJiTXRglQLQQDlM9GDVAtBAOVSoAkAM9ESabNk82XQsQkAo2ADiCkMgl2DVC/eNNrILAOJglSDXS3eMton0QtBAOXxVQBFKtEcNcw102Qj0QtBCQDTZAHlINELQQkAk2Q35fJmyCwDiSXlAEYi0Rw2C04JAADrs2AIQK4FCHD+BsgsAokARhzRHDYLTpNks2AIQK4Fk2QZ0QtBCQADZIhSs2AIQBnRHgESMikFC9ELQQkAAXsD4RI73YsUfwZPFk8mT/Zu9m32bPZr9mr2aQsA9mgALPwIoIYBALSvsggAprII8IurC5RwEBHYVrwIila8COoAAADrAAAA1wAAADRWvAhMF/wIWBf8CGQX/AhEAAAAUAAAAFwAAAAnAAAAKAAAACkAAAAAAAAA6AMAABAn","786195378d06baff":"CdYF52U0CgIJQgFCI2MIQywzAENDYDgwAiUEdSNkEEfwiwsACQAJAM3MzMw=","503c09b6b0baefb3":"4RkAJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRAsAQ2A=","160adecaa849e284":"hi+WL6Yvti/GL9Yv5i8iT/B/Q2hTaWNqc2uCUAggBImDUAggMIlnoAkAg1AIICuLk2RssAkACCAmiaNkZ7AJAAggIYmQOh+JsGABiByLs2EYcRBgAYgXi0DREmIoIhOJI2ADyBCLElMzYAPIDIs81Dw0MjQIixFVUjQFiSNmTDYiNgGLA6AJAADgNqAJADwyNuMA4AIiBHIQQ/uLMd7zZAh0C06zZfNkDHSzZQtOGHUt3gDkC04c5QNsAOQLThzlA22TZMNlN7DyVqNk02UzsPNWB+ACLwDgAR8k3gDkk2XDZgtOAOcA5KNl02YLTgDn8lACGPNQAxgB4BB/Jk/2bvZt9mz2a/Zq9mkLAPZoSCQQiUSEDogNi0NhIHESYhTTIDMHixWFBogEixFQCCABiQsAAeALAADgSVEG4hZgAiUEdRBC+otiJUIWQ2EQcRFgY2EQcQEh/+ALAGOBqEsQEdgAAAC4LLMIZiyzCJgmswhsJwuo","d82da843aae59533":"hi+WLyJPW9hAeFvREmmYKQ6JilAAOQuJAOADGAgYCRhW0ZNkC0Fb5YNkA2UEsJNmJk/2aQsA9miGL5Yvpi+2L8Yv1i/mLyJP8H9DaFNpY2qYKWuJlIQOiGiLk2EgcRJiSNMgM2KLEVAIIF+JFYUDaxVLW4sQ4ic7WImzbAJ8CEzDbVB9UH1A0RJiKCJOiSNgA8hLixJTM2ADyEeL02Q8NDI0Q4sRVVI0QIkjZkw2IjY8izwy02MJQwDgAiIEchBD+4sy3i7V82QLTgh0LNUYdfNkC04MdC7RAOQLQcNlA22ZUdNis2MWYAIiBHIQQ/qL8lRCIvNVURKSFJIVmIVIgViB/+BDgVOBs2ACcAIvAOABHyDRAOSTZdNmC0EA5/JQCBjzUAkYqhgBoAHgAOAQfyZP9m72bfZs9mv2avZpCwD2aAkAAQAAAAAAAADZACQAowIAAP8A//8BAAAAAQAAAAAAAADZADwApAIAAP8A//8BAAAAACz8CJhwEBE0VrwIRB/8CGwnC6ioSxARuCyzCGYsswiYJrMI","7010683be462baa0":"1i/mLyJPEk8CT/x/AdErQQkACQBcPr0I","ebd1070ec574dec1":"Ni9GL1YvZi92L4YvIk8R2IRTAXM0GBDTC0MJAAYvFi8O0RJjNhiCZDA0/+AAi4FQBRgL0RJgBxiEUwFzNBj2YfZgJk/2aPZn9mb2ZfZkCwD2YwkAACz8CIxpwggkjKsL8IurCw==","172e933902cb3738":"hi+WLyJPFNiEWZNgAcgMi4VQBi+HUAYvhFEQOQSL9mAJGPZgAaAIGAh/mhgL0QtBCQAGL4VR/+AAMQSJh1GJUAAxAYn/4AgYBdELQQkA9mAmT/ZpCwD2aAAs/AgQgbwIABb8CA==","2853d86b697a9dfa":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdELQQkACCAAiZwYC9EJAAkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","7c188559c27b7ceb":"hi8iTwjRC0EJAANoB9EA4AIRAxEMEUBxAxEIEQkRChGDYCZPCwD2aD4sswgALPwI","e3f375bd0e18a505":"AQAAAAAAAACKAgQA6gAAAP8A//8BAAAAAQAAAAAAAACKAgQA6wAAAP8A//8B","4617c585a7472b06":"hi+WL6Yvti/GL9Yv5i8iTxJPAk/4f23RQHH/4AURBhFl2IhRGCFTicTgDGAeAigiTolB4AhALgkIcC4KmClHiQPgGEDMcI4LkVwF4RI8P4uTZKNlWdELQbNmFUA4i/9wA20DYQhBCEGcMRRxEWItYv9yA+M2MiuJKD0RTSiL02EEccIxJInTZAhECEScNBR0Q25L0QtBo2UDbONkQHRI0QtBo2XIMANtFU0Ri0jREj0OibNkyDQRRAqL0jQIiShEPrnTZQNuQdFAcQURAqAJAGKgAOA92EB4OtmdWhTgnAu8a5Fckl2UUZ1SoDIpi4JioDImibNi/3ID4zYyIYnGPR+L02PIMzPQAjMaiRlBGCEXiTNkGEQIRAhEEbkTZS7RBTEKAxoAKEMpQDsgCCAIibNi/3InABoDo2I4MqIoIRgCGIJcyCzDiR/RC0HzZPFRw20ITR7SIj26iYJiE2MoM9IztYmBUhNkKDTSNACL2DTSNK2JKETjuNNlFNJAcgYS42EIMQhBHWEfYRTSJwEaABPSLDDw4ixADNhAeAQYCH8GTxZPJk/2bvZt9mz2a/Zq9mkLAPZoCQDcRZQJTH2iCLbvoAjAUBAR/NnACAAs/AgAAAEAAAAIAAAAAQAyAAAAAIA=","163da0f1e1acc40a":"hi+WLyJPEk9f0QtBCQAGL2XYQHhd0QtBCQABiCkJiFGJUhghAYkoIgCLAOmDUZAxAolDsAkAkxiYKQGJoL4JAIhUhlUKsJNmiVSFVQawk2b2YBZPJk/2aQsA9mhIJCuJ1i/mLyJPQ25oJhqJ/+AANReJS9EXBRoNKU1K0Rw97IXQMAWJ02DsgQhw7oEDoAkA41AIIAyL42RA0QtBAeUHoAkA41AIIAOJ42Q80QtBAOUmT/ZuCwD2bQsACQCmL7Yvxi/WL+YvIk8x0RJsyCw0iSrdLNoq2wTu1GVcZS3RC0HDZAggJYkDZCrgTQEdYQXiJjEAiyNhsWM9YzYvFi9JUiYvpi/yURghEon/cRIf8VImZCEf8mM1ZTIvXWWYKQCJ81VIJO6JHNELQQkA6q8JABB/AnsQTs+PCnomT/Zu9m32bPZrCwD2agxTWU2hAqICogKiAsMBxAHFAcYBxwHIAckBygHLAcwByAHJAdAB0QHSAcgByQHNAc4BzwHIKvwIzCr8CNQq/AjoAr0I+NmvCJhwEBE0VrwIAKayCLSvsgjDAAAA2QAAAAAs/Ag=","5e4e42864642a517":"//////////8AAAAAAAAAAAAAAAD//////////wAAAAD/////","845677fae2e67916":"UABIAEEAUwBFACAATQBFAFQARQBSAAAAAA==","6922e93e3827642c":"pQ==","84014a74358fe2ac":"0q+y","371b074706e32cac":"Lfw=","060f2c4b6cd4c5e4":"gCn8","acf759afff056d54":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdEA4AkACCAAiZwYC9ELQQkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","ca71ec9290d6ed48":"ZCL8","52b8fe18a1fed3bf":"ABj8","a2721044eff0d2f6":"Ghj8","620bfdaa346b088f":"fw==","582d807f9ed58432":"YO/8CA==","d77596e8499df246":"Q5FDkUORQ5Gl/KX8opCD4WP85875NZ+W","91aaac306bd43135":"Ik8i0QtBCQABiAOLIdFAcQHiLBEmTwsACQAiTx3RQHEcUAggAokA4AawDBEY0QtBCQAmTwsACQCGL5Yvpi8W0RNYiCgdiRXREmmYKRmJFNAeCqgqFYmTYpwyF3L84AkijDIiYA/TMDALiyFQkDAIi4NiFHKcMgF6JGAAKhBJ+48CevZq9mkLAPZoCQASKb0IVCq9CAAs/AjEBKoLYAd9CxjuAgBSR0I1","d5326732238d3e24":"4RkAJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRAsAQ2CWL6Yvti/GL9Yv5i8iT/R/Q25TbGNpc2r/7eguLonia7grK4kb0QtBs2QIICaJGdELQUjkCCAhiQEfAh8A4RIv42QDZRjWFNELQQHn8VLGEhfRFxIX0RgSs2TyVRDRC0EJAAggCoumL/NUD9XzZgR2k2cL0QtBCQADbQR/02AMfyZP9m72bfZs9mv2agsA9mkJAPI2lwgeeZoIUDyXCPA4lwiYQZcIBCwAAAJPAABQV1Y1RVhU","eede35a6260db6bf":"1i/mLyJPEk8CT/x/AdErQQkACQBcPr0IAdArQAkACQAQ2P0IEGBQiB6LEYRXiBuLEoRWiBiLE4Q1iBWLE2casAx3AogQixNnFbAQd2IwC4sTZxCwBHdA5EYwBYkcMANnbDdsNzY3A4sQQtuPAXEA4CZPCwAJAHRgDGB0ZVxlGEBbIHRlXGUYQFsgdGVcZRhACwBbIA==","bb010f4579136412":"hi+WLyJPFNiEWZNgAcgMi4VQBi+HUAYvhFEQOQSL9mAJGPZgAaAIGAh/mhgL0QtBCQAGL4VR/+AAMQSJh1GJUAAxAYn/4AgYBdELQQkA9mAmT/ZpCwD2aAAs/AgQgbwIABb8CIYvli+mL7Yvxi/WL+YvIk/0f0NoU2ljanNrM9ELQQkAA2wRTFWLom2ybuguUYnYLU+JLtEWPUyJAOACLwEfg2STZfNm82cOvAR38VRIJECJEUA6i/Jlrb7TZgggNYkDaNNk3DQXdPzgCSQIdCDRC0EJAAggKYkDaeNhk2IF4xZgAiIQQ/uPBHLTYxRgACIQQ/uPAXIY0QDl02OEYAxgAECEZABEXjAcAAAiEEP1jwFy02DcMBdw/OEZIJwwD9ESINEQkisL0QtB42TxVAnRC0EJAMNgDH8mT/Zu9m32bPZr9mr2aQsA9miAhpcIsB4EAOzGpQjC66UIYPD8CFJHQjU=","9bed08a38f1020b6":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdEA4AkACCAAiZwYC9EJAAkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","87741faeb81ce6a9":"hi+WL6Yvti/GLyJPY2xDahR6XDpDaEDpgGBQiCeLgYRXiCSLgoRWiCGLg4Q1iB6Lg2dUsAx3AogZi4NnT7AEd0DhFjATiYNrDDuDZ0ewEHcDYQBBvDGmMQmJwjAMiQggBYkm0QwxwjEBiwegA2kQSdKPAXgsoADgKqCzYCDREmQA4AIhSCQCiR7QC0AJAMNkAEQd0AtACQAIIBmJA2gY0YIhg2KzYZNjFGAAIhRgIYAQQ/mPAnL+cRRkEGXDY5gzQ2AAIlNgIYAQQ/mPAnKDYCZP9mz2a/Zq9mkLAPZodGAMYHRlXGUYQFsgdGVcZRhAWyB0ZVxlGEALAFsg3AUAAADY/QjC66UI7MalCA==","9e7532da7f56183c":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdELQQkACCAAiZwYC9ELQQkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","ac638ec83c8cae54":"APr8","b945ef223d27a043":"wvz8","236dcd14b24e3c3e":"zP38","38712f352f6a6c0e":"B+0LR9ofagz3VQg=","e7cf46a078fed4fa":"Cw==","6b6137b48f13552d":"Gv38","0e8421a63d88c83b":"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","f528282873b9c40b":"IGz9","62ab7ebb0d777c57":"mmz9","28dd5e2b2f412bd3":"+HP9CA==","f299791cddd3d666":"Eg==","4bf5122f344554c5":"AQ==","1f38751fbe9c8e00":"Ik9w0AtACQAGL3DREYQIIAGLwLAJAG3REGAIIAiJbNIiY2zQBjMGiSFTa9AGMwKJAOAeoBKAadIiYhKECCAEiwHgEoAA4AERIhESUyNgODARQAmLBXMyERFQAXBa4zIwAIsA4PGvARFd0igiAYkA4AAi9mAmTwsACQBU0RKECCAoiUYvVi92LxFQCEAIQFXSDDJV1QjnVGAMYGNjDDMkZDBgSSAkZEsgEEf0jwAjY2IW5wDkJGAMYAw0Q2AZQAggAYlMZAF0EEf0i0NgACL2Z/Zl9mQ80StBCQBEUP+IAolC0StBCQCGLyJPQ2g30RBgDGAEFD3RC0EJADTREGEcYRMY/+EUGCZPCwD2aERVRIVdZg1iIzYMiUNSIDUJiVMUKtFTYAAhIk8FsFNkJk8LAAHgCwAA4IYvli8iT/x/Q2gr0RJk82UA5ivRC0EJAAggHIvyaZgpGYmTZADljOYp0QtBbGYF4JSAJ9CUgYNglYEg0RJkk2Uh0QtBCQAIIAWJG9ESZJNlHtELQQkABH8mT/ZpCwD2aAHgEYAc0hzTGtX/5m1mMjIKiSFgDWBgMAaJUDACiyGFAckAIfOvBHILAAkACQB4MrYIjkivCABs/QjYlXwLfJIAALBxCwCoUjILAAAAADRu/QjUc/0IfJy9CKTXEQqg1xEK3NbACFC6wAgU2MAIOIDCCOKDAAAAYH+gAIB/oDAC8AbwDAAA/AAAAM8wAAAwAvAJ8AwAAfwAAADPMAAAMALwCfAMAAH8AAAAzzAAADAC8AnwDAAB/AAAAM8wAAAwAvAJ8AwAAvwAAADPMAAAMALwCfAMAAL8AAAAzzAAADAC8AnwDAAC/AAAAM8wAAAwAvAJ8AwAAvwAAADPMAAAMAHwCfAMAAP8AAAAzzAAADAB8AnwDAAH/AAAAM8wAAAwAfAJ8AwAB/wAAADPMAAAMAHwDPAMAAf8AAAAzzAAADAB8AzwDAAL/AAAAM8wAAAwAfAM8AkAC/wAAADPMAAAMAHwDPAJAAv8AAAAzzAAADAE8AzwCQAL/AAAAM8wAAAwBPAM8AkAH/wAAADPMAAAMATwDPAJAB/8AAAAzzAAADAE8AzwCQAe/AAAAM8wAAAwBPAM8AkALvwAAADPMAAAMATwDPAJAC78AAAAzzAAADAE8AzwCQAu/AAAAM8wAAAwBPAM8AkALfwAAADPMAAAMIDwDPAGAD38AAD/zwAAADCA8AzwBgB9/AAA/88AAAAwgPAM8AYAfPwAAP/PAAAAMIDwDPAGAHj8AAD/zwAAADCA8AzwBgC4/AAA/88AAAAwgPAM8AYAuPwAAP/PAAAAMIDwDPAGALj8AAD/zwAAADAI8AzwBgC0/AAA/88AAAAwCPAM8AYA9PwBAP/PAAAAMAjwDPAGAPT8AQD/zwAAADAI8AzwAwDg/AEA/88AAAAwCPAM8AMA4PwCAP/PAAAAMAjwCfADAOD8AgD/zwAAADAI8AnwAwDg/AIA/88AAAAwCPAJ8AMA0PwCAP/PAAAAMEDwCfADAND8AwD/zwAAADBA8AnwAwDQ/AMA/88AAAAwQPAJ8AMAwPwDAP/PAAAAMEDwCfADAID8AwD/zwAAADBA8AnwAwCA/AMA/88AAAAwQPAJ8AMAgPwDAP/PAAAAMEDwCfADAID8AwD/zwAAADBA8AnwAwBA/AMAAM8AAAMwQPAG8AMAQPwDAADPAAADMEDwBvADAED8AwAAzwAAAzBA8AbwAwAA/AIAAM8AAAMwQPAG8AMAAPwCAADPAAADMEDwBvADAAD8AgAAzwAAAzBA8AbwAwAA/AIAAM8AAAMwQPAG8AMAAPwCAADPAAADMAjwBvADAAD8AwAAzwAAAzAI8AbwAwBA/AMAAM8AAAMwCPAG8AMAQPwDAADPAAADMAjwA/ADAED8AwAAzwAAAzAI8APwAwCA/AMAAM8AAAMwCPAD8AYAgPwDAADPAAADMAjwA/AGAID8AwAAzwAAAzCA8APwBgCA/AMAAM8AAAMwgPAD8AYA0PwDAADPAAADMIDwA/AGAND8AwAAzwAAAzCA8APwBgDQ/AIAAM8AAAMwgPAD8AYA4PwCAADPAAADMIDwA/AGAOD8AgAAzwAAAzCA8APwBgDg/AIAAM8AAAMwgPAD8AYA4PwBAADPAAADMATwA/AJAPD8AQD/zwAAADAE8APwCQD0/AEA/88AAAAwBPAD8AkA9PwAAP/PAAAAMATwA/AJALT8AAD/zwAAADAE8APwCQC4/AAA/88AAAAwBPAD8AkAuPwAAP/PAAAAMATwA/AJALj8AAD/zwAAADAB8APwCQB4/AAA/88AAAAwAfAD8AkAffwAAP/PAAAAMAHwA/AJAH38AAD/zwAAADAB8APwDAAt/AAA/88AAAAwAfAD8AwALvwAAP/PAAAAMAHwBvAMAC78AAD/zwAAADAB8AbwDAAu/AAA/88AAAAwAfAG8AwAHvwAAP/PAAAAMALwBvAMAB/8AAD/zwAAADAC8AbwDAAf/AAA/88AAAAwAvAG8AwAD/wAAP/PAAAAMALwBvAMAAv8AAD/zwAAADAC8AbwDAAL/AAA/88AAAAwAvAG8AwAC/wAAP/PAAAAMALwBvAMAAv8AAD/zwAAAAABAwQFBwgJTABFAEQAIABBAE4ASQBNAEEAVABJAE8ATgAAAA==","3a11950e2934091a":"3HP9CHhkEBECAAAA//////////8BAAAAKpG9CPps/QhEn70ISqC9CCxt/QhYpr0I8qa9CA==","31a62e82bb5c9896":"1Hz9","9d16f6c1bba1e27b":"EHz9","8ba3a08b3786731c":"VIX9CA==","62b05aa48751e9d7":"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","dee05de8d71afb56":"7IT9CESF/QgEAAAA//////////8BAAAAKpG9CCh+/QhEn70ISqC9CGp+/QhYpr0I8qa9CA==","f445e63209e0be24":"IPn8","95951541115495c3":"APn8","e9b0c031f0493d3f":"iQ==","c76a1882879da374":"UGlvbmFhcnIgTW9kcyAxLjAAAAAAAAAAAAAAAAAAAAAB0AsACQAJABH5/Kg=","fe03389f8943eb44":"eCz9","3bf2946e18115055":"Kin9","cf91aec1c43d7e72":"ki/9","c88c65dce86503c9":"jiX9","0c434993dc238c55":"diX9","bfe6506030b13eb7":"qiX9","b83d3c161a3414da":"cin9","f61749d9268876a4":"Li39","ab93ae83b553acd0":"A9ELQQkAK6AJAAkACQD4MP0ICQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkA","32d1ae64e3779708":"V91W0QtB/+c=","7f65b2feaebd383a":"7C/9CCiv8wo4sfMKsIz9CLCM/QiwjP0IsIz9CLCM/Qg=","b40832cbfea8a56a":"IBj9","6ba44de0586c7d7e":"HCv9","bc1f4f60395e9c09":"AdArQAkACQDqIf0I","7856242fc2aab036":"EIz9CA==","a09598a5264d6afb":"uDH9CA==","c97ec5db67c03e57":"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","447b093f40d895d7":"YDX9CHhkEBECAAAA//////////8BAAAAKpG9CIor/QhEn70ISqC9CLwr/QhYpr0I8qa9CEgATwBUACAAQwBVAEUAIABLAEUAWQBT","3854155ee65e476b":"BAAEAgQEBAYFAAAA/////////////////////////////////////////////////////w==","4f72ba82f5e21909":"AQAAAAAAAAAAAAAAAAAABAAAABMA/zAAAAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAm/14AAAAAAAABAAAAAAAAAAAAAAAAAAAEAAAACADE/wAAAAAAAQAAAAAAAAAAAAAAAAAABAAAADxNAP8AAAAAAAEAAAAAAAAAAAAAAAAAAAQAAAATAP8wAAAAAAABAAAAAAAAAAAAAAAAAAAEAAAAFzP/AAAAAAAAAQAAAAAAAAAAAAAAAAAABAAAACv/ABcAAAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAm/14AAADmB+D6PwYfSOYH4DcC+OD6","5f07a1c7e5c3cee4":"LjD9CJAw/Qg=","ab897fbdedfa502b":"Ew==","6a4d77cb1196e230":"3HP9CHhkEBECAAAA//////////8BAAAAKpG9CPps/QhEn70ISqC9CCxt/QhYpr0I8qa9COyE/QhEhf0IBAAAAP//////////AQAAACqRvQgofv0IRJ+9CEqgvQhqfv0IWKa9CPKmvQg=","0b2b89bc3015d85a":"IAAFagA=","ec409d90d36c9f31":"KADwAejBiAFkAgwCAGAAAFgqkACQMQCQAIAAAGYiDAIeyYMCAGAAAKKsFAOiLJQD+sAcAxAIAAAAgAAAAAAAAA==","1121820250d3aa1e":"KnBwBGrBCAR6ABkDhCKYAsRiGAPEgpgDAGAAAHSCjAJ0wgwDdOKMAygBgAQoyEUC6PlgAtoKEACQEwAgAIAAANoIkACQGQBQAIAAANoAEAFYEAgE+MAgBBAIAAAAgAAA","c9b3cdc9bcb746ba":"2AqgABASAJAAgAAAQLwQAQQCiAIAYAAAWuALAZABAGAAgAAA2gCQA1gQHAT4wCADeACdA5ALAAAAgAAAWBAQBPjgIAQqd4ED+vqgABAKAFAAgAAAWgAQAUC8EAEEIogCAGAAAFrgCwEQ//9vAIAAAFgQEAR4ABkD+OCgA9QimALUYhgD1IKYA3SijAKoAIAEdEKMBGRiDAQAYAAAWCAgBHRiDAQoAAAEdAIMBJC8kAAAgAAAAAAAAAAAAAAAAAAA","f22472655acec567":"QgBFAEEAVAAgAEoAVQBNAFAAAAAAAAA=","b3ab5da5290d7036":"sKG9","2e67d8cc8a6ce79f":"APj8CAU=","533413c9bab7d01d":"hi+WL6Yvti/GL9Yv5i8iT4rRC0EJAANoidELQQkAagaF13kmakYDbZPREmIRQhSJk9QD5ZTREVELQQkAagZ+13kmakYE4RYwAIsD4ANti9ECIYnRAiEOoAkAADILiQIhA2SI0RskiNESYQtBCQBqBnHXeSZqRtNgCCBiiQThFjBfif9wAekNSW/RAOUQYIDIAIkI5RGEAcgAiQR1a9IgY2jaqFEYIVaJxOAMYB4CKCJRiUHgCEAuCwhwLgy4K0qJsV0C4RI9RosD4BhAzHCuDmbREmAIIACJA25TYAggDotj0iJgCCAKiWDREmEYIQaLAOESIlXSECIHCRWgGglT0lNgACIIIByJT9EQYH/JACERhP7JEYA3Y1kjM2AMyQggD4kIyACLm2mzZMNlSNELQeNmagZA13kmakYVQAGLOqAJAINgJk/2bvZt9mz2a/Zq9mkLAPZoRdESYAggG4k70lNgACIIIOyJN9EQYH/JACERhP7JEYA3Y1kjM2AMyQgg34kB4QjIAIv/4TnSImAcMAIi1q8JADgj04ks0lNgACIIIM6JKNEQYH/JACERhP7JEYDGrwkA/3ADYRNinDIRQr+L0jK9iSNpE2QIRAhEvDQUdCDRC0HDZWoGF9d5JmpGA2qTZAhECES8NBR0GdELQcNlagYQ13kmakaoMANp7DARQJ6LA2EMMQwxCnES0iUxCgMJQwlDEdIiYBFAAYmQrwkAD9ESYRESD9GSIQ3RGyMyIoavCQAJAP//5/94MrYI4NmvCNxFlAnFgi4L/Pf8CEx9ogi276AIzczMzEBM/QioUjILAAAAgBj4/AhE+PwISPj8CKuqqqr49/wI0OlNCuKDAAAAAOKDwIz9CA==","32a4adf302f1aa30":"/////wAAAAA8AQ2oRAENqEgBDahQAQ2oYAENqA==","36237a495d128a80":"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","cf1c0cd44bbdc00e":"Ik9w0AtACQAGL3DREYQIIAGLwLAJAG3REGAIIAiJbNIiY2zQBjMGiSFTa9AGMwKJAOAeoBKAadIiYhKECCAEiwHgEoAA4AERIhESUyNgODARQAmLBXMyERFQAXBa4zIwAIsA4PGvARFd0igiAYkA4AAi9mAmTwsACQBU0RKECCAoiUYvVi92LxFQCEAIQFXSDDJV1QjnVGAMYGNjDDMkZDBgSSAkZEsgEEf0jwAjY2IW5wDkJGAMYAw0Q2AZQAggAYlMZAF0EEf0i0NgACL2Z/Zl9mQ80StBCQBEUP+IAolC0StBCQCGLyJPQ2g30RBgDGAEFD3RC0EJADTREGEcYRMY/+EUGCZPCwD2aERVRIVdZg1iIzYMiUNSIDUJiVMUKtFTYAAhIk8FsFNkJk8LAAHgCwAA4IYvli8iT/x/Q2gr0RJk82UA5ivRC0EJAAggHIvyaZgpGYmTZADljOYp0QtBbGYF4JSAJ9CUgYNglYEg0RJkk2Uh0QtBCQAIIAWJG9ESZJNlHtELQQkABH8mT/ZpCwD2aAHgEYAc0hzTGtX/5m1mMjIKiSFgDWBgMAaJUDACiyGFAckAIfOvBHILAAkACQAgGP0IHCv9CABs/QjYlXwLfJIAALBxCwCoUjILDRj9CDRu/QjUc/0IfJy9CKTXEQqg1xEK3NbACFC6wAgU2MAIOIDCCOKDAAAAYH+gAIB/oDAC8AbwDAAA/AAAAM8wAAAwAvAJ8AwAAfwAAADPMAAAMALwCfAMAAH8AAAAzzAAADAC8AnwDAAB/AAAAM8wAAAwAvAJ8AwAAvwAAADPMAAAMALwCfAMAAL8AAAAzzAAADAC8AnwDAAC/AAAAM8wAAAwAvAJ8AwAAvwAAADPMAAAMAHwCfAMAAP8AAAAzzAAADAB8AnwDAAH/AAAAM8wAAAwAfAJ8AwAB/wAAADPMAAAMAHwDPAMAAf8AAAAzzAAADAB8AzwDAAL/AAAAM8wAAAwAfAM8AkAC/wAAADPMAAAMAHwDPAJAAv8AAAAzzAAADAE8AzwCQAL/AAAAM8wAAAwBPAM8AkAH/wAAADPMAAAMATwDPAJAB/8AAAAzzAAADAE8AzwCQAe/AAAAM8wAAAwBPAM8AkALvwAAADPMAAAMATwDPAJAC78AAAAzzAAADAE8AzwCQAu/AAAAM8wAAAwBPAM8AkALfwAAADPMAAAMIDwDPAGAD38AAD/zwAAADCA8AzwBgB9/AAA/88AAAAwgPAM8AYAfPwAAP/PAAAAMIDwDPAGAHj8AAD/zwAAADCA8AzwBgC4/AAA/88AAAAwgPAM8AYAuPwAAP/PAAAAMIDwDPAGALj8AAD/zwAAADAI8AzwBgC0/AAA/88AAAAwCPAM8AYA9PwBAP/PAAAAMAjwDPAGAPT8AQD/zwAAADAI8AzwAwDg/AEA/88AAAAwCPAM8AMA4PwCAP/PAAAAMAjwCfADAOD8AgD/zwAAADAI8AnwAwDg/AIA/88AAAAwCPAJ8AMA0PwCAP/PAAAAMEDwCfADAND8AwD/zwAAADBA8AnwAwDQ/AMA/88AAAAwQPAJ8AMAwPwDAP/PAAAAMEDwCfADAID8AwD/zwAAADBA8AnwAwCA/AMA/88AAAAwQPAJ8AMAgPwDAP/PAAAAMEDwCfADAID8AwD/zwAAADBA8AnwAwBA/AMAAM8AAAMwQPAG8AMAQPwDAADPAAADMEDwBvADAED8AwAAzwAAAzBA8AbwAwAA/AIAAM8AAAMwQPAG8AMAAPwCAADPAAADMEDwBvADAAD8AgAAzwAAAzBA8AbwAwAA/AIAAM8AAAMwQPAG8AMAAPwCAADPAAADMAjwBvADAAD8AwAAzwAAAzAI8AbwAwBA/AMAAM8AAAMwCPAG8AMAQPwDAADPAAADMAjwA/ADAED8AwAAzwAAAzAI8APwAwCA/AMAAM8AAAMwCPAD8AYAgPwDAADPAAADMAjwA/AGAID8AwAAzwAAAzCA8APwBgCA/AMAAM8AAAMwgPAD8AYA0PwDAADPAAADMIDwA/AGAND8AwAAzwAAAzCA8APwBgDQ/AIAAM8AAAMwgPAD8AYA4PwCAADPAAADMIDwA/AGAOD8AgAAzwAAAzCA8APwBgDg/AIAAM8AAAMwgPAD8AYA4PwBAADPAAADMATwA/AJAPD8AQD/zwAAADAE8APwCQD0/AEA/88AAAAwBPAD8AkA9PwAAP/PAAAAMATwA/AJALT8AAD/zwAAADAE8APwCQC4/AAA/88AAAAwBPAD8AkAuPwAAP/PAAAAMATwA/AJALj8AAD/zwAAADAB8APwCQB4/AAA/88AAAAwAfAD8AkAffwAAP/PAAAAMAHwA/AJAH38AAD/zwAAADAB8APwDAAt/AAA/88AAAAwAfAD8AwALvwAAP/PAAAAMAHwBvAMAC78AAD/zwAAADAB8AbwDAAu/AAA/88AAAAwAfAG8AwAHvwAAP/PAAAAMALwBvAMAB/8AAD/zwAAADAC8AbwDAAf/AAA/88AAAAwAvAG8AwAD/wAAP/PAAAAMALwBvAMAAv8AAD/zwAAADAC8AbwDAAL/AAA/88AAAAwAvAG8AwAC/wAAP/PAAAAMALwBvAMAAv8AAD/zwAAAAABAwQFBwgJTABFAEQAIABBAE4ASQBNAEEAVABJAE8ATgAAAA==","9fc0dfa509200025":"YDX9CHhkEBECAAAA//////////8BAAAAKpG9CIor/QhEn70ISqC9CLwr/QhYpr0I8qa9CNxz/Qh4ZBARAgAAAP//////////AQAAACqRvQj6bP0IRJ+9CEqgvQgsbf0IWKa9CPKmvQg=","93ed1e943b18ad23":"YDX9CHhkEBECAAAA//////////8BAAAAKpG9CIor/QhEn70ISqC9CLwr/QhYpr0I8qa9COyE/QhEhf0IBAAAAP//////////AQAAACqRvQgofv0IRJ+9CEqgvQhqfv0IWKa9CPKmvQg=","83891d7fe85c33e5":"FA==","66178b817fde140a":"YDX9CHhkEBECAAAA//////////8BAAAAKpG9CIor/QhEn70ISqC9CLwr/QhYpr0I8qa9CNxz/Qh4ZBARAgAAAP//////////AQAAACqRvQj6bP0IRJ+9CEqgvQgsbf0IWKa9CPKmvQjshP0IRIX9CAQAAAD//////////wEAAAAqkb0IKH79CESfvQhKoL0Ian79CFimvQjypr0I"}}; +window.BUILDER_DATA = {"stockUpdSha256":"e96bca7d1ac983985992a8e5fa7813e1ebf04bef514e0c6cfd0a8375f667f7f9","stockAppSha256":"1ac3e30cde292865413950fe159663b3958e85939ed0a5d0122f796809a5f8ef","appSize":16519056,"dataBase":150744320,"upstream":{"extended_bpm":{"size":16576352,"ops":[["data",145914824,"45b88bcd5afea839"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"advanced_waveforms":{"size":16636928,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9bed08a38f1020b6"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"extended_bpm,phasemeter":{"size":16576352,"ops":[["data",135069542,"845677fae2e67916"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150739456,"786195378d06baff"],["data",150739521,"503c09b6b0baefb3"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"7010683be462baa0"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"172e933902cb3738"],["data",150742016,"9e7532da7f56183c"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["assets",150744320,49760]]},"extended_bpm,advanced_waveforms":{"size":16636928,"ops":[["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147243844,"d77596e8499df246"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"2853d86b697a9dfa"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"phasemeter,advanced_waveforms":{"size":16636928,"ops":[["data",135069542,"845677fae2e67916"],["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147243844,"d77596e8499df246"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"acf759afff056d54"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]},"extended_bpm,phasemeter,advanced_waveforms":{"size":16636928,"ops":[["data",135069542,"845677fae2e67916"],["data",144311836,"ca71ec9290d6ed48"],["data",145914824,"45b88bcd5afea839"],["data",145941230,"6922e93e3827642c"],["data",145986008,"84014a74358fe2ac"],["data",145987228,"84014a74358fe2ac"],["data",145988312,"84014a74358fe2ac"],["data",146168552,"84014a74358fe2ac"],["data",146172320,"84014a74358fe2ac"],["data",146173504,"84014a74358fe2ac"],["data",146565168,"52b8fe18a1fed3bf"],["data",146565756,"a2721044eff0d2f6"],["data",146586208,"c465a030b70c781e"],["data",146586876,"c465a030b70c781e"],["data",146603378,"620bfdaa346b088f"],["data",146603856,"582d807f9ed58432"],["data",146618952,"c3967666e153796f"],["data",146619984,"7f0079b1f754ae7e"],["data",146620120,"a91a9b3491491b64"],["data",146829820,"f9e6d34295c320f0"],["data",147236557,"371b074706e32cac"],["data",147243844,"d77596e8499df246"],["data",147246288,"060f2c4b6cd4c5e4"],["data",150411792,"845677fae2e67916"],["data",150427952,"845677fae2e67916"],["data",150446592,"845677fae2e67916"],["data",150464904,"845677fae2e67916"],["data",150483144,"845677fae2e67916"],["data",150501528,"845677fae2e67916"],["data",150519852,"845677fae2e67916"],["data",150538228,"845677fae2e67916"],["data",150556534,"845677fae2e67916"],["data",150572646,"845677fae2e67916"],["data",150587026,"845677fae2e67916"],["data",150601380,"845677fae2e67916"],["data",150619274,"845677fae2e67916"],["data",150637628,"845677fae2e67916"],["data",150655862,"845677fae2e67916"],["data",150673666,"845677fae2e67916"],["data",150692276,"845677fae2e67916"],["data",150709976,"845677fae2e67916"],["data",150736896,"6d11cfe939a0630a"],["data",150737408,"a4d77ab57ab896dd"],["data",150737920,"906ea135b6ba2cef"],["data",150738432,"d6db78bde1edbcae"],["data",150738944,"91aaac306bd43135"],["data",150739456,"786195378d06baff"],["data",150739521,"d5326732238d3e24"],["data",150739968,"160adecaa849e284"],["data",150740480,"d82da843aae59533"],["data",150740992,"eede35a6260db6bf"],["data",150741248,"ebd1070ec574dec1"],["data",150741504,"bb010f4579136412"],["data",150742016,"9e7532da7f56183c"],["data",150742272,"7c188559c27b7ceb"],["data",150742528,"e3f375bd0e18a505"],["data",150742784,"4617c585a7472b06"],["data",150743424,"163da0f1e1acc40a"],["data",150744064,"5e4e42864642a517"],["data",150853648,"87741faeb81ce6a9"],["assets",150744320,50528]]}},"expect":{"extended_bpm":"1150cc0099d890fb4b9e09cf19f03464106ffd5fd04b1fa940d5af0b41008c4a","phasemeter":"dca533375e39fed109c5b35aef80bcc036ed4500ee2e67f8f3ea3bb0309cdedb","advanced_waveforms":"d91dbf251c1c92ff06b41c28582e78fe2611d7e419b6cf0e9bdf7fadf8eb723d","extended_bpm,phasemeter":"5c663e5fdb53c791a75ee45de1a0875eb83fd247534a916403427cb35e578f14","extended_bpm,advanced_waveforms":"9b74c6fe5760b86c81217dc536ae98c2bf2f23f7552818ff1519f06862265b33","phasemeter,advanced_waveforms":"3343e8ee244a2afee30f8ca950019be6f99d3d4ccba702cff50913b342a02c1f","extended_bpm,phasemeter,advanced_waveforms":"cb991e829faf76cd8a64fbdc6a52852aac4daac2aaedd2f32a59db3bf222007e"},"chunks":{"45b88bcd5afea839":"ACX8","c465a030b70c781e":"ACL8","c3967666e153796f":"ACH8","7f0079b1f754ae7e":"AdErQQkACQAAEPwI","a91a9b3491491b64":"AdYrRgkACQAAEvwI","f9e6d34295c320f0":"ACT8","6d11cfe939a0630a":"hi+WLyJPCdj/4AEYCNELQQkAA2kCKAfREmEYIQGJ/+ABGJNgJk/2aQsA9mgALPwIACD8CKDSTQo=","a4d77ab57ab896dd":"Bi8WLyYvNi9GL1YvZi92LyJPEk8CTwNl42QM0QtBCQAL0QERBk8WTyZP9mf2ZvZl9mT2Y/Zi9mH2YGoFJ+YYRgTREHYE1wXSK0IJAAAU/AgALPwIhIurC1DDAADkPr0I","906ea135b6ba2cef":"Ek8CTw3REjQTiQ3REzUQiwzRFzUNiQzRHDVHBRoAC9EcMAvSJTAKAPPhHUAJ0RIwAIv/4AZPCwAWTwkA//8AAPDY////fwAAECcAAIgTAABZF7fRoIYB","d6db78bde1edbcae":"hi+WL6Yvti/GL9Yv5i8iTxJPAk/sfz7YglAIIAKJg1AIIAGLaKAJAIhbOtESOweJiVADagGIDYkCiAuJA4gJiTXRglQLQQDlM9GDVAtBAOVSoAkAM9ESabNk82XQsQkAo2ADiCkMgl2DVC/eNNrILAOJglSDXS3eMton0QtBAOXxVQBFKtEcNcw102Qj0QtBCQDTZAHlINELQQkAk2Q35fJmyCwDiSXlAEYi0Rw2C04JAADrs2AIQK4FCHD+BsgsAokARhzRHDYLTpNks2AIQK4Fk2QZ0QtBCQADZIhSs2AIQBnRHgESMikFC9ELQQkAAXsD4RI73YsUfwZPFk8mT/Zu9m32bPZr9mr2aQsA9mgALPwIoIYBALSvsggAprII8IurC5RwEBHYVrwIila8COoAAADrAAAA1wAAADRWvAhMF/wIWBf8CGQX/AhEAAAAUAAAAFwAAAAnAAAAKAAAACkAAAAAAAAA6AMAABAn","786195378d06baff":"CdYF52U0CgIJQgFCI2MIQywzAENDYDgwAiUEdSNkEEfwiwsACQAJAM3MzMw=","503c09b6b0baefb3":"4RkAJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRAsAQ2A=","160adecaa849e284":"hi+WL6Yvti/GL9Yv5i8iT/B/Q2hTaWNqc2uCUAggBImDUAggMIlnoAkAg1AIICuLk2RssAkACCAmiaNkZ7AJAAggIYmQOh+JsGABiByLs2EYcRBgAYgXi0DREmIoIhOJI2ADyBCLElMzYAPIDIs81Dw0MjQIixFVUjQFiSNmTDYiNgGLA6AJAADgNqAJADwyNuMA4AIiBHIQQ/uLMd7zZAh0C06zZfNkDHSzZQtOGHUt3gDkC04c5QNsAOQLThzlA22TZMNlN7DyVqNk02UzsPNWB+ACLwDgAR8k3gDkk2XDZgtOAOcA5KNl02YLTgDn8lACGPNQAxgB4BB/Jk/2bvZt9mz2a/Zq9mkLAPZoSCQQiUSEDogNi0NhIHESYhTTIDMHixWFBogEixFQCCABiQsAAeALAADgSVEG4hZgAiUEdRBC+otiJUIWQ2EQcRFgY2EQcQEh/+ALAGOBqEsQEdgAAAC4LLMIZiyzCJgmswhsJwuo","d82da843aae59533":"hi+WLyJPW9hAeFvREmmYKQ6JilAAOQuJAOADGAgYCRhW0ZNkC0Fb5YNkA2UEsJNmJk/2aQsA9miGL5Yvpi+2L8Yv1i/mLyJP8H9DaFNpY2qYKWuJlIQOiGiLk2EgcRJiSNMgM2KLEVAIIF+JFYUDaxVLW4sQ4ic7WImzbAJ8CEzDbVB9UH1A0RJiKCJOiSNgA8hLixJTM2ADyEeL02Q8NDI0Q4sRVVI0QIkjZkw2IjY8izwy02MJQwDgAiIEchBD+4sy3i7V82QLTgh0LNUYdfNkC04MdC7RAOQLQcNlA22ZUdNis2MWYAIiBHIQQ/qL8lRCIvNVURKSFJIVmIVIgViB/+BDgVOBs2ACcAIvAOABHyDRAOSTZdNmC0EA5/JQCBjzUAkYqhgBoAHgAOAQfyZP9m72bfZs9mv2avZpCwD2aAkAAQAAAAAAAADZACQAowIAAP8A//8BAAAAAQAAAAAAAADZADwApAIAAP8A//8BAAAAACz8CJhwEBE0VrwIRB/8CGwnC6ioSxARuCyzCGYsswiYJrMI","7010683be462baa0":"1i/mLyJPEk8CT/x/AdErQQkACQBcPr0I","ebd1070ec574dec1":"Ni9GL1YvZi92L4YvIk8R2IRTAXM0GBDTC0MJAAYvFi8O0RJjNhiCZDA0/+AAi4FQBRgL0RJgBxiEUwFzNBj2YfZgJk/2aPZn9mb2ZfZkCwD2YwkAACz8CIxpwggkjKsL8IurCw==","172e933902cb3738":"hi+WLyJPFNiEWZNgAcgMi4VQBi+HUAYvhFEQOQSL9mAJGPZgAaAIGAh/mhgL0QtBCQAGL4VR/+AAMQSJh1GJUAAxAYn/4AgYBdELQQkA9mAmT/ZpCwD2aAAs/AgQgbwIABb8CA==","2853d86b697a9dfa":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdELQQkACCAAiZwYC9EJAAkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","7c188559c27b7ceb":"hi8iTwjRC0EJAANoB9EA4AIRAxEMEUBxAxEIEQkRChGDYCZPCwD2aD4sswgALPwI","e3f375bd0e18a505":"AQAAAAAAAACKAgQA6gAAAP8A//8BAAAAAQAAAAAAAACKAgQA6wAAAP8A//8B","4617c585a7472b06":"hi+WL6Yvti/GL9Yv5i8iTxJPAk/4f23RQHH/4AURBhFl2IhRGCFTicTgDGAeAigiTolB4AhALgkIcC4KmClHiQPgGEDMcI4LkVwF4RI8P4uTZKNlWdELQbNmFUA4i/9wA20DYQhBCEGcMRRxEWItYv9yA+M2MiuJKD0RTSiL02EEccIxJInTZAhECEScNBR0Q25L0QtBo2UDbONkQHRI0QtBo2XIMANtFU0Ri0jREj0OibNkyDQRRAqL0jQIiShEPrnTZQNuQdFAcQURAqAJAGKgAOA92EB4OtmdWhTgnAu8a5Fckl2UUZ1SoDIpi4JioDImibNi/3ID4zYyIYnGPR+L02PIMzPQAjMaiRlBGCEXiTNkGEQIRAhEEbkTZS7RBTEKAxoAKEMpQDsgCCAIibNi/3InABoDo2I4MqIoIRgCGIJcyCzDiR/RC0HzZPFRw20ITR7SIj26iYJiE2MoM9IztYmBUhNkKDTSNACL2DTSNK2JKETjuNNlFNJAcgYS42EIMQhBHWEfYRTSJwEaABPSLDDw4ixADNhAeAQYCH8GTxZPJk/2bvZt9mz2a/Zq9mkLAPZoCQDcRZQJTH2iCLbvoAjAUBAR/NnACAAs/AgAAAEAAAAIAAAAAQAyAAAAAIA=","163da0f1e1acc40a":"hi+WLyJPEk9f0QtBCQAGL2XYQHhd0QtBCQABiCkJiFGJUhghAYkoIgCLAOmDUZAxAolDsAkAkxiYKQGJoL4JAIhUhlUKsJNmiVSFVQawk2b2YBZPJk/2aQsA9mhIJCuJ1i/mLyJPQ25oJhqJ/+AANReJS9EXBRoNKU1K0Rw97IXQMAWJ02DsgQhw7oEDoAkA41AIIAyL42RA0QtBAeUHoAkA41AIIAOJ42Q80QtBAOUmT/ZuCwD2bQsACQCmL7Yvxi/WL+YvIk8x0RJsyCw0iSrdLNoq2wTu1GVcZS3RC0HDZAggJYkDZCrgTQEdYQXiJjEAiyNhsWM9YzYvFi9JUiYvpi/yURghEon/cRIf8VImZCEf8mM1ZTIvXWWYKQCJ81VIJO6JHNELQQkA6q8JABB/AnsQTs+PCnomT/Zu9m32bPZrCwD2agxTWU2hAqICogKiAsMBxAHFAcYBxwHIAckBygHLAcwByAHJAdAB0QHSAcgByQHNAc4BzwHIKvwIzCr8CNQq/AjoAr0I+NmvCJhwEBE0VrwIAKayCLSvsgjDAAAA2QAAAAAs/Ag=","5e4e42864642a517":"//////////8AAAAAAAAAAAAAAAD//////////wAAAAD/////","845677fae2e67916":"UABIAEEAUwBFACAATQBFAFQARQBSAAAAAA==","6922e93e3827642c":"pQ==","84014a74358fe2ac":"0q+y","371b074706e32cac":"Lfw=","060f2c4b6cd4c5e4":"gCn8","acf759afff056d54":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdEA4AkACCAAiZwYC9ELQQkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","ca71ec9290d6ed48":"ZCL8","52b8fe18a1fed3bf":"ABj8","a2721044eff0d2f6":"Ghj8","620bfdaa346b088f":"fw==","582d807f9ed58432":"YO/8CA==","d77596e8499df246":"Q5FDkUORQ5Gl/KX8opCD4WP85875NZ+W","91aaac306bd43135":"Ik8i0QtBCQABiAOLIdFAcQHiLBEmTwsACQAiTx3RQHEcUAggAokA4AawDBEY0QtBCQAmTwsACQCGL5Yvpi8W0RNYiCgdiRXREmmYKRmJFNAeCqgqFYmTYpwyF3L84AkijDIiYA/TMDALiyFQkDAIi4NiFHKcMgF6JGAAKhBJ+48CevZq9mkLAPZoCQASKb0IVCq9CAAs/AjEBKoLYAd9CxjuAgBSR0I1","d5326732238d3e24":"4RkAJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRFQxJERUMSREVDEkRAsAQ2CWL6Yvti/GL9Yv5i8iT/R/Q25TbGNpc2r/7eguLonia7grK4kb0QtBs2QIICaJGdELQUjkCCAhiQEfAh8A4RIv42QDZRjWFNELQQHn8VLGEhfRFxIX0RgSs2TyVRDRC0EJAAggCoumL/NUD9XzZgR2k2cL0QtBCQADbQR/02AMfyZP9m72bfZs9mv2agsA9mkJAPI2lwgeeZoIUDyXCPA4lwiYQZcIBCwAAAJPAABQV1Y1RVhU","eede35a6260db6bf":"1i/mLyJPEk8CT/x/AdErQQkACQBcPr0IAdArQAkACQAQ2P0IEGBQiB6LEYRXiBuLEoRWiBiLE4Q1iBWLE2casAx3AogQixNnFbAQd2IwC4sTZxCwBHdA5EYwBYkcMANnbDdsNzY3A4sQQtuPAXEA4CZPCwAJAHRgDGB0ZVxlGEBbIHRlXGUYQFsgdGVcZRhACwBbIA==","bb010f4579136412":"hi+WLyJPFNiEWZNgAcgMi4VQBi+HUAYvhFEQOQSL9mAJGPZgAaAIGAh/mhgL0QtBCQAGL4VR/+AAMQSJh1GJUAAxAYn/4AgYBdELQQkA9mAmT/ZpCwD2aAAs/AgQgbwIABb8CIYvli+mL7Yvxi/WL+YvIk/0f0NoU2ljanNrM9ELQQkAA2wRTFWLom2ybuguUYnYLU+JLtEWPUyJAOACLwEfg2STZfNm82cOvAR38VRIJECJEUA6i/Jlrb7TZgggNYkDaNNk3DQXdPzgCSQIdCDRC0EJAAggKYkDaeNhk2IF4xZgAiIQQ/uPBHLTYxRgACIQQ/uPAXIY0QDl02OEYAxgAECEZABEXjAcAAAiEEP1jwFy02DcMBdw/OEZIJwwD9ESINEQkisL0QtB42TxVAnRC0EJAMNgDH8mT/Zu9m32bPZr9mr2aQsA9miAhpcIsB4EAOzGpQjC66UIYPD8CFJHQjU=","9bed08a38f1020b6":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdEA4AkACCAAiZwYC9EJAAkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag=","87741faeb81ce6a9":"hi+WL6Yvti/GLyJPY2xDahR6XDpDaEDpgGBQiCeLgYRXiCSLgoRWiCGLg4Q1iB6Lg2dUsAx3AogZi4NnT7AEd0DhFjATiYNrDDuDZ0ewEHcDYQBBvDGmMQmJwjAMiQggBYkm0QwxwjEBiwegA2kQSdKPAXgsoADgKqCzYCDREmQA4AIhSCQCiR7QC0AJAMNkAEQd0AtACQAIIBmJA2gY0YIhg2KzYZNjFGAAIhRgIYAQQ/mPAnL+cRRkEGXDY5gzQ2AAIlNgIYAQQ/mPAnKDYCZP9mz2a/Zq9mkLAPZodGAMYHRlXGUYQFsgdGVcZRhAWyB0ZVxlGEALAFsg3AUAAADY/QjC66UI7MalCA==","9e7532da7f56183c":"hi+WL6Yvti8iTxbRC0EJAANrFdgV0RJpmCkYiYxQADkCiQDgAhgDGBHRk2QLQV7lA2oP0ZNkC0Er5QNmg2SjZQzXDdELQQkACCAAiZwYC9ELQQkAs2AmT/Zr9mr2aQsA9mgJAEzDvQgALPwIlHAQETRWvAgAJvwIABz8CAAe/Ag="}}; diff --git a/builder/py/bundle.json b/builder/py/bundle.json new file mode 100644 index 0000000..e9dbc72 --- /dev/null +++ b/builder/py/bundle.json @@ -0,0 +1 @@ +{"mods/patch_cdj900nxs.py":"#!/usr/bin/env python3\n# SPDX-License-Identifier: GPL-2.0-or-later\n\"\"\"Apply arnoldasr's CDJ-900NXS 1.31 mods to the unpacked MAIN image.\n\n usage: patch_cdj900nxs.py [,...]\n patch_cdj900nxs.py --list\n\nThe mods come from https://github.com/arnoldasr/cdj900nxs, read as data from a\ncheckout of it (CDJ900NXS_MODS_SRC, default mods/cdj900nxs/upstream, which is\nnot committed: that repository carries no licence). Nothing of its Python is\nimported; what its build_firmware.py does is redone here:\n\n extended_bpm the BPM with hundredths: the stock tenths moved into a new\n small digit above, the lower one showing hundredths.\n phasemeter the two-line phase meter (orange master, blue this deck, a\n marker each) in place of the four boxes, chosen in UTILITY >\n PHASE METER (SLIP FLASHING relabelled; mods/phase-meter-\n utility.cdjmod.json).\n advanced_waveforms (was rgb_waveform; based on arnoldasr's, updated and\n maintained by us) the big waveform in rekordbox's RGB colours\n (1.0.1: also when its colour detail is a little short,\n cdj900nxs/wavefix.py), and the overview's colour table as a red-to-white\n gradient (mods/waveform-colour.cdjmod.json); with our\n UTILITY > WAVEFORM: BLUE / RGB / 3BAND (cdj900nxs/wavemodes.py,\n left out with public=True).\n\n The three are arnoldasr's code mod (patches/mods.json): hooks\n in the application redirected to SH-4 code appended after it\n (0x08FC1000), plus an asset blob at 0x08FC2D00 generated from\n the stock image (the resource table extended by four phase-meter\n images, then the RGB waveform palette and LUT). Upstream tested\n it as one build, and as one without the RGB waveform\n (patches/bpm-phase-meter.json); one of those two is built and\n checked against its hash first, then the hooks of a feature not\n chosen get their original bytes back. Their shared startup hook\n (0x08C071FC) installs the BPM digits and the phase markers: the\n call of the one not chosen is taken out there.\n beatjump ours, not arnoldasr's (cdj900nxs/beatjump.py): TRACK SEARCH\n jumps 1/2/4/8 beats along the grid, chosen in UTILITY > BEAT JUMP,\n made at once in the DSP's decoded audio (cdj900nxs/dspjump.py, a\n patch of the audio DSP's code),\n which replaces SCREEN SAVER. hotcuekeys' engine makes the jumps,\n so it needs hotcuekeys and cuecolours. Needs no upstream checkout.\n cuecolours ours (cdj900nxs/cuecolours.py): memory cues drawn in their\n rekordbox colour on the overview and the detail waveform, the\n rekordbox hot cues shown as lettered boxes.\n Needs no upstream checkout.\n hotcuekeys ours (cdj900nxs/hotcuekeys.py): UTILITY > HOT CUE KEYS (a new,\n 18th item); with it ON, QUANTIZE briefly pressed switches a hot\n cue key mode shown in a HOT KEYS box, held it is QUANTIZE. In\n the mode the top three BEAT DIVIDE keys play hot cues A-C (held: a\n gate), set one (empty key held while paused) or delete one\n (DELETE held). The hot cues come from cuecolours.\n ledsaver ours (cdj900nxs/ledsaver.py): UTILITY > LED ANIMATION (one more\n item, after the others); with it ON, while the screen saver dims\n the display the button LEDs and the jog's rings play a loop.\n keynotation ours (cdj900nxs/keynotation.py): UTILITY > KEY NOTATION (one\n more item): every track's key in Camelot, Open Key or classic\n notation, whatever rekordbox exported.\n usbautoload ours (cdj900nxs/usbautoload.py): UTILITY > USB AUTO LOAD (one\n more item): a stick's MY SETTINGS are loaded when the player finds\n them, without waiting for MENU.\n quicksearch ours (cdj900nxs/quicksearch.py): BROWSE held opens SEARCH,\n BROWSE twice the list the playing track came from.\n (phasemeter, in unreleased builds, also gets ours from cdj900nxs/phasereverse.py:\n UTILITY > PHASE METER OFF / ON / REVERSE, and the beat countdown\n moved clear of the line meter; `phasereverse` is an old name for it.)\n credit ours (cdj900nxs/credit.py): the boot screen says \"Pionaarr Mods\n 1.0\" where it said \"Ver 1.31\".\n\nEvery patch is applied only where the image holds the expected original\nbytes, and arnoldasr's code is first built as one of the builds he tested\nand checked against its hash.\n\nOur lzss_decode.py runs 54 bytes past the end of the packed stream, so\nmain_unpacked.bin is the 1.31 application plus a tail the firmware never\nreads; the application is cut back to its own length first.\n\"\"\"\nimport hashlib\nimport json\nimport os\nimport struct\nimport sys\n\nHERE = os.path.dirname(os.path.abspath(__file__))\nsys.path.insert(0, os.path.join(HERE, 'cdj900nxs'))\nimport beatjump # noqa: E402\nimport credit # noqa: E402\nimport dspjump # noqa: E402\nimport cuecolours # noqa: E402\nimport hotcuekeys # noqa: E402\nimport keynotation # noqa: E402\nimport ledsaver # noqa: E402\nimport usbautoload # noqa: E402\nimport quicksearch # noqa: E402\nimport phasereverse # noqa: E402\nimport wavemodes # noqa: E402\nimport wavefix # noqa: E402\nimport cuenames # noqa: E402\nimport endwarn # noqa: E402\nimport played # noqa: E402\n\nBASE = 0x08000000\nAPP_SIZE = 16519056\nAPP_SHA256 = '1ac3e30cde292865413950fe159663b3958e85939ed0a5d0122f796809a5f8ef'\n\nMODS = {\n 'extended_bpm': 'BPM with hundredths: tenths as a small digit above (arnoldasr)',\n 'phasemeter': 'two-line phase meter, UTILITY > PHASE METER (SLIP FLASHING) chooses it (arnoldasr); '\n 'OFF / ON / REVERSE and the beat countdown moved clear of it (ours: cdj900nxs/phasereverse.py)',\n 'advanced_waveforms': 'big waveform in RGB colours, overview as a red-to-white gradient (arnoldasr); '\n 'UTILITY > WAVEFORM: BLUE / RGB / 3BAND (ours: cdj900nxs/wavemodes.py)',\n 'beatjump': 'TRACK SEARCH jumps 1/2/4/8 beats, UTILITY > BEAT JUMP (ours: cdj900nxs/beatjump.py)',\n 'cuecolours': 'memory cues in their rekordbox colours, hot cues shown (ours: cdj900nxs/cuecolours.py)',\n 'hotcuekeys': 'hot cues A-C on the BEAT DIVIDE keys: play, gate, set, delete; UTILITY > HOT CUE KEYS, '\n 'QUANTIZE short = hot key mode (ours: cdj900nxs/hotcuekeys.py)',\n 'ledsaver': 'the button and jog LEDs play an animation while the screen saver dims the display; '\n 'UTILITY > LED ANIMATION (ours: cdj900nxs/ledsaver.py)',\n 'keynotation': 'every key in one notation (Camelot / Open Key / classic), UTILITY > KEY NOTATION '\n '(ours: cdj900nxs/keynotation.py)',\n 'usbautoload': 'MY SETTINGS on a USB stick loaded at once, UTILITY > USB AUTO LOAD '\n '(ours: cdj900nxs/usbautoload.py)',\n 'quicksearch': 'BROWSE held: SEARCH; BROWSE twice: the playing track in its list '\n '(ours: cdj900nxs/quicksearch.py)',\n 'cuenames': 'the rekordbox comment of the next cue (\"Drop\") in the title bar, in its colour '\n '(ours: cdj900nxs/cuenames.py, needs cuecolours)',\n 'endwarn': 'the playing-address bar blinks red in the last 30 seconds (ours: cdj900nxs/endwarn.py)',\n 'played': 'BROWSE ticks the tracks loaded on this player since it was switched on (ours: cdj900nxs/played.py)',\n 'credit': 'boot screen says \"Pionaarr Mods 1.0\" instead of \"Ver 1.31\" (ours: cdj900nxs/credit.py)',\n}\n# every mod's version (Semantic Versioning); ours from their modules, arnoldasr's\n# split-up mods as packaged here\nVERSIONS = {\n 'extended_bpm': '1.0.0', 'phasemeter': '1.0.0', 'advanced_waveforms': wavefix.VERSION, # released; its modes: wavemodes.VERSION\n 'beatjump': beatjump.VERSION, 'cuecolours': cuecolours.VERSION, 'hotcuekeys': hotcuekeys.VERSION,\n 'ledsaver': ledsaver.VERSION, 'keynotation': keynotation.VERSION, 'usbautoload': usbautoload.VERSION,\n 'quicksearch': quicksearch.VERSION,\n 'cuenames': cuenames.VERSION, 'endwarn': endwarn.VERSION, 'played': played.VERSION, 'credit': credit.VERSION,\n}\nMANIFESTS = {\n 'phasemeter': 'mods/phase-meter-utility.cdjmod.json',\n 'advanced_waveforms': 'mods/waveform-colour.cdjmod.json',\n}\n# arnoldasr's code mod split up: each feature's hooks in the application\nUPSTREAM = ('extended_bpm', 'phasemeter', 'advanced_waveforms')\nHOOKS = {\n 'extended_bpm': (0x08BD3E50, 0x08BD3ED8, 0x08BD3A48, 0x08BCBA60, 0x08BCBCFC),\n 'phasemeter': (0x08B2E2EE, 0x08C6A6CC, 0x08C6CCD0),\n 'advanced_waveforms': (0x089A061C, 0x08BC6830, 0x08BC6A7C, 0x08BCFD72, 0x08BCFF50),\n}\nSHARED_HOOKS = (0x08C071FC, 0x08B27BC8) # startup binding, arena reset: BPM and phase\nBPM_INSTALL_CALL = 0x08FC2444 # startup_bind's jsr of the BPM digits' installer\nPHASE_MARKERS_CALL = 0x08FC2450 # ... and of the phase markers' (startup_markers)\n\n\ndef source_dir():\n return os.environ.get('CDJ900NXS_MODS_SRC') or os.path.join(HERE, 'cdj900nxs', 'upstream')\n\n\ndef read_json(rel):\n path = os.path.join(source_dir(), rel)\n if not os.path.isfile(path):\n raise SystemExit('patch_cdj900nxs: %s missing -- check out '\n 'https://github.com/arnoldasr/cdj900nxs into %s'\n % (path, source_dir()))\n with open(path, encoding='utf-8') as f:\n return json.load(f)\n\n\ndef sha(data):\n return hashlib.sha256(data).hexdigest()\n\n\n# The asset blob, as tools/phase_assets.py builds it (same constants).\nTABLE, DESCRIPTOR, ORIGINAL_COUNT, TEMPLATE = 0x08100000, 0x2C, 0x2A1, 0x1C8\nDATA_BASE = 0x08FC2D00\nWIDTH, HEIGHT, MARKER_WIDTH, BAR = 200, 24, 8, 5\nKEY = 0xF81F\nORANGE_LINE, ORANGE_MARK = (120, 65, 20), (255, 140, 0)\nBLUE_LINE, BLUE_MARK = (40, 90, 120), (60, 170, 255)\nWAVE_COLOURS = [\n 448, 457, 47, 458, 449, 111, 495, 466, 175, 467, 487, 239, 303, 479, 367, 459, 456, 431,\n 468, 465, 475, 476, 474, 39, 477, 31, 471, 46, 469, 45, 23, 460, 109, 484, 110, 485, 103,\n 478, 483, 493, 494, 486, 95, 15, 450, 167, 492, 173, 174, 231, 115, 470, 238, 44, 237, 159,\n 295, 87, 108, 302, 51, 301, 491, 482, 359, 223, 366, 365, 236, 300, 179, 423, 461, 287, 430,\n 429, 172, 364, 473, 428, 351, 114, 151, 463, 299, 363, 415, 215, 427, 178, 490, 50, 279, 235,\n 79, 462, 451, 343, 511, 298, 362, 400, 52, 116, 426, 234, 407, 7, 143, 180, 207, 113, 233,\n 243, 481, 57, 271, 452, 417, 177]\nWHITENESS_COLOURS = [(150, 20, 20), (220, 40, 30), (255, 110, 20), (255, 190, 30), (170, 230, 60),\n (40, 210, 170), (60, 160, 255), (225, 240, 255)]\n\n\ndef rgb565(rgb):\n r, g, b = rgb\n return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)\n\n\ndef line_image(colour):\n px = [KEY] * (WIDTH * HEIGHT)\n for x in range(2, WIDTH - 2):\n px[12 * WIDTH + x] = rgb565(colour)\n for i in range(5):\n x = 2 + i * (WIDTH - 5) // 4\n for y in range(7, 18):\n px[y * WIDTH + x] = rgb565(colour)\n return px\n\n\ndef marker_image(colour):\n return [rgb565(colour) if 3 <= y <= 21 and x < BAR else KEY\n for y in range(HEIGHT) for x in range(MARKER_WIDTH)]\n\n\ndef rgb9(code):\n return tuple(((code >> shift) & 7) * 255 // 7 for shift in (6, 3, 0))\n\n\ndef wave_palette():\n colours = WHITENESS_COLOURS + [rgb9(c) for c in WAVE_COLOURS]\n return struct.pack('<128H', *[rgb565(c) for c in colours])\n\n\ndef wave_lut():\n def nearest(code):\n r, g, b = (code >> 6) & 7, (code >> 3) & 7, code & 7\n return min(range(len(WAVE_COLOURS)), key=lambda i: (\n (((WAVE_COLOURS[i] >> 6) & 7) - r) ** 2 + (((WAVE_COLOURS[i] >> 3) & 7) - g) ** 2\n + ((WAVE_COLOURS[i] & 7) - b) ** 2, i))\n return bytes(8 + nearest(code) for code in range(512))\n\n\ndef assets(app):\n images = [(WIDTH, line_image(ORANGE_LINE)), (WIDTH, line_image(BLUE_LINE)),\n (MARKER_WIDTH, marker_image(ORANGE_MARK)), (MARKER_WIDTH, marker_image(BLUE_MARK))]\n original = app[TABLE - BASE:TABLE - BASE + ORIGINAL_COUNT * DESCRIPTOR]\n template = original[TEMPLATE * DESCRIPTOR:(TEMPLATE + 1) * DESCRIPTOR]\n count = ORIGINAL_COUNT + len(images)\n table_bytes = count * DESCRIPTOR\n pixels_base = DATA_BASE + ((table_bytes + 31) & ~31)\n table, pixels = bytearray(original), bytearray()\n for i, (width, data) in enumerate(images):\n entry = bytearray(template)\n struct.pack_into(' mov #0,r0 (not installed)\n if 'phasemeter' not in names:\n call(PHASE_MARKERS_CALL, 0x410B, 0x0009) # jsr @r1 -> nop\n return bytes(out)\n\n\ndef apply_manifest(app, stock, name):\n doc = read_json(MANIFESTS[name])\n if doc['target']['application_sha256'] != APP_SHA256:\n raise SystemExit('patch_cdj900nxs: %s targets another application' % name)\n out = bytearray(app)\n for p in doc['patches']:\n off = int(p['offset'], 16) if isinstance(p['offset'], str) else p['offset']\n before, after = bytes.fromhex(p['expect']), bytes.fromhex(p['replace'])\n if len(before) != len(after) or off + len(before) > APP_SIZE:\n raise SystemExit('patch_cdj900nxs: %s: bad patch at 0x%x' % (name, off))\n if stock[off:off + len(before)] != before or app[off:off + len(before)] != before:\n raise SystemExit('patch_cdj900nxs: %s: bytes at 0x%x are not the expected original'\n % (name, off))\n out[off:off + len(before)] = after\n return bytes(out)\n\n\n# old names still taken\nALIASES = {'rgb_waveform': 'advanced_waveforms', 'waveform3band': 'advanced_waveforms',\n 'phasereverse': 'phasemeter'}\n\n\ndef check_names(names):\n \"\"\"The names with old ones taken, every mod known and what each needs.\"\"\"\n names = list(dict.fromkeys(ALIASES.get(n, n) for n in names))\n unknown = [n for n in names if n not in MODS]\n if unknown:\n raise SystemExit('patch_cdj900nxs: unknown mod(s) %s; known: %s'\n % (', '.join(unknown), ', '.join(MODS)))\n if 'cuenames' in names and 'cuecolours' not in names:\n raise SystemExit('patch_cdj900nxs: cuenames needs cuecolours (its cue reader brings the comments)')\n if 'beatjump' in names and not {'cuecolours', 'hotcuekeys'} <= set(names):\n raise SystemExit('patch_cdj900nxs: beatjump needs cuecolours and hotcuekeys '\n '(the jumps are made by hotcuekeys)')\n return names\n\n\ndef patch_upstream(stock, names):\n \"\"\"Stage 1: arnoldasr's mods (his code and assets, his manifests, and\n advanced_waveforms' fix that sits on his code). The website's builder\n has this stage as data (tools/make_builder_data.py).\"\"\"\n upstream = [n for n in UPSTREAM if n in names]\n app = apply_code(stock, upstream) if upstream else stock\n for name in ('phasemeter', 'advanced_waveforms'):\n if name in names:\n app = apply_manifest(app, stock, name)\n if 'advanced_waveforms' in names:\n app = wavefix.patch(app, stock) # 1.0.1: a slightly short PWV5 is taken too\n return app\n\n\ndef patch_ours(app, stock, names):\n \"\"\"Stage 2: our mods, on the application stage 1 made (the website's\n builder runs this function itself, in the browser).\"\"\"\n if 'beatjump' in names:\n app = beatjump.patch(app, stock)\n app = dspjump.patch(app, stock) # the jumps in the DSP's decoded audio\n if 'cuecolours' in names:\n app = cuecolours.patch(app, stock)\n if 'hotcuekeys' in names:\n app = hotcuekeys.patch(app, stock)\n if 'ledsaver' in names:\n app = ledsaver.patch(app, stock)\n if 'keynotation' in names:\n app = keynotation.patch(app, stock)\n if 'cuenames' in names:\n app = cuenames.patch(app, stock) # after keynotation: chains its text draw\n if 'played' in names:\n app = played.patch(app, stock) # after keynotation and cuenames: chains their text draw\n if 'endwarn' in names:\n app = endwarn.patch(app, stock)\n if 'usbautoload' in names:\n app = usbautoload.patch(app, stock)\n if 'quicksearch' in names:\n app = quicksearch.patch(app, stock)\n if 'phasemeter' in names:\n app = phasereverse.patch(app, stock) # PHASE METER: OFF / ON / REVERSE\n app = phasereverse.shift_bars(app, stock) # the beat countdown clear of the line meter\n if 'advanced_waveforms' in names:\n app = wavemodes.patch(app, stock) # UTILITY > WAVEFORM: BLUE / RGB / 3BAND\n if 'credit' in names:\n app = credit.patch(app, stock)\n return app\n\n\ndef patch(data, names, public=False):\n \"\"\"The patched application for the mods named, in a fixed order: stage 1\n (arnoldasr's) and stage 2 (ours). Everything is released now; `public`\n is still taken and changes nothing.\"\"\"\n names = check_names(names)\n stock = data[:APP_SIZE]\n if sha(stock) != APP_SHA256:\n raise SystemExit('patch_cdj900nxs: not the CDJ-900NXS 1.31 application')\n return patch_ours(patch_upstream(stock, names), stock, names)\n\n\ndef main():\n args = sys.argv[1:]\n if args == ['--list']:\n for name, what in MODS.items():\n print('%-13s %-6s %s' % (name, VERSIONS[name], what))\n return\n if len(args) != 3:\n raise SystemExit(__doc__)\n names = [n for n in args[2].replace(' ', ',').split(',') if n]\n with open(args[0], 'rb') as f:\n out = patch(f.read(), names)\n with open(args[1], 'wb') as f:\n f.write(out)\n print('patch_cdj900nxs: %s (%s), %d bytes, sha256 %s'\n % (args[1], ','.join(names), len(out), sha(out)))\n\n\nif __name__ == '__main__':\n main()\n","mods/cdj900nxs/beatjump.py":"# SPDX-License-Identifier: GPL-2.0-or-later\n\"\"\"BEAT JUMP for the CDJ-900NXS 1.31: TRACK SEARCH jumps N beats along the\ntrack's beat grid, N set in UTILITY > BEAT JUMP (OFF/1/2/4/8, default 4).\n\nOur own mod, not arnoldasr's; mods/patch_cdj900nxs.py applies it as `beatjump`.\nEverything here was found by tracing the firmware in the emulator:\n\n * The UI's poller calls the panel decoder 0x08B63278 (through its literal\n at 0x08B622A8), which turns report byte 0x12 bits 0x04 / 0x08 of the\n frame at 0x0B2E8280 into the key bits TRACK - (0x0B2E82C6 bit 0x01) and\n TRACK + (0x0B2E82C5 bit 0x80); later readers (0x08B630D0) turn those\n into the track search. The literal now points at bj_poll, which runs the\n decoder and then, with BEAT JUMP on and a beat grid loaded, takes both\n key bits out again: the track search never starts, so neither the UI nor\n the player changes track, and a press is a jump instead. (Clearing the\n report byte before the decoder instead lost a race with the panel task\n refilling the frame.)\n * The jump is made by hotcuekeys' engine (hk_engine's he_bj, which is\n why beatjump needs hotcuekeys and cuecolours): bj_poll writes the\n target in 1/150 s with bit 31 set to hotcuekeys.BJ_REQ, the tick of\n the press to BJ_TICK and the jump's length in ms to BJ_DELTA, unless a\n jump is still waiting. The engine has the DSP move its playing head by\n that many 1/75 s slots inside the audio it has already decoded\n (dspjump.py, a patch of the audio DSP): at once, gapless, the CUE point\n stays, playing, paused or at cue standby (standing, the UI is left\n paused, so PLAY plays on from there). Only where the DSP has not that\n much audio decoded does it refuse: playing, the engine then loads the\n target into the beat jumps' own DSP cue slot (hotcuekeys.BJ_SLOT) the\n old way, moved on by the time such a load takes so the deck comes back\n in phase; standing, the press is dropped (the old way there, a memory\n CALL, left the UI waiting for good after the third or fourth).\n [Since: no fallback at all; the slot load left the deck standing. A\n press the DSP cannot jump now (it keeps dspjump.MARGIN decoded ahead, so\n the time needed grows with the setting) or made while a jump still\n waits is ignored: nothing is put off, the next press counts again.]\n * The setting is kept in the player's settings journal (hotcuekeys'\n hk_save2/hk_load2 through HK_API, id SAVE_ID): the first poll takes the\n last saved value (else DEFAULT, 4 beats) into the setting's word, a\n change is written back. The firmware itself kept SCREEN SAVER's ON/OFF\n only, so BEAT JUMP came back as 1 after a restart.\n * The grid is read as arnoldasr's phase meter reads it, from the player\n context 0x099445DC: track *(ctx+0x20), X = *(track+0xC4), grid\n *(X+0x104), timestamp adjustment *(X+0x10C); 0x08A27D4C(grid, adj,\n pos_ms) gives 1 + the index of the beat at or before pos_ms, 0x08A0EFB6\n (record, adj) a beat's time in ms. The position in ms is ctx+0x2CC.\n * A jump keeps the position's offset within its beat: target = pos +\n t[i +/- N] - t[i]. A press whose target would leave the grid does\n nothing. With the setting OFF, or no grid, TRACK SEARCH is untouched.\n\nUTILITY > SCREEN SAVER (item 14, a word at 0x0A4DD270 + 0x1760, values\nOFF/ON, factory default ON = 1) becomes BEAT JUMP: its label in all 19\nlanguages, five values OFF/1/2/4/8 (the existing \"OFF\" and MIDI CHANNEL's digit\nstrings), so the old ON is now \"1\". The screen saver itself no longer reads\nthe setting: its getter literal (0x08BB7E60) points at a firmware tail that\nreturns 1, so it stays on as it was by default.\n\"\"\"\nimport os\nimport struct\nimport sys\n\nsys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))\nimport hotcuekeys # noqa: E402\n\nVERSION = '1.0.0' # Semantic Versioning: MAJOR.MINOR.PATCH\n\nBASE = 0x08000000\nBJ_BASE = 0x08FCF400 # after arnoldasr's code mod (ends 0x08FCF260)\n\nPLAYER_CTX = 0x099445DC\nDECODER_LIT = 0x08B622A8 # the UI poller's literal of the panel decoder\nDECODER = 0x08B63278\nKEYS_TRACK = 0x0B2E82C5 # decoded keys: TRACK + is bit 0x80 here, TRACK - 0x01 of the next byte\nSEND = 0x08B3B666 # the UI's player-message builder\nGET_SETTING = 0x08AFD9E0 # SCREEN SAVER getter: *(0x0A4DD270 + 0x1760)\nGRID_LOOKUP = 0x08A27D4C\nGRID_TIME = 0x08A0EFB6\nFPSCR_MASK = 0xFFE7FFFF # what the firmware does to fpscr after every call\n\nSAVER_ITEM = 0x08C6CBB4 # UTILITY item 14 (copied to RAM at start-up)\nSAVER_CONSUMER_LIT = 0x08BB7E60 # the screen saver's literal of the getter\nRETURN_ONE = 0x08BDA1B0 # 'rts; mov #1,r0' at the end of a firmware function\nVALUE_STRINGS = [0xA80D013C, 0xA80D0144, 0xA80D0148, 0xA80D0150, 0xA80D0160] # OFF 1 2 4 8\nLABEL_OLD = 'SCREEN SAVER\\0'.encode('utf-16-le')\nLABEL_NEW = 'BEAT JUMP'.encode('utf-16-le').ljust(len(LABEL_OLD), b'\\0')\nLABEL_COPIES = 19\n\nVALUE_LIST = BJ_BASE + 0x400 # the five value-string pointers, after the code\nPREV_BITS = BJ_BASE + 0x3FC # last frame's TRACK bits, for press edges\nLAST_SET = BJ_BASE + 0x3F8 # word: the setting last seen (-1 at start: taken from the journal then)\nSETTING = 0x0A4DD270 + 0x1760 # the setting's word (the SCREEN SAVER's)\nSAVE_ID = 0x83E2 # ours in the settings journal (hotcuekeys' is 0x83E1)\nDEFAULT = 3 # 4 beats\nBJ_DELTA = 0x08FCF818 # word: the last jump's length in ms (signed), for hotcuekeys' DSP jump\nBJ_POSV = hotcuekeys.BJ_POSV # word: the position (ms) to reckon from, if not 0\nBJ_PEND = hotcuekeys.BJ_PEND # word: presses counted while hotcuekeys' CALL had no grid\n\n\nclass Asm:\n \"\"\"Just enough SH-4 to write bj_poll: two passes over a list of\n instructions, labels, and a literal pool of .long/.word constants.\"\"\"\n\n def __init__(self, base):\n self.base, self.items, self.labels = base, [], {}\n\n def label(self, name):\n self.items.append(('label', name))\n\n def op(self, fn):\n self.items.append(('op', fn))\n\n def long(self, name, value):\n self.items.append(('align4', None))\n self.label(name)\n self.items.append(('long', value))\n\n def word(self, name, value):\n self.label(name)\n self.items.append(('word', value))\n\n def assemble(self):\n for final in (False, True):\n pc, out = self.base, bytearray()\n for kind, arg in self.items:\n if kind == 'label':\n self.labels[arg] = pc\n continue\n if kind == 'align4':\n while pc % 4:\n out += struct.pack('> 36 = q / 20\n a.long('L_req', hotcuekeys.BJ_REQ)\n a.long('L_tick', hotcuekeys.TICK)\n a.long('L_bit31', 0x80000000)\n a.long('L_delta', BJ_DELTA)\n a.long('L_posv', BJ_POSV)\n a.long('L_pend', BJ_PEND)\n a.long('L_third', 0xAAAAAAAB) # q * this >> 33 = q / 3\n a.long('L_last', LAST_SET)\n a.long('L_setting', SETTING)\n a.long('L_bjid', SAVE_ID)\n a.long('L_bjid16', SAVE_ID << 16)\n a.long('L_api', hotcuekeys.HK_API)\n code = a.assemble()\n return code, None\n\n\ndef patch(app, stock):\n \"\"\"The application with BEAT JUMP added; `stock` is the unmodified 1.31\n application, which every replaced byte is checked against.\"\"\"\n code, _ = routine()\n assert len(code) <= LAST_SET - BJ_BASE\n out = bytearray(app)\n end = VALUE_LIST + 4 * len(VALUE_STRINGS) - BASE\n if len(out) < end:\n out += bytes(end - len(out))\n if any(out[BJ_BASE - BASE:end]):\n raise SystemExit('patch_cdj900nxs: beatjump: its area 0x%08x.. is not free' % BJ_BASE)\n\n def put(addr, before, after):\n off = addr - BASE\n if stock[off:off + len(before)] != before or out[off:off + len(before)] != before:\n raise SystemExit('patch_cdj900nxs: beatjump: bytes at 0x%08x are not the expected original'\n % addr)\n out[off:off + len(after)] = after\n\n out[BJ_BASE - BASE:BJ_BASE - BASE + len(code)] = code\n out[LAST_SET - BASE:LAST_SET - BASE + 4] = b'\\xff\\xff\\xff\\xff'\n out[VALUE_LIST - BASE:end] = b''.join(struct.pack('= 0:\n put(BASE + at, LABEL_OLD, LABEL_NEW)\n found += 1\n at = stock.find(LABEL_OLD, at + 2)\n if found != LABEL_COPIES:\n raise SystemExit('patch_cdj900nxs: beatjump: %d SCREEN SAVER labels, expected %d'\n % (found, LABEL_COPIES))\n return bytes(out)\n","mods/cdj900nxs/c6asm.py":"#!/usr/bin/env python3\n\"\"\"casm.py: a minimal TI C674x assembler for our DSP patches (32-bit, serial\ninstructions only: every p bit 0, no compact forms). Every encoding below is\nchecked against words of the CDJ-900NXS DSP image (selftest()).\n\nRegisters: 'a0'..'a31', 'b0'..'b31'. Predicates: '[b0]', '[!a1]' prefix\n(A1, A2, B0, B1, B2 only). Delay slots are the caller's business: loads need\n4 slots before their result is used, branches 5.\n\n asm = Asm(base)\n asm.label('x'); asm.op('mvk', 0x1234, 'a3'); asm.op('b', 'x') ...\n words = asm.assemble()\n\"\"\"\nimport struct\n\nCREG = {'b0': 1, 'b1': 2, 'b2': 3, 'a1': 4, 'a2': 5, 'a0': 6}\n\n\ndef reg(r):\n side = 1 if r[0] == 'b' else 0\n return side, int(r[1:])\n\n\ndef pred(p):\n if not p:\n return 0\n neg = p.startswith('!')\n return CREG[p.lstrip('!')] << 29 | (1 << 28 if neg else 0)\n\n\n# .L unit 3-operand ops (op field bits 11-5): (si,xsi) form and (s5,xsi) form\nL_OPS = {\n 'add': (0x03, 0x02), 'sub': (0x07, 0x06), 'cmpeq': (0x53, 0x52),\n 'cmpgt': (0x47, 0x46), 'cmplt': (0x57, 0x56), 'cmpgtu': (0x4F, 0x4E),\n 'cmpltu': (0x5F, 0x5E), 'or': (0x7F, 0x7E), 'and': (0x7B, 0x7A),\n}\n# .D load/store op field (bits 6-4)\nD_OPS = {'ldhu': 0, 'ldbu': 1, 'ldb': 2, 'stb': 3, 'ldh': 4, 'sth': 5, 'ldw': 6, 'stw': 7}\nD_SCALE = {'ldhu': 2, 'ldbu': 1, 'ldb': 1, 'stb': 1, 'ldh': 2, 'sth': 2, 'ldw': 4, 'stw': 4}\n\n\ndef enc_l(op, src1, src2, dst, p=''):\n \"\"\"op src1,src2,dst on .L (unit side = dst side; src2 may cross).\"\"\"\n ds, dn = reg(dst)\n s2s, s2n = reg(src2)\n x = 1 if s2s != ds else 0\n if isinstance(src1, int):\n assert -16 <= src1 < 16\n code = L_OPS[op][1]\n s1 = src1 & 31\n else:\n s1s, s1 = reg(src1)\n assert s1s == ds, 'src1 must be on the unit side'\n code = L_OPS[op][0]\n return pred(p) | dn << 23 | s2n << 18 | s1 << 13 | x << 12 | code << 5 | 0b110 << 2 | ds << 1\n\n\ndef enc_mvk(hi, val, dst, p=''):\n ds, dn = reg(dst)\n cst = (val >> 16 if hi else val) & 0xFFFF\n return pred(p) | dn << 23 | cst << 7 | (0b11010 if hi else 0b01010) << 2 | ds << 1\n\n\ndef enc_d(op, data, base, off, p=''):\n \"\"\"ld/st *+base(off) (byte offset, scaled by the access size).\"\"\"\n ss, sn = reg(data)\n bs, bn = reg(base)\n sc = D_SCALE[op]\n assert off % sc == 0 and 0 <= off // sc < 32, (op, off)\n return pred(p) | sn << 23 | bn << 18 | (off // sc) << 13 | 0b0001 << 9 | bs << 7 | D_OPS[op] << 4 | 0b01 << 2 | ss << 1\n\n\ndef enc_b_imm(at, target, side=0, p=''):\n disp = (target - (at & ~31)) // 4\n assert -(1 << 20) <= disp < (1 << 20)\n return pred(p) | (disp & 0x1FFFFF) << 7 | 0b00100 << 2 | side << 1\n\n\ndef enc_b_reg(r, p=''):\n rs, rn = reg(r)\n return pred(p) | rn << 18 | (1 if rs == 0 else 0) << 12 | 0x362 # .S2 (X for an A register)\n\n\ndef enc_nop(n):\n assert 1 <= n <= 9\n return (n - 1) << 13\n\n\nDINT, RINT = 0x10004000, 0x10006000\n\n\ndef enc_shl(src, cst, dst, p=''):\n \"\"\"shl .S src,ucst5,dst\"\"\"\n ds, dn = reg(dst)\n ss, sn = reg(src)\n assert ss == ds and 0 <= cst < 32\n return pred(p) | dn << 23 | sn << 18 | cst << 13 | 0x32 << 6 | 0b1000 << 2 | ds << 1\n\n\ndef enc_dp(op, data, off, p=''):\n \"\"\"ld/st *+b14(ucst15) (byte offset, scaled), .D2\"\"\"\n ds, dn = reg(data)\n sc = D_SCALE[op]\n assert off % sc == 0 and 0 <= off // sc < 32768\n return pred(p) | dn << 23 | (off // sc) << 8 | 0 << 7 | D_OPS[op] << 4 | 0b11 << 2 | ds << 1\n\n\ndef enc_extu(src, csta, cstb, dst, p=''):\n \"\"\"extu .S src,csta,cstb,dst (field form, bits 7-6 = 00).\"\"\"\n ds, dn = reg(dst)\n ss, sn = reg(src)\n assert ss == ds\n return pred(p) | dn << 23 | sn << 18 | csta << 13 | cstb << 8 | 0b00 << 6 | 0b0010 << 2 | ds << 1\n\n\ndef enc_addaw(src2, src1, dst, p=''):\n \"\"\"addaw .D dst = src2 + src1*4 (src1 register or ucst5).\"\"\"\n ds, dn = reg(dst)\n s2s, s2n = reg(src2)\n assert s2s == ds\n if isinstance(src1, int):\n return pred(p) | dn << 23 | s2n << 18 | (src1 & 31) << 13 | 0x3A << 7 | 0b10000 << 2 | ds << 1\n s1s, s1n = reg(src1)\n return pred(p) | dn << 23 | s2n << 18 | s1n << 13 | 0x38 << 7 | 0b10000 << 2 | ds << 1\n\n\nclass Asm:\n def __init__(self, base):\n self.base, self.items, self.labels = base, [], {}\n\n def label(self, name):\n self.items.append(('label', name))\n\n def org(self, addr):\n \"\"\"continue at addr (a new block; the caller branches there)\"\"\"\n self.items.append(('org', addr))\n\n def op(self, mn, *a, p=''):\n self.items.append(('op', (mn, a, p)))\n\n def word(self, w):\n self.items.append(('word', w))\n\n def _enc(self, at, mn, a, p):\n if mn == 'mvk':\n return enc_mvk(0, a[0], a[1], p)\n if mn == 'mvkh':\n return enc_mvk(1, a[0], a[1], p)\n if mn == 'mvkl32': # helper: emitted as two words by assemble()\n raise AssertionError\n if mn in L_OPS:\n return enc_l(mn, a[0], a[1], a[2], p)\n if mn in D_OPS:\n return enc_d(mn, a[0], a[1], a[2], p)\n if mn == 'b':\n t = a[0]\n if isinstance(t, str) and t[0] in 'ab' and t[1:].isdigit():\n return enc_b_reg(t, p)\n t = self.labels[t] if isinstance(t, str) else t\n return enc_b_imm(at, t, a[1] if len(a) > 1 else 0, p)\n if mn == 'nop':\n return enc_nop(a[0] if a else 1)\n if mn == 'dint':\n return DINT\n if mn == 'rint':\n return RINT\n if mn == 'extu':\n return enc_extu(a[0], a[1], a[2], a[3], p)\n if mn == 'addaw':\n return enc_addaw(a[0], a[1], a[2], p)\n if mn == 'shl':\n return enc_shl(a[0], a[1], a[2], p)\n if mn == 'lddp': # ldbu/ldw/... *+b14(off)\n return enc_dp(a[0], a[1], a[2], p)\n if mn == 'mv':\n return enc_l('add', 0, a[0], a[1], p)\n raise KeyError(mn)\n\n def assemble(self):\n \"\"\"-> [(addr, word)]\"\"\"\n out = []\n for final in (False, True):\n pc, out = self.base, []\n for kind, arg in self.items:\n if kind == 'label':\n self.labels[arg] = pc\n continue\n if kind == 'org':\n pc = arg\n continue\n if kind == 'word':\n out.append((pc, arg))\n pc += 4\n continue\n mn, a, p = arg\n if mn == 'const': # mvk + mvkh of a 32-bit value\n v = self.labels.get(a[0], a[0]) if isinstance(a[0], str) else a[0]\n out.append((pc, enc_mvk(0, v if final or not isinstance(a[0], str) else 0, a[1], p)))\n out.append((pc + 4, enc_mvk(1, v if final or not isinstance(a[0], str) else 0, a[1], p)))\n pc += 8\n continue\n try:\n w = self._enc(pc, mn, a, p)\n except KeyError:\n if final:\n raise\n w = 0\n out.append((pc, w))\n pc += 4\n return out\n\n\ndef selftest():\n ref = [\n (enc_d('ldw', 'a4', 'a3', 0), 0x020c0264),\n (enc_d('stw', 'a3', 'a5', 0), 0x01940274),\n (enc_d('sth', 'a4', 'a3', 2), 0x020c2254),\n (enc_d('ldh', 'a4', 'a3', 6), 0x020c6244),\n (enc_d('ldhu', 'a4', 'a3', 0), 0x020c0204),\n (enc_l('cmpeq', 1, 'a4', 'a0'), 0x00102a58),\n (enc_l('or', 0, 'a4', 'a0'), 0x00100fd8),\n (enc_l('add', 'b10', 'b4', 'b6'), 0x0311407b & ~1),\n (enc_l('cmplt', 0, 'b4', 'b0'), 0x00100adb & ~1),\n (enc_l('cmpgt', 'a3', 'a10', 'a0'), 0x002868f8),\n (enc_l('sub', 'a3', 'a4', 'a10'), 0x051060f8),\n (enc_l('add', 'a4', 'a3', 'a3'), 0x018c8078),\n (enc_mvk(0, -7576, 'b4'), 0x0271342a),\n (enc_mvk(1, 0x1182e268, 'b4'), 0x0208c16a),\n (enc_b_reg('b4'), 0x00100362),\n (enc_addaw('a4', 'a6', 'a3'), 0x0190dc41 & ~1),\n (enc_nop(5), 0x00008000),\n (enc_shl('a14', 3, 'a8'), 0x04386ca1 & ~1),\n (enc_dp('ldbu', 'b6', 969), 0x0303c91e),\n ]\n bad = [(hex(a), hex(b)) for a, b in ref if a != b]\n assert not bad, bad\n return True\n\n\nif __name__ == '__main__':\n print('selftest', selftest())\n","mods/cdj900nxs/credit.py":"# SPDX-License-Identifier: GPL-2.0-or-later\n\"\"\"The mods' credit on the CDJ-900NXS 1.31 boot screen: \"Pionaarr Mods\n1.0\" where the splash shows \"Ver 1.31\". Our own; mods/patch_cdj900nxs.py\napplies it as `credit` (the patcher ticks it at the start).\n\nThe splash's text is made by 0x08BDCC14: a 50-byte buffer gets strcpy\n(0x08C28460) of the string the .data word at RAM 0x1110766C points to\n(image 0x08C6D22C, \"Ver \" at 0xA80D12BC), then strcat (the same function)\nof the version the getter 0x08BE9A8C returns (\"1.31\" at 0xA8000740), and is\nshown. The .data word now points at our text, and the function's own\nliteral of the getter (0x08BDCD8C, read only at 0x08BDCC34) at a stub that\nreturns an empty string, so nothing is added to it. The text's box (.data\n0x08C841E0: 139,363 - 619,385, right-aligned) is 8 lines taller, so the\ndescenders of p and y show. The getter itself and\neverything else that shows the version (the LINK screen's \"Ver %s\",\nUTILITY, the updater, the boot loader) are untouched.\"\"\"\nimport struct\n\nVERSION = '1.0.0' # Semantic Versioning: MAJOR.MINOR.PATCH\n\nBASE = 0x08000000\nDATA_WORD = 0x08C6D22C # .data: the splash's \"Ver \" pointer (RAM 0x1110766C)\nDATA_VER = 0xA80D12BC # \"Ver \"\nGETTER_LIT = 0x08BDCD8C # the splash function's literal of the version getter\nGETTER = 0x08BE9A8C\nTEXT = 'Pionaarr Mods 1.0'\nCREDIT = 0x08FCF900 # between beatjump's 0x08FCF400..0x08FCF814 and cuecolours' 0x08FCFA00\nCREDIT_LEN = 0x40\nSTUB = CREDIT + 0x20 # mov.l @(4,pc),r0; rts; nop; nop; .long the text's final NUL\nBOX = 0x08C841E0 # .data: the splash text's box, x1 y1 x2 y2 (16 bits each)\nBOX_STOCK = (139, 363, 619, 385)\nBOX_NEW = (139, 363, 619, 393) # \"Ver 1.31\" has no descender; p and y need 8 more lines\n\n\ndef area():\n \"\"\"The credit area's bytes: the text, then the stub returning \"\".\"\"\"\n text = TEXT.encode('ascii') + b'\\0' # the splash takes bytes as Latin-1: no UTF-8\n # the splash's buffer is 50 bytes, its UTF-16 copy 100\n assert len(text) <= STUB - CREDIT and len(text) <= 50\n empty = CREDIT + len(text) - 1\n stub = struct.pack('<4HI', 0xD001, 0x000B, 0x0009, 0x0009, empty | 0xA0000000)\n return text.ljust(STUB - CREDIT, b'\\0') + stub\n\n\ndef patch(app, stock):\n \"\"\"The application with the credit; `stock` is the unmodified 1.31\n application, which every replaced byte is checked against.\"\"\"\n out = bytearray(app)\n end = CREDIT + CREDIT_LEN - BASE\n if len(out) < end:\n out += bytes(end - len(out))\n if any(out[CREDIT - BASE:end]):\n raise SystemExit('patch_cdj900nxs: credit: its area 0x%08x.. is not free' % CREDIT)\n\n def put(addr, before, after):\n off = addr - BASE\n if stock[off:off + 4] != struct.pack(' the 44-byte resource records\nTRI_ID = 0xC5 # the red memory-cue triangle, 16 x 5, RGB565\nTRI_PIXELS = 0x0815A1B0 # its pixels in the image\nTRI_RED = 0xF800\nMEMLIST = 0x0B7BE8D4 # the UI's memory list, 10 x 0x24\nOV_RECS = 0x0B800D9C # the overview's marker records, 12 bytes\nMK_RECS = 0x0B801258 # the marker records they come from, 16 bytes\nMK_RECORDS = 101\nMKCOPY_LIT = 0x08BC6BF8 # the waveform preparer's literal for memcpy, which fills MK_RECS\nMEMCPY = 0x08C279C4\nHOT_DEFAULT = 0x07E0 # a hot cue without a colour: green, as rekordbox's default\n\n# rekordbox's eight memory-cue colours (ids 1-8), as the player itself draws\n# them: the track-colour dots of the browser, resources 0x14, 0x16, 0x13,\n# 0x18, 0x12, 0x0F, 0x11 and 0x15 (RGB565 there).\nMEMORY_RGB565 = [\n 0xFA55, # 1 pink\n 0xF800, # 2 red\n 0xFC20, # 3 orange\n 0xFFE0, # 4 yellow\n 0x07E0, # 5 green\n 0x079F, # 6 aqua\n 0x22FF, # 7 blue\n 0x881F, # 8 purple\n]\n\n# hot cue letters A-H, 5 x 7, for the overview's bigger marker (bit 7 = left)\nLETTERS5 = [\n ['01110', '10001', '10001', '11111', '10001', '10001', '10001'],\n ['11110', '10001', '10001', '11110', '10001', '10001', '11110'],\n ['01110', '10001', '10000', '10000', '10000', '10001', '01110'],\n ['11110', '10001', '10001', '10001', '10001', '10001', '11110'],\n ['11111', '10000', '10000', '11110', '10000', '10000', '11111'],\n ['11111', '10000', '10000', '11110', '10000', '10000', '10000'],\n ['01110', '10001', '10000', '10111', '10001', '10001', '01111'],\n ['10001', '10001', '10001', '11111', '10001', '10001', '10001'],\n]\n\n# hot cue letters A-H, 3 x 5, rows top down: drawn black into a 9 x 5 marker\nLETTERS = ['010101111101101', '110101110101110', '011100100100011', '110101101101110',\n '111100110100111', '111100110100100', '011100101101011', '101101111101101']\n\n# data after the code (zero in the image)\nDATA = 0x08FD0000 # after the code (checked in patch())\nHOT_TABLE = DATA # 8 x 8: +0 time 1/150 s (-1 none), +4 RGB565, +6 hot cue number;\n # entry 0's +7 counts the loads (cue_get)\nSLOTS = 18 # triangles: memory list index 0-9, hot cues 10-17\nTRI_BUF = DATA + 0x40 # SLOTS x 160 bytes\nHOTBOX_W, HOTBOX_H = 16, 9 # the overview's hot cue marker: 11 x 9, then transparent; the\nHOTBOX_SIZE = 288 # blitter wants lines of a multiple of 16 bytes, as all the firmware's\nHOTBOX = (TRI_BUF + SLOTS * 160 + 31) & ~31 # 8 x HOTBOX_SIZE\nFAKE_RECS = HOTBOX + 8 * HOTBOX_SIZE # one 44-byte record, the detail waveform's\nDATA_END = FAKE_RECS + 44\nassert DATA_END <= CC_END\n\n\ndef rgb565(r, g, b):\n return (r & 0xF8) << 8 | (g & 0xFC) << 3 | b >> 3\n\n\nSOURCE = r'''\n; ---- cue_get: dbcl_GetUsbSdCueInfo(r4 connection, r5 track, r6 reply) plus colours\ncue_get:\n mov.l r8,@-r15\n mov.l r9,@-r15\n mov.l r10,@-r15\n mov.l r11,@-r15\n mov.l r12,@-r15\n mov.l r13,@-r15\n mov.l r14,@-r15\n sts.l pr,@-r15\n add #-20,r15 ; +0 wait's slot, +4/+8 message, +12 block, +16 size\n mov r4,r8\n mov r5,r9\n mov r6,r10\n mov.l K_cueinfo,r1\n jsr @r1\n nop\n mov r0,r12 ; the stock result, returned as it is\n mov.l K_hot,r1 ; no hot cues known\n mov #8,r2\n mov #-1,r3\ncg_clear:\n mov.l r3,@r1\n dt r2\n bf/s cg_clear\n add #8,r1\n mov.l K_hot,r1 ; one more load: entry 0's spare byte counts\n mov.b @(7,r1),r0 ; them (hotcuekeys reloads its slots on it)\n add #1,r0\n mov.b r0,@(7,r1)\n cmp/pl r12\n bf cg_early\n mov.l @r8,r11 ; the connection's socket side\n tst r11,r11\n bt cg_early\n mov.l K_check,r1\n jsr @r1\n mov r11,r4\n tst r0,r0\n bt cg_early\n mov.l K_alloc,r1\n jsr @r1\n mov #72,r4\n tst r0,r0\n bt cg_early\n mov.l r0,@(4,r15)\n mov.l r0,@(8,r15)\n mov #0,r1\n mov.l r1,@r15\n mov.l r1,@(12,r15)\n mov.l r1,@(16,r15)\n mov r8,r4\n mov r0,r5\n mov.l K_type,r6\n mov.l K_init,r1\n jsr @r1\n mov #8,r7 ; as dbcl_GetUsbSdCueInfo\n mov.l @(4,r15),r2\n mov.l r9,@(24,r2) ; the track\n mov #0,r1\n mov.l r1,@(28,r2)\n mov r11,r4\n mov.l @(8,r15),r5\n mov.l K_send,r1\n jsr @r1\n nop\n tst r0,r0\n bf cg_early\n mov r15,r1\n add #12,r1\n mov.l r1,@-r15 ; &block\n mov.l @(12,r15),r4 ; the message\n mov.l K_reply,r5\n mov r15,r6\n add #4,r6\n mov r15,r7\n mov.l K_wait,r1\n jsr @r1\n add #20,r7 ; &size\n add #4,r15\n mov.l @(12,r15),r13 ; the reply's entries\n tst r13,r13\n bt cg_early\n cmp/pz r0\n bf cg_free\n mov.l @(16,r15),r14\n add r13,r14 ; their end\n bra cg_entry\n nop\ncg_early:\n bra cg_out\n nop\ncg_entry:\n mov r13,r1\n add #16,r1\n cmp/hi r14,r1\n bt cg_free ; not even a header left\n mov.l @r13,r11 ; length\n mov #64,r1\n cmp/hs r1,r11\n bf cg_free\n mov r13,r1\n add r11,r1\n cmp/hi r14,r1\n bt cg_free ; runs past the end\n mov.l @(12,r13),r1 ; ms -> 1/150 s: ms * 3 / 20\n mov r1,r2\n add r1,r2\n add r1,r2\n mov.l K_div20,r1\n dmulu.l r1,r2\n sts mach,r9\n shlr2 r9\n shlr2 r9 ; r9 = time\n mov.b @(4,r13),r0\n extu.b r0,r6 ; r6 = hot cue number, 0 = memory cue\n tst r6,r6\n bf cg_hot\n mov #58,r0\n mov.b @(r0,r13),r0 ; colour id\n extu.b r0,r0\n tst r0,r0\n bt cg_next\n mov #8,r1\n cmp/hi r1,r0\n bt cg_next\n add r0,r0\n mov.l K_pal,r1\n add r1,r0\n mov.w @r0,r7\n bra cg_match\n extu.w r7,r7\ncg_hot:\n mov.l K_green,r7 ; no colour: rekordbox's default\n mov #82,r1 ; colour code, R, G, B, 2 bytes: 0x52 at least\n cmp/hs r1,r11\n bf cg_hstore\n mov #72,r0 ; the comment: its length in bytes at +0x48, text from +0x4A,\n mov.w @(r0,r13),r2 ; then 4 bytes, then colour code, R, G, B\n extu.w r2,r2 ; (the server's own entries: not checked against the length)\n add r13,r2\n add #78,r2\n mov.b @r2,r0 ; colour code; 0 = none\n tst r0,r0\n bt cg_hstore\n mov.b @(1,r2),r0 ; R\n extu.b r0,r7\n mov #-8,r0\n and r0,r7\n shll8 r7\n mov.b @(2,r2),r0 ; G\n extu.b r0,r0\n shlr2 r0\n shll2 r0\n shll r0\n shll2 r0\n or r0,r7\n mov.b @(3,r2),r0 ; B\n extu.b r0,r0\n shlr2 r0\n shlr r0\n or r0,r7\ncg_hstore:\n mov #9,r1 ; hot cues 1-8 into our table\n cmp/hs r1,r6\n bt cg_match\n mov r6,r1\n add #-1,r1\n shll2 r1\n shll r1\n mov.l K_hot,r2\n add r1,r2\n mov.l r9,@r2\n mov r7,r0\n mov.w r0,@(4,r2)\n mov r6,r0\n mov.b r0,@(6,r2)\ncg_match:\n ; mark the stock reply's entry with the same hot cue number and time\n mov.l @(24,r10),r1 ; entries\n tst r1,r1\n bt cg_next\n mov.l @(16,r10),r2\n mov.l @(20,r10),r3\n add r3,r2 ; memory + hot cue entries\n mov #16,r3\n cmp/hi r3,r2\n bf cg_m_ok\n mov r3,r2\ncg_m_ok:\n tst r2,r2\n bt cg_next\ncg_m:\n mov.b @(2,r1),r0\n extu.b r0,r0\n cmp/eq r6,r0\n bf cg_m_next\n mov.l @(12,r1),r0\n sub r9,r0 ; time difference, within one unit\n add #1,r0\n mov #2,r3\n cmp/hi r3,r0\n bt cg_m_next\n mov r7,r0\n mov.w r0,@(16,r1)\n mov r1,r3\n add #18,r3\n mov #1,r0\n mov.b r0,@r3\ncg_m_next:\n dt r2\n bf/s cg_m\n add #36,r1\ncg_next:\n bra cg_entry\n add r11,r13\ncg_free:\n mov.l @(12,r15),r4\n tst r4,r4\n bt cg_out\n mov.l K_free,r1\n jsr @r1\n nop\ncg_out:\n mov r12,r0\n add #20,r15\n lds.l @r15+,pr\n mov.l @r15+,r14\n mov.l @r15+,r13\n mov.l @r15+,r12\n mov.l @r15+,r11\n mov.l @r15+,r10\n mov.l @r15+,r9\n rts\n mov.l @r15+,r8\n\n .align 4\nK_alloc: .long 0x089A791E\nK_check: .long 0x089736F2\nK_cueinfo: .long CUEINFO\nK_div20: .long 0xCCCCCCCD\nK_free: .long 0x08A5EBC2\nK_green: .long HOT_DEFAULT\nK_hot: .long HOT_TABLE\nK_init: .long 0x08973C50\nK_pal: .long PALETTE\nK_reply: .long 0x00004E02\nK_send: .long 0x089738F0\nK_type: .long 0x00002B04\nK_wait: .long 0x08974198\n\n; ---- colour_for: r4 time (1/150 s), r5 tolerance -> r0 RGB565 or -1, r1 slot\ncolour_for:\n mov.l L_memlist,r1\n mov #0,r2 ; slot\ncf_loop:\n mov.l @r1,r0\n cmp/eq #-1,r0\n bt cf_hot\n mov #18,r0\n mov.b @(r0,r1),r0\n cmp/eq #1,r0\n bf cf_skip\n mov.l @(12,r1),r0\n sub r4,r0\n add r5,r0\n mov r5,r3\n add r5,r3\n cmp/hi r3,r0\n bt cf_skip\n mov.w @(16,r1),r0\n extu.w r0,r0\n rts\n mov r2,r1\ncf_skip:\n add #1,r2\n mov #10,r0\n cmp/hs r0,r2\n bf/s cf_loop\n add #36,r1\ncf_hot:\n mov.l L_hot,r1 ; then the hot cues: slots 10-17\n mov #10,r2\ncf_hloop:\n mov.l @r1,r0\n cmp/eq #-1,r0\n bt cf_hskip\n sub r4,r0\n add r5,r0\n mov r5,r3\n add r5,r3\n cmp/hi r3,r0\n bt cf_hskip\n mov.w @(4,r1),r0\n extu.w r0,r0\n rts\n mov r2,r1\ncf_hskip:\n add #1,r2\n mov #18,r0\n cmp/hs r0,r2\n bf/s cf_hloop\n add #8,r1\n rts\n mov #-1,r0\n\n; ---- make_tri: r4 slot, r5 RGB565 -> r0 its triangle (uncached address)\nmake_tri:\n mov r4,r0\n shll2 r0\n add r4,r0\n shll2 r0\n shll2 r0\n shll r0 ; slot * 160\n mov.l L_tribuf,r1\n add r0,r1 ; destination, through P2\n mov r1,r6\n mov #10,r0\n cmp/hs r0,r4\n bt mt_box\n mov.l L_tripix,r2\n mov.l L_red,r3\n mov #80,r7\nmt_loop:\n mov.w @r2+,r0\n extu.w r0,r0\n cmp/eq r3,r0\n bf mt_keep\n mov r5,r0\nmt_keep:\n mov.w r0,@r1\n dt r7\n bf/s mt_loop\n add #2,r1\n rts\n mov r6,r0\nmt_box:\n mov r4,r0 ; the letter, left-aligned in a word\n add #-10,r0\n shll2 r0\n mov.l L_font,r2\n mov.l @(r0,r2),r3\n mov.l L_key,r2 ; transparent\n mov #5,r7\nmb_row:\n mov #0,r4\nmb_col:\n mov #9,r0\n cmp/hs r0,r4\n bt mb_t ; past the marker\n mov #3,r0\n cmp/hs r0,r4\n bf mb_c\n mov #6,r0\n cmp/hs r0,r4\n bt mb_c\n shll r3 ; the letter's next pixel into T\n bf mb_c\n bra mb_st\n mov #0,r0 ; black\nmb_c:\n bra mb_st\n mov r5,r0\nmb_t:\n mov r2,r0\nmb_st:\n mov.w r0,@r1\n add #2,r1\n add #1,r4\n mov #16,r0\n cmp/hs r0,r4\n bf mb_col\n dt r7\n bf mb_row\n rts\n mov r6,r0\n\n; ---- mk_copy: memcpy(r4, r5, r6) for the waveform preparer; filling the\n; marker records, it adds the hot cues to them as memory-cue markers.\nmk_copy:\n mov.l r8,@-r15\n sts.l pr,@-r15\n mov r4,r8\n mov.l L_memcpy,r1\n jsr @r1\n nop\n mov.l L_mkrecs,r1\n cmp/eq r1,r8\n bf mk_out\n mov.l r0,@-r15 ; memcpy's result\n mov r8,r1\n mov #101,r2\n mov #-1,r3\n extu.b r3,r3 ; 0xff ends the list\nmk_find:\n mov.l @r1,r0\n cmp/eq r3,r0\n bt mk_add\n dt r2\n bf/s mk_find\n add #16,r1\n bra mk_done\n nop\nmk_add:\n mov.l L_hot,r3\n mov #8,r7\nmk_h:\n mov.l @r3,r0 ; time\n cmp/eq #-1,r0\n bt mk_hn\n tst r2,r2\n bt mk_done ; the list is full\n mov.l r0,@(8,r1)\n mov #0,r0\n mov.l r0,@r1 ; a memory cue\n mov.l r0,@(4,r1)\n mov #-1,r0\n mov.l r0,@(12,r1)\n add #16,r1\n add #-1,r2\nmk_hn:\n dt r7\n bf/s mk_h\n add #8,r3\nmk_done:\n mov.l @r15+,r0\nmk_out:\n lds.l @r15+,pr\n rts\n mov.l @r15+,r8\n\n; ---- det_res: the resource resolver, for the detail waveform (r9 = its column).\n; Every 0xC5 it is asked for becomes a 16 x 8 marker of ours, as the renderer\n; (patched) copies 11 x 8: a memory cue's triangle in rows 3-7 (coloured, or\n; the stock red one), a hot cue's box with its letter in rows 0-7.\ndet_res:\n mov.l L_resolve,r1\n mov.l L_triid,r0\n cmp/eq r0,r4\n bt dr_mine\n jmp @r1\n nop\ndr_mine:\n mov.l r8,@-r15\n mov.l r9,@-r15\n mov.l r10,@-r15\n mov.l r11,@-r15\n sts.l pr,@-r15\n mov r9,r8\n jsr @r1\n nop\n mov r0,r10 ; the record\n tst r10,r10\n bt dr_out\n mov r8,r4\n bsr colour_for\n mov #16,r5 ; zoomed out, a column stands for up to 16\n mov r1,r9 ; slot\n cmp/eq #-1,r0\n bt dr_plain\n mov r0,r5\n mov r9,r4\n mov #10,r2\n cmp/hs r2,r4\n bt dr_hot\n bsr make_tri\n nop\n mov #3,r11 ; triangle: rows 3-7\n bra dr_copy\n mov #5,r6\ndr_hot:\n bsr make_hotbox\n nop\n mov #0,r11 ; box: rows 0-7\n bra dr_copy\n mov #8,r6\ndr_plain:\n mov #18,r9 ; no colour: the stock triangle\n mov.l L_tripix,r0\n mov #3,r11\n mov #5,r6\ndr_copy:\n mov r0,r3 ; source, 16 pixels a line\n mov.l L_detbuf,r2\n mov r9,r0\n shll8 r0\n add r0,r2\n mov r2,r8 ; this slot's 16 x 8\n mov.l L_key,r0\n mov #64,r7\n shll r7\n mov r2,r1\ndr_fill:\n mov.w r0,@r1\n dt r7\n bf/s dr_fill\n add #2,r1\n mov r11,r0\n shll2 r0\n shll2 r0\n shll r0\n add r0,r2\ndr_row:\n mov #16,r7\ndr_px:\n mov.w @r3+,r0\n mov.w r0,@r2\n dt r7\n bf/s dr_px\n add #2,r2\n dt r6\n bf dr_row\n mov.l L_fake,r2 ; the record, with our size and pixels\n mov r10,r3\n mov #11,r4\ndr_rec:\n mov.l @r3+,r1\n mov.l r1,@r2\n dt r4\n bf/s dr_rec\n add #4,r2\n add #-44,r2\n mov.l L_detsize,r1\n mov.l r1,@(4,r2)\n mov.l r8,@(12,r2)\n mov r2,r10\ndr_out:\n mov r10,r0\n lds.l @r15+,pr\n mov.l @r15+,r11\n mov.l @r15+,r10\n mov.l @r15+,r9\n rts\n mov.l @r15+,r8\n\n; ---- ov_draw: draw_bitmap(r4, r5 x, r6 y, r7 resource) for the overview (r13 = its record)\nov_draw:\n mov.l L_draw,r1\n mov.l L_triid,r0\n cmp/eq r0,r7\n bt od_mine\n jmp @r1\n nop\nod_mine:\n mov.l r13,@-r15\n mov.l r8,@-r15\n mov.l r9,@-r15\n mov.l r10,@-r15\n mov.l r11,@-r15\n mov.l r12,@-r15\n mov.l r14,@-r15\n sts.l pr,@-r15\n mov r4,r8\n mov r5,r9\n mov r6,r10\n mov r7,r11\n mov.l L_ovrecs,r1 ; which record: 12 bytes each, 16 in the other list\n mov r13,r2\n sub r1,r2\n mov #0,r3\n mov #101,r4\nod_idx:\n cmp/pl r2\n bf od_found\n add #-12,r2\n dt r4\n bf/s od_idx\n add #16,r3\n bra od_plain\n nop\nod_found:\n tst r2,r2\n bf od_plain ; not on a record\n mov.l L_mkrecs,r1\n add r3,r1\n mov.l @(8,r1),r4\n bsr colour_for\n mov #0,r5\n cmp/eq #-1,r0\n bt od_plain\n mov r1,r4\n mov #10,r2\n cmp/hs r2,r4\n bt od_hot\n bsr make_tri\n mov r0,r5\n mov.l L_trisize,r13 ; 16 x 5, the triangle's own size\n bra od_pix\n nop\nod_hot:\n bsr make_hotbox ; a hot cue: the bigger box\n mov r0,r5\n mov.l L_boxsize,r13\nod_pix:\n mov.l L_restab,r1 ; the triangle's record\n mov.l @r1,r12\n mov.l L_trirec,r1\n add r1,r12\n mov.l @(32,r12),r14 ; its pixel offset and size, put back below\n mov.l @(4,r12),r1\n mov.l r13,@(4,r12)\n mov r1,r13\n mov.l L_p0mask,r1 ; the blitter gets the plain address\n and r1,r0\n mov.l L_imgbase,r1\n sub r1,r0\n mov.l r0,@(32,r12)\n mov r8,r4\n mov r9,r5\n mov r10,r6\n mov.l L_draw,r1\n jsr @r1\n mov r11,r7\n mov.l r13,@(4,r12)\n bra od_out\n mov.l r14,@(32,r12)\nod_plain:\n mov r8,r4\n mov r9,r5\n mov r10,r6\n mov.l L_draw,r1\n jsr @r1\n mov r11,r7\nod_out:\n lds.l @r15+,pr\n mov.l @r15+,r14\n mov.l @r15+,r12\n mov.l @r15+,r11\n mov.l @r15+,r10\n mov.l @r15+,r9\n mov.l @r15+,r8\n rts\n mov.l @r15+,r13\n\n .align 4\nL_cueinfo: .long CUEINFO\nL_check: .long 0x089736F2\nL_alloc: .long 0x089A791E\nL_init: .long 0x08973C50\nL_send: .long 0x089738F0\nL_wait: .long 0x08974198\nL_free: .long 0x08A5EBC2\nL_type: .long 0x00002B04\nL_reply: .long 0x00004E02\nL_div20: .long 0xCCCCCCCD\nL_hot: .long HOT_TABLE\nL_memlist: .long MEMLIST\nL_tribuf: .long TRI_BUF_P2\nL_tripix: .long TRI_PIXELS\nL_red: .long TRI_RED\nL_resolve: .long RESOLVE\nL_draw: .long DRAW\nL_triid: .long TRI_ID\nL_fake: .long FAKE_RECS\nL_detbuf: .long DET_BUF\nL_detsize: .long 0x00080010\nL_ovrecs: .long OV_RECS\nL_mkrecs: .long MK_RECS\nL_restab: .long RES_TABLE_PTR\nL_trirec: .long TRI_REC_OFF\nL_imgbase: .long 0x08100000\nL_p0mask: .long 0x1FFFFFFF\nL_pal: .long PALETTE\nL_green: .long HOT_DEFAULT\nL_font: .long FONT\nL_key: .long 0xF81F\nL_memcpy: .long MEMCPY\nL_trisize: .long 0x00050010\nL_boxsize: .long BOXSIZE\n\n; ---- make_hotbox: r4 slot (10-17), r5 RGB565 -> r0 the overview's hot cue\n; marker, 11 x 9 in its colour with the letter in black (uncached address)\nmake_hotbox:\n mov.l r8,@-r15\n mov.l r9,@-r15\n mov r4,r6\n add #-10,r6 ; 0 = A\n mov r6,r1 ; HOTBOX_SIZE (288) * index\n shll8 r1\n mov r6,r2\n shll2 r2\n shll2 r2\n shll r2\n add r2,r1\n mov.l M_hotbox,r2\n add r2,r1\n mov r1,r9 ; returned\n mov r6,r2 ; its letter: 7 bytes from FONT5 + 7 * index\n shll2 r2\n shll r2\n sub r6,r2\n mov.l M_font5,r3\n add r2,r3\n mov.l M_key,r2\n mov #0,r6 ; row\nhb_row:\n mov #0,r4 ; the letter's bits in this row\n mov r6,r0\n cmp/eq #0,r0\n bt hb_cols\n cmp/eq #8,r0\n bt hb_cols\n add #-1,r0\n mov.b @(r0,r3),r4\n extu.b r4,r4\nhb_cols:\n mov #0,r8 ; column\nhb_col:\n mov #11,r0\n cmp/hs r0,r8\n bt hb_t\n mov #3,r0\n cmp/hs r0,r8\n bf hb_c\n mov #8,r0\n cmp/hs r0,r8\n bt hb_c\n mov r4,r0\n tst #128,r0\n bt/s hb_c\n shll r4\n bra hb_st\n mov #0,r0 ; black\nhb_c:\n bra hb_st\n mov r5,r0\nhb_t:\n mov r2,r0\nhb_st:\n mov.w r0,@r1\n add #2,r1\n add #1,r8\n mov #16,r0\n cmp/hs r0,r8\n bf hb_col\n add #1,r6\n mov #9,r0\n cmp/hs r0,r6\n bf hb_row\n mov r9,r0\n mov.l @r15+,r9\n rts\n mov.l @r15+,r8\n\n .align 4\nM_hotbox: .long HOTBOX_P2\nM_font5: .long FONT5\nM_key: .long 0xF81F\nFONT:\n'''\n\n\ndef routine():\n \"\"\"The code at CC_BASE, the memory-cue palette after it, and the labels.\"\"\"\n syms = {\n 'CUEINFO': CUEINFO, 'RESOLVE': RESOLVE, 'DRAW': DRAW, 'HOT_TABLE': HOT_TABLE,\n 'MEMLIST': MEMLIST, 'TRI_BUF_P2': TRI_BUF | 0xA0000000, 'TRI_PIXELS': TRI_PIXELS,\n 'TRI_RED': TRI_RED, 'TRI_ID': TRI_ID, 'FAKE_RECS': FAKE_RECS, 'OV_RECS': OV_RECS,\n 'MK_RECS': MK_RECS, 'RES_TABLE_PTR': RES_TABLE_PTR, 'TRI_REC_OFF': TRI_ID * 44,\n 'HOT_DEFAULT': HOT_DEFAULT, 'MEMCPY': MEMCPY, 'HOTBOX_P2': HOTBOX | 0xA0000000,\n 'BOXSIZE': HOTBOX_W | HOTBOX_H << 16, 'DET_BUF': DET_BUF,\n }\n font = b''.join(struct.pack(' r0 the named cue to show (CN_TABLE entry) or 0; r1-r7 used\ncn_pick:\n mov.l P_hot,r6\n mov.b @(7,r6),r0 ; the table is this load's?\n mov.l P_load,r1\n mov.b @r1,r1\n cmp/eq r1,r0\n bf pk_none\n mov.l P_count,r1\n mov.l @r1,r3\n tst r3,r3\n bt pk_none\n mov.l P_pos,r1\n mov.l @r1,r4\n mov.l P_behind,r1\n sub r1,r4 ; from a second behind\n mov.l P_table,r2\n mov #0,r0 ; best so far\npk_loop:\n mov.l @r2,r1 ; ms\n cmp/ge r4,r1\n bf pk_next ; behind\n mov.l @(8,r2),r5 ; a hot cue still where it was?\n tst r5,r5\n bt pk_ok\n mov #9,r7\n cmp/hs r7,r5\n bt pk_next\n add #-1,r5\n shll2 r5\n shll r5\n add r6,r5\n mov.l @r5,r5 ; HOT_TABLE's time, 1/150 s\n mov.l @(4,r2),r7\n sub r7,r5\n add #1,r5\n mov #2,r7\n cmp/hi r7,r5\n bt pk_next\npk_ok:\n tst r0,r0\n bt pk_take\n mov.l @r0,r7\n cmp/ge r7,r1\n bt pk_next ; not nearer\npk_take:\n mov r2,r0\npk_next:\n dt r3\n bf/s pk_loop\n add #64,r2\n rts\n nop\npk_none:\n rts\n mov #0,r0\n\n; ---- cn_draw: the text widget's draw method (r4 renderer, r5 widget)\ncn_draw:\n mov.l r8,@-r15\n mov.l r9,@-r15\n mov.l r10,@-r15\n mov.l r11,@-r15\n sts.l pr,@-r15\n mov r4,r8\n mov r5,r9\n mov.l @(4,r5),r1 ; the title?\n mov.l D_title,r2\n cmp/eq r2,r1\n bf dr_plain\n mov.l D_depth,r1 ; BROWSE closed?\n mov.b @r1,r1\n tst r1,r1\n bf dr_plain\n mov.l @(40,r9),r1 ; the title white? (dimmed behind a popup, as MENU's: no name)\n mov #-1,r2\n cmp/eq r2,r1\n bf dr_plain\n bsr cn_pick\n nop\n tst r0,r0\n bt dr_plain\n mov r0,r10 ; the cue\n mov.l D_label,r2 ; the label: \"A \" for a hot cue, then the name\n mov.l @(8,r10),r1\n tst r1,r1\n bt dr_name\n add #64,r1 ; 'A' - 1 + number\n mov r1,r0\n mov.w r0,@r2\n mov #32,r0\n mov.w r0,@(2,r2)\n add #4,r2\ndr_name:\n mov r10,r1\n add #16,r1\ndr_ncopy:\n mov.w @r1+,r0\n mov.w r0,@r2\n tst r0,r0\n bf/s dr_ncopy\n add #2,r2\n mov.l @(28,r9),r11 ; the title, narrowed\n mov r11,r1\n mov.l D_hmask,r2\n and r2,r1\n mov.l D_tw,r2\n or r2,r1\n mov.l r1,@(28,r9)\n mov r8,r4\n mov r9,r5\n mov.l D_next,r1\n jsr @r1\n nop\n mov.l r11,@(28,r9)\n mov.l D_clone,r2 ; the copy: our place, text, colour\n mov r9,r1\n mov #24,r3\ndr_clone:\n mov.l @r1+,r0\n mov.l r0,@r2\n dt r3\n bf/s dr_clone\n add #4,r2\n mov.l D_clone,r5\n mov.l @(24,r9),r1 ; y stays, x ours\n mov.l D_hmask,r2\n and r2,r1\n mov.l D_lx,r2\n or r2,r1\n mov.l r1,@(24,r5)\n mov r11,r1\n mov.l D_hmask,r2\n and r2,r1\n mov.l D_lw,r2\n or r2,r1\n mov.l r1,@(28,r5)\n mov.l @(12,r10),r1\n mov.l r1,@(40,r5)\n mov.l D_label,r1\n mov.l r1,@(52,r5)\n mov r8,r4\n mov.l D_next,r1\n jsr @r1\n nop\n bra dr_out\n nop\ndr_plain:\n mov r8,r4\n mov r9,r5\n mov.l D_next,r1\n jsr @r1\n nop\ndr_out:\n lds.l @r15+,pr\n mov.l @r15+,r11\n mov.l @r15+,r10\n mov.l @r15+,r9\n rts\n mov.l @r15+,r8\n\n .align 4\nP_behind: .long BEHIND_MS\nP_count: .long CN_COUNT\nP_hot: .long HOT_TABLE\nP_load: .long CN_LOAD\nP_pos: .long POS_MS\nP_table: .long CN_TABLE\nD_clone: .long CN_CLONE\nD_depth: .long BROWSE_DEPTH\nD_hmask: .long 0xFFFF0000\nD_label: .long CN_LABEL\nD_lw: .long LABEL_W\nD_lx: .long LABEL_X\nD_next: .long NEXT_DRAW\nD_title: .long TITLE_ID\nD_tw: .long TITLE_W\nMEMORY_TAB:\n'''\n\n\ndef routine(next_draw):\n src = SOURCE + ''.join(' .long 0x%08X\\n' % c for c in MEMORY_ABGR)\n return sh4asm.assemble(src, CN_CODE, {\n 'CN_COUNT': CN_COUNT, 'CN_LOAD': CN_LOAD, 'CN_TABLE': CN_TABLE, 'CN_LABEL': CN_LABEL,\n 'CN_CLONE': CN_CLONE, 'CN_MAX': CN_MAX, 'CN_NAME': CN_NAME, 'FREE': FREE,\n 'HOT_TABLE': HOT_TABLE, 'POS_MS': POS_MS, 'BROWSE_DEPTH': BROWSE_DEPTH,\n 'TITLE_ID': TITLE_ID, 'TITLE_W': TITLE_W, 'LABEL_X': LABEL_X, 'LABEL_W': LABEL_W,\n 'BEHIND_MS': BEHIND_MS, 'NO_COLOUR': NO_COLOUR, 'NEXT_DRAW': next_draw})\n\n\ndef patch(app, stock):\n \"\"\"The application with CUE NAMES added (after cuecolours and, if chosen,\n keynotation); `stock` is the unmodified 1.31 application.\"\"\"\n out = bytearray(app)\n word = lambda a: struct.unpack_from(' 0xC00487A4)\nTRAMP_TARGET = 0xC00487A4\nMB = 0x1183E000\nDP = 0x11806900\nHEADS = 0x1182E0E0\nLINKS = 0xC1F38B90\nPLAY_HEAD_DP = 969 # byte: the playing head's index\nMARGIN = 750 # slots (10 s) a forward jump leaves decoded ahead (2 s: EMERGENCY LOOP\n # after rapid 8-beat jumps, emulator too; 5 s was fine there)\nBLOCKS = ((0xC0000040, 0xC0000080), (0xC00000A0, 0xC0000100), (0xC0000120, 0xC00001E0))\nFREE_PACKETS = (struct.pack('<8I', *([0x0c6e0c6e] * 7 + [0xefe00000])), # compact nops only\n struct.pack('<8I', *([0x0c6e0c6e] * 6 + [0, 0xe7e00000])))\n\n\ndef code():\n \"\"\"[(addr, word)] of dj_poll.\"\"\"\n a = c6asm.Asm(BLOCKS[0][0])\n o = a.op\n # block 1: the mailbox; e = heads + 30 * h\n o('const', MB, 'a3')\n o('ldw', 'a4', 'a3', 0)\n o('nop', 4)\n o('cmpeq', 1, 'a4', 'a1')\n o('b', 'tail', p='!a1')\n o('nop', 5)\n o('ldw', 'b4', 'a3', 4) # n\n o('lddp', 'ldbu', 'b5', PLAY_HEAD_DP) # h\n o('nop', 4)\n o('shl', 'b5', 5, 'b6')\n o('shl', 'b5', 1, 'b7')\n o('sub', 'b6', 'b7', 'b6') # 30 h\n o('b', 'blk2')\n o('nop', 5)\n # block 2: the head's fields, the direction\n a.org(BLOCKS[1][0])\n a.label('blk2')\n o('const', HEADS, 'b8')\n o('add', 'b8', 'b6', 'b6') # e\n o('ldhu', 'a5', 'b6', 2) # cur\n o('ldh', 'a6', 'b6', 6) # behind\n o('ldh', 'a7', 'b6', 8) # ahead\n o('nop', 4)\n o('stw', 'a5', 'a3', 16)\n o('stw', 'a6', 'a3', 24)\n o('stw', 'a7', 'a3', 28)\n o('mvk', 2, 'a9') # refused unless done\n o('const', LINKS, 'a4')\n o('cmplt', 0, 'b4', 'b0') # n > 0\n o('b', 'fwd', p='b0')\n o('nop', 5)\n o('cmpgt', 0, 'b4', 'b1') # n < 0\n o('b', 'ok', p='!b1') # n = 0\n o('nop', 5)\n o('sub', 0, 'b4', 'b2') # m = -n\n o('mv', 'b2', 'a8')\n o('sub', 'a6', 'a8', 'a8') # behind - m\n o('b', 'blk3')\n o('nop', 5)\n # block 3: the walk\n a.org(BLOCKS[2][0])\n a.label('blk3')\n o('cmplt', 0, 'a8', 'a1') # at least one slot left behind\n o('b', 'done', p='!a1')\n o('nop', 5)\n a.label('loopb')\n o('addaw', 'a4', 'a5', 'a2')\n o('ldhu', 'a5', 'a2', 0) # prev\n o('nop', 4)\n o('add', -1, 'b2', 'b2')\n o('b', 'loopb', p='b2')\n o('nop', 5)\n o('sub', 0, 'b4', 'b7')\n o('mv', 'b7', 'a8') # m\n o('sub', 'a6', 'a8', 'a6') # behind - m\n o('add', 'a8', 'a7', 'a7') # ahead + m\n o('b', 'store')\n o('nop', 5)\n a.label('fwd')\n o('mv', 'b4', 'a8')\n o('sub', 'a7', 'a8', 'a8') # ahead - n\n o('mvk', MARGIN, 'b7')\n o('cmplt', 'b7', 'a8', 'b1') # more than MARGIN left ahead\n o('b', 'done', p='!b1')\n o('nop', 5)\n o('mv', 'b4', 'b2')\n a.label('loopf')\n o('addaw', 'a4', 'a5', 'a2')\n o('ldhu', 'a5', 'a2', 2) # next\n o('nop', 4)\n o('add', -1, 'b2', 'b2')\n o('b', 'loopf', p='b2')\n o('nop', 5)\n o('mv', 'b4', 'a8')\n o('add', 'a8', 'a6', 'a6') # behind + n\n o('sub', 'a7', 'a8', 'a7') # ahead - n\n a.label('store')\n o('sth', 'a5', 'b6', 2)\n o('sth', 'a6', 'b6', 6)\n o('sth', 'a7', 'b6', 8)\n o('stw', 'a5', 'a3', 20)\n a.label('ok')\n o('mvk', 1, 'a9')\n a.label('done')\n o('stw', 'a9', 'a3', 8)\n o('ldw', 'a8', 'a3', 12)\n o('nop', 4)\n o('add', 1, 'a8', 'a8')\n o('stw', 'a8', 'a3', 12)\n o('mvk', 0, 'a8')\n o('stw', 'a8', 'a3', 0)\n a.label('tail')\n o('b', TRAMP_TARGET)\n o('nop', 5)\n words = a.assemble()\n for at, _ in words:\n assert any(lo <= at < hi for lo, hi in BLOCKS), 'dspjump: 0x%08x is past its blocks' % at\n return words\n\n\ndef packets(words):\n \"\"\"{packet addr: 8 words}: our words, the rest of each packet nop.\"\"\"\n out = {}\n for at, w in words:\n fp = at & ~31\n out.setdefault(fp, [0] * 8)[(at - fp) // 4] = w\n return out\n\n\ndef set_cst16(word, value):\n return (word & ~(0xFFFF << 7)) | (value & 0xFFFF) << 7\n\n\ndef patch(app, stock):\n out = bytearray(app)\n for fp, ws in packets(code()).items():\n off = B_IMG - BASE + (fp - 0xC0000000)\n if stock[off:off + 32] not in FREE_PACKETS or out[off:off + 32] != stock[off:off + 32]:\n raise SystemExit('patch_cdj900nxs: dspjump: the vector packet 0x%08x is not the expected one' % fp)\n out[off:off + 32] = struct.pack('<8I', *ws)\n entry = BLOCKS[0][0]\n for at, want, value in ((TRAMP_MVK, 0x0543d22a, entry), (TRAMP_MVKH, 0x0560026a, entry >> 16)):\n off = A_IMG - BASE + (at - A_AT)\n w = struct.unpack_from(' red, grey -> dark red\n\nSOURCE = r'''\n; ---- ew_draw: draw_bitmap(r4, r5 x, r6 y, r7 resource) for the playing-address bar\new_draw:\n mov.l E_draw,r0\n mov.l E_res,r1\n cmp/eq r1,r7\n bt ew_bar\n jmp @r0\n nop\new_bar:\n mov.l E_len,r1 ; length in ms: 1/150 s * 20 / 3\n mov.l @r1,r1\n tst r1,r1\n bt ew_plain\n mov r1,r2\n shll2 r2\n shll2 r2\n shll2 r1\n add r2,r1 ; * 20\n mov.l E_div3,r2\n dmulu.l r2,r1\n sts mach,r1\n shlr r1 ; / 3\n mov.l E_pos,r2\n mov.l @r2,r2\n sub r2,r1 ; left\n cmp/pl r1\n bf ew_plain\n mov.l E_warn,r2\n cmp/hs r2,r1\n bt ew_plain\n mov.l r8,@-r15 ; red: the record pointed at RED_BAR for this call\n mov.l r9,@-r15\n sts.l pr,@-r15\n mov.l E_tab,r8\n mov.l @r8,r8\n mov.l E_recoff,r1\n add r1,r8\n mov.l @(32,r8),r9\n mov.l E_redoff,r1\n mov.l r1,@(32,r8)\n jsr @r0\n nop\n mov.l r9,@(32,r8)\n lds.l @r15+,pr\n mov.l @r15+,r9\n rts\n mov.l @r15+,r8\new_plain:\n jmp @r0\n nop\n\n .align 4\nE_div3: .long 0xAAAAAAAB\nE_draw: .long DRAW\nE_len: .long TRACK_LEN\nE_pos: .long POS_MS\nE_recoff: .long REC_OFF\nE_redoff: .long RED_OFF\nE_res: .long RES_BAR\nE_tab: .long RES_TABLE_PTR\nE_warn: .long WARN_MS\n'''\n\n\ndef routine():\n return sh4asm.assemble(SOURCE, EW_CODE, {\n 'DRAW': DRAW, 'TRACK_LEN': TRACK_LEN, 'POS_MS': POS_MS, 'REC_OFF': RES_BAR * 44,\n 'RED_OFF': RED_BAR - RES_BASE, 'RES_BAR': RES_BAR, 'RES_TABLE_PTR': RES_TABLE_PTR,\n 'WARN_MS': WARN_MS})\n\n\ndef patch(app, stock):\n \"\"\"The application with END WARNING added; `stock` is the unmodified 1.31\n application, which every replaced byte is checked against.\"\"\"\n out = bytearray(app)\n word = lambda buf, a: struct.unpack_from('